telephonyutils/telephonywatchers/Test/TE_TelWatchers/TE_TelWatchersUnitBase.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 02 Feb 2010 01:41:59 +0200
changeset 0 3553901f7fa8
child 24 6638e7f4bd8f
permissions -rw-r--r--
Revision: 201005 Kit: 201005

// Copyright (c) 2004-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:
// TE_WatcherUnitBase.cpp
// Telephony Watchers Unit Test base test code.
// 
//

/**
 @file
*/

#include "TE_TelWatchersUnitBase.h"
#include "TE_TelWatchersUnitWatcherLog.h"
#include "simtsy.h"

CTelWatchersUnitTestStep::CTelWatchersUnitTestStep()
	{
	// NOP
	} // CTelWatchersUnitTestStep::CTelWatchersUnitTestStep


CTelWatchersUnitTestStep::~CTelWatchersUnitTestStep()
	{
	// NOP
	} // CTelWatchersUnitTestStep::~CTelWatchersUnitTestStep


TVerdict CTelWatchersUnitTestStep::doTestStepPreambleL()
	{
	//
	// Mark for memory leaks!!!
	//
	__UHEAP_MARK;

	//
	// Create an Active Scheduler...
	//
	iScheduler = new(ELeave) CActiveScheduler();
	CActiveScheduler::Install(iScheduler);

	TInt  err;

	//
	// Create the File Server and CWatcherLog objects used by some tests...
	//
  	err = iFs.Connect();
	TESTCHECKL(err, KErrNone);

	// Use the telephony watcher implementation of watcher logger (from UnitTestWatcherLog.cpp)
	// even though the implementation from watcher.lib is expected
	iWatcherLog = new (ELeave) CWatcherLog(Logger());
	
	return TestStepResult();
	} // CTelWatchersUnitTestStep::doTestStepPreambleL


TVerdict CTelWatchersUnitTestStep::doTestStepPostambleL()
	{
	delete iWatcherLog;
	iWatcherLog = NULL;
	
	iFs.Close();
	
	delete iScheduler;
	iScheduler = NULL;
	
	//
	// Check the heap for memory leaks...
	//
	__UHEAP_MARKEND;

	return TestStepResult();
	} // CTelWatchersUnitTestStep::doTestStepPostambleL


void CTelWatchersUnitTestStep::PauseToRunActiveSchedulerL(TInt aSeconds)
	{
	INFO_PRINTF2(_L("   Pausing %d seconds to run Active Scheduler."), aSeconds);

	CTimedStopScheduler*  pauser = new(ELeave) CTimedStopScheduler();
	CleanupStack::PushL(pauser);
	pauser->ConstructL();
	pauser->AfterSeconds(aSeconds);
	CleanupStack::PopAndDestroy(pauser);

	INFO_PRINTF1(_L("   Pause completed."));
	} // CTelWatchersUnitTestStep::PauseToRunActiveSchedulerL

CWatcherObserverPS::CWatcherObserverPS() 
                 :CActive(CActive::EPriorityHigh)
{ 
    iProperty = 0;
    CActiveScheduler::Add(this); 
}

CWatcherObserverPS::~CWatcherObserverPS()
{ 
    Cancel(); 
}

void CWatcherObserverPS::DoCancel() 
{   //-- cancel subscription to the property
    if(iProperty) 
    {
        iProperty->Cancel();     	
    }
}

/**
* Bind an integer property to this observer. Then we can get property value and wait for its change
*
* @param    aProp  - pointer to the property. The property object must be definer and attached to.
*
* @see      WaitForPropertyChangeL  
* @see      GetPropertyValue
* 
*/
void CWatcherObserverPS::BindProperty(RProperty *aProp)
{
	iProperty = aProp;
}


/**
 * Issue request for waiting for a property change. The property must be set by BindProperty method
 *
 * @see  BindProperty
 * @note This function can leave if the property is not set before.
 */
void CWatcherObserverPS::WaitForPropertyChangeL()
{
    _LIT(KPropObserverPanic, "CWatcherObserver::IssueRequest()");
    __ASSERT_ALWAYS(iProperty , User::Panic(KPropObserverPanic, KErrGeneral));
    __ASSERT_ALWAYS(!IsActive(), User::Panic(KPropObserverPanic, KErrGeneral));

   	iProperty->Cancel();
    iProperty->Subscribe(iStatus);
	SetActive();
   	CActiveScheduler::Start();
}

/**
* Get integer property value
*
* @param    aVal - reference to the variable 
*
* @return   standart error codes   
*/
TInt CWatcherObserverPS::GetPropertyValue(TInt &aVal)
	{
	if(iProperty)
		{
		return iProperty->Get(aVal);  	
		}

	return KErrNotFound;
	}


CTimedStopScheduler::CTimedStopScheduler()
  : CTimer(CActive::EPriorityStandard)
	{
	CActiveScheduler::Add(this);
	} // CTimedStopScheduler::CTimedStopScheduler


CTimedStopScheduler::~CTimedStopScheduler()
	{
	Cancel();
	} // CTimedStopScheduler::~CTimedStopScheduler


void CTimedStopScheduler::ConstructL()
	{
	CTimer::ConstructL();
	} // CTimedStopScheduler::ConstructL


void CTimedStopScheduler::AfterSeconds(TInt aTime)
	{
	After(TTimeIntervalMicroSeconds32(aTime * 1000000));
	CActiveScheduler::Start();
	} // CTimedStopScheduler::AfterSeconds


void CTimedStopScheduler::RunL()
	{
	CActiveScheduler::Stop();
	} // CTimedStopScheduler::RunL

void CTelWatchersUnitTestStep::SetSimTsyTestNumberL(TInt aTestNumber)
  	{	
  	TInt res = RProperty::Set(KUidPSSimTsyCategory,KPSSimTsyTestNumber,aTestNumber);
	if (res==KErrNotFound)
	    {
	    User::LeaveIfError(RProperty::Define(KUidPSSimTsyCategory,KPSSimTsyTestNumber, RProperty::EInt, aTestNumber));
	    }
	else
        {
        User::LeaveIfError(res);
        }   
	} // CTelWatchersIntTestStep::SetSimTsyTestNumberL

void CTelWatchersUnitTestStep::CheckSimTsyTestNumberL(TInt aTestNumber)
  	{
	INFO_PRINTF2(_L("Checking SIMTSY config number to be %d..."), aTestNumber);

	// Ensure that the test number has been set properly
	RProperty testNumberInUseProperty;
	User::LeaveIfError(testNumberInUseProperty.Attach(KUidPSSimTsyCategory, KPSSimTsyTestNumberInUse));
	CleanupClosePushL(testNumberInUseProperty);

	TInt testNumberInUseCheck;
	User::LeaveIfError(testNumberInUseProperty.Get(KUidPSSimTsyCategory, KPSSimTsyTestNumberInUse,testNumberInUseCheck));
	if (aTestNumber != testNumberInUseCheck)
		{
		INFO_PRINTF2(_L("Incorrect SIMTSY config number (%d)..."), testNumberInUseCheck);
		User::Leave(KErrNotFound);		
		}

	CleanupStack::PopAndDestroy(&testNumberInUseProperty);
	} // CTelWatchersIntTestStep::CheckSimTsyTestNumberL