sl@0: // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
sl@0: // All rights reserved.
sl@0: // This component and the accompanying materials are made available
sl@0: // under the terms of "Eclipse Public License v1.0"
sl@0: // which accompanies this distribution, and is available
sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html".
sl@0: //
sl@0: // Initial Contributors:
sl@0: // Nokia Corporation - initial contribution.
sl@0: //
sl@0: // Contributors:
sl@0: //
sl@0: // Description:
sl@0: //
sl@0: 
sl@0: /**
sl@0:  @file
sl@0:  @internalComponent
sl@0:  @prototype
sl@0: */
sl@0: 
sl@0: #include "dvbhhaiasynctest.h"
sl@0: #include <mobiletv/hai/dvbh/dvbhtypes.h>
sl@0: 
sl@0: /**
sl@0: * RDvbhHaiAsyncTest 
sl@0: *	DVB-H HAI Asynchronous Unit Tests on stub implementations
sl@0: */
sl@0: 
sl@0: 		
sl@0: RDvbhHaiAsyncTest* RDvbhHaiAsyncTest::NewL(TBool aRequireReceiverInfo, const TDesC& aTestName)
sl@0: 	{
sl@0: 	RDvbhHaiAsyncTest* self = new (ELeave) RDvbhHaiAsyncTest(aRequireReceiverInfo, aTestName);
sl@0: 	return self;	
sl@0: 	}
sl@0: 	
sl@0: RDvbhHaiAsyncTest::RDvbhHaiAsyncTest(TBool aRequireReceiverInfo, const TDesC& aTestName)
sl@0: : RAsyncTestStep(), iExpectedNetworkTime(TDateTime(2007, EJuly, 30, 16, 35, 22, 18)),
sl@0:   iInitialNetworkTime(TDateTime(1997, EMay, 10, 10, 00, 34, 02)), iInitialPlatform(),
sl@0:   iExpectedPlatform(), iPreTestRun(EFalse), iRequireReceiverInfo(aRequireReceiverInfo),
sl@0:   iRxInfo(NULL), i2ndRxInfo(NULL), iTestUtils(NULL), i2ndStateObserver(NULL)
sl@0: 	{
sl@0: 	iStateCallbackVerdicts[E1stStateObserver] = KNoVerdict;
sl@0: 	iStateCallbackVerdicts[E2ndStateObserver] = KNoVerdict;
sl@0: 	iTestStepName.Copy(aTestName);
sl@0: 	SetupParameterData();
sl@0: 	}
sl@0: 
sl@0: void RDvbhHaiAsyncTest::SetupParameterData()
sl@0: 	{
sl@0: 	iInitialPlatform.iPlatform.iId = KInitialPlatformId;
sl@0: 	iInitialPlatform.iPlatform.iName = KInitialPlatformName;
sl@0: 	iInitialPlatform.iEsgRoot = KInet6AddrLinkLocal;
sl@0: 	
sl@0: 	iExpectedPlatform.iPlatform.iId = KExpectedPlatformId;
sl@0: 	iExpectedPlatform.iPlatform.iName = KExpectedPlatformName;	
sl@0: 	iExpectedPlatform.iEsgRoot = KDvbhTestIpV6Addr;
sl@0: 	}
sl@0: 	
sl@0: void RDvbhHaiAsyncTest::InfoPrintf3(const TDesC16& aString, TInt aInt1, TInt aInt2)
sl@0: 	{
sl@0: 	INFO_PRINTF3(aString, aInt1, aInt2);
sl@0: 	}
sl@0: 
sl@0: void RDvbhHaiAsyncTest::InfoPrintf4(const TDesC16& aString, TInt aInt1, TInt aInt2, TInt aInt3)
sl@0: 	{
sl@0: 	INFO_PRINTF4(aString, aInt1, aInt2, aInt3);
sl@0: 	}
sl@0: 	
sl@0: /**
sl@0: * Allocs objects, defines properties, etc. as needed for each test step.
sl@0: * Takes the role of the Preamble in synchornous tests.  It is called once
sl@0: * when a test step is first kicked off.
sl@0: */
sl@0: TVerdict RDvbhHaiAsyncTest::DoPreTest()
sl@0: 	{
sl@0: 	TRAPD(result, iTestUtils = CDvbhTestUtil::NewL(*this));
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("Error %d creating CDvbhTestUtil"), result);
sl@0: 		return EInconclusive;		
sl@0: 		}
sl@0: 	
sl@0: 	if (iRequireReceiverInfo)
sl@0: 		{
sl@0: 		TRAP(result, iRxInfo = CDvbhReceiverInfo::NewL())
sl@0: 		if (result != KErrNone)
sl@0: 			{
sl@0: 			INFO_PRINTF2(_L("Error %d creating CDvbhReceiverInfo"), result);
sl@0: 			return EInconclusive;
sl@0: 			}
sl@0: 		}
sl@0: 		
sl@0: 	if (iTestStepName.Compare(_L("MM-TV-DVBH-U-111")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DefineDvbhStateProperty(KInitialState);		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-112")) == 0)		
sl@0: 		{
sl@0: 		 // Receiver state must be EDvbhStateReceiving before we can do this test.
sl@0: 		result = iTestUtils->DefineDvbhStateProperty(EDvbhStateReceiving);
sl@0: 		if (result == KErrNone)
sl@0: 			{
sl@0: 			result = iTestUtils->DefineDvbhIntegerProperty(EDvbhPropertyKeySignalQuality, KInitialSignalQuality);			
sl@0: 			}				
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-113")) == 0)		
sl@0: 		{
sl@0: 		 // Receiver state must be EDvbhStateReady or EDvbhStateReceiving before we can do this test.
sl@0: 		result = iTestUtils->DefineDvbhStateProperty(EDvbhStateReady);
sl@0: 		if (result == KErrNone)
sl@0: 			{
sl@0: 			TPckg<TDvbhPlatformProperty> initialPlatformPckg(iInitialPlatform);
sl@0: 			result = iTestUtils->DefineDvbhProperty(EDvbhPropertyKeyPlatform, CDvbhTestUtil::GetType(EDvbhPropertyKeyPlatform), initialPlatformPckg);			
sl@0: 			}		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-114")) == 0)		
sl@0: 		{
sl@0: 		 // Receiver state must be EDvbhStateReady or EDvbhStateReceiving before we can do this test.
sl@0: 		result = iTestUtils->DefineDvbhStateProperty(EDvbhStateReady);
sl@0: 		if (result == KErrNone)
sl@0: 			{
sl@0: 			TPckg<TTime> initialTimePckg(iInitialNetworkTime);
sl@0: 			result = iTestUtils->DefineDvbhProperty(EDvbhPropertyKeyNetworkTime, CDvbhTestUtil::GetType(EDvbhPropertyKeyNetworkTime), initialTimePckg);			
sl@0: 			}		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-115")) == 0)		
sl@0: 		{
sl@0: 		 // Receiver state must be EDvbhStateReady or EDvbhStateReceiving before we can do this test.
sl@0: 		result = iTestUtils->DefineDvbhStateProperty(EDvbhStateReady);
sl@0: 		if (result == KErrNone)
sl@0: 			{
sl@0: 			result = iTestUtils->DefineDvbhIntegerProperty(EDvbhPropertyKeyFrequency, KInitialFrequency);			
sl@0: 			}		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-116")) == 0)		
sl@0: 		{
sl@0: 		 // Receiver state must be EDvbhStateReady or EDvbhStateReceiving before we can do this test.
sl@0: 		result = iTestUtils->DefineDvbhStateProperty(EDvbhStateReady);
sl@0: 		if (result == KErrNone)
sl@0: 			{
sl@0: 			result = iTestUtils->DefineDvbhIntegerProperty(EDvbhPropertyKeyCellId, KInitialCellId);			
sl@0: 			}		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-117")) == 0)		
sl@0: 		{
sl@0: 		 // Receiver state must be EDvbhStateReady or EDvbhStateReceiving before we can do this test.
sl@0: 		result = iTestUtils->DefineDvbhStateProperty(EDvbhStateReady);
sl@0: 		if (result == KErrNone)
sl@0: 			{
sl@0: 			result = iTestUtils->DefineDvbhIntegerProperty(EDvbhPropertyKeyNetworkId, KInitialNetworkId);			
sl@0: 			}		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-125")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DefineDvbhStateProperty(KInitialState);
sl@0: 		if (result == KErrNone)
sl@0: 			{
sl@0: 			TRAP(result, i2ndStateObserver = CAlternativeStateObserver::NewL(*this));		
sl@0: 			}
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-126")) == 0)		
sl@0: 		{
sl@0: 		TRAP(result, i2ndStateObserver = CAlternativeStateObserver::NewL(*this));		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-127")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DefineDvbhStateProperty(KInitialState);
sl@0: 		if (result == KErrNone)
sl@0: 			{
sl@0: 			TRAP(result, i2ndRxInfo = CDvbhReceiverInfo::NewL());
sl@0: 			if (result == KErrNone)
sl@0: 				{
sl@0: 				TRAP(result, i2ndStateObserver = CAlternativeStateObserver::NewL(*this));		
sl@0: 				}
sl@0: 			}
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-128")) == 0)		
sl@0: 		{
sl@0: 		TRAP(result, i2ndRxInfo = CDvbhReceiverInfo::NewL());
sl@0: 		if (result == KErrNone)
sl@0: 			{
sl@0: 			TRAP(result, i2ndStateObserver = CAlternativeStateObserver::NewL(*this));		
sl@0: 			}
sl@0: 		}
sl@0: 	else if (iTestStepName.Compare(_L("MM-TV-DVBH-U-401")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DefineAllDvbhProperties();		
sl@0: 		}
sl@0: 	
sl@0: 	iPreTestRun = ETrue;	
sl@0: 	return (result == KErrNone ? EPass : EInconclusive);				
sl@0: 	}
sl@0: 	
sl@0: void RDvbhHaiAsyncTest::CloseTest()
sl@0: 	{
sl@0: 	delete iRxInfo;
sl@0: 	iRxInfo = NULL;
sl@0: 	delete i2ndStateObserver;
sl@0: 	i2ndStateObserver = NULL;
sl@0: 	delete i2ndRxInfo;
sl@0: 	i2ndRxInfo = NULL;
sl@0: 	
sl@0: 	TInt result = KErrNone;
sl@0: 
sl@0: 	if (iTestStepName.Compare(_L("MM-TV-DVBH-U-111")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyState);		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-112")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyState);
sl@0: 		TInt result2 = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeySignalQuality);	
sl@0: 		result = result2 != KErrNone ? result2 : result;		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-113")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyState);
sl@0: 		TInt result2 = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyPlatform);
sl@0: 		result = result2 != KErrNone ? result2 : result;			
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-114")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyState);
sl@0: 		TInt result2 = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyNetworkTime);
sl@0: 		result = result2 != KErrNone ? result2 : result;			
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-115")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyState);
sl@0: 		TInt result2 = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyFrequency);	
sl@0: 		result = result2 != KErrNone ? result2 : result;		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-116")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyState);
sl@0: 		TInt result2 = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyCellId);	
sl@0: 		result = result2 != KErrNone ? result2 : result;		
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-117")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyState);
sl@0: 		TInt result2 = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyNetworkId);
sl@0: 		result = result2 != KErrNone ? result2 : result;			
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-125")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyState);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-127")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteDvbhProperty(EDvbhPropertyKeyState);
sl@0: 		}	
sl@0: 	else if (iTestStepName.Compare(_L("MM-TV-DVBH-U-401")) == 0)		
sl@0: 		{
sl@0: 		result = iTestUtils->DeleteAllDvbhProperties();		
sl@0: 		}
sl@0: 
sl@0: 	delete iTestUtils;
sl@0: 	iTestUtils = NULL;
sl@0: 
sl@0: 	//Make sure we are not leaving anything laying around.  This is
sl@0: 	//to verify the integrity of the test code more than anything else.
sl@0: 	ASSERT(result == KErrNone);
sl@0: 	}
sl@0: 	
sl@0: void RDvbhHaiAsyncTest::KickoffTestL()
sl@0: 	{
sl@0: 	//Run the pre-test set-up if it has not been run already
sl@0: 	if (!iPreTestRun)
sl@0: 		{
sl@0: 		TVerdict preTestResult = DoPreTest();
sl@0: 		if (preTestResult != EPass)
sl@0: 			{
sl@0: 			INFO_PRINTF2(_L("DoPreTest failed with error %d."), preTestResult);
sl@0: 			StopTest(preTestResult);
sl@0: 			return;
sl@0: 			}
sl@0: 		}
sl@0: 		
sl@0: 	if (iTestStepName.Compare(_L("MM-TV-DVBH-U-111")) == 0)		
sl@0: 		{
sl@0: 		DoSetStateObserverTestStep(ETrue);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-112")) == 0)		
sl@0: 		{
sl@0: 		DoSetSignalQualityObserverTestStep(ETrue);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-113")) == 0)		
sl@0: 		{
sl@0: 		DoSetPlatformObserverTestStep(ETrue);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-114")) == 0)		
sl@0: 		{
sl@0: 		DoSetNetworkTimeObserverTestStep(ETrue);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-115")) == 0)		
sl@0: 		{
sl@0: 		DoSetFrequencyObserverTestStep(ETrue);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-116")) == 0)		
sl@0: 		{
sl@0: 		DoSetCellIdObserverTestStep(ETrue);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-117")) == 0)		
sl@0: 		{
sl@0: 		DoSetNetworkIdObserverTestStep(ETrue);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-118")) == 0)		
sl@0: 		{
sl@0: 		DoSetStateObserverTestStep(EFalse);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-119")) == 0)		
sl@0: 		{
sl@0: 		DoSetSignalQualityObserverTestStep(EFalse);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-120")) == 0)		
sl@0: 		{
sl@0: 		DoSetPlatformObserverTestStep(EFalse);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-121")) == 0)		
sl@0: 		{
sl@0: 		DoSetNetworkTimeObserverTestStep(EFalse);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-122")) == 0)		
sl@0: 		{
sl@0: 		DoSetFrequencyObserverTestStep(EFalse);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-123")) == 0)		
sl@0: 		{
sl@0: 		DoSetCellIdObserverTestStep(EFalse);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-124")) == 0)		
sl@0: 		{
sl@0: 		DoSetNetworkIdObserverTestStep(EFalse);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-125")) == 0)		
sl@0: 		{
sl@0: 		DoSetMultipleStateObserversTestStep(ETrue);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-126")) == 0)		
sl@0: 		{
sl@0: 		DoSetMultipleStateObserversTestStep(EFalse);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-127")) == 0)		
sl@0: 		{
sl@0: 		DoCreateMultipleReceiverInfoTestStep(ETrue);
sl@0: 		}
sl@0: 	else if	(iTestStepName.Compare(_L("MM-TV-DVBH-U-128")) == 0)		
sl@0: 		{
sl@0: 		DoCreateMultipleReceiverInfoTestStep(EFalse);
sl@0: 		}
sl@0: 	else if (iTestStepName.Compare(_L("MM-TV-DVBH-U-401")) == 0)		
sl@0: 		{
sl@0: 		DoSetObserversNoMemory();		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EInconclusive);
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0: //
sl@0: //
sl@0: // CDvbhReceiverInfo Positive Async Tests
sl@0: //
sl@0: //
sl@0: 
sl@0: // 111 & 118
sl@0: void RDvbhHaiAsyncTest::DoSetStateObserverTestStep(TBool aProperyExists)
sl@0: 	{
sl@0: 	TInt result = iRxInfo->SetStateObserver(*this);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetStateObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 	
sl@0: 	if (aProperyExists)
sl@0: 		{
sl@0: 		//DoPreTest will have initialised the state to KInitialState.
sl@0: 		//Now change it to KExpectedState.
sl@0: 		if (iTestUtils->SetStateProperty(KExpectedState) != KErrNone)
sl@0: 			{
sl@0: 			StopTest(EInconclusive);
sl@0: 			return;		
sl@0: 			}		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EPass);
sl@0: 		}
sl@0: 	}
sl@0: 	
sl@0: //Called when the state property changes if this state observer has been registerd
sl@0: void RDvbhHaiAsyncTest::DvbhStateChange( TDvbhState aNewState )
sl@0: 	{
sl@0: 	TVerdict verdict = EPass;
sl@0: 
sl@0: 	// We have to make sure that this observer was not called for the wrong test.
sl@0: 	if ( iTestStepName.Compare(_L("MM-TV-DVBH-U-125")) == 0 ||
sl@0: 		 iTestStepName.Compare(_L("MM-TV-DVBH-U-126")) == 0 )		
sl@0: 		{
sl@0: 		INFO_PRINTF1(_L("RDvbhHaiAsyncTest::DvbhStateChange called for wrong test."));
sl@0: 		verdict = EFail;
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		if (aNewState != KExpectedState)
sl@0: 			{
sl@0: 			INFO_PRINTF2(_L("DvbhStateChange received unexpected value %d."), aNewState);
sl@0: 			verdict = EFail;
sl@0: 			}
sl@0: 		else
sl@0: 			{
sl@0: 			// Test case MM-TV-DVBH-U-127 is expecting two callbacks on two different observers
sl@0: 			if (iTestStepName.Compare(_L("MM-TV-DVBH-U-127")) == 0)
sl@0: 				{
sl@0: 				// Set the verdict for this observer
sl@0: 				iStateCallbackVerdicts[E1stStateObserver] = verdict;
sl@0: 				//Check if the 2nd observer has reported back yet. If not then we
sl@0: 				//do not want to stop the test yet.
sl@0: 				if (iStateCallbackVerdicts[E2ndStateObserver] == KNoVerdict)
sl@0: 					{
sl@0: 					return;
sl@0: 					}
sl@0: 				else
sl@0: 					{
sl@0: 					verdict = static_cast<TVerdict>(iStateCallbackVerdicts[E2ndStateObserver]);
sl@0: 					}
sl@0: 				}		
sl@0: 			}		
sl@0: 		}
sl@0: 		
sl@0: 	StopTest(verdict);
sl@0: 	}	
sl@0: 
sl@0: // 112 & 119
sl@0: void RDvbhHaiAsyncTest::DoSetSignalQualityObserverTestStep(TBool aProperyExists)
sl@0: 	{
sl@0: 	TInt result = iRxInfo->SetSignalQualityObserver(*this);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetSignalQualityObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 	
sl@0: 	if (aProperyExists)
sl@0: 		{
sl@0: 		//DoPreTest will have initialised the signal quality to KInitialSignalQuality.
sl@0: 		//Now change it to KExpectedSignalQuality.
sl@0: 		if (iTestUtils->SetIntegerProperty(EDvbhPropertyKeySignalQuality, KExpectedSignalQuality) != KErrNone)
sl@0: 			{
sl@0: 			StopTest(EInconclusive);
sl@0: 			return;		
sl@0: 			}		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EPass);
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0: //Called when the signal quality property changes this a signal quality observer has been registerd
sl@0: void RDvbhHaiAsyncTest::DvbhSignalQualityChange( const TDvbhSignalQuality& aNewSignalQuality )
sl@0: 	{
sl@0: 	TVerdict verdict = EPass;
sl@0: 	if (aNewSignalQuality != KExpectedSignalQuality)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("DvbhSignalQualityChange received unexpected value %d."), aNewSignalQuality);
sl@0: 		verdict = EFail;
sl@0: 		}
sl@0: 	StopTest(verdict);
sl@0: 	}
sl@0: 
sl@0: // 113 & 120
sl@0: void RDvbhHaiAsyncTest::DoSetPlatformObserverTestStep(TBool aProperyExists)
sl@0: 	{
sl@0: 	TInt result = iRxInfo->SetPlatformObserver(*this);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetPlatformObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 	
sl@0: 	if (aProperyExists)
sl@0: 		{
sl@0: 		//DoPreTest will have initialised the platform to iInitialPlatform.
sl@0: 		//Now change it to iExpectedPlatform.
sl@0: 		TPckg<TDvbhPlatformProperty> platformPckg(iExpectedPlatform);
sl@0: 		if (iTestUtils->SetByteArrayProperty(EDvbhPropertyKeyPlatform, platformPckg) != KErrNone)
sl@0: 			{
sl@0: 			StopTest(EInconclusive);
sl@0: 			return;		
sl@0: 			}		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EPass);
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0: //Called when the platform property changes if this platform observer has been registerd
sl@0: void RDvbhHaiAsyncTest::DvbhPlatformChange( const TDvbhPlatform& aNewPlatform, const TIp6Addr& aESGRoot )
sl@0: 	{
sl@0: 	TVerdict verdict = EPass;
sl@0: 	if ( !CDvbhTestUtil::ComparePlatforms(aNewPlatform, iExpectedPlatform.iPlatform))
sl@0: 		{
sl@0: 		INFO_PRINTF1(_L("DvbhPlatformChangeDvbhPlatformChange received unexpected platform."));
sl@0: 		verdict = EFail;
sl@0: 		}
sl@0: 	if (!aESGRoot.IsEqual(iExpectedPlatform.iEsgRoot))
sl@0: 		{
sl@0: 		INFO_PRINTF1(_L("DvbhPlatformChangeDvbhPlatformChange received unexpected esgRoot."));
sl@0: 		verdict = EFail;		
sl@0: 		}
sl@0: 	StopTest(verdict);
sl@0: 	}
sl@0: 	
sl@0: // 114 & 121
sl@0: void RDvbhHaiAsyncTest::DoSetNetworkTimeObserverTestStep(TBool aProperyExists)
sl@0: 	{
sl@0: 	TInt result = iRxInfo->SetNetworkTimeObserver(*this);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetNetworkTimeObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 	
sl@0: 	if (aProperyExists)
sl@0: 		{
sl@0: 		//DoPreTest will have initialised the NetworkTime to iInitialNetworkTime.
sl@0: 		//Now change it to KExpectedNetworkTime.
sl@0: 		TPckg<TTime> timePckg(iExpectedNetworkTime);	
sl@0: 		if (iTestUtils->SetByteArrayProperty(EDvbhPropertyKeyNetworkTime, timePckg) != KErrNone)
sl@0: 			{
sl@0: 			StopTest(EInconclusive);
sl@0: 			return;		
sl@0: 			}		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EPass);
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0: //Called when the network time property changes if this network time observer has been registerd
sl@0: void RDvbhHaiAsyncTest::DvbhNetworkTimeUpdate()
sl@0: 	{
sl@0: 	// Since this method has no parameters, there are no variables for us to verify.
sl@0: 	// The fact that this method was called at all means that CDvbhReceiverInfo::SetNetworkTimeObserver()
sl@0: 	// worked correctly, and thus we can now stop the test as passed.
sl@0: 	StopTest(EPass);
sl@0: 	}
sl@0: 	
sl@0: // 115 & 122
sl@0: void RDvbhHaiAsyncTest::DoSetFrequencyObserverTestStep(TBool aProperyExists)
sl@0: 	{
sl@0: 	TInt result = iRxInfo->SetFrequencyObserver(*this);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetFrequencyObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 	
sl@0: 	if (aProperyExists)
sl@0: 		{
sl@0: 		//DoPreTest will have initialised the frequency to KInitialFrequency.
sl@0: 		//Now change it to KExpectedFrequency.
sl@0: 		if (iTestUtils->SetIntegerProperty(EDvbhPropertyKeyFrequency, KExpectedFrequency) != KErrNone)
sl@0: 			{
sl@0: 			StopTest(EInconclusive);
sl@0: 			return;		
sl@0: 			}		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EPass);
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0: //Called when the frequency property changes if this frequency observer has been registerd
sl@0: void RDvbhHaiAsyncTest::DvbhFrequencyChange( const TDvbhFrequency& aNewFrequency )
sl@0: 	{
sl@0: 	TVerdict verdict = EPass;
sl@0: 	if (aNewFrequency != KExpectedFrequency)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("DvbhFrequencyChange received unexpected value %d."), aNewFrequency);
sl@0: 		verdict = EFail;
sl@0: 		}
sl@0: 	StopTest(verdict);
sl@0: 	}
sl@0: 	
sl@0: // 116 & 123
sl@0: void RDvbhHaiAsyncTest::DoSetCellIdObserverTestStep(TBool aProperyExists)
sl@0: 	{
sl@0: 	TInt result = iRxInfo->SetCellIdObserver(*this);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetCellIdObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 
sl@0: 	if (aProperyExists)
sl@0: 		{
sl@0: 		//DoPreTest will have initialised the CellId to KInitialCellId.
sl@0: 		//Now change it to KExpectedCellId.
sl@0: 		if (iTestUtils->SetIntegerProperty(EDvbhPropertyKeyCellId, KExpectedCellId) != KErrNone)
sl@0: 			{
sl@0: 			StopTest(EInconclusive);
sl@0: 			return;		
sl@0: 			}		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EPass);
sl@0: 		}			
sl@0: 	}
sl@0: 
sl@0: //Called when the CellId property changes if this CellId observer has been registerd
sl@0: void RDvbhHaiAsyncTest::DvbhCellIdChange( const TDvbhCellId& aNewCellId )
sl@0: 	{
sl@0: 	TVerdict verdict = EPass;
sl@0: 	if (aNewCellId != KExpectedCellId)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("DvbhCellIdChange received unexpected value %d."), aNewCellId);
sl@0: 		verdict = EFail;
sl@0: 		}
sl@0: 	StopTest(verdict);
sl@0: 	}
sl@0: 	
sl@0: // 117 & 124
sl@0: void RDvbhHaiAsyncTest::DoSetNetworkIdObserverTestStep(TBool aProperyExists)
sl@0: 	{
sl@0: 	TInt result = iRxInfo->SetNetworkIdObserver(*this);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetNetworkIdObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 
sl@0: 	if (aProperyExists)
sl@0: 		{
sl@0: 		//DoPreTest will have initialised the NetworkId to KInitialNetworkId.
sl@0: 		//Now change it to KExpectedNetworkId.
sl@0: 		if (iTestUtils->SetIntegerProperty(EDvbhPropertyKeyNetworkId, KExpectedNetworkId) != KErrNone)
sl@0: 			{
sl@0: 			StopTest(EInconclusive);
sl@0: 			return;		
sl@0: 			}		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EPass);
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0: //Called when the NetworkId property changes if this NetworkId observer has been registerd
sl@0: void RDvbhHaiAsyncTest::DvbhNetworkIdChange( const TDvbhNetworkId& aNewNetworkId )
sl@0: 	{
sl@0: 	TVerdict verdict = EPass;
sl@0: 	if (aNewNetworkId != KExpectedNetworkId)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("DvbhNetworkIdChange received unexpected value %d."), aNewNetworkId);
sl@0: 		verdict = EFail;
sl@0: 		}
sl@0: 	StopTest(verdict);
sl@0: 	}
sl@0: 	
sl@0: // 125 & 126
sl@0: void RDvbhHaiAsyncTest::DoSetMultipleStateObserversTestStep(TBool aProperyExists)
sl@0: 	{
sl@0: 	// Set a state observer
sl@0: 	TInt result = iRxInfo->SetStateObserver(*this);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("1st SetStateObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 
sl@0: 	// Now try to set another one
sl@0: 	result = iRxInfo->SetStateObserver(*i2ndStateObserver);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("2nd SetStateObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 			
sl@0: 	if (aProperyExists)
sl@0: 		{
sl@0: 		//DoPreTest will have initialised the state to KInitialState.
sl@0: 		//Now change it.
sl@0: 		if (iTestUtils->SetStateProperty(KExpectedState) != KErrNone)
sl@0: 			{
sl@0: 			StopTest(EInconclusive);
sl@0: 			return;		
sl@0: 			}		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EPass);
sl@0: 		}
sl@0: 	}
sl@0: 
sl@0:  //127 & 128
sl@0: void RDvbhHaiAsyncTest::DoCreateMultipleReceiverInfoTestStep(TBool aProperyExists)
sl@0: 	{
sl@0: 	// Set a state observer on the first CDvbhReceiverInfo object
sl@0: 	TInt result = iRxInfo->SetStateObserver(*this);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("1st SetStateObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 
sl@0: 	// Now try to set another one on the 2nd CDvbhReceiverInfo object 
sl@0: 	result = i2ndRxInfo->SetStateObserver(*i2ndStateObserver);
sl@0: 	if (result != KErrNone)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("2nd SetStateObserver returned error %d."), result);
sl@0: 		StopTest(EFail);
sl@0: 		return;
sl@0: 		}
sl@0: 			
sl@0: 	if (aProperyExists)
sl@0: 		{
sl@0: 		iStateCallbackVerdicts[E1stStateObserver] = KNoVerdict;
sl@0: 		iStateCallbackVerdicts[E2ndStateObserver] = KNoVerdict;
sl@0: 		//DoPreTest will have initialised the state to KInitialState.
sl@0: 		//Now change it.
sl@0: 		if (iTestUtils->SetStateProperty(KExpectedState) != KErrNone)
sl@0: 			{
sl@0: 			StopTest(EInconclusive);
sl@0: 			return;		
sl@0: 			}		
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		StopTest(EPass);
sl@0: 		}	
sl@0: 	}
sl@0: 	
sl@0: //
sl@0: //
sl@0: // RDvbhHaiAsyncTest::CAlternativeStateObserver
sl@0: //
sl@0: //
sl@0: 
sl@0: RDvbhHaiAsyncTest::CAlternativeStateObserver* RDvbhHaiAsyncTest::CAlternativeStateObserver::NewL(RDvbhHaiAsyncTest& aTestStep)
sl@0: 	{
sl@0: 	CAlternativeStateObserver* self = new (ELeave) CAlternativeStateObserver(aTestStep);
sl@0: 	return self;	
sl@0: 	}
sl@0: 
sl@0: RDvbhHaiAsyncTest::CAlternativeStateObserver::CAlternativeStateObserver(RDvbhHaiAsyncTest& aTestStep)
sl@0: : iTestStep(aTestStep)
sl@0: 	{
sl@0: 	}
sl@0: 	
sl@0: void RDvbhHaiAsyncTest::CAlternativeStateObserver::DvbhStateChange( TDvbhState aNewState )
sl@0: 	{
sl@0: 	TVerdict verdict = EPass;
sl@0: 	if (aNewState != KExpectedState)
sl@0: 		{
sl@0: 		iTestStep.INFO_PRINTF2(_L("CAlternativeStateObserver::DvbhStateChange received unexpected value %d."), aNewState);
sl@0: 		verdict = EFail;
sl@0: 		}
sl@0: 	else
sl@0: 		{
sl@0: 		// Test case MM-TV-DVBH-U-127 is expecting two callbacks on two different observers
sl@0: 		if (iTestStep.iTestStepName.Compare(_L("MM-TV-DVBH-U-127")) == 0)
sl@0: 			{
sl@0: 			// Set the verdict for this observer
sl@0: 			iTestStep.iStateCallbackVerdicts[E2ndStateObserver] = verdict;
sl@0: 			//Check if the 1st observer has reported back yet. If not then we
sl@0: 			//do not want to stop the test yet.
sl@0: 			if (iTestStep.iStateCallbackVerdicts[E1stStateObserver] == KNoVerdict)
sl@0: 				{
sl@0: 				return;
sl@0: 				}
sl@0: 			else
sl@0: 				{
sl@0: 				verdict = static_cast<TVerdict>(iTestStep.iStateCallbackVerdicts[E1stStateObserver]);
sl@0: 				}
sl@0: 			}		
sl@0: 		}
sl@0: 		
sl@0: 	iTestStep.StopTest(verdict);
sl@0: 	}
sl@0: 	
sl@0: 
sl@0: //401
sl@0: /**
sl@0: * Test to improve conditional code coverage.  Tests KErrNoMemory failures
sl@0: * with SetObserver methods.
sl@0: */
sl@0: void RDvbhHaiAsyncTest::DoSetObserversNoMemory()
sl@0: 	{
sl@0: 	//SetStateObserver
sl@0: 	__UHEAP_SETFAIL(RHeap::EFailNext, 1);
sl@0: 	TInt result = iRxInfo->SetStateObserver(*this);
sl@0: 	if (result != KErrNoMemory)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetStateObserver returned %d."), result);
sl@0: 		StopTest(EInconclusive);
sl@0: 		__UHEAP_SETFAIL(RHeap::ENone, 0);
sl@0: 		return;
sl@0: 		}
sl@0: 		
sl@0: 	//SetSignalQualityObserver
sl@0: 	__UHEAP_SETFAIL(RHeap::EFailNext, 1);
sl@0: 	result = iRxInfo->SetSignalQualityObserver(*this);
sl@0: 	if (result != KErrNoMemory)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetSignalQualityObserver returned %d."), result);
sl@0: 		StopTest(EInconclusive);
sl@0: 		__UHEAP_SETFAIL(RHeap::ENone, 0);
sl@0: 		return;
sl@0: 		}
sl@0: 		
sl@0: 	//SetPlatformObserver
sl@0: 	__UHEAP_SETFAIL(RHeap::EFailNext, 1);
sl@0: 	result = iRxInfo->SetPlatformObserver(*this);
sl@0: 	if (result != KErrNoMemory)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetPlatformObserver returned %d."), result);
sl@0: 		StopTest(EInconclusive);
sl@0: 		__UHEAP_SETFAIL(RHeap::ENone, 0);
sl@0: 		return;
sl@0: 		}
sl@0: 		
sl@0: 	//SetNetworkTimeObserver
sl@0: 	__UHEAP_SETFAIL(RHeap::EFailNext, 1);
sl@0: 	result = iRxInfo->SetNetworkTimeObserver(*this);
sl@0: 	if (result != KErrNoMemory)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetNetworkTimeObserver returned %d."), result);
sl@0: 		StopTest(EInconclusive);
sl@0: 		__UHEAP_SETFAIL(RHeap::ENone, 0);
sl@0: 		return;
sl@0: 		}
sl@0: 		
sl@0: 	//SetFrequencyObserver
sl@0: 	__UHEAP_SETFAIL(RHeap::EFailNext, 1);
sl@0: 	result = iRxInfo->SetFrequencyObserver(*this);
sl@0: 	if (result != KErrNoMemory)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetFrequencyObserver returned %d."), result);
sl@0: 		StopTest(EInconclusive);
sl@0: 		__UHEAP_SETFAIL(RHeap::ENone, 0);
sl@0: 		return;
sl@0: 		}
sl@0: 		
sl@0: 	//SetCellIdObserver
sl@0: 	__UHEAP_SETFAIL(RHeap::EFailNext, 1);
sl@0: 	result = iRxInfo->SetCellIdObserver(*this);
sl@0: 	if (result != KErrNoMemory)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetCellIdObserver returned %d."), result);
sl@0: 		StopTest(EInconclusive);
sl@0: 		__UHEAP_SETFAIL(RHeap::ENone, 0);
sl@0: 		return;
sl@0: 		}
sl@0: 		
sl@0: 	//SetNetworkIdObserver
sl@0: 	__UHEAP_SETFAIL(RHeap::EFailNext, 1);
sl@0: 	result = iRxInfo->SetNetworkIdObserver(*this);
sl@0: 	if (result != KErrNoMemory)
sl@0: 		{
sl@0: 		INFO_PRINTF2(_L("SetNetworkIdObserver returned %d."), result);
sl@0: 		StopTest(EInconclusive);
sl@0: 		__UHEAP_SETFAIL(RHeap::ENone, 0);
sl@0: 		return;
sl@0: 		}
sl@0: 		
sl@0: 	__UHEAP_SETFAIL(RHeap::ENone, 0);
sl@0: 	StopTest(EPass);
sl@0: 	}
sl@0: 
sl@0: 
sl@0: 
sl@0: 
sl@0: 
sl@0: 
sl@0: