landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp116.cpp
branchRCL_3
changeset 44 2b4ea9893b66
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/landmarks/locationlandmarks/tsrc/LandmarkTestModule/src/FT_CPosTp116.cpp	Tue Aug 31 15:37:04 2010 +0300
@@ -0,0 +1,546 @@
+/*
+* 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_CPosTp116.h"
+#include <EPos_CPosLandmarkDatabase.h> 
+#include <d32dbms.h>
+#include <StifLogger.h>
+//  CONSTANTS
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPosTp116::CloseTest
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp116::CloseTest()
+    {
+    iLog->Log(_L("CloseTest"));
+    delete iActiveLmEvent;
+    iActiveLmEvent = NULL;
+    }
+
+// ---------------------------------------------------------
+// CPosTp116::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp116::StartL()
+    {
+    // First remove all landmark databases
+    RemoveAllLmDatabasesL();
+    	
+    // Start test
+    LandmarkEventTestL();
+   
+    // Remove all landmark databases
+   RemoveAllLmDatabasesL();
+	}
+
+// ---------------------------------------------------------
+// CPosTp28::LandmarkEventTestL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CPosTp116::LandmarkEventTestL()
+    {
+    iLog->Log(_L("LandmarkEventTestL"));
+
+  //  _LIT(KDatabase, "file://c:eposlm.ldb");
+    _LIT(KDatabase, "file://c:Tp116Test.ldb");
+    _LIT(KDatabase1, "file://c:Tp116LmDb_1.ldb");
+
+#ifdef __WINS__
+    // For WINS use C drive
+    _LIT(KDatabase1_OnMedia, "file://c:Tp116LmDb_1_OnMedia.ldb");
+    _LIT(KDatabase2_OnMedia, "file://c:Tp116LmDb_2_OnMedia.ldb");
+#else
+    //Media card must therefore be inserted
+    _LIT(KDatabase1_OnMedia, "file://F:Tp116LmDb_1_OnMedia.ldb");
+    _LIT(KDatabase2_OnMedia, "file://F:Tp116LmDb_2_OnMedia.ldb");
+#endif
+    
+    _LIT(KDatabase2, "file://c:Tp116LmDb_2.ldb");
+    _LIT(KDatabase3, "file://c:Tp116LmDb_3.ldb");
+    _LIT(KDatabase4, "file://c:Tp116LmDb_4.ldb");
+    
+    _LIT(KDatabase5, "file://c:Tp116DummyLmDb_5.ldb");
+    _LIT(KDatabase6, "file://c:Tp116DummyLmDb_6.ldb");
+    _LIT(KDatabase7, "file://c:Tp116DummyLmDb_7.ldb");
+	_LIT(KDatabase8, "file://c:Tp116DummyLmDb_8.ldb");
+	_LIT(KDatabase9, "file://c:Tp116DummyLmDb_9.ldb");
+	_LIT(KDatabase10, "file://c:Tp116DummyLmDb_10.ldb");
+	_LIT(KDatabase11, "file://c:Tp116DummyLmDb_11.ldb");
+	_LIT(KDatabase12, "file://c:Tp116DummyLmDb_12.ldb");
+	_LIT(KDatabase13, "file://c:Tp116LmDb_13.ldb");
+	_LIT(KDatabase14, "file://c:Tp116LmDb_14.ldb");
+	
+	_LIT(KRemoteDb1, "test://RemoteDb1.ldb");
+    _LIT(KRemoteDbName1, "RemoteDb1New");
+    _LIT(KNonExistingDb, "ANonExistingDb.ldb");
+
+    TInt err = KErrNone;
+    iLog->Log(_L("Warning: this test case requires E: drive"));
+    
+    iActiveLmEvent = CTP116ActiveLmEvent::NewL(iLog);
+
+    CPosLmDatabaseManager* manager = CPosLmDatabaseManager::NewL();
+    CleanupStack::PushL(manager);
+    
+    HPosLmDatabaseInfo* dbInfo = HPosLmDatabaseInfo::NewLC(KDatabase);
+    manager->CreateDatabaseL(*dbInfo);
+    CleanupStack::PopAndDestroy(dbInfo);
+    
+    // This db must exist, set here so that when setting default db next it is different from before
+    // otherwise no event
+    manager->SetDefaultDatabaseUriL(KDatabase);
+
+    // 1) iActiveLmEvent will listen for multiple database events
+    iActiveLmEvent->Start();
+    
+    iLog->Log(_L("2) EDatabaseCreated "));
+    // 2) Create a landmark database, db1 on the c: drive
+    HPosLmDatabaseInfo* dbInfo1 = HPosLmDatabaseInfo::NewLC(KDatabase1);
+    manager->CreateDatabaseL(*dbInfo1);
+    CleanupStack::PopAndDestroy(dbInfo1);
+    
+    //iActiveLmEvent->iExpectedEvent = CPosLmDatabaseManager::EDatabaseCreated;
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+    
+    iActiveLmEvent->SetExpectedDatabase(KDatabase1);
+    CActiveScheduler::Start();
+      
+   	iLog->Log(_L("3) ENewDefaultDbLocation "));
+    // 3) Set the defaultdb to point at the newly created db
+    manager->SetDefaultDatabaseUriL(KDatabase1);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbNewDefaultDbLocation;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase1);
+    CActiveScheduler::Start();
+
+
+    iLog->Log(_L("5) EDatabaseCreated "));
+    // 5) Copy db1 to media drive
+    manager->CopyDatabaseL(KDatabase1, KDatabase1_OnMedia);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase1_OnMedia);
+    CActiveScheduler::Start();
+
+    iLog->Log(_L("6) EDatabaseDeleted "));
+    // 6) Delete copied db from media card
+    manager->DeleteDatabaseL(KDatabase1_OnMedia);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase1_OnMedia);
+    CActiveScheduler::Start();
+
+    iLog->Log(_L("7) EDatabaseCreated - EDatabaseDeleted"));
+   // 7) Move db1 to media drive as db1_2-> First copy it and then delete (in same operation phase)
+    manager->CopyDatabaseL(KDatabase1, KDatabase2_OnMedia);
+    manager->DeleteDatabaseL(KDatabase1);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase2_OnMedia);
+    CActiveScheduler::Start();
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase1);
+    CActiveScheduler::Start();
+
+    iLog->Log(_L("8) EDatabaseCreated"));
+    //8) Create a db, db2, on media card
+    
+    HPosLmDatabaseInfo* dbInfo2 = HPosLmDatabaseInfo::NewLC(KDatabase2);
+    manager->CreateDatabaseL(*dbInfo2);
+    CleanupStack::PopAndDestroy(dbInfo2);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase2);
+    CActiveScheduler::Start();
+
+    iLog->Log(_L("9) ENewDefaultDbLocation"));
+    // 9) Set the defaultdb to point at the newly created db
+    manager->SetDefaultDatabaseUriL(KDatabase2);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbNewDefaultDbLocation;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase2);
+    CActiveScheduler::Start();
+    
+    iLog->Log(_L("9b) EPosLmDbSettingsModified"));
+    // 9b) Set the defaultdb to point at the newly created db
+    HPosLmDatabaseInfo* dbInfoChange = HPosLmDatabaseInfo::NewLC(KDatabase2);
+    TPosLmDatabaseSettings settings = dbInfo2->Settings();
+    _LIT(KNewDbName, "TP116 Disp Name");
+    TPosLmDatabaseName bufName(KNewDbName);
+    settings.SetDatabaseName(bufName);
+    manager->ModifyDatabaseSettingsL(KDatabase2, settings);
+    CleanupStack::PopAndDestroy(dbInfoChange);
+    
+    iActiveLmEvent->iExpectedEvent = EPosLmDbSettingsModified;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase2);
+    CActiveScheduler::Start();
+
+    iLog->Log(_L("10) EDatabaseDeleted"));
+    // 10) Delete db2 from media card
+    manager->DeleteDatabaseL(KDatabase2);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase2);
+    CActiveScheduler::Start();
+
+    iLog->Log(_L("11) EDatabaseCreated"));
+    // 11) Copy db1_2 to C:\ as db1_3
+    manager->CopyDatabaseL(KDatabase2_OnMedia, KDatabase3);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase3);
+    CActiveScheduler::Start();
+
+    iLog->Log(_L("12) EDatabaseDeleted"));
+    // 12) Move db1_2 from media to C:\ drive as db1_4 -> First 
+    // copy it and then delete (in same operation phase)
+    manager->CopyDatabaseL(KDatabase2_OnMedia, KDatabase4);
+    manager->DeleteDatabaseL(KDatabase2_OnMedia);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase4);
+    CActiveScheduler::Start();
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase2_OnMedia);
+    CActiveScheduler::Start();
+
+    iLog->Log(_L("13) ENewDefaultDbLocation"));
+    // 13) Set the defaultdb to point at db1_4
+    manager->SetDefaultDatabaseUriL(KDatabase4);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbNewDefaultDbLocation;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase4);
+    CActiveScheduler::Start();
+
+    iLog->Log(_L("14) EDatabaseDeleted"));
+    // 14) Delete db1_4
+    manager->DeleteDatabaseL(KDatabase4);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase4);
+    CActiveScheduler::Start();
+    
+	iLog->Log(_L("15) --------- "));
+	// Try to create a queue of events that is bigger than the internal queue buffer
+	// should causes unknown event to happen and no databaseUri
+    HPosLmDatabaseInfo* dbInfo13 = HPosLmDatabaseInfo::NewLC(KDatabase13);
+    manager->CreateDatabaseL(*dbInfo13);
+    CleanupStack::PopAndDestroy(dbInfo13);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase13);
+    iActiveLmEvent->iQueueTest = ETrue;
+    CActiveScheduler::Start();
+
+	HPosLmDatabaseInfo* dbInfo4 = HPosLmDatabaseInfo::NewLC(KDatabase4);
+	HPosLmDatabaseInfo* dbInfo5 = HPosLmDatabaseInfo::NewLC(KDatabase5);
+	HPosLmDatabaseInfo* dbInfo6 = HPosLmDatabaseInfo::NewLC(KDatabase6);
+	HPosLmDatabaseInfo* dbInfo7 = HPosLmDatabaseInfo::NewLC(KDatabase7);
+	HPosLmDatabaseInfo* dbInfo8 = HPosLmDatabaseInfo::NewLC(KDatabase8);
+	HPosLmDatabaseInfo* dbInfo9 = HPosLmDatabaseInfo::NewLC(KDatabase9);
+	
+	manager->CreateDatabaseL(*dbInfo4);
+	manager->CreateDatabaseL(*dbInfo5);
+	manager->DeleteDatabaseL(KDatabase4);
+	manager->CopyDatabaseL(KDatabase5, KDatabase10);
+	manager->CreateDatabaseL(*dbInfo6);
+	manager->DeleteDatabaseL(KDatabase5);
+	manager->CreateDatabaseL(*dbInfo7);
+	manager->DeleteDatabaseL(KDatabase6);
+	manager->CopyDatabaseL(KDatabase10, KDatabase11);
+	manager->CreateDatabaseL(*dbInfo8);
+	manager->DeleteDatabaseL(KDatabase7);
+	manager->CreateDatabaseL(*dbInfo9);
+	manager->CopyDatabaseL(KDatabase10, KDatabase12);
+	manager->DeleteDatabaseL(KDatabase9);
+	manager->DeleteDatabaseL(KDatabase8);
+	
+	CleanupStack::PopAndDestroy(dbInfo9);
+	CleanupStack::PopAndDestroy(dbInfo8);
+	CleanupStack::PopAndDestroy(dbInfo7);
+	CleanupStack::PopAndDestroy(dbInfo6);
+	CleanupStack::PopAndDestroy(dbInfo5);
+	CleanupStack::PopAndDestroy(dbInfo4);
+		
+    // Check for unknown
+	iActiveLmEvent->iExpectedEvent = EPosLmDbUnknownEvent;
+    iActiveLmEvent->SetExpectedDatabase(KNullDesC);
+    iActiveLmEvent->Start();
+    CActiveScheduler::Start();
+	
+	iActiveLmEvent->iQueueTest = EFalse;
+	
+	TInt errorsFound = iActiveLmEvent->GetErrors();
+    
+    iActiveLmEvent->DoCancel();
+    
+    iActiveLmEvent->Start();
+    
+	iLog->Log(_L("16) EDatabaseCreated "));
+    // 16) Check correct event after unknown event
+    // Note: This does not work, new events are added to the queue after unknown event, so instead we 
+    // cancel the event handling
+    HPosLmDatabaseInfo* dbInfo14 = HPosLmDatabaseInfo::NewLC(KDatabase14);
+    manager->CreateDatabaseL(*dbInfo14);
+    CleanupStack::PopAndDestroy(dbInfo14);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+    iActiveLmEvent->SetExpectedDatabase(KDatabase14);
+    CActiveScheduler::Start();
+    
+    errorsFound = iActiveLmEvent->GetErrors();
+    
+    iActiveLmEvent->DoCancel();
+    delete iActiveLmEvent;
+    iActiveLmEvent = NULL;
+    iActiveLmEvent = CTP116ActiveLmEvent::NewL(iLog);
+    
+    // Start listening
+    iActiveLmEvent->Start();
+        
+	iLog->Log(_L("17) --------- "));
+    // 17) Test that event handling is working for "remote" provider (use the test provider)
+    //  as well
+    HPosLmDatabaseInfo* db1 = HPosLmDatabaseInfo::NewLC(KRemoteDb1);
+	manager->CreateDatabaseL(*db1);
+    // Register remote db
+    manager->RegisterDatabaseL(*db1);
+    
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseRegistered;
+    iActiveLmEvent->SetExpectedDatabase(KRemoteDb1);
+    CActiveScheduler::Start();
+    
+    iLog->Log(_L("18) --------- "));
+    // 18) Test that event handling is working for "remote" provider (use the test provider)
+    //  as well
+    // Modify Settings
+    TPosLmDatabaseSettings remoteSettings = db1->Settings();
+    TPosLmDatabaseName remoteName(KRemoteDbName1);
+    remoteSettings.SetDatabaseName(remoteName);
+    manager->ModifyDatabaseSettingsL(KRemoteDb1, remoteSettings);
+    
+    iActiveLmEvent->iExpectedEvent = EPosLmDbSettingsModified;
+    iActiveLmEvent->SetExpectedDatabase(KRemoteDb1);
+    CActiveScheduler::Start();
+    CleanupStack::PopAndDestroy(db1);
+    
+    iLog->Log(_L("19) --------- "));
+    // 19) Test that event handling is working for "remote" provider (use the test provider)
+    //  as well
+    // Unregister remote db
+    manager->UnregisterDatabaseL(KRemoteDb1);
+    iActiveLmEvent->iExpectedEvent = EPosLmDbDatabaseUnregistered;
+    iActiveLmEvent->SetExpectedDatabase(KRemoteDb1);
+    CActiveScheduler::Start();
+       
+	iLog->Log(_L("20) --------- "));
+    // 20) Set the defaultdb to point at a non-existing db
+    TRAP(err, manager->SetDefaultDatabaseUriL(KNonExistingDb));
+    if (err != KErrNotFound) 
+    {
+    	iLog->Log(_L("SetDefaultDatabaseL(KNonExistingDb) should leave with KErrNotFound"));
+    	User::Leave(err);
+    }
+    iLog->Log(_L("20 Done"));
+    
+    CleanupStack::PopAndDestroy(manager);
+        
+	errorsFound += iActiveLmEvent->GetErrors();
+	
+	delete iActiveLmEvent;
+    iActiveLmEvent = NULL;
+	
+	if (errorsFound != KErrNone) 
+		{
+		iLog->Log(_L("Errors were found in TP116"));
+    	User::Leave(-1);
+		}
+
+    }
+
+// -----------------------------------------------------------------------------
+// CTP116ActiveLmEvent::NewL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+CTP116ActiveLmEvent* CTP116ActiveLmEvent::NewL(CStifLogger* aLog)
+    {
+    CTP116ActiveLmEvent* self = new(ELeave) CTP116ActiveLmEvent(aLog);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CTP116ActiveLmEvent::ConstructL
+//
+//(other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CTP116ActiveLmEvent::ConstructL()
+    {
+    iManager = CPosLmDatabaseManager::NewL();
+    }
+
+// -----------------------------------------------------------------------------
+// CTP116ActiveLmEvent::CTP116ActiveLmEvent
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+
+CTP116ActiveLmEvent::CTP116ActiveLmEvent(CStifLogger* aLog) : 
+    CActive(EPriorityNormal),
+    iLog(aLog)
+    {   
+    CActiveScheduler::Add(this);
+    iGlobalErr=KErrNone;
+    iQueueTest = EFalse;
+    }
+
+// Destructor
+CTP116ActiveLmEvent::~CTP116ActiveLmEvent()
+    {
+    Cancel();
+    delete iManager;
+    iManager = NULL;
+    }
+
+// ---------------------------------------------------------
+// CTP116ActiveLmEvent::SetExpectedDatabase
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::SetExpectedDatabase(const TDesC& aDatabaseUri)
+    {
+    iExpectedDatabase.Zero();
+    
+    iExpectedDatabase.Append(aDatabaseUri);
+    }
+
+// ---------------------------------------------------------
+// CTP116ActiveLmEvent::StartL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::Start()                          
+    {
+    // Get ready for event
+    iManager->NotifyDatabaseEvent(iEvent, iStatus);
+    SetActive();
+    }
+
+// ---------------------------------------------------------
+// CTP116ActiveLmEvent::RunL
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::RunL()
+    {
+     iLog->Log(_L("CTP116ActiveLmEvent::RunL"));
+
+    TPosLmDatabaseEvent event = iEvent;
+    VerifyEvent(event);
+    if (!iQueueTest)
+    	{
+    	// Get ready for next event
+    	iManager->NotifyDatabaseEvent(iEvent, iStatus); 
+    	SetActive();
+    	}
+    }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::DoCancel
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::DoCancel()
+    {
+    iLog->Log(_L("CTP116ActiveLmEvent::DoCancel"));
+    iManager->CancelNotifyDatabaseEvent();
+    }
+
+// ---------------------------------------------------------
+// CActiveLmOperation::GetErrors
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+TInt CTP116ActiveLmEvent::GetErrors()
+    {
+	return iGlobalErr;
+    }
+    
+// ---------------------------------------------------------
+// CTP116ActiveLmEvent::VerifyEvent
+//
+// (other items were commented in a header).
+// ---------------------------------------------------------
+//
+void CTP116ActiveLmEvent::VerifyEvent(TPosLmDatabaseEvent event)
+    {
+    iLog->Log(_L("CTP116ActiveLmEvent::VerifyEvent"));
+    TBuf<150> buffe;
+    
+    buffe.Format(_L("VerifyEvent Event: %d "), event.iEventType);
+	iLog->Log(buffe);
+	    
+    // Verify event here
+    if (event.iEventType != iExpectedEvent) 
+        {
+        buffe.Zero();
+        buffe.Format(_L("ERROR: Wrong event: exp %d got %d"),iExpectedEvent, event.iEventType);
+        iLog->Log(buffe);
+        iGlobalErr++;
+        }
+    	
+	if (event.iEventType != EPosLmDbUnknownEvent)	
+		{
+		
+	    HBufC16* dbUri = iManager->DatabaseUriFromLastEventLC();
+	    buffe.Zero();
+	    buffe.Format(_L("Event: %d URI %S"), event.iEventType, dbUri);
+	    iLog->Log(buffe);
+    
+		if (iExpectedDatabase.CompareC(*dbUri) != 0)
+			{
+			iLog->Log(_L("ERROR: Wrong db name"));
+			buffe.Zero();
+			buffe.Append(_L("Should be "));
+			buffe.Append(iExpectedDatabase);
+			iLog->Log(buffe);
+	        iGlobalErr++;
+			}
+	    CleanupStack::PopAndDestroy(dbUri);			
+		}
+	else
+		{
+		buffe.Format(_L("EUnknownEvent Event: %d "), event.iEventType);
+	    iLog->Log(buffe);
+		}
+        
+	CActiveScheduler::Stop();
+   
+	iLog->Log(_L("VerifyEvent Done"));
+    }
+
+//  End of File