landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp36.cpp
author hgs
Fri, 09 Jul 2010 20:18:03 +0530
changeset 35 1a92308afc46
parent 33 834e27cad510
permissions -rw-r--r--
201027

/*
* 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_CPosTp36.h"
#include <EPos_CPosLandmarkDatabase.h>
#include <EPos_CPosLmCategoryCriteria.h>
#include <EPos_CPosLmCatNameCriteria.h>
#include <EPos_CPosLmTextCriteria.h>
           
// ================= MEMBER FUNCTIONS =======================


// ---------------------------------------------------------
// CPosTp36::CloseTest
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp36::CloseTest()
    {
    iLog->Log(_L("CloseTest"));
    delete iDatabase;
    iDatabase=NULL;

    delete iLandmarkSearch;
    iLandmarkSearch = NULL;

    iArray.Close();
    }

// ---------------------------------------------------------
// CPosTp36::StartL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp36::StartL()
    {
    TTime startTime;
    TTime stopTime;

    startTime.UniversalTime();

    // Delete "c:\\system\\data\\eposlm.ldb"
    RemoveDefaultDbL();
    iDatabase = UseGeneratedDbFileL();
    
    if (iDatabase->IsInitializingNeeded())
       {
       ExecuteAndDeleteLD(iDatabase->InitializeL());
       }

    // we should not find any uncategorized landmarks since every landmark in the db
    // belongs to a category
    iLog->Log(_L("Searching async"));
    DoTestL(ETrue, 0, 0);
    DoTestL(ETrue, 1, 0);
    DoTestL(ETrue, 2, 0);
    DoTestL(ETrue, 3, 0);

    iLog->Log(_L("Searching sync"));
    DoTestL(EFalse, 0, 0);
    DoTestL(EFalse, 1, 0);
    DoTestL(EFalse, 2, 0);
    DoTestL(EFalse, 3, 0);

    iLog->Log(_L("Should leave with KErrArgument"));
    TRAPD(err, DoSearchForCategoryL(ETrue));
    if (err != KErrArgument)    
    {
    	iLog->Log(_L("Should leave with KErrArgument"));
    	User::Leave(err);
    }
    else iLog->Log(_L("Function correctly leaved with KErrArgument"));
    
    delete iLandmarkSearch;
    iLandmarkSearch = NULL;

    iLog->Log(_L("Should leave with KErrArgument"));
    TRAP(err, DoSearchForCategoryL(EFalse));
    if (err != KErrArgument)
    {
    	iLog->Log(_L("Should leave with KErrArgument"));
    	User::Leave(err);

    }
    else iLog->Log(_L("Function correctly leaved with KErrArgument"));

    delete iLandmarkSearch;
    iLandmarkSearch = NULL;

    TInt maxNr = GetNrOfLandmarksL();

    TBuf<100> buf;
    buf.Format(_L("Nr of landmarks: %d"), maxNr);
    iLog->Log(buf);
    
    // Remove categories from some landmarks
    RemoveCategoriesFromLandmarksL(5);
    // Check that correct number of uncategorized landmarks are found
    DoTestL(EFalse, 0, 5);
    DoTestL(EFalse, 1, 5);
    DoTestL(EFalse, 2, 5);
    DoTestL(EFalse, 3, 5);
    // Remove categories from some landmarks
    RemoveCategoriesFromLandmarksL(6);
    // Check that correct number of uncategorized landmarks are found
    DoTestL(EFalse, 0, 11);
    DoTestL(EFalse, 1, 11);
    DoTestL(EFalse, 2, 11);
    DoTestL(EFalse, 3, 11);

    // Remove categories from some landmarks
    RemoveCategoriesFromLandmarksL(43);
    // Check that correct number of uncategorized landmarks are found
    DoTestL(EFalse, 0, 54);
    DoTestL(EFalse, 1, 54);
    DoTestL(EFalse, 2, 54);
    DoTestL(EFalse, 3, 54);
    
    delete iLandmarkSearch;
    iLandmarkSearch = NULL;

    delete iDatabase;
    iDatabase=NULL;

    stopTime.UniversalTime();
    TTimeIntervalMicroSeconds executionTime = 
        stopTime.MicroSecondsFrom(startTime);

    TInt resse = executionTime.Int64()/1000000;
    buf.Zero();
    buf.Format(_L("TP36 took %d seconds"), resse);
    iLog->Log(buf);
	}

// ---------------------------------------------------------
// CPosTp36::DoTestL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp36::DoTestL(TBool aSync, TInt aTestNr, TInt aNrOfHits)
    {
    TBuf<150> buf;
    buf.Format(_L("DoTestL part: %d"), aTestNr);
    iLog->Log(buf);
    iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
    CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();

    // Specified in header file EPos_CPosLmCategoryCriteria.h says that
    // SetCategoryItemId(KPosLmNullItemId) should return uncategorized landmarks and that
    // SetGlobalCategory(KPosLmNullGlobalCategory) should return uncategorized landmarks and that
    // SetCategoryNameL(KNullDesC) should return uncategorized landmarks
    if (aTestNr == 0)
        {
        }
    else if (aTestNr == 1)
        {
        catSearchCriteria->SetCategoryItemId(KPosLmNullItemId);
        }
    else if (aTestNr == 2)
        {
        catSearchCriteria->SetGlobalCategory(KPosLmNullGlobalCategory);
        }
    else if (aTestNr == 3)
        {
        catSearchCriteria->SetCategoryNameL(KNullDesC);
        }

    iOperation = iLandmarkSearch->StartLandmarkSearchL(*catSearchCriteria);

    if (aSync)
        {
        RunAsyncOperationLD(iOperation);
        }
    else
        {
        ExecuteAndDeleteLD(iOperation);
        }

    CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
    CleanupStack::PushL(iter);

    TInt nr = iter->NumOfItemsL();
    if (nr != aNrOfHits)
        {
        buf.Format(_L("Wrong number of landmarks returned when searching for uncategorized landmarks, found: %d should found %d"), nr, aNrOfHits);
        
        iLog->Log(buf);
    	User::Leave(-1);

        }

    buf.Format(_L("Found %d nr of landmarks when searching GlobaCategories"), nr);
    iLog->Log(buf);
    TPosLmItemId id = iter->NextL();
    TInt res = 0;
    if (nr != 0)
        {
        while (id != KPosLmNullItemId)
            {
            TInt found = iArray.Find(id);
            if (found == KErrNotFound) 
            	{
            	          
            	iLog->Log(_L("Not found"));
            	}
            else 
                {
                res++;
                CPosLandmark* landmark = iDatabase->ReadLandmarkLC(id);
                CPosLandmark* landmark2 = iDatabase->ReadLandmarkLC(iArray[found]);

                CompareLandmarksL(*landmark, *landmark2);

                CleanupStack::PopAndDestroy(landmark2);
                CleanupStack::PopAndDestroy(landmark);
                }
            id = iter->NextL();
            }

        if (res != nr) 
            {
            
            iLog->Log(_L("The correct landmark was never found"));
    		User::Leave(-1);

            }
        }

    CleanupStack::PopAndDestroy(iter);
    CleanupStack::PopAndDestroy(catSearchCriteria);
    delete iLandmarkSearch;
    iLandmarkSearch = NULL;
	}

// ---------------------------------------------------------
// CPosTp36::DoSearchForCategoryL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp36::DoSearchForCategoryL(TBool aSync)
    {
    iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
    CPosLmCategoryCriteria* catSearchCriteria = CPosLmCategoryCriteria::NewLC();

    // This method should leave
    iOperation = iLandmarkSearch->StartCategorySearchL(*catSearchCriteria, CPosLmCategoryManager::ECategorySortOrderNone);

    if (aSync)
        {
        RunAsyncOperationLD(iOperation);
        }
    else
        {
        ExecuteAndDeleteLD(iOperation);
        }

    CleanupStack::PopAndDestroy(catSearchCriteria);

    delete iLandmarkSearch;
    iLandmarkSearch = NULL;
	}

// ---------------------------------------------------------
// CPosTp36::RemoveCategoriesFromLandmarksL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
void CPosTp36::RemoveCategoriesFromLandmarksL(TInt aNrOfLandmarks)
    {
    // Use this method to remove the category from a specified number of landmarks   
    iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
    
    CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();

    textCriteria->SetTextL(_L("*"));
    TUint attr = CPosLandmark::ELandmarkName | CPosLandmark::EDescription;
    textCriteria->SetAttributesToSearch(attr);

    iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria, EFalse); 
    ExecuteAndDeleteLD(iOperation);

    CPosLmItemIterator* iter = iLandmarkSearch->MatchIteratorL();
    CleanupStack::PushL(iter);
    
    TPosLmItemId id = iter->NextL();
    TInt counter=0;
    
    // Remove the category from aNrOfLandmarks nr of landmarks
    while ((id != KPosLmNullItemId) && (counter <aNrOfLandmarks))
        {
        CPosLandmark* landmark = iDatabase->ReadLandmarkLC(id);

        RArray<TPosLmItemId> categories;
        CleanupClosePushL(categories);
        landmark->GetCategoriesL(categories);
        TPtrC landmarkName;
        landmark->GetLandmarkName(landmarkName);
        TBuf<50> buf;

        TInt size = categories.Count();
        if (size != 0)
            {
            buf.Format(_L("Removing from landmark: "));
            buf.Append(landmarkName);
            iLog->Log(buf);
            iArray.Append(id);

            for (TInt j=0;j<size;j++)
                {
                // Remove category from landmark
                landmark->RemoveCategory(categories[j]);
                }
            iDatabase->UpdateLandmarkL(*landmark);
            counter++;
            }
        CleanupStack::PopAndDestroy(&categories);
        CleanupStack::PopAndDestroy(landmark);
        id = iter->NextL();
        if (id == KPosLmNullItemId) iLog->Log(_L("KPosLmNullItemId"));
        }
    iter->Reset();

    CleanupStack::PopAndDestroy(iter);
    CleanupStack::PopAndDestroy(textCriteria);

    delete iLandmarkSearch;
    iLandmarkSearch = NULL;
    }

// ---------------------------------------------------------
// CPosTp36::GetNrOfLandmarksL
//
// (other items were commented in a header).
// ---------------------------------------------------------
//
TInt CPosTp36::GetNrOfLandmarksL()
    {
    CPosLmTextCriteria* textCriteria = CPosLmTextCriteria::NewLC();

    textCriteria->SetTextL(_L("*"));
    TUint attr = CPosLandmark::ELandmarkName | CPosLandmark::EDescription;
    textCriteria->SetAttributesToSearch(attr);

    iLandmarkSearch = CPosLandmarkSearch::NewL(*iDatabase);
    iOperation = iLandmarkSearch->StartLandmarkSearchL(*textCriteria, EFalse); 
    ExecuteAndDeleteLD(iOperation);

    TInt nrOfMatches = iLandmarkSearch->NumOfMatches();

    CleanupStack::PopAndDestroy(textCriteria);
    delete iLandmarkSearch;
    iLandmarkSearch = NULL;
    return nrOfMatches;
    }

//  End of File