--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp125.cpp Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,1453 @@
+/*
+* Copyright (c) 2005 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:
+* ?description_line
+*
+*/
+
+
+// INCLUDES
+#include "FT_CPosTp125.h"
+#include <EPos_CPosLandmarkDatabase.h>
+#include <EPos_CPosLmMultiDbSearch.h>
+#include <EPos_CPosLmTextCriteria.h>
+#include <EPos_CPosLmCatNameCriteria.h>
+#include <EPos_CPosLMItemIterator.h>
+#include <EPos_TPosLMSortPref.h>
+#include "FT_CSearchResult.h"
+#include <EPos_CPosLmDatabaseManager.h>
+#include <EPos_CPosLmDisplayData.h>
+#include <EPos_CPosLmDisplayItem.h>
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+
+ _LIT(KPizzeria, "Pizzeria"); // Db 1, id 1
+ _LIT(KHambergerbar, "Hamburgerbar"); // Db 1, id 2
+ _LIT(KKinarestaurang, "Kinarestaurang"); // Db 1, id 3
+ _LIT(KGaraget, "Garaget"); // Db 1, id 4
+ _LIT(KBilverkstad, "Bilverkstad"); // Db 1, id 5
+ _LIT(KPastaRestaurang, "Pasta Restaurang"); // Db 2, id 6
+ _LIT(KBilia, "Bilia"); // Db 2, id 7
+ _LIT(KVolksWagen, "VolksWagen"); // Db 2, id 8
+ _LIT(KTaxiGoteborg, "Taxi Göteborg"); // Db 2, id 9
+ _LIT(KTaxi, "Taxi"); // Db 2, id 10
+ _LIT(KStadsbibliotek, "Stadsbibliotek"); // Db 2, id 11
+ _LIT(KSystembolag, "Systembolag"); // Db 2, id 12
+ _LIT(KNokiKontor, "Nokia Kontor"); // Db 2, id 13
+ _LIT(KTietoEnatorKontor, "TietoEnator kontor"); // Db 2, id 14
+ _LIT(KThaiRestaurang, "Thai Restaurang"); // Db 3, id 15
+ _LIT(KMcDonalds, "McDonalds"); // Db 3, id 16
+ _LIT(KBurgerKing, "BurgerKing"); // Db 3, id 17
+ _LIT(KFrisor, "Frisör"); // Db 3, id 18
+ _LIT(KHunddagis, "Hunddagis"); // Db 3, id 19
+ _LIT(KVeterinar, "Veterinär"); // Db 3, id 20
+ _LIT(KKyrkogard, "Kyrkogård"); // Db 4, id 21
+ _LIT(KMuseum, "Museum"); // Db 4, id 22
+ _LIT(KDagis, "Dagis"); // Db 4, id 23
+ _LIT(KStadspark, "StadsPark"); // Db 4, id 24
+ _LIT(KSjukhus, "Sjukhus"); // Db 5, id 25
+ _LIT(KLakare, "Läkare"); // Db 5, id 26
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp125::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::CloseTest()
+ {
+ iLog->Log(_L("CloseTest"));
+ delete iLandmarksMultiDbSearch;
+ iLandmarksMultiDbSearch = NULL;
+
+ delete iDatabase;
+ iDatabase=NULL;
+
+ iCategorySearchResults.ResetAndDestroy();
+
+ TRAPD(err, RemoveGlobalCategoriesL());
+ TBuf<50> buf;
+ if (err != KErrNone)
+ {
+ buf.Format(_L("RemoveGlobalCategoriesL leaved with %d"), err);
+ iLog->Log(buf);
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp125::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::StartL()
+ {
+
+ RemoveAllLmDatabasesL();
+ CopyTestDbFileL(KDb20);
+ CopyTestDbFileL(KDb40);
+ CopyTestDbFileL(KDb60);
+ CopyTestDbFileL(KDb80);
+ CopyTestDbFileL(KDb105);
+ SetupDbArrayL();
+
+ _LIT(KEmptyTextCriteriaErr, "An empty string as text criteria should not be allowed");
+ CDesCArray* dbList = new (ELeave) CDesCArrayFlat(8);
+
+ CleanupStack::PushL(dbList);
+
+ dbList->AppendL(KDb20);
+ dbList->AppendL(KDb40);
+ dbList->AppendL(KDb60);
+ dbList->AppendL(KDb80);
+ dbList->AppendL(KDb105);
+
+ RemoveExtraCategoriesL();
+
+ iLandmarksMultiDbSearch = CPosLmMultiDbSearch::NewL(*dbList);
+
+ TInt err = KErrNone;
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+
+ // Start by testing some error flows, returning KErrArgument
+ TRAP(err, iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr);
+
+ // Test empty string
+ nameCriteria->SetSearchPatternL(_L(""));
+ TRAP(err, iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+ AssertTrueSecL(err == KErrArgument, KEmptyTextCriteriaErr);
+ CleanupStack::PopAndDestroy(nameCriteria);
+
+ AppendCategorySearchResultsL();
+
+// Search synchronously
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt syncronously"));
+ SearchL(iCategorySearchResults, ESynchronous);
+
+ iLog->Log(_L("Testing search with sort order"));
+ SearchWithSortOrderL(iCategorySearchResults, ESynchronous);
+
+
+ iLog->Log(_L("Testing search with maximum nr of matches"));
+ SearchWithMaximumL(iCategorySearchResults, ESynchronous);
+
+
+// Search asynchronously
+ iLog->Log(_L("Testing search with criterias read from LmDbSearchResult.txt asyncronously"));
+ SearchL(iCategorySearchResults, EAsynchronous);
+
+ iLog->Log(_L("Testing search with sort order asynchronously"));
+ SearchWithSortOrderL(iCategorySearchResults, EAsynchronous);
+
+ iLog->Log(_L("Testing search with maximum nr of matches asynchronously"));
+ SearchWithMaximumL(iCategorySearchResults, EAsynchronous);
+
+// Search for added categories
+ iLog->Log(_L("Testing search after category has been added"));
+ SearchAfterAddedCategoryL();
+
+// Cancel search test
+ iLog->Log(_L("Testing category search and cancel"));
+ SearchAndCancelL();
+
+ iLog->Log(_L("Testing category search and cancel in callback"));
+ SearchAndCancelL(ETrue);
+
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iLandmarksMultiDbSearch;
+ iLandmarksMultiDbSearch = NULL;
+ CPosLmDatabaseManager* dbMan = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(dbMan);
+ dbMan->SetDefaultDatabaseUriL(KDb20);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ iLandmarksMultiDbSearch = CPosLmMultiDbSearch::NewL(*dbList);
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ CleanupStack::PushL(categoryManager);
+
+ CleanupStack::PopAndDestroy(categoryManager);
+
+ iLog->Log(_L("Testing search with global categories included, sync"));
+ SearchGlobalL(iCategorySearchResults, ETrue);
+
+ iLog->Log(_L("Testing search with global categories included, asyncronously"));
+ SearchGlobalL(iCategorySearchResults, EFalse);
+
+ // Test to add the global categories to one more DB
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iLandmarksMultiDbSearch;
+ iLandmarksMultiDbSearch = NULL;
+ dbMan->SetDefaultDatabaseUriL(KDb40);
+ CleanupStack::PopAndDestroy(dbMan);
+
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ iLandmarksMultiDbSearch = CPosLmMultiDbSearch::NewL(*dbList);
+ // Do reset so that global categories are included
+ CPosLmCategoryManager* categoryManager2 = CPosLmCategoryManager::NewL(*iDatabase);
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ CleanupStack::PushL(categoryManager2);
+ CleanupStack::PopAndDestroy(categoryManager2);
+
+ iLog->Log(_L("Testing search with duplicate global categories included, sync"));
+ TestDuplicateGlobalCategoriesL(iCategorySearchResults, ETrue);
+
+ iLog->Log(_L("Testing search with duplicate global categories included, async"));
+ TestDuplicateGlobalCategoriesL(iCategorySearchResults, EFalse);
+
+ RemoveGlobalCategoriesL();
+ CleanupStack::PopAndDestroy(dbList);
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp125::SearchL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ // The execution flow
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ }
+
+
+ TInt matchesSum = 0;
+ for (TInt count = 0; count < 5; count++)
+ {
+ matchesSum += iLandmarksMultiDbSearch->NumOfMatches(count);
+ }
+
+
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ // Test the display data:
+ TInt displayCount = displayData->Count();
+
+ if (displayCount != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+
+ }
+
+ TInt count = 0;
+ TInt dbIndex = 0;
+ TInt categoryId = 0;
+ TPtrC categoryName;
+ TBuf<100> categoryName2;
+ _LIT(KErrCatMismatch, "Category wrong in display data");
+ _LIT(KErrorWrongType, "Display data doesn't indicate ECategoryItem when it should.");
+
+ for (count = 0; count < displayCount; count++)
+ {
+ CPosLmDisplayItem& displayItem = displayData->DisplayItem(count);
+
+ // Check that the item indicates that it contains a category
+ AssertTrueSecL(displayItem.DisplayItemType() == CPosLmDisplayItem::ECategoryItem, KErrorWrongType);
+ const CPosLandmarkCategory& displayCategory = displayItem.Category();
+ dbIndex = displayItem.DatabaseIndex();
+ categoryId = displayCategory.CategoryId();
+
+ // Check that the db index is correct
+ AssertThatIdIsInCorrectDbL(dbIndex, categoryId);
+
+ // Check that this match is correct
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(categoryId), KNotFoundErr, categoryId);
+ displayCategory.GetCategoryName(categoryName);
+ categoryName2 = (*iDbArray)[categoryId - 1]; // Compensate for 0-index
+
+ // Check that the category name is correct
+ AssertTrueSecL(categoryName == categoryName2, KErrCatMismatch);
+ }
+
+
+ CPosLmItemIterator* iter = NULL;
+
+ for (count = 0; count < 5; count++)
+ {
+ iter = iLandmarksMultiDbSearch->MatchIteratorL(count);
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ AssertThatIdIsInCorrectDbL(count, id);
+ AssertTrueSecL(aSearchResults[i]->FindSearchResult(id), KNotFoundErr, id);
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ iter = NULL;
+ }
+
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+
+// ---------------------------------------------------------
+// CPosTp125::SearchWithSortOrderL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchWithSortOrderL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KErrorInSorting, "Error in sorting");
+
+ CPosLmCategoryManager::TCategorySortPref sortPref;
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ for (TInt j=0;j<2;j++)
+ {
+ for(TInt i=0; i<aSearchResults.Count(); i++)
+ {
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+
+ if (j==0)
+ {
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, sortPref);
+ }
+ else
+ {
+ sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, sortPref);
+ }
+
+ // The execution flow
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ }
+
+ TInt matchesSum = 0;
+ for (TInt count = 0; count < 5; count++)
+ {
+ matchesSum += iLandmarksMultiDbSearch->NumOfMatches(count);
+ }
+
+ if ((TUint)(aSearchResults[i]->SearchResult()).Count() != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt displayCount = displayData->Count();
+
+ if (displayCount != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ // Test the display data:
+ // Create a sorted list out of the search result
+ RArray<TPosLmItemId> searchResults = aSearchResults[i]->SearchResult();
+ // To avoid User-44 create a copy of the aSearchResults[i]
+ RArray<TPosLmItemId> searchResultsSorted;
+ CleanupClosePushL(searchResultsSorted);
+
+ for (TInt kk=0;kk<searchResults.Count();kk++)
+ {
+ searchResultsSorted.Append(searchResults[kk]);
+ }
+
+ CDesCArrayFlat* sortedArray = NULL;
+
+ SortResultsL(searchResultsSorted, sortedArray);
+ CleanupStack::PopAndDestroy(); // searchResultsSorted
+ CleanupStack::PushL(sortedArray);
+
+ if (sortPref == CPosLmCategoryManager::ECategorySortOrderNameDescending)
+ {
+ InvertArrayL(sortedArray);
+ }
+
+ TInt count = 0;
+ TInt categoryId = 0;
+ TBuf<100> categoryName2;
+ TBuf<100> categoryName3;
+
+ for (count = 0; count < displayCount; count++)
+ {
+ CPosLmDisplayItem& displayItem = displayData->DisplayItem(count);
+ const CPosLandmarkCategory& displayCategory = displayItem.Category();
+ categoryId = displayCategory.CategoryId();
+ categoryName2 = (*iDbArray)[categoryId - 1]; // Compensate for 0-index
+ categoryName3 = (*sortedArray)[count];
+ // Check that sort order is correct
+ AssertTrueSecL(categoryName3 == categoryName2, _L("Error in sorting"));
+ }
+
+ CleanupStack::PopAndDestroy(sortedArray);
+
+ typedef RArray<TInt> myArrayType;
+ RArray<myArrayType> resultArray;
+ myArrayType array1;
+ myArrayType array2;
+ myArrayType array3;
+ myArrayType array4;
+ myArrayType array5;
+
+ CleanupClosePushL(resultArray);
+ CleanupClosePushL(array1);
+ CleanupClosePushL(array2);
+ CleanupClosePushL(array3);
+ CleanupClosePushL(array4);
+ CleanupClosePushL(array5);
+
+ if (sortPref == CPosLmCategoryManager::ECategorySortOrderNameAscending)
+ {
+ array1.AppendL(5);
+ array1.AppendL(4);
+ array1.AppendL(2);
+ array1.AppendL(3);
+ array1.AppendL(1);
+
+ array2.AppendL(7);
+ array2.AppendL(13);
+ array2.AppendL(6);
+ array2.AppendL(11);
+ array2.AppendL(12);
+ array2.AppendL(10);
+ array2.AppendL(9);
+ array2.AppendL(14);
+ array2.AppendL(8);
+
+ array3.AppendL(17);
+ array3.AppendL(18);
+ array3.AppendL(19);
+ array3.AppendL(16);
+ array3.AppendL(15);
+ array3.AppendL(20);
+
+ array4.AppendL(23);
+ array4.AppendL(21);
+ array4.AppendL(22);
+ array4.AppendL(24);
+
+ array5.AppendL(26);
+ array5.AppendL(25);
+ }
+ else
+ {
+ array1.AppendL(1);
+ array1.AppendL(3);
+ array1.AppendL(2);
+ array1.AppendL(4);
+ array1.AppendL(5);
+
+ array2.AppendL(8);
+ array2.AppendL(14);
+ array2.AppendL(9);
+ array2.AppendL(10);
+ array2.AppendL(12);
+ array2.AppendL(11);
+ array2.AppendL(6);
+ array2.AppendL(13);
+ array2.AppendL(7);
+
+ array3.AppendL(20);
+ array3.AppendL(15);
+ array3.AppendL(16);
+ array3.AppendL(19);
+ array3.AppendL(18);
+ array3.AppendL(17);
+
+ array4.AppendL(24);
+ array4.AppendL(22);
+ array4.AppendL(21);
+ array4.AppendL(23);
+
+ array5.AppendL(25);
+ array5.AppendL(26);
+ }
+
+ resultArray.Append(array1);
+ resultArray.Append(array2);
+ resultArray.Append(array3);
+ resultArray.Append(array4);
+ resultArray.Append(array5);
+
+ CPosLmItemIterator* iter = NULL;
+
+ for (TInt dbCount = 0; dbCount < 5; dbCount++)
+ {
+ iter = iLandmarksMultiDbSearch->MatchIteratorL(dbCount);
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ TInt itemCount = 0;
+ while (id != KPosLmNullItemId)
+ {
+ AssertThatIdIsInCorrectDbL(dbCount, id);
+ // Check that sort order is correct:
+ // Some elements will be missing after the search, so skip those.
+ while (itemCount < resultArray[dbCount].Count()
+ && resultArray[dbCount][itemCount] != id)
+ {
+ itemCount++;
+ }
+ // Check that a match was found in the loop above.
+ AssertTrueSecL(itemCount < resultArray[dbCount].Count(), KErrorInSorting);
+ id = iter->NextL();
+ itemCount++;
+ }
+ CleanupStack::PopAndDestroy(iter);
+ iter = NULL;
+ }
+
+ CleanupStack::PopAndDestroy(6); // Arrays
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+ }
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp125::SearchWithMaximumL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchWithMaximumL(
+ const RPointerArray<CCategorySearchResult>& aSearchResults,
+ TExecutionMode aExecutionMode)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchWithMaximumL is performed");
+ _LIT(KNumOfDisplayMatchesErr, "No. of matches for the display data is incorrect when SearchWithMaximumL is performed");
+ _LIT(KNotFoundErr, "Id %d not found in parsed Lm search results when the search is performed syncronously");
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ // Set max nr of matches from 1 to 10 and check that correct nr of matches for each value
+ for (TInt j = 1; j <= 10; j++)
+ {
+ nameCriteria->SetSearchPatternL(_L("*"));
+ iLandmarksMultiDbSearch->SetMaxNumOfMatches(j);
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone);
+
+ // The execution flow
+ switch (aExecutionMode)
+ {
+ case ESynchronous:
+ ExecuteAndDeleteLD(iOperation);
+ break;
+ case EAsynchronous:
+ RunAsyncOperationLD(iOperation);
+ break;
+ }
+
+ TInt displayCount = displayData->Count();
+
+ switch(j)
+ {
+ case 1:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 1, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 5, KNumOfDisplayMatchesErr);
+ break;
+ case 2:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 10, KNumOfDisplayMatchesErr);
+ break;
+ case 3:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 3, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 3, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 3, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 3, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 14, KNumOfDisplayMatchesErr);
+ break;
+ case 4:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 18, KNumOfDisplayMatchesErr);
+ break;
+ case 5:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 21, KNumOfDisplayMatchesErr);
+ break;
+ case 6:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 23, KNumOfDisplayMatchesErr);
+ break;
+ case 7:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 7, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 24, KNumOfDisplayMatchesErr);
+ break;
+ case 8:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 8, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 25, KNumOfDisplayMatchesErr);
+ break;
+ case 9:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 9, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 26, KNumOfDisplayMatchesErr);
+ break;
+ case 10:
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 5, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 9, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 6, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 4, KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 2, KNumOfMatchesErr);
+ AssertTrueSecL(displayCount == 26, KNumOfDisplayMatchesErr);
+ break;
+ default:
+ break;
+ }
+
+ // Check that the DB:s actually contains correct data:
+ CPosLmItemIterator* iter = NULL;
+
+ for (TInt count = 0; count < 5; count++)
+ {
+ iter = iLandmarksMultiDbSearch->MatchIteratorL(count);
+ CleanupStack::PushL(iter);
+
+ TPosLmItemId id = iter->NextL();
+
+ while (id != KPosLmNullItemId)
+ {
+ AssertThatIdIsInCorrectDbL(count, id);
+ // Use search result for position 0, should always be for *
+ AssertTrueSecL(aSearchResults[0]->FindSearchResult(id), KNotFoundErr, id);
+ id = iter->NextL();
+ }
+ CleanupStack::PopAndDestroy(iter);
+ iter = NULL;
+ }
+ }
+
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp125::SearchAfterAddedCategoryL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchAfterAddedCategoryL()
+ {
+ // _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchAfterAddedCategoryL is performed");
+ _LIT(KCategoryNotFound, "Added category could not be found");
+ _LIT(KCategory, "StoraKoncernen");
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ //iDatabase = CP
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb40);
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+
+ CPosLandmarkCategory* cat1 = CPosLandmarkCategory::NewLC();
+
+ // First do a search with wildcard
+ nameCriteria->SetSearchPatternL(_L("S*"));
+ ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+
+ // Then add a new category with a name starting with S
+ cat1->SetCategoryNameL(KCategory);
+ TPosLmItemId categoryId = categoryManager->AddCategoryL(*cat1);
+ CleanupStack::PopAndDestroy(cat1);
+
+ // Then use do another search within the results of previous search
+ // should return Stadsbibliotek and Stadspark
+ nameCriteria->SetSearchPatternL(_L("St*"));
+ ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone, ETrue));
+
+ _LIT(KErrorNrOfMatchesRefined, "Wrong nr matches after refined search after adding a category.");
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 1, KErrorNrOfMatchesRefined); // Stadsbibliotek
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 1, KErrorNrOfMatchesRefined); // Stadspark
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(displayData->Count() == 2, KErrorNrOfMatchesRefined);
+ // Set a maximum number of matches, should return only one of Stadsbibliotek and Stadspark
+ iLandmarksMultiDbSearch->SetMaxNumOfMatches(1);
+
+ // Do another search just to see that it is possible to find the added category
+ nameCriteria->SetSearchPatternL(KCategory);
+ ExecuteAndDeleteLD(iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, CPosLmCategoryManager::ECategorySortOrderNone));
+
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == 1, KErrorNrOfMatchesRefined); // StoraKoncernen
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == 0, KErrorNrOfMatchesRefined);
+ AssertTrueSecL(displayData->Count() == 1, KErrorNrOfMatchesRefined);
+
+ CPosLmItemIterator* iter = iLandmarksMultiDbSearch->MatchIteratorL(1);
+ CleanupStack::PushL(iter);
+ TPosLmItemId id = iter->NextL();
+ if (categoryId != id)
+ {
+ iLog->Log(KCategoryNotFound);
+ User::Leave(-1);
+ }
+
+ // Remove added category
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(categoryId));
+
+ CleanupStack::PopAndDestroy(iter);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+
+
+// ---------------------------------------------------------
+// CPosTp125::SearchGlobalL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchGlobalL(const RPointerArray<CCategorySearchResult>& aSearchResults, const TBool& aSync)
+ {
+ iLog->Log(_L("SearchGlobalL"));
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchGlobalL is performed");
+
+ // Nr of global categories, defined in resource file
+ //const TInt KNrOfGlobalCategories = 8;
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ CPosLmCategoryManager::TCategorySortPref sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ for (TInt l=0;l<2;l++)
+ {
+ if (l==0) sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ else if (l==1) sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+
+ // i=0 the first entry in aSearchResults should be wildcard "*"
+ TInt i = 0;
+ // First do a search with wildcard
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, sortPref);
+
+ // The asynchronous flow
+ if (aSync)
+ {
+ RunAsyncOperationLD(iOperation);
+ }
+ else
+ {
+ ExecuteAndDeleteLD(iOperation);
+ }
+
+
+ SetupDbArrayL();
+
+ iDbArray->Sort();
+
+ if (sortPref == CPosLmCategoryManager::ECategorySortOrderNameDescending)
+ {
+ InvertArrayL(iDbArray);
+ }
+
+ //TUint expNr = (aSearchResults[i]->SearchResult()).Count() + KNrOfGlobalCategories;
+ TUint expNr = (aSearchResults[i]->SearchResult()).Count();
+
+
+ TInt matchesSum = 0;
+ for (TInt count = 0; count < 5; count++)
+ {
+ matchesSum += iLandmarksMultiDbSearch->NumOfMatches(count);
+ }
+
+ if (expNr != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt displayCount = displayData->Count();
+
+ if (displayCount != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt count = 0;
+ TBuf<100> categoryName2;
+ TPtrC categoryName;
+ RPointerArray<CCategorySearchResult> searchResults;
+
+ for (count = 0; count < displayCount; count++)
+ {
+ CPosLmDisplayItem& displayItem = displayData->DisplayItem(count);
+ const CPosLandmarkCategory& displayCategory = displayItem.Category();
+ displayCategory.GetCategoryName(categoryName);
+ categoryName2 = (*iDbArray)[count];
+ // Check that sort order is correct
+ AssertTrueSecL(categoryName == categoryName2, _L("Error in sorting"));
+ }
+
+ } // end for (TInt l=0 ...)
+
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ iLog->Log(_L("SearchGlobalL Done"));
+ }
+
+// ---------------------------------------------------------
+// CPosTp24::SearchAndCancelL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp125::SearchAndCancelL(const TBool& aInCallback)
+ {
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when the search is performed");
+ _LIT(KCancelErr, "The search is canceled after progress has increased but no search result is found");
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ // Test search with one criteria
+ const TInt KIndex=0;
+
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ nameCriteria->SetSearchPatternL(iCategorySearchResults[KIndex]->TextCriteria());
+
+ if (aInCallback)
+ {
+ RunAsyncOperationAndCancelInCallbackLD(iLandmarksMultiDbSearch->StartCategorySearchL(
+ *nameCriteria,
+ CPosLmCategoryManager::ECategorySortOrderNone,
+ iCategorySearchResults[KIndex]->Redefined()));
+ }
+ else
+ {
+ RunAsyncOperationAndCancelLD(iLandmarksMultiDbSearch->StartCategorySearchL(
+ *nameCriteria,
+ CPosLmCategoryManager::ECategorySortOrderNone,
+ iCategorySearchResults[KIndex]->Redefined()));
+ }
+
+
+
+ if (aInCallback)
+ {
+ CPosLmItemIterator* iter0 = iLandmarksMultiDbSearch->MatchIteratorL(0);
+ CleanupStack::PushL(iter0);
+ CPosLmItemIterator* iter1 = iLandmarksMultiDbSearch->MatchIteratorL(1);
+ CleanupStack::PushL(iter1);
+ CPosLmItemIterator* iter2 = iLandmarksMultiDbSearch->MatchIteratorL(2);
+ CleanupStack::PushL(iter2);
+ CPosLmItemIterator* iter3 = iLandmarksMultiDbSearch->MatchIteratorL(3);
+ CleanupStack::PushL(iter3);
+ CPosLmItemIterator* iter4 = iLandmarksMultiDbSearch->MatchIteratorL(4);
+ CleanupStack::PushL(iter4);
+
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(0) == iter0->NumOfItemsL(), KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(1) == iter1->NumOfItemsL(), KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(2) == iter2->NumOfItemsL(), KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(3) == iter3->NumOfItemsL(), KNumOfMatchesErr);
+ AssertTrueSecL(iLandmarksMultiDbSearch->NumOfMatches(4) == iter4->NumOfItemsL(), KNumOfMatchesErr);
+
+ AssertTrueSecL(displayData->Count() > 0, KNumOfMatchesErr);
+
+ AssertTrueSecL((iter0->NumOfItemsL() +
+ iter0->NumOfItemsL() +
+ iter0->NumOfItemsL() +
+ iter0->NumOfItemsL() +
+ iter0->NumOfItemsL()) == displayData->Count(), KCancelErr);
+
+ CleanupStack::PopAndDestroy(5);
+ }
+
+
+
+ CleanupStack::PopAndDestroy(nameCriteria);
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ }
+
+void CPosTp125::TestDuplicateGlobalCategoriesL(const RPointerArray<CCategorySearchResult>& aSearchResults, const TBool& aSync)
+ {
+ iLog->Log(_L("SearchGlobalL with duplicates"));
+ _LIT(KNumOfMatchesErr, "No. of matches is incorrect when SearchGlobalL with duplicates is performed");
+
+ // Nr of global categories, defined in resource file
+ //const TInt KNrOfGlobalCategories = 15 * 2;
+
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+ CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC();
+ CPosLmCategoryManager::TCategorySortPref sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+
+ CPosLmDisplayData* displayData = CPosLmDisplayData::NewL();
+ CleanupStack::PushL(displayData);
+ iLandmarksMultiDbSearch->SetDisplayData(*displayData);
+
+ for (TInt l=0;l<2;l++)
+ {
+ if (l==0) sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending;
+ else if (l==1) sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending;
+
+ // i=0 the first entry in aSearchResults should be wildcard "*"
+ TInt i = 0;
+ // First do a search with wildcard
+ nameCriteria->SetSearchPatternL(aSearchResults[i]->TextCriteria());
+ iOperation = iLandmarksMultiDbSearch->StartCategorySearchL(*nameCriteria, sortPref);
+
+ // The asynchronous flow
+ if (aSync)
+ {
+ RunAsyncOperationLD(iOperation);
+ }
+ else
+ {
+ ExecuteAndDeleteLD(iOperation);
+ }
+
+ SetupDbArrayL();
+
+ iDbArray->Sort();
+
+ if (sortPref == CPosLmCategoryManager::ECategorySortOrderNameDescending)
+ {
+ InvertArrayL(iDbArray);
+ }
+
+ TUint expNr = (aSearchResults[i]->SearchResult()).Count();
+
+ TInt matchesSum = 0;
+ for (TInt count = 0; count < 5; count++)
+ {
+ matchesSum += iLandmarksMultiDbSearch->NumOfMatches(count);
+ }
+
+ if (expNr != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt displayCount = displayData->Count();
+
+ if (displayCount != matchesSum)
+ {
+ iLog->Log(KNumOfMatchesErr);
+ User::Leave(-1);
+ }
+
+ TInt count = 0;
+
+ TBuf<100> categoryName2;
+ TPtrC categoryName;
+
+ for (count = 0; count < displayCount; count++)
+ {
+ CPosLmDisplayItem& displayItem = displayData->DisplayItem(count);
+ const CPosLandmarkCategory& displayCategory = displayItem.Category();
+ displayCategory.GetCategoryName(categoryName);
+ categoryName2 = (*iDbArray)[count];
+ // Check that sort order is correct
+ AssertTrueSecL(categoryName == categoryName2, _L("Error in sorting"));
+ }
+
+ } // end for (TInt l=0 ...)
+
+ iLandmarksMultiDbSearch->UnsetDisplayData();
+ CleanupStack::PopAndDestroy(displayData);
+ CleanupStack::PopAndDestroy(nameCriteria);
+ CleanupStack::PopAndDestroy(categoryManager);
+ iLog->Log(_L("SearchGlobalL Done"));
+ }
+
+void CPosTp125::RemoveExtraCategoriesL()
+ {
+ TInt err = KErrNone;
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb20);
+
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iLog->Log(_L(" Default database opened and initialised "));
+
+ CPosLmCategoryManager* catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+ ExecuteAndDeleteLD(catMan->ResetGlobalCategoriesL());
+
+ RemoveCategoryL(catMan, 6);
+ RemoveCategoryL(catMan, 7);
+ RemoveCategoryL(catMan, 8);
+ RemoveCategoryL(catMan, 9);
+ RemoveCategoryL(catMan, 10);
+ RemoveCategoryL(catMan, 11);
+ RemoveCategoryL(catMan, 12);
+ RemoveCategoryL(catMan, 13);
+ RemoveCategoryL(catMan, 14);
+ RemoveCategoryL(catMan, 15);
+ RemoveCategoryL(catMan, 16);
+ RemoveCategoryL(catMan, 17);
+ RemoveCategoryL(catMan, 18);
+ RemoveCategoryL(catMan, 19);
+ RemoveCategoryL(catMan, 20);
+ RemoveCategoryL(catMan, 21);
+ RemoveCategoryL(catMan, 22);
+ RemoveCategoryL(catMan, 23);
+ RemoveCategoryL(catMan, 24);
+ RemoveCategoryL(catMan, 25);
+ RemoveCategoryL(catMan, 26);
+
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb40);
+ if ( iDatabase->IsInitializingNeeded() )
+ {
+ TRAP( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+
+ RemoveCategoryL(catMan, 1);
+ RemoveCategoryL(catMan, 2);
+ RemoveCategoryL(catMan, 3);
+ RemoveCategoryL(catMan, 4);
+ RemoveCategoryL(catMan, 5);
+ // Existing categories here
+ RemoveCategoryL(catMan, 15);
+ RemoveCategoryL(catMan, 16);
+ RemoveCategoryL(catMan, 17);
+ RemoveCategoryL(catMan, 18);
+ RemoveCategoryL(catMan, 19);
+ RemoveCategoryL(catMan, 20);
+ RemoveCategoryL(catMan, 21);
+ RemoveCategoryL(catMan, 22);
+ RemoveCategoryL(catMan, 23);
+ RemoveCategoryL(catMan, 24);
+ RemoveCategoryL(catMan, 25);
+ RemoveCategoryL(catMan, 26);
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb60);
+ if ( iDatabase->IsInitializingNeeded() )
+ {
+ TRAP( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+ RemoveCategoryL(catMan, 1);
+ RemoveCategoryL(catMan, 2);
+ RemoveCategoryL(catMan, 3);
+ RemoveCategoryL(catMan, 4);
+ RemoveCategoryL(catMan, 5);
+ RemoveCategoryL(catMan, 6);
+ RemoveCategoryL(catMan, 7);
+ RemoveCategoryL(catMan, 8);
+ RemoveCategoryL(catMan, 9);
+ RemoveCategoryL(catMan, 10);
+ RemoveCategoryL(catMan, 11);
+ RemoveCategoryL(catMan, 12);
+ RemoveCategoryL(catMan, 13);
+ RemoveCategoryL(catMan, 14);
+ // Existing categories here
+ RemoveCategoryL(catMan, 21);
+ RemoveCategoryL(catMan, 22);
+ RemoveCategoryL(catMan, 23);
+ RemoveCategoryL(catMan, 24);
+ RemoveCategoryL(catMan, 25);
+ RemoveCategoryL(catMan, 26);
+
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb80);
+ if ( iDatabase->IsInitializingNeeded() )
+ {
+ TRAP( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+ RemoveCategoryL(catMan, 1);
+ RemoveCategoryL(catMan, 2);
+ RemoveCategoryL(catMan, 3);
+ RemoveCategoryL(catMan, 4);
+ RemoveCategoryL(catMan, 5);
+ RemoveCategoryL(catMan, 6);
+ RemoveCategoryL(catMan, 7);
+ RemoveCategoryL(catMan, 8);
+ RemoveCategoryL(catMan, 9);
+ RemoveCategoryL(catMan, 10);
+ RemoveCategoryL(catMan, 11);
+ RemoveCategoryL(catMan, 12);
+ RemoveCategoryL(catMan, 13);
+ RemoveCategoryL(catMan, 14);
+ RemoveCategoryL(catMan, 15);
+ RemoveCategoryL(catMan, 16);
+ RemoveCategoryL(catMan, 17);
+ RemoveCategoryL(catMan, 18);
+ RemoveCategoryL(catMan, 19);
+ RemoveCategoryL(catMan, 20);
+ // Existing categories here
+ RemoveCategoryL(catMan, 25);
+ RemoveCategoryL(catMan, 26);
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KDb105);
+ if ( iDatabase->IsInitializingNeeded() )
+ {
+ TRAP( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL( err == KErrNone, _L("Init db failed"));
+ }
+ catMan = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(catMan);
+
+ RemoveCategoryL(catMan, 1);
+ RemoveCategoryL(catMan, 2);
+ RemoveCategoryL(catMan, 3);
+ RemoveCategoryL(catMan, 4);
+ RemoveCategoryL(catMan, 5);
+ RemoveCategoryL(catMan, 6);
+ RemoveCategoryL(catMan, 7);
+ RemoveCategoryL(catMan, 8);
+ RemoveCategoryL(catMan, 9);
+ RemoveCategoryL(catMan, 10);
+ RemoveCategoryL(catMan, 11);
+ RemoveCategoryL(catMan, 12);
+ RemoveCategoryL(catMan, 13);
+ RemoveCategoryL(catMan, 14);
+ RemoveCategoryL(catMan, 15);
+ RemoveCategoryL(catMan, 16);
+ RemoveCategoryL(catMan, 17);
+ RemoveCategoryL(catMan, 18);
+ RemoveCategoryL(catMan, 19);
+ RemoveCategoryL(catMan, 20);
+ RemoveCategoryL(catMan, 21);
+ RemoveCategoryL(catMan, 22);
+ RemoveCategoryL(catMan, 23);
+ RemoveCategoryL(catMan, 24);
+
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(3000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(6000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(9000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(12000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(15000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(18000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(21000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(24000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(27000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(30000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(33000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(36000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(39000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(42000));
+ RemoveCategoryL(catMan, catMan->GetGlobalCategoryL(45000));
+
+ CleanupStack::PopAndDestroy(catMan);
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+
+ void CPosTp125::RemoveCategoryL(CPosLmCategoryManager* aCatMan,
+ const TPosLmItemId aCatId)
+ {
+ ExecuteAndDeleteLD(aCatMan->RemoveCategoryL(aCatId));
+ }
+
+void CPosTp125::AssertThatIdIsInCorrectDbL(TInt aDbIndex, TInt aId)
+ {
+ _LIT(KErrorWrongDb, "Id returned from wrong db");
+ _LIT(KIllegalIndex, "Illegal index sent to AssertThatIdIsInCorrectDbL()");
+ switch(aDbIndex)
+ {
+ case 0:
+ AssertTrueSecL(aId >= 1 && aId <= 5, KErrorWrongDb);
+ break;
+ case 1:
+ AssertTrueSecL(aId >= 6 && aId <= 14, KErrorWrongDb);
+ break;
+ case 2:
+ AssertTrueSecL(aId >= 15 && aId <= 20, KErrorWrongDb);
+ break;
+ case 3:
+ AssertTrueSecL(aId >= 21 && aId <= 24, KErrorWrongDb);
+ break;
+ case 4:
+ AssertTrueSecL(aId >= 25 && aId <= 26, KErrorWrongDb);
+ break;
+ default:
+ iLog->Log(KIllegalIndex);
+ User::Leave(-1);
+ break;
+
+ }
+ }
+
+void CPosTp125::SetupDbArrayL()
+ {
+ iDbArray = NULL;
+ // This array is used when testing display data.
+ iDbArray = new(ELeave) CDesCArrayFlat(8);
+
+ // Build the array so that the array index is equivalent with the db index, except that this array is 0-based.
+ iDbArray->AppendL(KPizzeria);
+ iDbArray->AppendL(KHambergerbar);
+ iDbArray->AppendL(KKinarestaurang);
+ iDbArray->AppendL(KGaraget);
+ iDbArray->AppendL(KBilverkstad);
+ iDbArray->AppendL(KPastaRestaurang);
+ iDbArray->AppendL(KBilia);
+ iDbArray->AppendL(KVolksWagen);
+ iDbArray->AppendL(KTaxiGoteborg);
+ iDbArray->AppendL(KTaxi);
+ iDbArray->AppendL(KStadsbibliotek);
+ iDbArray->AppendL(KSystembolag);
+ iDbArray->AppendL(KNokiKontor);
+ iDbArray->AppendL(KTietoEnatorKontor);
+ iDbArray->AppendL(KThaiRestaurang);
+ iDbArray->AppendL(KMcDonalds);
+ iDbArray->AppendL(KBurgerKing);
+ iDbArray->AppendL(KFrisor);
+ iDbArray->AppendL(KHunddagis);
+ iDbArray->AppendL(KVeterinar);
+ iDbArray->AppendL(KKyrkogard);
+ iDbArray->AppendL(KMuseum);
+ iDbArray->AppendL(KDagis);
+ iDbArray->AppendL(KStadspark);
+ iDbArray->AppendL(KSjukhus);
+ iDbArray->AppendL(KLakare);
+ }
+
+void CPosTp125::SortResultsL(RArray<TPosLmItemId>& aArray,
+ CDesCArrayFlat*& aResultArray)
+ {
+ TInt count = 0;
+ aResultArray = new(ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(aResultArray);
+ for (count = 0 ; count < aArray.Count(); count++)
+ {
+ TInt id = aArray[count];
+ aResultArray->AppendL((*iDbArray)[id - 1]); // compensate for 0-based array
+ }
+
+ aResultArray->Sort();
+ CleanupStack::Pop(aResultArray);
+ }
+
+void CPosTp125::InvertArrayL(CDesCArrayFlat*& aArray)
+ {
+ TInt maxCount = aArray->Count();
+ TInt count = 0;
+
+ CDesCArrayFlat* copyArray = new(ELeave) CDesCArrayFlat(8);
+ CleanupStack::PushL(copyArray);
+
+ for (count = 0; count < maxCount; count++)
+ {
+ copyArray->AppendL((*aArray)[count]);
+ }
+
+ aArray->Reset();
+ for (count = 0; count < maxCount; count++)
+ {
+ aArray->AppendL((*copyArray)[maxCount - count - 1]);
+ }
+
+ CleanupStack::PopAndDestroy(copyArray);
+ }
+
+// End of File