--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTP28.cpp Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,620 @@
+/*
+* 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_CPosTp28.h"
+#include "FT_LandmarkConstants.h"
+
+// CONSTANTS
+const TInt KMaxQueueSize = 5;
+_LIT(KTp28TestDb, "Tp28Test.ldb");
+_LIT(KTp28LmFullDefaultDbPath, "c:\\private\\100012a5\\DBS_101FE978_TP28TEST.LDB");
+
+// ---------------------------------------------------------
+// CPosTp28::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp28::CloseTest()
+ {
+ delete iDatabase;
+ iDatabase = NULL;
+ delete iCategoryManager;
+ iCategoryManager=NULL;
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp28::StartL()
+ {
+ // copy the test db to the private database path
+
+ _LIT(KTestPath, "c:\\system\\test\\testdata\\");
+
+ CFileMan* fileMan = CFileMan::NewL(iFileSession);
+ CleanupStack::PushL(fileMan);
+
+ TBuf<150> srcPath;
+
+ srcPath.Append(KTestPath);
+ srcPath.Append(KTp28TestDb);
+
+ TInt err = fileMan->Copy(srcPath, KTp28LmFullDefaultDbPath,
+ CFileMan::EOverWrite);
+ if (err != KErrNone)
+ iLog->Log(_L("Error when copying file"));
+
+ CleanupStack::PopAndDestroy(fileMan);
+
+ CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+ CleanupStack::PushL(manager);
+
+ // This db must exist
+ manager->SetDefaultDatabaseUriL(KTp28TestDb);
+ CleanupStack::PopAndDestroy(manager);
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KTp28TestDb);
+ if (iDatabase->IsInitializingNeeded())
+ {
+ TRAPD( err, ExecuteAndDeleteLD( iDatabase->InitializeL() ) );
+ AssertTrueSecL(err == KErrNone, _L("Init db failed"));
+ }
+
+
+
+ iActiveLmEvent = CActiveLmEvent::NewL(iLog);
+
+ LandmarkEventTest();
+
+ delete iActiveLmEvent;
+ iActiveLmEvent = NULL;
+
+ delete iDatabase;
+ iDatabase = NULL;
+
+ iDatabase = CPosLandmarkDatabase::OpenL(KTp28TestDb);
+ if (iDatabase->IsInitializingNeeded())
+ {
+ ExecuteAndDeleteLD(iDatabase->InitializeL());
+ }
+
+ iCategoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+
+ iActiveLmEvent = CActiveLmEvent::NewL(iLog);
+
+ LandmarkEventQueueTest();
+
+ if (iActiveLmEvent->iGlobalErr != KErrNone)
+ {
+
+ iLog->Log(_L("Errors found in TP28"));
+ User::Leave(-1);
+
+ }
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::LandmarkEventTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp28::LandmarkEventTest()
+ {
+
+ iActiveLmEvent->Start();
+
+ /////////////////////////////////////////////
+ // Add three landmarks #1 #2 #3
+ /////////////////////////////////////////////
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("Zu Hause"));
+ CPosLandmark* landmark2 = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("Zu Hause jetzt"));
+ CPosLandmark* landmark3 = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("Nicht Zu Hause"));
+
+ iActiveLmEvent->iLandmarkId = iDatabase->AddLandmarkL(*landmark);
+ iActiveLmEvent->iLandmarkId2 = iDatabase->AddLandmarkL(*landmark2);
+ iActiveLmEvent->iLandmarkId3 = iDatabase->AddLandmarkL(*landmark3);
+
+ CleanupStack::PopAndDestroy(landmark3);
+ CleanupStack::PopAndDestroy(landmark2);
+
+ /////////////////////////////////////////////
+ // Update landmark #4
+ /////////////////////////////////////////////
+ landmark->SetLandmarkNameL(_L("Nicht zu Hause"));
+ iDatabase->UpdateLandmarkL(*landmark);
+
+ /////////////////////////////////////////////
+ // Remove landmark #5
+ /////////////////////////////////////////////
+ iDatabase->RemoveLandmarkL(iActiveLmEvent->iLandmarkId);
+
+ CActiveScheduler::Start();
+
+ /////////////////////////////////////////////
+ // Add removed landmark again #6
+ /////////////////////////////////////////////
+ iActiveLmEvent->iLandmarkId4 = iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Remove a set of landmarks sync #7
+ /////////////////////////////////////////////
+ RArray<TPosLmItemId> array;
+ CleanupClosePushL(array);
+ User::LeaveIfError(array.Append(iActiveLmEvent->iLandmarkId));
+ User::LeaveIfError(array.Append(iActiveLmEvent->iLandmarkId2));
+ User::LeaveIfError(array.Append(iActiveLmEvent->iLandmarkId3));
+ ExecuteAndDeleteLD(iDatabase->RemoveLandmarksL(array));
+
+ //array.Reset();
+
+ CleanupStack::PopAndDestroy(&array);
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Add new category #8
+ /////////////////////////////////////////////
+ CPosLmCategoryManager* categoryManager = CPosLmCategoryManager::NewL(*iDatabase);
+ CleanupStack::PushL(categoryManager);
+
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(_L("My Category"));
+
+ iActiveLmEvent->iCategoryId = categoryManager->AddCategoryL(*category);
+
+ AssertTrueSecL(iActiveLmEvent->iCategoryId == category->CategoryId(), _L("CATEGORY ERROR"));
+
+ /////////////////////////////////////////////
+ // Update category #9
+ /////////////////////////////////////////////
+ categoryManager->UpdateCategoryL(*category);
+
+ /////////////////////////////////////////////
+ // Delete a non-existing category #10
+ /////////////////////////////////////////////
+ iActiveLmEvent->iNonExistingCategoryId = 998;
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(iActiveLmEvent->iNonExistingCategoryId));
+
+ /////////////////////////////////////////////
+ // Delete a category that exists in several landmarks #11
+ /////////////////////////////////////////////
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryL(iActiveLmEvent->iDeleteCategoryId));
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Delete several categories
+ /////////////////////////////////////////////
+ CPosLmItemIterator* iter = categoryManager->CategoryIteratorL();
+ CleanupStack::PushL(iter);
+ const TInt startIndex=1;
+ const TInt numOfItems=5;
+ RArray<TPosLmItemId> ids;
+ CleanupClosePushL(ids);
+ iter->GetItemIdsL(ids, startIndex, numOfItems);
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoriesL(ids));
+
+ CleanupStack::PopAndDestroy(2, iter); //ids
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Add new category to several landmarks
+ /////////////////////////////////////////////
+ CPosLandmarkCategory* newCategory = CPosLandmarkCategory::NewLC();
+ newCategory->SetCategoryNameL(_L("My New Category"));
+ iActiveLmEvent->iCategoryId2= categoryManager->AddCategoryL(*newCategory);
+ CleanupStack::PopAndDestroy(newCategory);
+
+ iter = iDatabase->LandmarkIteratorL();
+ CleanupStack::PushL(iter);
+ const TInt addStartIndex=5;
+ const TInt addNumOfItems=7;
+ CleanupClosePushL(ids);
+ iter->GetItemIdsL(ids, addStartIndex, addNumOfItems);
+
+ ExecuteAndDeleteLD(categoryManager->AddCategoryToLandmarksL(iActiveLmEvent->iCategoryId2, ids));
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Delete a category in several landmarks
+ /////////////////////////////////////////////
+ ExecuteAndDeleteLD(categoryManager->RemoveCategoryFromLandmarksL(iActiveLmEvent->iCategoryId2, ids));
+
+ CleanupStack::PopAndDestroy(4, categoryManager); // iter, ids, category
+
+ CActiveScheduler::Start();
+ /////////////////////////////////////////////
+ // Remove all landmarks
+ /////////////////////////////////////////////
+ ExecuteAndDeleteLD(iDatabase->RemoveAllLandmarksL());
+
+ CActiveScheduler::Start(); // For notifier
+
+ }
+
+// ---------------------------------------------------------
+// CPosTp28::LandmarkEventQueueTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp28::LandmarkEventQueueTest()
+ {
+
+ TInt i=0;
+ iActiveLmEvent->iQueueTest = ETrue;
+ iActiveLmEvent->Start();
+
+ /////////////////////////////////////////////
+ // Add one landmark #1
+ //////////////////////////////////////////////
+
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(_L("TP28 event queue"));
+ iActiveLmEvent->iLandmarkId = iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+ CActiveScheduler::Start();
+
+ /////////////////////////////////////////////
+ // Add 6 landmarks #2
+ /////////////////////////////////////////////
+ _LIT(KLmName, "LmTP28");
+ for (i=0; i <= KMaxQueueSize; i++)
+ {
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(KLmName);
+ iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+
+ iActiveLmEvent->Start();
+ CActiveScheduler::Start();
+
+ /////////////////////////////////////////////
+ // Updates landmark 6 times #3
+ /////////////////////////////////////////////
+ for (i=0; i <= KMaxQueueSize; i++)
+ {
+ CPosLandmark* landmark = iDatabase->ReadLandmarkLC(iActiveLmEvent->iLandmarkId);
+ iDatabase->UpdateLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+
+ iActiveLmEvent->Start();
+ CActiveScheduler::Start();
+
+ /////////////////////////////////////////////
+ // Add 3 landmarks and 3 categories #4, #5 #6 #7
+ /////////////////////////////////////////////
+
+ for (i=0; i < 3; i++)
+ {
+ CPosLandmark* landmark = CPosLandmark::NewLC();
+ landmark->SetLandmarkNameL(KLmName);
+ iDatabase->AddLandmarkL(*landmark);
+ CleanupStack::PopAndDestroy(landmark);
+ }
+
+ _LIT(KCategoryName, "TP28 Category %d");
+ for (i =0; i < 3; i++)
+ {
+ TBuf<100> name;
+ name.Format(KCategoryName, i);
+ CPosLandmarkCategory* category = CPosLandmarkCategory::NewLC();
+ category->SetCategoryNameL(name);
+ if (i == 0)
+ {
+ iActiveLmEvent->iCategoryId = iCategoryManager->AddCategoryL(*category);
+ }
+ else
+ {
+ iCategoryManager->AddCategoryL(*category);
+ }
+ CleanupStack::PopAndDestroy(category);
+ }
+
+
+ iActiveLmEvent->Start();
+ CActiveScheduler::Start();
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CActiveLmEvent::NewL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CActiveLmEvent* CActiveLmEvent::NewL(CStifLogger* aLog)
+ {
+ CActiveLmEvent* self = new(ELeave) CActiveLmEvent(aLog);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+// -----------------------------------------------------------------------------
+// CActiveLmEvent::ConstructL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CActiveLmEvent::ConstructL()
+ {
+ iDatabase = CPosLandmarkDatabase::OpenL();
+ }
+
+// -----------------------------------------------------------------------------
+// CActiveLmEvent::CActiveLmEvent
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+
+CActiveLmEvent::CActiveLmEvent(CStifLogger* aLog) :
+ CActive(EPriorityNormal),
+ iLog(aLog)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+// Destructor
+CActiveLmEvent::~CActiveLmEvent()
+ {
+ Cancel();
+ delete iDatabase;
+ iDatabase = NULL;
+ }
+
+// ---------------------------------------------------------
+// CActiveLmEvent::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::Start()
+ {
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+
+ SetActive();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmEvent::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::RunL()
+ {
+
+ if (iQueueTest)
+ {
+ VerifyMergedEvent();
+ }
+ else
+ {
+ VerifyEvent();
+ }
+
+ if (!iQueueTest)
+ {
+ iDatabase->NotifyDatabaseEvent(iEvent, iStatus);
+ SetActive();
+ }
+ }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::DoCancel()
+ {
+ iDatabase->CancelNotifyDatabaseEvent();
+ }
+
+// ---------------------------------------------------------
+// CActiveLmEvent::VerifyEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::VerifyEvent()
+ {
+
+ iEventNumber++;
+ switch (iEventNumber)
+ {
+ // Added three landmarks
+ case 1: AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iLandmarkId, iEvent.iLandmarkItemId);
+ break;
+ case 2: AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iLandmarkId2, iEvent.iLandmarkItemId);
+ break;
+ case 3: AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iLandmarkId3, iEvent.iLandmarkItemId);
+ break;
+ // Updated landmark
+ case 4: AssertCorrectEvent(EPosLmEventLandmarkUpdated, iEvent.iEventType, iLandmarkId, iEvent.iLandmarkItemId);
+ break;
+ // Deleted landmark
+ case 5: AssertCorrectEvent(EPosLmEventLandmarkDeleted, iEvent.iEventType, iLandmarkId, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Added removed landmark again
+ case 6: AssertCorrectEvent(EPosLmEventLandmarkCreated, iEvent.iEventType, iLandmarkId4, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Deleted several landmarks
+ case 7: AssertCorrectEvent(EPosLmEventLandmarkUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Added new category
+ case 8: AssertCorrectEvent(EPosLmEventCategoryCreated, iEvent.iEventType, iCategoryId, iEvent.iLandmarkItemId);
+ break;
+ //Updated category
+ case 9: AssertCorrectEvent(EPosLmEventCategoryUpdated, iEvent.iEventType, iCategoryId, iEvent.iLandmarkItemId);
+ break;
+ // Deleted non existing category
+ case 10: AssertCorrectEvent(EPosLmEventCategoryDeleted, iEvent.iEventType, iNonExistingCategoryId, iEvent.iLandmarkItemId);
+ break;
+ // Deleted existing category
+ case 11: AssertCorrectEvent(EPosLmEventCategoryDeleted, iEvent.iEventType, iDeleteCategoryId, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Deleted several categories
+ case 12: AssertCorrectEvent(EPosLmEventCategoryUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Added new category
+ case 13: AssertCorrectEvent(EPosLmEventCategoryCreated, iEvent.iEventType, iCategoryId2, iEvent.iLandmarkItemId);
+ break;
+ // Added created category to several landmarks
+ case 14: AssertCorrectEvent(EPosLmEventLandmarkUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Removed category from several landmarks
+ case 15: AssertCorrectEvent(EPosLmEventLandmarkUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ // Removed all landmarks
+ case 16: AssertCorrectEvent(EPosLmEventLandmarkUnknownChanges, iEvent.iEventType, 0, iEvent.iLandmarkItemId);
+ CActiveScheduler::Stop();
+ break;
+ default:
+ iLog->Log(_L("Unexpected event received"));
+ ++iGlobalErr;
+ break;
+ }
+
+ }
+
+//---------------------------------------------------------
+// CActiveLmEvent::VerifyMergedEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::VerifyMergedEvent()
+ {
+ ++iMergedEventNumber;
+ switch (iMergedEventNumber)
+ {
+ case 1:
+ AssertCorrectEvent(
+ EPosLmEventLandmarkCreated,
+ iEvent.iEventType,
+ iLandmarkId,
+ iEvent.iLandmarkItemId);
+
+ CActiveScheduler::Stop();
+ break;
+ case 2:
+ case 3:
+ AssertCorrectEvent(
+ EPosLmEventLandmarkUnknownChanges,
+ iEvent.iEventType,
+ 0,
+ iEvent.iLandmarkItemId);
+
+ CActiveScheduler::Stop();
+ break;
+ case 4:
+ AssertCorrectEvent(
+ EPosLmEventLandmarkUnknownChanges,
+ iEvent.iEventType,
+ 0,
+ iEvent.iLandmarkItemId);
+ Start();
+ break;
+ case 5:
+ case 6:
+ case 7:
+ AssertCorrectEvent(EPosLmEventCategoryCreated,
+ iEvent.iEventType,
+ iCategoryId++,
+ iEvent.iLandmarkItemId);
+
+ if (iMergedEventNumber == 7)
+ {
+ CActiveScheduler::Stop();
+ }
+ else
+ {
+ Start();
+ }
+ break;
+ default:
+ _LIT(KError,"Unexpected event received, %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, iEvent.iEventType);
+ iLog->Log(error);
+ iGlobalErr++;
+ Start();
+ break;
+ }
+ }
+
+// ---------------------------------------------------------
+// CActiveLmEvent::AssertCorrectEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CActiveLmEvent::AssertCorrectEvent(
+ TPosLmEventType aExpectedEventType,
+ TPosLmEventType aEventType,
+ TPosLmItemId aExpectedLandMarkItemId,
+ TPosLmItemId aLandMarkItemId)
+ {
+ if (aExpectedEventType != aEventType)
+ {
+ _LIT(KError,"Unexpected eventtype. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aExpectedEventType, aEventType);
+ iLog->Log(error);
+ iGlobalErr++;
+ }
+ if (aExpectedLandMarkItemId != aLandMarkItemId)
+ {
+ _LIT(KError,"Unexpected item id. Excpected %d got %d\r\n");
+ TBuf<200> error;
+ error.Format(KError, aExpectedLandMarkItemId, aLandMarkItemId);
+ iLog->Log(error);
+ iGlobalErr++;
+ }
+
+ }
+
+
+// End of file
+