--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/lowlevellibsandfws/pluginfw/Framework/RegistrarTest/RegistrarUnitTests.inl Tue Feb 02 02:01:42 2010 +0200
@@ -0,0 +1,520 @@
+// Copyright (c) 1997-2009 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:
+// The implementation of the unit test classes for the CRegistrar.
+//
+//
+
+#include "RegistrarTransitions.h"
+#include "RegistrarStateAccessor.h"
+
+_LIT(KRegistrarNotificationMsg,"Notification %d recieved from CRegistrar!");
+
+// ______________________________________________________________________________
+//
+_LIT(KRegistrarCreateAndDestroyUnitTest,"CRegistrar_CreateAndDestroy_UnitTest");
+
+CRegistrar_CreateAndDestroy_UnitTest* CRegistrar_CreateAndDestroy_UnitTest::NewL(
+ CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+ {
+ CRegistrar_CreateAndDestroy_UnitTest* self =
+ new(ELeave) CRegistrar_CreateAndDestroy_UnitTest(aDataLogger, aObserver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+inline TInt CRegistrar_CreateAndDestroy_UnitTest::RunError(TInt aError)
+ {
+ // The RunL left so chain to the base first and then cleanup
+ TInt error = CUnitTest::RunError(aError); // Chain to base
+ delete iUTContext;
+ delete iStateAccessor;
+ // delete any validators used
+ delete iCtorValidator;
+ delete iDtorValidator;
+
+ return error;
+ }
+
+inline CRegistrar_CreateAndDestroy_UnitTest::~CRegistrar_CreateAndDestroy_UnitTest()
+ {
+ // Simply delete our test class instance
+ delete iUTContext;
+ delete iStateAccessor;
+
+ delete iRegistryData;
+
+ // delete any validators used
+ delete iCtorValidator;
+ delete iDtorValidator;
+ }
+
+inline CRegistrar_CreateAndDestroy_UnitTest::CRegistrar_CreateAndDestroy_UnitTest(
+ CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+: CUnitTest(KRegistrarCreateAndDestroyUnitTest, aDataLogger, aObserver)
+ {
+ //Do nothing
+ }
+
+// Now the Individual transitions need to be added.
+inline void CRegistrar_CreateAndDestroy_UnitTest::ConstructL()
+ {
+ // Perform the base class initialization
+ UnitTestConstructL();
+
+ // Create the Unit test state accessor
+ iStateAccessor = new(ELeave) TRegistrar_StateAccessor;
+ // Construct the Unit test context.
+ iUTContext = new(ELeave) CRegistrar_UnitTestContext(iDataLogger,
+ *iStateAccessor,
+ *this,
+ *iRegistryData,
+ *this,
+ iFs);
+ // Add the Transitions in the order they are to run
+ // C'tor first, D'tor last...
+ iCtorValidator = new(ELeave) TRegistrar_Ctor_TransitionValidator(*iUTContext);
+ AddTransitionL(new(ELeave)CRegistrar_NewL_Transition(*iUTContext,*iCtorValidator));
+ iDtorValidator = new(ELeave) TRegistrar_Dtor_TransitionValidator(*iUTContext);
+ AddTransitionL(new(ELeave)CRegistrar_Dtor_Transition(*iUTContext,*iDtorValidator));
+ }
+
+void CRegistrar_CreateAndDestroy_UnitTest::PrepareUnitTestL()
+ {
+ iRegistryData = CRegistryData::NewL(iFs);
+ }
+
+void CRegistrar_CreateAndDestroy_UnitTest::Notification(TInt aNotificationCode)
+ {
+ iDataLogger.LogInformationWithParameters(KRegistrarNotificationMsg, aNotificationCode);
+ }
+
+// ______________________________________________________________________________
+//
+_LIT(KRegistrarBeginCompleteUnitTest,"CRegistrar_BeginComplete_UnitTest");
+
+CRegistrar_BeginComplete_UnitTest* CRegistrar_BeginComplete_UnitTest::NewL(CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+ {
+ CRegistrar_BeginComplete_UnitTest* self =
+ new(ELeave) CRegistrar_BeginComplete_UnitTest(aDataLogger,
+ aObserver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+inline TInt CRegistrar_BeginComplete_UnitTest::RunError(TInt aError)
+ {
+ // The RunL left so chain to the base first and then cleanup
+ TInt error = CUnitTest::RunError(aError); // Chain to base
+ delete iUTContext;
+ delete iStateAccessor;
+
+ delete iRegistryData;
+
+ delete iCtorValidator;
+ delete iDefaultValidator;
+ delete iDtorValidator;
+
+ return error;
+ }
+
+inline CRegistrar_BeginComplete_UnitTest::~CRegistrar_BeginComplete_UnitTest()
+ {
+ // Simply delete our test class instance
+ delete iUTContext;
+ delete iStateAccessor;
+
+ delete iRegistryData;
+
+ delete iCtorValidator;
+ delete iDefaultValidator;
+ delete iDtorValidator;
+ }
+
+inline CRegistrar_BeginComplete_UnitTest::CRegistrar_BeginComplete_UnitTest(CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+: CUnitTest(KRegistrarBeginCompleteUnitTest, aDataLogger, aObserver)
+ {
+ //Do nothing
+ }
+
+// Now the Individual transitions need to be added.
+inline void CRegistrar_BeginComplete_UnitTest::ConstructL()
+ {
+ // Perform the base class initialization
+ UnitTestConstructL();
+
+ iRegistryData = CRegistryData::NewL(iFs);
+
+ // Create the Unit test state accessor
+ iStateAccessor = new(ELeave) TRegistrar_StateAccessor;
+ // Construct the Unit test context.
+ iUTContext = new(ELeave) CRegistrar_UnitTestContext(iDataLogger,
+ *iStateAccessor,
+ *this,
+ *iRegistryData,
+ *this,
+ iFs);
+ iUTContext->iDllData = CRegistryData::CDllData::NewLC();
+ CleanupStack::Pop(); //iDllData
+
+ // Create the validators which are used by the transitions
+ iCtorValidator = new(ELeave) TRegistrar_Ctor_TransitionValidator(*iUTContext);
+ iDefaultValidator = new(ELeave) TRegistrar_Default_TransitionValidator(*iUTContext);
+ iDtorValidator = new(ELeave) TRegistrar_Dtor_TransitionValidator(*iUTContext);
+
+ // Add the Transitions in the order they are to run
+ // C'tor, Begin, Complete, D'tor
+ AddTransitionL(new(ELeave)CRegistrar_NewL_Transition(*iUTContext,*iCtorValidator));
+ AddTransitionL(new(ELeave)CRegistrar_DiscoveriesBegin_Transition(*iUTContext,*iDefaultValidator));
+// AddTransitionL(new(ELeave)CRegistrar_ParseL_Transition(*iUTContext,*iDefaultValidator));
+ AddTransitionL(new(ELeave)CRegistrar_DiscoveriesComplete_Transition(*iUTContext,*iDefaultValidator));
+ AddTransitionL(new(ELeave)CRegistrar_Dtor_Transition(*iUTContext,*iDtorValidator));
+ }
+
+void CRegistrar_BeginComplete_UnitTest::Notification(TInt aNotificationCode)
+ {
+ iDataLogger.LogInformationWithParameters(KRegistrarNotificationMsg, aNotificationCode);
+ }
+
+// ______________________________________________________________________________
+//
+_LIT(KRegistrarRegisterDiscoveryUnitTest,"CRegistrar_RegisterDiscovery_UnitTest");
+
+CRegistrar_RegisterDiscovery_UnitTest* CRegistrar_RegisterDiscovery_UnitTest::NewL(CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+ {
+ CRegistrar_RegisterDiscovery_UnitTest* self =
+ new(ELeave) CRegistrar_RegisterDiscovery_UnitTest(aDataLogger,
+ aObserver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+inline TInt CRegistrar_RegisterDiscovery_UnitTest::RunError(TInt aError)
+ {
+ // The RunL left so chain to the base first and then cleanup
+ TInt error = CUnitTest::RunError(aError); // Chain to base
+ delete iUTContext;
+ delete iStateAccessor;
+
+ delete iRegistryData;
+
+ // delete any validators used
+ delete iCtorValidator;
+ delete iRegisterDiscoveryValidator;
+ delete iDtorValidator;
+
+ return error;
+ }
+
+inline CRegistrar_RegisterDiscovery_UnitTest::~CRegistrar_RegisterDiscovery_UnitTest()
+ {
+ // Simply delete our test class instance
+ delete iUTContext;
+ delete iStateAccessor;
+
+ delete iRegistryData;
+
+ // delete any validators used
+ delete iCtorValidator;
+ delete iRegisterDiscoveryValidator;
+ delete iDtorValidator;
+ }
+
+inline CRegistrar_RegisterDiscovery_UnitTest::CRegistrar_RegisterDiscovery_UnitTest(CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+: CUnitTest(KRegistrarRegisterDiscoveryUnitTest, aDataLogger, aObserver)
+ {
+ //Do nothing
+ }
+
+// Now the Individual transitions need to be added.
+inline void CRegistrar_RegisterDiscovery_UnitTest::ConstructL()
+ {
+ // Perform the base class initialization
+ UnitTestConstructL();
+
+ iRegistryData = CRegistryData::NewL(iFs);
+ TDriveUnit drive(EDriveZ);
+ iRegistryData->UndoTemporaryUninstallL(drive);
+
+ // Create the Unit test state accessor
+ iStateAccessor = new(ELeave) TRegistrar_StateAccessor;
+ // Construct the Unit test context.
+ iUTContext = new(ELeave) CRegistrar_UnitTestContext(iDataLogger,
+ *iStateAccessor,
+ *this,
+ *iRegistryData,
+ *this,
+ iFs);
+ iUTContext->iDllData = CRegistryData::CDllData::NewLC();
+ CleanupStack::Pop(); //iDllData
+
+ // Artificially set up the TEntry info on the dll
+ TPtr dllName = iUTContext->iDllEntry.iName.Des();
+ dllName = KExampleDllFileName();
+
+ // Only the third entry (unique dll id) matters in this case
+ TUid uid1, uid2, uid3;
+ uid1.iUid = 0;
+ uid2.iUid = 0;
+ uid3.iUid = 0x10009DB0;
+ iUTContext->iDllEntry.iType = TUidType(uid1, uid2, uid3);
+
+ // Set the modified time to an unrealistic time to ensure it is reloaded
+ iUTContext->iDllEntry.iModified = 5;
+ iUTContext->iUpdate = EFalse;
+ iUTContext->iIndex = KErrNotFound;
+
+ iCtorValidator = new(ELeave) TRegistrar_Ctor_TransitionValidator(*iUTContext);
+ iRegisterDiscoveryValidator = new(ELeave) TRegistrar_RegisterDiscoveryL_TransitionValidator(*iUTContext);
+ iDtorValidator = new(ELeave) TRegistrar_Dtor_TransitionValidator(*iUTContext);
+
+ AddTransitionL(new(ELeave)CRegistrar_NewL_Transition(*iUTContext,*iCtorValidator));
+ AddTransitionL(new(ELeave)CRegistrar_ParseL_Transition(*iUTContext,*iRegisterDiscoveryValidator));
+ AddTransitionL(new(ELeave)CRegistrar_ParseRegistrationDataL_Transition(*iUTContext,*iRegisterDiscoveryValidator));
+ AddTransitionL(new(ELeave)CRegistrar_RegisterDiscoveryL_Transition(*iUTContext,*iRegisterDiscoveryValidator));
+ AddTransitionL(new(ELeave)CRegistrar_Dtor_Transition(*iUTContext,*iDtorValidator));
+ }
+
+void CRegistrar_RegisterDiscovery_UnitTest::Notification(TInt aNotificationCode)
+ {
+ iDataLogger.LogInformationWithParameters(KRegistrarNotificationMsg, aNotificationCode);
+ }
+
+// ______________________________________________________________________________
+//
+_LIT(KRegistrarRegisterTwiceUnitTest,"CRegistrar_RegisterTwice_UnitTest");
+
+CRegistrar_RegisterTwice_UnitTest* CRegistrar_RegisterTwice_UnitTest::NewL(CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+ {
+ CRegistrar_RegisterTwice_UnitTest* self =
+ new(ELeave) CRegistrar_RegisterTwice_UnitTest(aDataLogger,
+ aObserver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+inline TInt CRegistrar_RegisterTwice_UnitTest::RunError(TInt aError)
+ {
+ // The RunL left so chain to the base first and then cleanup
+ TInt error = CUnitTest::RunError(aError); // Chain to base
+ delete iUTContext;
+ delete iStateAccessor;
+
+ delete iRegistryData;
+
+ // delete any validators used
+ delete iCtorValidator;
+ delete iRegisterDiscoveryValidator;
+ delete iDefaultValidator;
+ delete iDtorValidator;
+
+ return error;
+ }
+
+inline CRegistrar_RegisterTwice_UnitTest::~CRegistrar_RegisterTwice_UnitTest()
+ {
+ // Simply delete our test class instance
+ delete iUTContext;
+ delete iStateAccessor;
+
+ delete iRegistryData;
+
+ // delete any validators used
+ delete iCtorValidator;
+ delete iRegisterDiscoveryValidator;
+ delete iDefaultValidator;
+ delete iDtorValidator;
+ }
+
+inline CRegistrar_RegisterTwice_UnitTest::CRegistrar_RegisterTwice_UnitTest(CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+: CUnitTest(KRegistrarRegisterTwiceUnitTest, aDataLogger, aObserver)
+ {
+ //Do nothing
+ }
+
+// Now the Individual transitions need to be added.
+inline void CRegistrar_RegisterTwice_UnitTest::ConstructL()
+ {
+ // Perform the base class initialization
+ UnitTestConstructL();
+
+ iRegistryData = CRegistryData::NewL(iFs);
+ TDriveUnit drive(EDriveZ);
+ iRegistryData->UndoTemporaryUninstallL(drive);
+
+ // Create the Unit test state accessor
+ iStateAccessor = new(ELeave) TRegistrar_StateAccessor;
+ // Construct the Unit test context.
+ iUTContext = new(ELeave) CRegistrar_UnitTestContext(iDataLogger,
+ *iStateAccessor,
+ *this,
+ *iRegistryData,
+ *this,
+ iFs);
+ iUTContext->iDllData = CRegistryData::CDllData::NewLC();
+ CleanupStack::Pop(); //iDllData
+
+ // Artificially set up the TEntry info on the dll
+ TPtr dllName = iUTContext->iDllEntry.iName.Des();
+ dllName = KExampleDllFileName();
+
+ // Only the third entry (unique dll id) matters in this case
+ TUid uid1, uid2, uid3;
+ uid1.iUid = 0;
+ uid2.iUid = 0;
+ uid3.iUid = 0x10009DB1;
+ iUTContext->iDllEntry.iType = TUidType(uid1, uid2, uid3);
+
+ // Set the modified time to an unrealistic time to ensure it is reloaded
+ iUTContext->iDllEntry.iModified = 5;
+ iUTContext->iUpdate = EFalse;
+ iUTContext->iIndex = KErrNotFound;
+
+ iCtorValidator = new(ELeave) TRegistrar_Ctor_TransitionValidator(*iUTContext);
+ iRegisterDiscoveryValidator = new(ELeave) TRegistrar_RegisterDiscoveryL_TransitionValidator(*iUTContext);
+ iDefaultValidator = new(ELeave) TRegistrar_Default_TransitionValidator(*iUTContext);
+ iDtorValidator = new(ELeave) TRegistrar_Dtor_TransitionValidator(*iUTContext);
+
+ AddTransitionL(new(ELeave)CRegistrar_NewL_Transition(*iUTContext,*iCtorValidator));
+ AddTransitionL(new(ELeave)CRegistrar_RegisterDiscoveryL_Transition(*iUTContext,*iRegisterDiscoveryValidator));
+ AddTransitionL(new(ELeave)CRegistrar_DiscoveriesComplete_Transition(*iUTContext,*iDefaultValidator));
+ AddTransitionL(new(ELeave)CRegistrar_RegisterDiscoveryL_Transition(*iUTContext,*iRegisterDiscoveryValidator));
+ AddTransitionL(new(ELeave)CRegistrar_DiscoveriesComplete_Transition(*iUTContext,*iDefaultValidator));
+ AddTransitionL(new(ELeave)CRegistrar_Dtor_Transition(*iUTContext,*iDtorValidator));
+ }
+
+void CRegistrar_RegisterTwice_UnitTest::Notification(TInt aNotificationCode)
+ {
+ iDataLogger.LogInformationWithParameters(KRegistrarNotificationMsg, aNotificationCode);
+ }
+
+// ______________________________________________________________________________
+//
+_LIT(KRegistrarUseWhileDiscoveringUnitTest,"CRegistrar_UseWhileDiscovering_UnitTest");
+
+CRegistrar_UseWhileDiscovering_UnitTest* CRegistrar_UseWhileDiscovering_UnitTest::NewL(CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+ {
+ CRegistrar_UseWhileDiscovering_UnitTest* self =
+ new(ELeave) CRegistrar_UseWhileDiscovering_UnitTest(aDataLogger,
+ aObserver);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+inline TInt CRegistrar_UseWhileDiscovering_UnitTest::RunError(TInt aError)
+ {
+ // The RunL left so chain to the base first and then cleanup
+ TInt error = CUnitTest::RunError(aError); // Chain to base
+ delete iUTContext;
+ delete iStateAccessor;
+
+ delete iRegistryData;
+
+ // delete any validators used
+ delete iCtorValidator;
+ iCtorValidator = NULL;
+ delete iCheckRegValidator;
+ iCheckRegValidator = NULL;
+ delete iDtorValidator;
+ iDtorValidator = NULL;
+
+ return error;
+ }
+
+inline CRegistrar_UseWhileDiscovering_UnitTest::~CRegistrar_UseWhileDiscovering_UnitTest()
+ {
+ // Simply delete our test class instance
+ delete iUTContext;
+ delete iStateAccessor;
+
+ delete iRegistryData;
+
+ // delete any validators used
+ delete iCtorValidator;
+ delete iCheckRegValidator;
+ delete iDtorValidator;
+ }
+
+inline CRegistrar_UseWhileDiscovering_UnitTest::CRegistrar_UseWhileDiscovering_UnitTest(CDataLogger& aDataLogger,
+ MUnitTestObserver& aObserver)
+: CUnitTest(KRegistrarUseWhileDiscoveringUnitTest, aDataLogger, aObserver)
+ {
+ //Do nothing
+ }
+
+// Now the Individual transitions need to be added.
+inline void CRegistrar_UseWhileDiscovering_UnitTest::ConstructL()
+ {
+ // Perform the base class initialization
+ UnitTestConstructL();
+
+ iRegistryData = CRegistryData::NewL(iFs);
+
+ // Create the Unit test state accessor
+ iStateAccessor = new(ELeave) TRegistrar_StateAccessor;
+ // Construct the Unit test context.
+ iUTContext = new(ELeave) CRegistrar_UnitTestContext(iDataLogger,
+ *iStateAccessor,
+ *this,
+ *iRegistryData,
+ *this,
+ iFs);
+ iUTContext->iDllData = CRegistryData::CDllData::NewLC();
+ CleanupStack::Pop(); //iDllData
+
+ iUTContext->iInterfaceUid.iUid = 0x10009DC0;
+
+ // Artificially set up the TEntry info on the dll
+ TPtr dllName = iUTContext->iDllEntry.iName.Des();
+ dllName = KExampleDllFileName();
+
+ iUTContext->iIndex = KErrNotFound;
+#ifdef __WINS__
+ iUTContext->iDriveUnit = EDriveZ;
+#else
+ iUTContext->iDriveUnit = EDriveC;
+#endif
+
+ iCtorValidator = new(ELeave) TRegistrar_Ctor_TransitionValidator(*iUTContext);
+ iCheckRegValidator = new(ELeave) TRegistrar_CheckRegWhileDiscovering_TransitionValidator(*iUTContext);
+ iDtorValidator = new(ELeave) TRegistrar_Dtor_TransitionValidator(*iUTContext);
+
+ AddTransitionL(new(ELeave)CRegistrar_NewL_Transition(*iUTContext,*iCtorValidator));
+ AddTransitionL(new(ELeave)CRegistrar_DiscoveriesBegin_Transition(*iUTContext,*iCheckRegValidator));
+ AddTransitionL(new(ELeave)CRegistrar_Dtor_Transition(*iUTContext,*iDtorValidator));
+ }
+
+void CRegistrar_UseWhileDiscovering_UnitTest::Notification(TInt aNotificationCode)
+ {
+ iDataLogger.LogInformationWithParameters(KRegistrarNotificationMsg, aNotificationCode);
+ }
+