lowlevellibsandfws/pluginfw/Framework/RegistrarTest/RegistrarUnitTests.inl
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 02:01:42 +0200
changeset 0 e4d67989cc36
permissions -rw-r--r--
Revision: 201002 Kit: 201005

// 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);
	}