diff -r b12ea03c50a3 -r 834e27cad510 landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp38.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp38.cpp Tue Jul 06 14:44:11 2010 +0300 @@ -0,0 +1,1452 @@ +/* +* 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 the License "Symbian Foundation License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* ?description_line +* +*/ + + +// INCLUDES +#include "FT_CPosTp38.h" +#include +#include +#include +#include +#include +#include +#include +#include +#include "FT_LandmarkConstants.h" + +#include "FT_CCompositeSearchResult.h" + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CPosTp38::CloseTest +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::CloseTest() + { + iLog->Log(_L("CloseTest")); + delete iDatabase; + iDatabase=NULL; + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + + } + +// --------------------------------------------------------- +// CPosTp38::StartL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::StartL() + { + TTime startTime; + TTime stopTime; + startTime.UniversalTime(); + + iDatabase = UseCompositeLandmarksDbFileL(); + + if (iDatabase->IsInitializingNeeded()) + { + ExecuteAndDeleteLD(iDatabase->InitializeL()); + } + + StartLandmarksCompositeTestL(); + + TestCompositeInCompositeL(); + + TestSeveralTextArgumentsL(); + + TestSeveralTextArgumentsWithORL(); + + TestSortOrderWithORL(); + + TestWithSortOrderLandmarksL(); + + TestWithSortOrderNearestL(); + + TestTwoLmCategoryCriteriaL(); + + TestAddAndRemoveL(); + + TInt err = KErrNone; + TRAP(err, TestWithNoPreviousResultL(0)); + if (err != KErrArgument) + + { + iLog->Log(_L("Searching with no previous result should cause StartLandmarkL to leave with KErrArgument")); + User::Leave(err); + } + delete iLandmarkSearch; + iLandmarkSearch = NULL; + + SearchAndCancelL(EFalse); + SearchAndCancelL(ETrue); + + // Since category and composite is no longer allowed, no need to test this + //TestWithSortOrderCategoriesL(); + //TestCategoryCompositeSearchL(); + + stopTime.UniversalTime(); + TTimeIntervalMicroSeconds executionTime = + stopTime.MicroSecondsFrom(startTime); + + TInt resse = executionTime.Int64()/1000000; + TBuf<100> buf; + buf.Format(_L("TP38 took %d seconds"), resse); + iLog->Log(buf); + } + +// --------------------------------------------------------- +// CPosTp38::TestWithSortOrderCategoriesL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestWithSortOrderCategoriesL() + { + iLog->Log(_L("TestWithSortOrderCategoriesL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC(); + nameCriteria->SetSearchPatternL(_L("*")); + TInt err = composite->AddArgument(nameCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error from AddArgument(nameCriteria)")); + User::Leave(err); + } + CleanupStack::Pop(nameCriteria); + + CPosLmCategoryManager::TCategorySortPref sortPref; + sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending; + TInt i=0; + TInt j=0; + for (j=0;j<2;j++) + { + if (j==0) + { + iLog->Log(_L("Sorting Ascending")); + sortPref = CPosLmCategoryManager::ECategorySortOrderNameAscending; + } + else + { + iLog->Log(_L("Sorting Descending")); + sortPref = CPosLmCategoryManager::ECategorySortOrderNameDescending; + } + + iLog->Log(_L("iLandmarkSearch->StartCategorySearchL")); + iOperation = iLandmarkSearch->StartCategorySearchL(*composite, sortPref); + + ExecuteAndDeleteLD(iOperation); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + // Create a sorted list out of the search result + RArray searchResults; + CleanupClosePushL(searchResults); + + for (i=1;i<27;i++) {searchResults.Append(i);} + + CategoriesSortL(searchResults, sortPref); + + TPosLmItemId id = iter->NextL(); + TInt counter=0; + while (id != KPosLmNullItemId) + { + // Check that sort order is correct + AssertTrueSecL(searchResults[counter] == id, _L("Error in sorting")); + id = iter->NextL(); + counter++; + } + CleanupStack::PopAndDestroy(&searchResults); + CleanupStack::PopAndDestroy(iter); + } + CleanupStack::PopAndDestroy(composite); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + + iLog->Log(_L("Done")); + } + +// --------------------------------------------------------- +// CPosTp38::TestWithSortOrderNearestL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestWithSortOrderNearestL() + { + + iLog->Log(_L("TestWithSortOrderNearestL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("*")); + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument1")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria); + + // Then create a nearest criteria same coordinate as landmark itemid=3 God + TCoordinate coord(45, 45); + CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse); + err = composite->AddArgument(nearestCriteria); + if (err != KErrNone) + + { + iLog->Log(_L("Error when adding argument2")); + User::Leave(err); + + } + CleanupStack::Pop(nearestCriteria); + + // Then add an IdList + CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC(); + RArray list; + CleanupClosePushL(list); + + // Use these four landmarks + list.Append(6); + list.Append(7); + list.Append(3); + list.Append(10); + + idList->SetLandmarkIdsL(list); + err = composite->AddArgument(idList); + if (err != KErrNone) + + { + iLog->Log(_L("Error when adding argument3")); + User::Leave(err); + + } + CleanupStack::PopAndDestroy(&list); + CleanupStack::Pop(idList); + + // Create search result + RArray searchResults; + CleanupClosePushL(searchResults); + // This is the correct distance sorted array + searchResults.Append(3); + searchResults.Append(7); + searchResults.Append(6); + searchResults.Append(10); + + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse); + ExecuteAndDeleteLD(iOperation); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + + TInt ii=0; + TPosLmItemId id = iter->NextL(); + + while (id != KPosLmNullItemId) + { + if (id != (searchResults)[ii]) + { + // Check if same name then don't leave, there are three landmarks with same name, Mölndal + CPosLandmark* source = iDatabase->ReadLandmarkLC(id); + CPosLandmark* target = iDatabase->ReadLandmarkLC((searchResults)[ii]); + TPtrC sourceName, targetName; + source->GetLandmarkName(sourceName); + TInt sourceId = source->LandmarkId(); + target->GetLandmarkName(targetName); + TInt targetId = target->LandmarkId(); + + + AssertTrueSecL(sourceName.CompareC(targetName) == KErrNone,_L("Wrong sortorder"), id); + CleanupStack::PopAndDestroy(2, source); + } + + id = iter->NextL(); + ++ii; + } + CleanupStack::PopAndDestroy(iter); + CleanupStack::PopAndDestroy(&searchResults); + CleanupStack::PopAndDestroy(composite); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + } + +// --------------------------------------------------------- +// CPosTp38::TestTwoLmCategoryCriteriaL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestTwoLmCategoryCriteriaL() + { + iLog->Log(_L("TestTwoLmCategoryCriteriaL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("*")); + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument1")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria); + + // Create a cat search criteria + CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC(); + iLog->Log(_L("SetCategoryItemId")); + catSearchCriteria->SetCategoryItemId(14); + composite->AddArgument(catSearchCriteria); + CleanupStack::Pop(catSearchCriteria); + + // Create another cat search criteria + CPosLmCategoryCriteria* catSearchCriteria2 = CPosLmCategoryCriteria::NewLC(); + iLog->Log(_L("SetCategoryNameL")); + catSearchCriteria2->SetCategoryNameL(_L("McDonalds")); + composite->AddArgument(catSearchCriteria2); + CleanupStack::Pop(catSearchCriteria2); + + // Should find id7=Billigt and id27=LOG9 + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse); + ExecuteAndDeleteLD(iOperation); + + // Create search result + RArray searchResults; + CleanupClosePushL(searchResults); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + // This is the correct result list + searchResults.Append(27); + searchResults.Append(7); + + TInt size = iter->NumOfItemsL(); + if (size != searchResults.Count()) + + { + iLog->Log(_L("Wrong result returned from iterator")); + User::Leave(-1); + + } + + TInt found = 0; + TInt ii=0; + TPosLmItemId id = iter->NextL(); + + while (id != KPosLmNullItemId) + { + for (ii=0;iiNextL(); + } + + if (found != searchResults.Count()) + + { + iLog->Log(_L("Wrong result returned from iterator1")); + User::Leave(-1); + + } + + // Now refine search with another CPosLmCategoryCriteria + // Create another cat search criteria + CPosLmCategoryCriteria* catSearchCriteria3 = CPosLmCategoryCriteria::NewLC(); + iLog->Log(_L("SetCategoryItemId")); + catSearchCriteria3->SetCategoryItemId(11); + composite->AddArgument(catSearchCriteria3); + CleanupStack::Pop(catSearchCriteria3); + + // Should find id27=LOG9 + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, ETrue); + ExecuteAndDeleteLD(iOperation); + + iter->Reset(); + CleanupStack::PopAndDestroy(iter); + iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + searchResults.Reset(); + searchResults.Append(27); + found=0; + size = iter->NumOfItemsL(); + id = iter->NextL(); + if (size != searchResults.Count()) + + { + iLog->Log(_L("Wrong result returned from iterator")); + User::Leave(-1); + + } + + while (id != KPosLmNullItemId) + { + for (ii=0;iiNextL(); + } + + if (found != searchResults.Count()) + + { + iLog->Log(_L("Wrong items returned from iterator2")); + User::Leave(-1); + } + + CleanupStack::PopAndDestroy(iter); + CleanupStack::PopAndDestroy(&searchResults); + CleanupStack::PopAndDestroy(composite); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + } + +// --------------------------------------------------------- +// CPosTp38::TestWithSortOrderLandmarksL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestWithSortOrderLandmarksL() + { + iLog->Log(_L("TestWithSortOrderLandmarksL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + TInt i=0; + TInt j=0; + + TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("*")); + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument1")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria); + + // Then create a nearest criteria + TCoordinate coord(12.123, -20,123); + CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse); + err = composite->AddArgument(nearestCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument2")); + User::Leave(err); + } + CleanupStack::Pop(nearestCriteria); + + // Then add an IdList + CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC(); + RArray list; + CleanupClosePushL(list); + for (i=1;i<106;i++) {list.Append(i);} + idList->SetLandmarkIdsL(list); + err = composite->AddArgument(idList); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument3")); + User::Leave(err); + } + CleanupStack::PopAndDestroy(&list); + CleanupStack::Pop(idList); + + // Create search result of all landmark ids: 1-105 + RArray searchResults; + CleanupClosePushL(searchResults); + for (i=1;i<106;i++) {searchResults.Append(i);} + + for (j=0;j<2;j++) + { + if (j==0) + { + iLog->Log(_L("Sorting Ascending")); + sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending); + } + else + { + iLog->Log(_L("Sorting Descending")); + sortPref.SetSortByLandmarkAttribute(CPosLandmark::ELandmarkName, TPosLmSortPref::EDescending); + } + + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, sortPref, EFalse); + ExecuteAndDeleteLD(iOperation); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + TInt size = iter->NumOfItemsL(); + + LandmarksSortL(searchResults, sortPref); + + TInt ii=0; + TPosLmItemId id = iter->NextL(); + + while (id != KPosLmNullItemId) + { + if (id != (searchResults)[ii]) + { + // Check if same name then don't leave, there are three landmarks with same name, Mölndal + + CPosLandmark* source = iDatabase->ReadLandmarkLC(id); + CPosLandmark* target = iDatabase->ReadLandmarkLC((searchResults)[ii]); + TPtrC sourceName, targetName; + source->GetLandmarkName(sourceName); + TInt sourceId = source->LandmarkId(); + target->GetLandmarkName(targetName); + TInt targetId = target->LandmarkId(); + + AssertTrueSecL(sourceName.CompareC(targetName) == KErrNone,_L("Wrong sortorder"), id); + + CleanupStack::PopAndDestroy(2, source); + } + + id = iter->NextL(); + ++ii; + } + CleanupStack::PopAndDestroy(iter); + } + + CleanupStack::PopAndDestroy(&searchResults); + CleanupStack::PopAndDestroy(composite); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + } + +// --------------------------------------------------------- +// CPosTp38::TestCompositeInCompositeL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestCompositeInCompositeL() + { + iLog->Log(_L("TestCompositeInCompositeL")); + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + + textCriteria->SetTextL(_L("*")); + + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument1")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria); + + CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(-48, 5, -5, 20); + + err = composite->AddArgument(areaCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument2")); + User::Leave(err); + } + CleanupStack::Pop(areaCriteria); + + //Create composite object that should be used as argument to the first composite object + CPosLmCompositeCriteria* composite2 = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC(); + + textCriteria2->SetTextL(_L("TE,*")); + + err = composite2->AddArgument(textCriteria2); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument3")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria2); + + // Add a IdList + RArray list; + CleanupClosePushL(list); + + CPosLmIdListCriteria* idList = CPosLmIdListCriteria::NewLC(); + + for (TInt i=0;i<100;i++) + { + list.Append(i); + } + idList->SetLandmarkIdsL(list); + + err = composite2->AddArgument(idList); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument4")); + User::Leave(err); + } + CleanupStack::Pop(idList); + CleanupStack::PopAndDestroy(&list); + + // Nested composite is not allowed + err = composite->AddArgument(composite2); + if (err != KErrNotSupported) + { + iLog->Log(_L("Wrong error code when adding composite to a composite")); + User::Leave(err); + } + CleanupStack::PopAndDestroy(composite2); + + CleanupStack::PopAndDestroy(composite); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + iLog->Log(_L("Done")); + } + +// --------------------------------------------------------- +// CPosTp38::StartLandmarksCompositeTestL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::StartLandmarksCompositeTestL() + { + iLog->Log(_L("StartTestL")); + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + CCompositeSearchResult* res = CCompositeSearchResult::NewL(iLog); + CleanupStack::PushL(res); + + TInt index=0; + TInt errorsFound = KErrNone; + + TBuf<100> buf; + buf.Format(_L(">>>>>>>Test round %d <<<<<<<"), index); + + while (!res->GetCompositeSearchResultsL(*composite)) + { + PrintCompositeInfo(composite); + + iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL")); + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, res->Redefined()); + ExecuteAndDeleteLD(iOperation); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + TPosLmItemId id = iter->NextL(); + + TInt matches = iLandmarkSearch->NumOfMatches(); + TInt expMatches = res->iResultIds.Count(); + + buf.Format(_L("nr of matches: %d nr of exp matches: %d"), matches, expMatches); + iLog->Log(buf); + + while (id != KPosLmNullItemId) + { + buf.Format(_L("Result from iterator id: %d"), id); + iLog->Log(buf); + TInt idde = res->iResultIds.Find(id); + if (idde == KErrNotFound) + { + iLog->Log(_L("MyError: Could not find id!!!")); + errorsFound++; + } + else + { + // Remove so that we dont find the same id again + res->iResultIds.Remove(idde); + } + id = iter->NextL(); + } + + iter->Reset(); + CleanupStack::PopAndDestroy(iter); + + if (expMatches != matches) + { + iLog->Log(_L("MyError: Wrong number of matches")); + errorsFound++; + } + } + + if (errorsFound != KErrNone) + { + iLog->Log(_L("Errors found in TP38")); + User::Leave(-1); + + } + iLog->Log(_L("----Done---")); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + + CleanupStack::PopAndDestroy(res); + CleanupStack::PopAndDestroy(composite); + } + + +// --------------------------------------------------------- +// CPosTp38::TestSeveralTextArgumentsL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestSeveralTextArgumentsL() + { + iLog->Log(_L("TestSeveralTextArgumentsL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("Nokia*")); + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument1")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC(); + textCriteria2->SetTextL(_L("*Stockholm")); + err = composite->AddArgument(textCriteria2); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument2")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria2); + + // Should find landmark id: 63 name: "Nokia, Stockholm" + iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL")); + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse); + ExecuteAndDeleteLD(iOperation); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + TPosLmItemId id = iter->NextL(); + + TInt matches = iLandmarkSearch->NumOfMatches(); + if (matches != 1) + { + iLog->Log(_L("Wrong number of matches")); + User::Leave(-1); + } + + if (id != 63) + { + + iLog->Log(_L("Wrong landmark found, should find landmark with id 63")); + User::Leave(-1); + } + + iter->Reset(); + CleanupStack::PopAndDestroy(iter); + + CleanupStack::PopAndDestroy(composite); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + } + +// --------------------------------------------------------- +// CPosTp38::TestSeveralTextArgumentsWithORL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestSeveralTextArgumentsWithORL() + { + iLog->Log(_L("TestSeveralTextArgumentsWithORL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionOR); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("Nokia*")); + textCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName); + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument1")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC(); + textCriteria2->SetTextL(_L("*Eriksberg")); + textCriteria2->SetAttributesToSearch(CPosLandmark::ELandmarkName); + err = composite->AddArgument(textCriteria2); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument2")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria2); + + //Create nearest criteria instance and try adding it to composite criteria,should leave with KErrNotSupported since ORcomposition + // is supported only for text criteria + TCoordinate coord(45, 45); + CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(coord, EFalse); + err = composite->AddArgument(nearestCriteria); + if (err != KErrNotSupported) + + { + iLog->Log(_L("Error,should not support any other criteria except Text criteria")); + User::Leave(err); + + } + CleanupStack::Pop(nearestCriteria); + + + + + + // Should find landmark ids 48,55,62 & 63 with name:"Nokia","TE Eriksberg","Nokia Copenhagen" "Nokia, Stockholm" + iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL")); + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, EFalse); + ExecuteAndDeleteLD(iOperation); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + RArray idArray; + iter->GetItemIdsL(idArray, 0, iter->NumOfItemsL()); + + + TInt matches = iLandmarkSearch->NumOfMatches(); + if (matches != 4) + { + iLog->Log(_L("Wrong number of matches")); + User::Leave(-1); + } + + for(int i=0; iLog(_L("Wrong landmark found, should find landmark with id 48, 55, 62 & 63")); + User::Leave(-1); + } + } + + iter->Reset(); + CleanupStack::PopAndDestroy(iter); + CleanupStack::PopAndDestroy(composite); + delete iLandmarkSearch; + iLandmarkSearch = NULL; + } + + +// --------------------------------------------------------- +// CPosTp38::TestSortOrderWithORL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestSortOrderWithORL() + { + + + + iLog->Log(_L("TestSeveralTextArgumentsWithORL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionOR); + + TPosLmSortPref sortPref(CPosLandmark::ELandmarkName, TPosLmSortPref::EAscending); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("Nokia*")); + textCriteria->SetAttributesToSearch(CPosLandmark::ELandmarkName); + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument1")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria); + + // First create a textcriteria + CPosLmTextCriteria* textCriteria2 = CPosLmTextCriteria::NewLC(); + textCriteria2->SetTextL(_L("*Eriksberg")); + textCriteria2->SetAttributesToSearch(CPosLandmark::ELandmarkName); + err = composite->AddArgument(textCriteria2); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument2")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria2); + + // Should find landmark ids 48,55,62 & 63 with name:"Nokia","TE Eriksberg","Nokia Copenhagen" "Nokia, Stockholm" + iLog->Log(_L("iLandmarkSearch->StartLandmarkSearchL")); + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite,sortPref, EFalse); + ExecuteAndDeleteLD(iOperation); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + RArray idArray; + iter->GetItemIdsL(idArray, 0, iter->NumOfItemsL()); + + + TInt matches = iLandmarkSearch->NumOfMatches(); + if (matches != 4) + { + iLog->Log(_L("Wrong number of matches")); + User::Leave(-1); + } + +//Check if the landmarks are in ascending order i.e "Nokia","Nokia Copenhagen","Nokia Stockholm","TE Eriksberg" + + + if(idArray[0] != 48 || idArray[1] != 62 || idArray[2] != 63 || idArray[3] != 55) + { + iLog->Log(_L("Wrong landmark found, should find landmark with id 48, 55, 62 & 63")); + User::Leave(-1); + } + + + iter->Reset(); + CleanupStack::PopAndDestroy(iter); + CleanupStack::PopAndDestroy(composite); + delete iLandmarkSearch; + iLandmarkSearch = NULL; + } + +// --------------------------------------------------------- +// CPosTp38::TestCategoryCompositeSearchL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestCategoryCompositeSearchL() + { + iLog->Log(_L("TestCategoryCompositeSearchL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + // Use differen text pattern + CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC(); + nameCriteria->SetSearchPatternL(_L("*")); + TInt err = composite->AddArgument(nameCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error from AddArgument(nameCriteria);")); + User::Leave(err); + } + CleanupStack::Pop(nameCriteria); + + CPosLmCatNameCriteria* nameCriteria2 = CPosLmCatNameCriteria::NewLC(); + nameCriteria2->SetSearchPatternL(_L("*kontor")); + err = composite->AddArgument(nameCriteria2); + if (err != KErrNone) + { + iLog->Log(_L("Error from AddArgument(nameCriteria);")); + User::Leave(err); + } + CleanupStack::Pop(nameCriteria2); + + // Should find category id: 13 name "Nokia Kontor" and id: 14 name: "TietoEnator kontor" + iLog->Log(_L("iLandmarkSearch->StartCategorySearchL")); + iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone); + + ExecuteAndDeleteLD(iOperation); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + TInt matches = iLandmarkSearch->NumOfMatches(); + if (matches != 2) + { + iLog->Log(_L("Wrong number of matches")); + User::Leave(-1); + } + else iLog->Log(_L("Found 2 nr of matches")); + + TPosLmItemId id1 = iter->NextL(); + TPosLmItemId id2 = iter->NextL(); + + if ((id1 == 13 && id2 != 14) || (id1 == 14 && id2 != 13) + || (id2 == 13 && id1 != 14) || (id2 == 14 && id1 != 13)) + { + iLog->Log(_L("Wrong landmark found")); + User::Leave(-1); + } + + iter->Reset(); + CleanupStack::PopAndDestroy(iter); + + // Use same text pattern + nameCriteria = CPosLmCatNameCriteria::NewLC(); + nameCriteria->SetSearchPatternL(_L("TietoEnator*")); + err = composite->AddArgument(nameCriteria); + if (err != KErrNone) + { + + iLog->Log(_L("Error from AddArgument(nameCriteria);")); + User::Leave(err); + } + CleanupStack::Pop(nameCriteria); + + nameCriteria2 = CPosLmCatNameCriteria::NewLC(); + nameCriteria2->SetSearchPatternL(_L("TietoEnator*")); + err = composite->AddArgument(nameCriteria2); + if (err != KErrNone) + { + iLog->Log(_L("Error from AddArgument(nameCriteria);")); + User::Leave(err); + + } + CleanupStack::Pop(nameCriteria2); + + // Should find category id: 14 name "TietoEnator Kontor" + iLog->Log(_L("iLandmarkSearch->StartCategorySearchL")); + iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone); + + ExecuteAndDeleteLD(iOperation); + iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + matches = iLandmarkSearch->NumOfMatches(); + if (matches != 1) + { + iLog->Log(_L("Wrong number of matches")); + User::Leave(-1); + + } + else iLog->Log(_L("Found 1 nr of matches")); + + id1 = iter->NextL(); + + if (id1 != 14) + { + iLog->Log(_L("Wrong landmark found")); + User::Leave(-1); + } + + iter->Reset(); + CleanupStack::PopAndDestroy(iter); + CleanupStack::PopAndDestroy(composite); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + + iLog->Log(_L("Done")); + } + +// --------------------------------------------------------- +// CPosTp38::TestAddAndRemoveL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestAddAndRemoveL() + { + iLog->Log(_L("TestAddAndRemoveL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + // 1) Add a text criteria + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("*")); + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument1")); + User::Leave(err); + + } + CleanupStack::Pop(textCriteria); + + // 2) Add a text criteria + textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("Natur*")); + err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument2")); + User::Leave(err); + + } + CleanupStack::Pop(textCriteria); + + // 3) Add an area criteria + CPosLmAreaCriteria* areaCriteria = CPosLmAreaCriteria::NewLC(-12.23, 34.4, -2.05, 45.5); + err = composite->AddArgument(areaCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument3")); + User::Leave(err); + + } + CleanupStack::Pop(areaCriteria); + + // 4) Add a category criteria + CPosLmCategoryCriteria* catCriteria = CPosLmCategoryCriteria::NewLC(); + catCriteria->SetCategoryNameL(_L("Museum")); + err = composite->AddArgument(catCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument3")); + User::Leave(err); + + } + CleanupStack::Pop(catCriteria); + + // 5) Add a nearest criteria + TCoordinate cord(12.23, 12); + CPosLmNearestCriteria* nearestCriteria = CPosLmNearestCriteria::NewLC(cord, ETrue); + err = composite->AddArgument(nearestCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument3")); + User::Leave(err); + + } + CleanupStack::Pop(nearestCriteria); + + if (composite->NumOfArguments() != 5) + { + iLog->Log(_L("Error when adding argument1")); + User::Leave(-1); + + } + + // Remove (3) area criteria + CPosLmSearchCriteria* obj1 = composite->RemoveArgument(2); + delete obj1; + obj1 = NULL; + + // Remove (5) nearest criteria (after 3 removed it has id 4) + CPosLmSearchCriteria* obj2 = composite->RemoveArgument(3); + delete obj2; + obj2 = NULL; + + // Should find landmark with id: 87 name: "Naturhistoriska" + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite); + ExecuteAndDeleteLD(iOperation); + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + TInt nr = iter->NumOfItemsL(); + TBuf<100> buf; + buf.Format(_L("Found %d nr of landmarks after removing two arguments "), nr); + iLog->Log(buf); + + TPosLmItemId id = iter->NextL(); + if (id != 87) + { + iLog->Log(_L("Wrong landmark found")); + User::Leave(-1); + + } + iter->Reset(); + + // Remove (1) first text criteria + CPosLmSearchCriteria* obj4 = composite->RemoveArgument(0); + delete obj4; + obj4 = NULL; + + // Remove (2) the second text criteria + CPosLmSearchCriteria* obj3 = composite->RemoveArgument(0); + delete obj3; + obj3 = NULL; + + CleanupStack::PopAndDestroy(iter); + + // Should find six landmarks belonging to category "museum", + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite); + ExecuteAndDeleteLD(iOperation); + + iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + nr = iter->NumOfItemsL(); + if (nr != 6) + { + iLog->Log(_L("Wrong number of landmarks returned")); + User::Leave(-1); + } + buf.Format(_L("Found %d nr of landmarks after removing two more arguments"), nr); + iLog->Log(buf); + + iter->Reset(); + + CleanupStack::PopAndDestroy(iter); + CleanupStack::PopAndDestroy(composite); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + + iLog->Log(_L("Done")); + } + +// --------------------------------------------------------- +// CPosTp38::SearchAndCancelL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::SearchAndCancelL(const TBool& aInCallback) + { + iLog->Log(_L("SearchAndCancelL")); + + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("*")); + + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error when adding argument3")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria); + + if (aInCallback) + { + RunAsyncOperationAndCancelInCallbackLD(iLandmarkSearch->StartLandmarkSearchL( + *composite, EFalse)); + } + else + { + RunAsyncOperationAndCancelLD(iLandmarkSearch->StartLandmarkSearchL( + *composite, EFalse)); + } + + CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL(); + CleanupStack::PushL(iter); + + if (aInCallback) + { + _LIT(KExpected, "Iter. of matches: %d"); + _LIT(KReturned, "LandmarksSearch no. of matches: %d"); + TBuf<100> info; + info.Format(KExpected, iter->NumOfItemsL()); + iLog->Log(info); + info.Format(KReturned, iLandmarkSearch->NumOfMatches()); + iLog->Log(info); + + TBuf<100> info2; + _LIT(KNof, "No. of matches found before cancel = %d"); + info2.Format(KNof, iter->NumOfItemsL()); + iLog->Log(info2); + + + } + CleanupStack::PopAndDestroy(iter); + CleanupStack::PopAndDestroy(composite); + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + } + +// --------------------------------------------------------- +// CPosTp38::TestWithNoPreviousResultL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::TestWithNoPreviousResultL(TInt aTestNr) + { + iLog->Log(_L("TestWithNoPreviousResultL")); + iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase); + + CPosLmCompositeCriteria* composite = CPosLmCompositeCriteria::NewLC(CPosLmCompositeCriteria::ECompositionAND); + + if (aTestNr == 0) + { + CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC(); + textCriteria->SetTextL(_L("*")); + + TInt err = composite->AddArgument(textCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error from AddArgument(textCriteria);")); + User::Leave(err); + } + CleanupStack::Pop(textCriteria); + + iOperation = iLandmarkSearch->StartLandmarkSearchL(*composite, ETrue); + ExecuteAndDeleteLD(iOperation); + iLog->Log(_L("ERROR: Should leave here")); + + iLog->Log(_L("Should never come here in the code")); + User::Leave(-1); + + } + else if (aTestNr == 1) + { + + CPosLmCatNameCriteria* nameCriteria = CPosLmCatNameCriteria::NewLC(); + nameCriteria->SetSearchPatternL(_L("*kontor")); + TInt err = composite->AddArgument(nameCriteria); + if (err != KErrNone) + { + iLog->Log(_L("Error from AddArgument(nameCriteria);")); + User::Leave(err); + } + CleanupStack::Pop(nameCriteria); + + iOperation = iLandmarkSearch->StartCategorySearchL(*composite, CPosLmCategoryManager::ECategorySortOrderNone, ETrue); + ExecuteAndDeleteLD(iOperation); + iLog->Log(_L("ERROR: Should leave here")); + + iLog->Log(_L("Should never come here in the code")); + User::Leave(-1); + + } + + delete iLandmarkSearch; + iLandmarkSearch = NULL; + + } + +// --------------------------------------------------------- +// CPosTp38::PrintCompositeInfo +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CPosTp38::PrintCompositeInfo(CPosLmCompositeCriteria* aComposite) + { + TBuf<100> buf; + buf.Format(_L("PrintCompositeInfo() NrOfArg %d"), aComposite->NumOfArguments()); + iLog->Log(buf); + + for (TUint i=0;iNumOfArguments();i++) + { + + CPosLmSearchCriteria& comp = aComposite->Argument(i); + TInt type = comp.CriteriaType(); + + if (type == CPosLmSearchCriteria::ECriteriaArea) + { + iLog->Log(_L("Arg Area found")); + + CPosLmAreaCriteria& tt = static_cast(comp); + + TReal64 southLat; + TReal64 northLat; + TReal64 westLong; + TReal64 eastLong; + + tt.GetSearchArea(southLat, northLat, westLong, eastLong); + + buf.Format(_L("SouthL %f NorthL: %f WestL :%f EastL: %f"), (TReal)southLat, (TReal)northLat, (TReal)westLong, (TReal)eastLong); + iLog->Log(buf); + + } + else if (type == CPosLmSearchCriteria::ECriteriaText) + { + iLog->Log(_L("Arg Text found:")); + CPosLmTextCriteria& tt = static_cast(comp); + iLog->Log(tt.Text()); + } + else if (type == CPosLmSearchCriteria::ECriteriaComposite) + { + iLog->Log(_L("Arg Composite found")); + } + else if (type == CPosLmSearchCriteria::ECriteriaCategory) + { + iLog->Log(_L("Arg Category found")); + + CPosLmCategoryCriteria& tt = static_cast(comp); + iLog->Log(tt.CategoryName()); + } + else if (type == CPosLmSearchCriteria::ECriteriaFindNearest) + { + CPosLmNearestCriteria& tt = static_cast(comp); + TCoordinate cord; + tt.GetCoordinate(cord); + iLog->Log(_L("Arg Nearest found")); + buf.Format(_L("Latitude %f Longitude: %f MaxDist:%f"), (TReal)cord.Latitude(), (TReal)cord.Longitude(), (TReal)tt.MaxDistance()); + iLog->Log(buf); + } + else if (type == CPosLmSearchCriteria::ECriteriaIdList) + { + iLog->Log(_L("Arg Idlist found")); + CPosLmIdListCriteria& tt = static_cast(comp); + + RArray result; + CleanupClosePushL(result); + tt.GetLandmarkIdsL(result); + + buf.Format(_L("Nr of Ids: %d"), result.Count()); + iLog->Log(buf); + + for (TInt i=0;iLog(_L("Arg Categorybyname found")); + } + } + } + +// End of File