searchengine/cpix/tsrc/cpixunittest/src/deletiontests.cpp
changeset 0 671dee74050a
child 3 ae3f1779f6da
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/searchengine/cpix/tsrc/cpixunittest/src/deletiontests.cpp	Mon Apr 19 14:40:16 2010 +0300
@@ -0,0 +1,403 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: 
+*
+*/
+
+#include <wchar.h>
+#include <stddef.h>
+
+#include <iostream>
+#include <algorithm>
+
+#include "cpixfstools.h"
+
+#include "itk.h"
+
+#include "cpixidxdb.h"
+
+#include "config.h"
+#include "suggestion.h"
+#include "testutils.h"
+#include "testcorpus.h"
+#include "setupsentry.h"
+
+
+class DeletionContext : public Itk::ITestContext
+{
+private:
+    SmsIdxUtil         * util_;
+    cpix_Analyzer      * analyzer_;
+    cpix_QueryParser   * queryParser_;
+    cpix_Query         * query_;
+
+    
+public:
+    virtual void setup() throw (Itk::PanicExc)
+    {
+        SetupSentry
+            ss(*this);
+
+        cpix_Result
+            result;
+
+        cpix_IdxDb_dbgScrapAll(&result);
+        if (cpix_Failed(&result))
+            {
+                ITK_PANIC("Could not dbg scrapp all indexes");
+            }
+
+        util_ = new SmsIdxUtil;
+        util_->init();
+
+        analyzer_ = cpix_CreateSimpleAnalyzer(&result);
+
+        if (analyzer_ == NULL)
+            {
+                ITK_PANIC("Could not create analyzer");
+            }
+
+        queryParser_ = cpix_QueryParser_create(&result,
+                                               LBODY_FIELD,
+                                               analyzer_);
+        if (queryParser_ == NULL)
+            {
+                ITK_PANIC("Could not create query parser");
+            }
+
+        query_ = cpix_QueryParser_parse(queryParser_,
+                                        L"happy");
+        if (cpix_Failed(queryParser_)
+            || query_ == NULL)
+            {
+                ITK_PANIC("Could not parse query string");
+            }
+        
+        ss.setupComplete();
+    }
+
+
+    virtual void tearDown() throw()
+    {
+        cleanup();
+    }
+
+
+    virtual ~DeletionContext()
+    {
+        cleanup();
+    }
+
+
+    //
+    // public operations
+    //
+    DeletionContext()
+        : util_(NULL),
+          analyzer_(NULL),
+          queryParser_(NULL),
+          query_(NULL)
+          
+    {
+        ;
+    }
+
+
+    //
+    // Test Member Function
+    //
+    void testAdd_00(Itk::TestMgr * testMgr)
+    {
+        testAddSms(testMgr,
+                   1,
+                   L"This is a happy message");
+        util_->flush();
+        testSearch(testMgr);
+    }
+
+    void testAdd_01(Itk::TestMgr * testMgr)
+    {
+        testAddSms(testMgr,
+                   2,
+                   L"This is another happy message");
+        util_->flush();
+        testSearch(testMgr);
+    }
+
+    void testFlush_02(Itk::TestMgr * testMgr)
+    {
+        testFlush(testMgr);
+    }
+
+    void testAdd_03(Itk::TestMgr * testMgr)
+    {
+        testAddSms(testMgr,
+                   3,
+                   L"This is a 3rd happy message");
+        util_->flush();
+        testSearch(testMgr);
+    }
+
+    void testDelete_04(Itk::TestMgr * testMgr)
+    {
+        testDeleteSms(3,
+                      testMgr);
+        util_->flush();
+        testSearch(testMgr);
+    }
+
+    void testDelete_05(Itk::TestMgr * testMgr)
+    {
+        testDeleteSms(1,
+                      testMgr);
+        util_->flush();
+        testSearch(testMgr);
+    }
+
+    void testReOpenIdx_06(Itk::TestMgr * testMgr)
+    {
+        testReOpenIdxDb(testMgr);
+        testSearch(testMgr);
+    }
+    
+    void testAdd_07(Itk::TestMgr * testMgr)
+    {
+        testAddSms(testMgr,
+                   4,
+                   L"This is the 4th happy message");
+        util_->flush();
+        testSearch(testMgr);
+    }
+
+    void testAdd_08(Itk::TestMgr * testMgr)
+    {
+        testAddSms(testMgr,
+                   5,
+                   L"This is the 5th happy message");
+        util_->flush();
+        testSearch(testMgr);
+    }
+
+    void testDelete_09(Itk::TestMgr * testMgr)
+    {
+        testDeleteSms(2,
+                      testMgr);
+        util_->flush();
+        testSearch(testMgr);
+    }
+
+    void testDelete_10(Itk::TestMgr * testMgr)
+    {
+        testDeleteSms(4,
+                      testMgr);
+        util_->flush();
+        testSearch(testMgr);
+    }
+
+    void testReOpenIdx_11(Itk::TestMgr * testMgr)
+    {
+        testReOpenIdxDb(testMgr);
+        testSearch(testMgr);
+    }
+    
+
+
+private:
+    //
+    // private methods
+    //
+    void cleanup()
+    {
+        delete util_;
+        util_ = NULL;
+
+        cpix_Analyzer_destroy(analyzer_);
+        analyzer_ = NULL;
+
+        cpix_Query_destroy(query_);
+        query_ = NULL;
+
+        cpix_QueryParser_destroy(queryParser_);
+        queryParser_ = NULL;
+    }
+
+
+    
+    void testReOpenIdxDb(Itk::TestMgr *)
+    {
+        delete util_;
+        util_ = NULL;
+
+        util_ = new SmsIdxUtil;
+        util_->init(false); // don't create
+    }
+
+
+    void testAddSms(Itk::TestMgr  * testMgr,
+                    size_t          docUid,
+                    const wchar_t * body)
+    {
+        using namespace Itk;
+
+        util_->indexSms(docUid,
+                        body,
+                        analyzer_,
+                        testMgr);
+    }
+
+
+    void testFlush(Itk::TestMgr * testMgr)
+    {
+        cpix_IdxDb_flush(util_->idxDb());
+
+        ITK_EXPECT(testMgr,
+                   cpix_Succeeded(util_->idxDb()),
+                   "Could not flush idx");
+    }
+
+
+    void testDeleteSms(size_t         docUid,
+                       Itk::TestMgr * testMgr)
+    {
+        util_->deleteSms(docUid,
+                         testMgr);
+    }
+
+
+    void testSearch(Itk::TestMgr * testMgr)
+    {
+        using namespace Itk;
+
+        cpix_Hits
+            * hits = cpix_IdxDb_search(util_->idxDb(),
+                                       query_);
+
+        if (cpix_Failed(util_->idxDb()))
+            {
+                ITK_EXPECT(testMgr,
+                           false,
+                           "Failed to search");
+                cpix_ClearError(util_->idxDb());
+            }
+        else
+            {
+                util_->printHits(hits,
+                                 testMgr);
+                cpix_Hits_destroy( hits ); 
+            }
+    }
+
+
+};
+
+
+
+Itk::TesterBase * CreateDeletionTests()
+{
+    using namespace Itk;
+
+    DeletionContext
+        * context = new DeletionContext;
+
+    ContextTester
+        * contextTester = new ContextTester("deletion",
+                                            context);
+
+#define TEST "00_add"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testAdd_00,
+                       TEST);
+#undef TEST
+
+#define TEST "01_add"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testAdd_01,
+                       TEST);
+#undef TEST
+
+#define TEST "02_flush"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testFlush_02);
+#undef TEST
+
+#define TEST "03_add"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testAdd_03,
+                       TEST);
+#undef TEST
+
+#define TEST "04_delete"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testDelete_04,
+                       TEST);
+#undef TEST
+
+#define TEST "05_delete"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testDelete_05,
+                       TEST);
+#undef TEST
+
+#define TEST "06_reopen"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testReOpenIdx_06,
+                       TEST);
+#undef TEST
+
+#define TEST "07_add"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testAdd_07,
+                       TEST);
+#undef TEST
+
+#define TEST "08_add"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testAdd_08,
+                       TEST);
+#undef TEST
+
+#define TEST "09_delete"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testDelete_09,
+                       TEST);
+#undef TEST
+
+#define TEST "10_delete"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testDelete_10,
+                       TEST);
+#undef TEST
+
+#define TEST "11_reopen"
+    contextTester->add(TEST,
+                       context,
+                       &DeletionContext::testReOpenIdx_11,
+                       TEST);
+#undef TEST
+
+
+
+    return contextTester;
+}