lowlevellibsandfws/pluginfw/Framework/RegistrarTest/RegistrarUnitTests.inl
changeset 0 e4d67989cc36
--- /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);
+	}
+