networkingtestandutils/networkingintegrationtest/IntegrationTestUtils/TestStep.cpp
changeset 0 af10295192d8
equal deleted inserted replaced
-1:000000000000 0:af10295192d8
       
     1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // This contains CTestCase which is the base class for all the TestCase DLLs
       
    15 // 
       
    16 //
       
    17 
       
    18 /**
       
    19  @file TestStep.cpp
       
    20 */
       
    21 
       
    22 // EPOC includes
       
    23 #include <e32base.h>
       
    24 
       
    25 // Test system includes
       
    26 #include "../inc/Log.h"
       
    27 #include "../inc/TestStep.h"
       
    28 #include "../inc/TestSuite.h"
       
    29 
       
    30 EXPORT_C CTestStep::CTestStep(const TDesC &aName):iTestStepName(aName),iTestStepResult(EPass)
       
    31 /**
       
    32 constructor
       
    33 */
       
    34 {}
       
    35 
       
    36 EXPORT_C CTestStep::CTestStep():iTestStepResult(EPass)
       
    37 /**
       
    38 constructor
       
    39 */
       
    40 {}
       
    41 
       
    42 EXPORT_C CTestStep::~CTestStep()
       
    43 /**
       
    44 destructor
       
    45 */
       
    46 	{
       
    47 	}
       
    48 
       
    49 EXPORT_C void CTestStep::Log( TRefByValue<const TDesC16> format, ... )
       
    50 /**
       
    51 general purpose log interface for TestSteps
       
    52 
       
    53 @param format "printf" format string
       
    54 */
       
    55 	{
       
    56     
       
    57 	VA_LIST aList;
       
    58 	VA_START( aList, format );
       
    59 
       
    60 	TIntegrationTestLog16Overflow iOverflow16;
       
    61 
       
    62 	// decode formated data for display on console
       
    63 	TBuf <MAX_LOG_LINE_LENGTH> LineBuf;
       
    64 	LineBuf.AppendFormatList( format, aList, &iOverflow16 );
       
    65 
       
    66 	// send the data to the log system via the suite
       
    67 	iSuite->Log( _L("%S"),&LineBuf );
       
    68 
       
    69 	VA_END( aList ); 
       
    70 
       
    71 	}
       
    72 
       
    73 EXPORT_C void CTestStep::Log( TInt aSeverity, TRefByValue<const TDesC16> format, ... )
       
    74 /**
       
    75 Display the log data on the console. 
       
    76 If there is a log file open write to it.
       
    77 
       
    78 @param aSeverity severity level
       
    79 @param format "printf" format string
       
    80 */
       
    81 {
       
    82 	VA_LIST aList;
       
    83 	VA_START( aList, format );
       
    84 
       
    85 	TIntegrationTestLog16Overflow iOverflow16;
       
    86 
       
    87 	// decode formated data for display on console
       
    88 	TBuf <MAX_LOG_LINE_LENGTH> LineBuf;
       
    89 	LineBuf.AppendFormatList( format, aList, &iOverflow16 );
       
    90 
       
    91 	// send the data to the log system via the suite
       
    92 	if( aSeverity & iSuite->Severity()) iSuite->Log( aSeverity, _L("%S"),&LineBuf );
       
    93 
       
    94 	VA_END( aList ); 
       
    95 }
       
    96 
       
    97 EXPORT_C void CTestStep::LogExtra(const TText8* aFile, TInt aLine, TInt aSeverity,
       
    98 		TRefByValue<const TDesC> aFmt,...)
       
    99 /**
       
   100 Display the log data on the console 
       
   101 if there is a log file open write to it.
       
   102 
       
   103 @param aFile source file name
       
   104 @param aLine line number
       
   105 @param aSeverity severity level
       
   106 @param aFmt "printf" format string
       
   107 */
       
   108 	{
       
   109 	VA_LIST aList;
       
   110 	VA_START( aList, aFmt );
       
   111 
       
   112 	TIntegrationTestLog16Overflow iOverflow16;
       
   113 
       
   114 	// decode formated data for display on console
       
   115 	TBuf <MAX_LOG_LINE_LENGTH> LineBuf;
       
   116 	LineBuf.AppendFormatList( aFmt, aList, &iOverflow16 );
       
   117 
       
   118 	// send the data to the log system via the suite
       
   119 	if( aSeverity & iSuite->Severity()) 
       
   120 		{
       
   121 		iSuite->LogExtra(aFile, aLine, aSeverity, LineBuf );
       
   122 		}
       
   123 
       
   124 	VA_END( aList ); 
       
   125 	}
       
   126 
       
   127 EXPORT_C void CTestStep::LoadConfig( TDesC &config )
       
   128 /**
       
   129 If a config file is supplied, then create and load CIniData object
       
   130 
       
   131 @param config config file parameter
       
   132 */
       
   133 	{
       
   134 
       
   135 	// if a config file supplied then use
       
   136 	if ( config.Length() != 0)
       
   137 		{
       
   138 
       
   139 		// get the full pathname default drive name and extension
       
   140 		_LIT(KRelated,"C:\\config.ini"); 
       
   141 		TParse ConfigFileName;
       
   142 		TInt returnCode = ConfigFileName.Set( config, &KRelated, NULL );
       
   143 
       
   144 		if (returnCode != KErrNone )
       
   145 			{
       
   146 			// error opening FileManager
       
   147 			ERR_PRINTF2( _L("Error opening config file %S"), &ConfigFileName.FullName()); 
       
   148 			}
       
   149 
       
   150 		// create and load the CIniData object
       
   151 		TRAPD(r,iConfigData=CIniData::NewL(ConfigFileName.FullName() ));
       
   152 		
       
   153 		// check if loaded ok
       
   154 		if ( r==KErrNone )
       
   155 			{
       
   156 			// loaded ok
       
   157 			iConfigDataAvailable = ETrue;
       
   158 			}
       
   159 		else
       
   160 			{
       
   161 			// failed to load
       
   162 			iConfigDataAvailable = EFalse;
       
   163 			iConfigData = NULL;
       
   164 
       
   165 			// report error 
       
   166 			TPtrC Errortxt = CLog::EpocErrorToText(r);
       
   167 			ERR_PRINTF2(_L("Failed to load config data file error= %S"), &Errortxt );
       
   168 			}
       
   169 		}
       
   170 	}
       
   171 
       
   172 EXPORT_C void CTestStep::UnLoadConfig( void )
       
   173 /**
       
   174 If a config file is supplied, then clean up Config data object
       
   175 */
       
   176 	{
       
   177 	iConfigDataAvailable = EFalse;
       
   178 
       
   179 	// clean up Config data object
       
   180 	if (iConfigData) delete iConfigData;
       
   181 	}
       
   182 
       
   183 EXPORT_C TBool CTestStep::GetBoolFromConfig(const TDesC &aSectName,const TDesC &aKeyName,TBool &aResult)
       
   184 /**
       
   185 Read a boolean value from the configuration file.
       
   186 
       
   187 @param aSectName SectionName in the config file
       
   188 @param aKeyName textname for bool value in the config file
       
   189 @param aResult textname for bool value in the config file
       
   190 @return ETrue or EFalse
       
   191 */
       
   192 	{
       
   193 	// check file available
       
   194 	if ( !iConfigDataAvailable )
       
   195 		{
       
   196 		ERR_PRINTF1(_L("No config file available"));
       
   197 		return EFalse;
       
   198 		}
       
   199 
       
   200 	TBool ret=EFalse;
       
   201 	TPtrC result;
       
   202 
       
   203 	// get the value 
       
   204 	ret=iConfigData->FindVar( aSectName,aKeyName, result);
       
   205 
       
   206 	// if failed to decode display error
       
   207 	if (!ret) 
       
   208 		{
       
   209 		// display error message
       
   210 		ERR_PRINTF3(_L("Failed to read section:%S key:%S "),
       
   211 				&aSectName, &aKeyName );
       
   212 
       
   213 		// return fail
       
   214 		return EFalse;
       
   215 		}
       
   216 
       
   217 	// return result as a TBool
       
   218 	( aResult =(result.FindF( _L("true")) ==  KErrNotFound )?  EFalse : ETrue  );	
       
   219 	return ETrue;
       
   220 	}
       
   221 
       
   222 EXPORT_C TBool CTestStep::GetIntFromConfig(const TDesC &aSectName,const TDesC &aKeyName,TInt &aResult)
       
   223 /**
       
   224 Read a integer value from the configuration file.
       
   225 
       
   226 @param aSectName SectionName in the config file
       
   227 @param aKeyName textname for integer value in the config file
       
   228 @param aResult textname for integer value in the config file
       
   229 @return ETrue or EFalse
       
   230 */
       
   231 	{
       
   232 	// check file available
       
   233 	if ( !iConfigDataAvailable )
       
   234 		{
       
   235 		ERR_PRINTF1(_L("No config file available"));
       
   236 		return EFalse;
       
   237 		}	
       
   238 	TBool ret=EFalse;
       
   239 	TPtrC result;
       
   240 
       
   241 	// get the value 
       
   242 	ret=iConfigData->FindVar( aSectName,aKeyName, result);
       
   243 
       
   244 	// if failed to decode display error
       
   245 	if (!ret) 
       
   246 		{
       
   247 		// display error message
       
   248 		ERR_PRINTF3(_L("Failed to read section:%S key:%S "),
       
   249 				&aSectName, &aKeyName );
       
   250 
       
   251 		// return fail
       
   252 		return EFalse;
       
   253 		}
       
   254 
       
   255 	// use Tlex to convert to a TInt
       
   256 	TLex lex(result);
       
   257 	if (lex.Val(aResult) == KErrNone  )
       
   258 		return ETrue;
       
   259 	else
       
   260 		return EFalse;
       
   261 }
       
   262 
       
   263 EXPORT_C TBool CTestStep::GetStringFromConfig(const TDesC &aSectName,const TDesC &aKeyName,TPtrC &aResult)
       
   264 /**
       
   265 Read a string from the configuration file.
       
   266 
       
   267 @param aSectName SectionName in the config file
       
   268 @param aKeyName textname for string value in the config file
       
   269 @param aResult textname for string value in the config file
       
   270 @return ETrue or EFalse
       
   271 */
       
   272 	{
       
   273 	// check file available
       
   274 	if ( !iConfigDataAvailable )
       
   275 		{
       
   276 		ERR_PRINTF1(_L("No config file available"));
       
   277 		return EFalse;
       
   278 		}	
       
   279 
       
   280 	TBool ret=EFalse;
       
   281 
       
   282 	// get the value 
       
   283 	//TPtrC result;
       
   284 	ret=iConfigData->FindVar( aSectName,aKeyName, aResult);
       
   285 
       
   286 	// if failed to decode display error
       
   287 	if (!ret) 
       
   288 		{
       
   289 		// display error message
       
   290 		ERR_PRINTF3(_L("Failed to read section:%S key:%S "),
       
   291 				&aSectName, &aKeyName );
       
   292 
       
   293 		// return fail
       
   294 		return EFalse;
       
   295 		}
       
   296 
       
   297 	return ETrue;
       
   298 }
       
   299 
       
   300 EXPORT_C enum TVerdict CTestStep::doTestStepPreambleL( void )
       
   301 /**
       
   302 Default empty implementation of doTestStepPreambleL().
       
   303 Test steps can overide this to implement required code.
       
   304 This can be used to provide common initialisation for the test steps
       
   305 Preamble should only return EPass or EInconculsive.
       
   306 
       
   307 @return EPass if the step completed successfully 
       
   308 or EInconculsive, if the step did not attempt the run.
       
   309 */
       
   310 	{
       
   311 	return EPass;
       
   312 	}
       
   313 
       
   314 EXPORT_C enum TVerdict CTestStep::doTestStepPostambleL( void )
       
   315 /**
       
   316 Default empty implementation of doTestStepPostambleL().
       
   317 Test steps can overide this to implement required code.
       
   318 This can be used to provide common initialisation for the test steps
       
   319 Postamble should only return EPass or EInconculsive.
       
   320 
       
   321 @return EPass if the step completed successfully 
       
   322 or EInconculsive, if the step did not attempt the run.
       
   323 */
       
   324 	{
       
   325 	return EPass;
       
   326 	}
       
   327 
       
   328 EXPORT_C void CTestStep::testBooleanTrue( TBool aCondition, char* aFile, TInt aLine )
       
   329 /**
       
   330 Check the boolean expression is true.
       
   331 If not record error.
       
   332 
       
   333 @param aCondition Expression to check.
       
   334 @param aFile Current script file name.
       
   335 @param aLine Current line number.
       
   336  */
       
   337 	{
       
   338 
       
   339 	// check condition
       
   340 	if (aCondition)
       
   341 		return;
       
   342 
       
   343 	// this is only relevant if the current result is pass
       
   344 	if ( iTestStepResult == EPass )
       
   345 		iTestStepResult = EFail;
       
   346 
       
   347 	// convert filename for log
       
   348 	TBuf<MAX_LOG_FILENAME_LENGTH> fileName;
       
   349 	fileName.Copy(TPtrC8((TText8*)aFile));
       
   350 
       
   351 	// display a log message
       
   352  	ERR_PRINTF3(_L("Test Failed in file:%S line:%d"), &fileName, aLine);
       
   353 
       
   354 	}
       
   355 
       
   356 EXPORT_C void CTestStep::testBooleanTrueL( TBool aCondition, char* aFile, TInt aLine )
       
   357 /**
       
   358 Check the boolean expression is true.
       
   359 If not record error and then leave.
       
   360 
       
   361 @param aCondition Expression to check.
       
   362 @param aFile Current script file name.
       
   363 @param aLine Current line number.
       
   364 */
       
   365 	{
       
   366 
       
   367 	// check condition
       
   368 	if (aCondition)
       
   369 		return;
       
   370 
       
   371 	// this is only relevant if the current result is pass
       
   372 	if ( iTestStepResult == EPass )
       
   373 		iTestStepResult = EFail;
       
   374 
       
   375 	// convert filename for log
       
   376 	TBuf<MAX_LOG_FILENAME_LENGTH> fileName;
       
   377 	fileName.Copy(TPtrC8((TText8*)aFile));
       
   378 
       
   379 	// display a log message
       
   380  	ERR_PRINTF3(_L("Test Failed in file:%S line:%d"), &fileName, aLine);
       
   381 
       
   382 	// leave with error code
       
   383 	User::Leave(TEST_ERROR_CODE);
       
   384 
       
   385 	}
       
   386 
       
   387 EXPORT_C void CTestStep::testBooleanTrueWithErrorCodeL( TBool aCondition, TInt errorCode  , char* aFile, TInt aLine )
       
   388 /**
       
   389 Check the boolean expression is true.
       
   390 If not record error, error code and then leave.
       
   391 
       
   392 @param aCondition Expression to check.
       
   393 @param errorCode Error code.
       
   394 @param aFile Current script file name.
       
   395 @param aLine Current line number.
       
   396 */
       
   397 	{
       
   398 	// check condition
       
   399 	if (aCondition)
       
   400 		return;
       
   401 
       
   402 	// this is only relevant if the current result is pass
       
   403 	if ( iTestStepResult == EPass )
       
   404 		iTestStepResult = EFail;
       
   405 
       
   406 	// convert filename for log
       
   407 	TBuf<MAX_LOG_FILENAME_LENGTH> fileName;
       
   408 	fileName.Copy(TPtrC8((TText8*)aFile));
       
   409 
       
   410 	// get the error text
       
   411 	TPtrC Error = EpocErrorToText(errorCode);
       
   412 
       
   413 	// display a log message
       
   414 	ERR_PRINTF4(_L("Test Failed with error:%S in file:%S line:%d"),
       
   415 			&Error, &fileName, aLine);
       
   416 
       
   417 	// leave with error code
       
   418 	User::Leave( errorCode );
       
   419 	
       
   420 	}
       
   421 
       
   422 EXPORT_C void CTestStep::testBooleanTrueWithErrorCode( TBool aCondition, TInt errorCode  , char* aFile, TInt aLine )
       
   423 /**
       
   424 Check the boolean expression is true.
       
   425 If not record error and error code.
       
   426 
       
   427 @param aCondition Expression to check.
       
   428 @param errorCode Error code.
       
   429 @param aFile Current script file name.
       
   430 @param aLine Current line number.
       
   431 */
       
   432 	{
       
   433 	// check condition
       
   434 	if (aCondition)
       
   435 		return;
       
   436 
       
   437 	// this is only relevant if the current result is pass
       
   438 	if ( iTestStepResult == EPass )
       
   439 		iTestStepResult = EFail;
       
   440 
       
   441 	// convert filename for log
       
   442 	TBuf<MAX_LOG_FILENAME_LENGTH> fileName;
       
   443 	fileName.Copy(TPtrC8((TText8*)aFile));
       
   444 
       
   445 	// get the error text
       
   446 	TPtrC Error = EpocErrorToText(errorCode);
       
   447 
       
   448 	// display a log message
       
   449 	ERR_PRINTF4(_L("Test Failed with error:%S in file:%S line:%d"),
       
   450 			&Error, &fileName, aLine);
       
   451 	}
       
   452 
       
   453 EXPORT_C void CTestStep::TestCheckPointCompareL(TInt aVal,TInt aExpectedVal, 
       
   454 												  const TDesC& aText, char* aFile,TInt aLine)
       
   455 /**
       
   456 Check the value against an expected value.
       
   457 If not record error and error code.
       
   458 
       
   459 @param aVal Value to check.
       
   460 @param aExpectedVal Expected value.
       
   461 @param aText Text for log file.
       
   462 @param aFile Current script file name.
       
   463 @param aLine Current line number.
       
   464 */
       
   465 	{
       
   466 	if(aVal != aExpectedVal)
       
   467 		{
       
   468 
       
   469 		// decode formated data for display on console
       
   470 		TBuf <MAX_LOG_LINE_LENGTH> LineBuf;
       
   471 		LineBuf.AppendFormat( _L("FAILED test:  Val = %d Exp Val = %d %S"), 
       
   472 			aVal, aExpectedVal, &aText);
       
   473 
       
   474 		// send the data to the log system via the suite
       
   475 		iSuite->LogExtra((TText8*)aFile, aLine, ESevrErr, LineBuf );
       
   476 		User::Leave(aVal);
       
   477 		}
       
   478 	}
       
   479 
       
   480 EXPORT_C TPtrC CTestStep::EpocErrorToText(TInt aError)
       
   481 /**
       
   482 Convert a Error code to text.
       
   483 
       
   484 @param aError error code to display as text.
       
   485 @return Text describing the error.
       
   486 */
       
   487 	{
       
   488 	switch (aError)
       
   489 		{
       
   490 	case KErrNone:
       
   491 		return _L("KErrNone");
       
   492 	case KErrNotFound:
       
   493 		return _L("KErrNotFound");
       
   494 	case KErrGeneral:
       
   495 		return _L("KErrGeneral");
       
   496 	case KErrCancel:
       
   497 		return _L("KErrCancel");
       
   498 	case KErrNoMemory:
       
   499 		return _L("KErrNoMemory");
       
   500 	case KErrNotSupported:
       
   501 		return _L("KErrNotSupported");
       
   502 	case KErrArgument:
       
   503 		return _L("KErrArgument");
       
   504 	case KErrTotalLossOfPrecision:
       
   505 		return _L("KErrTotalLossOfPrecision");
       
   506 	case KErrBadHandle:
       
   507 		return _L("KErrBadHandle");
       
   508 	case KErrOverflow:
       
   509 		return _L("KErrOverflow");
       
   510 	case KErrUnderflow:
       
   511 		return _L("KErrUnderflow");
       
   512 	case KErrAlreadyExists:
       
   513 		return _L("KErrAlreadyExists");
       
   514 	case KErrPathNotFound:
       
   515 		return _L("KErrPathNotFound");
       
   516 	case KErrDied:
       
   517 		return _L("KErrDied");
       
   518 	case KErrInUse:
       
   519 		return _L("KErrInUse");
       
   520 	case KErrServerTerminated:
       
   521 		return _L("KErrServerTerminated");
       
   522 	case KErrServerBusy:
       
   523 		return _L("KErrServerBusy");
       
   524 	case KErrCompletion:
       
   525 		return _L("KErrCompletion");
       
   526 	case KErrNotReady:
       
   527 		return _L("KErrNotReady");
       
   528 	case KErrUnknown:
       
   529 		return _L("KErrUnknown");
       
   530 	case KErrCorrupt:
       
   531 		return _L("KErrCorrupt");
       
   532 	case KErrAccessDenied:
       
   533 		return _L("KErrAccessDenied");
       
   534 	case KErrLocked:
       
   535 		return _L("KErrLocked");
       
   536 	case KErrWrite:
       
   537 		return _L("KErrWrite");
       
   538 	case KErrDisMounted:
       
   539 		return _L("KErrDisMounted");
       
   540 	case KErrEof:
       
   541 		return _L("KErrEof");
       
   542 	case KErrDiskFull:
       
   543 		return _L("KErrDiskFull");
       
   544 	case KErrBadDriver:
       
   545 		return _L("KErrBadDriver");
       
   546 	case KErrBadName:
       
   547 		return _L("KErrBadName");
       
   548 	case KErrCommsLineFail:
       
   549 		return _L("KErrCommsLineFail");
       
   550 	case KErrCommsFrame:
       
   551 		return _L("KErrCommsFrame");
       
   552 	case KErrCommsOverrun:
       
   553 		return _L("KErrCommsOverrun");
       
   554 	case KErrCommsParity:
       
   555 		return _L("KErrCommsParity");
       
   556 	case KErrTimedOut:
       
   557 		return _L("KErrTimedOut");
       
   558 	case KErrCouldNotConnect:
       
   559 		return _L("KErrCouldNotConnect");
       
   560 	case KErrCouldNotDisconnect:
       
   561 		return _L("KErrCouldNotDisconnect");
       
   562 	case KErrDisconnected:
       
   563 		return _L("KErrDisconnected");
       
   564 	case KErrBadLibraryEntryPoint:
       
   565 		return _L("KErrBadLibraryEntryPoint");
       
   566 	case KErrBadDescriptor:
       
   567 		return _L("KErrBadDescriptor");
       
   568 	case KErrAbort:
       
   569 		return _L("KErrAbort");
       
   570 	case KErrTooBig:
       
   571 		return _L("KErrTooBig");
       
   572 	default:
       
   573 		iPrnBuf.Format(_L(" %d"),aError);
       
   574 		return iPrnBuf;
       
   575 		}
       
   576 	}
       
   577 
       
   578 
       
   579 /**
       
   580 	Active controller
       
   581 */
       
   582 CActiveControl* CActiveControl::NewL(MControlNotify* aControl)
       
   583 	{
       
   584 	CActiveControl* self = new(ELeave) CActiveControl(aControl);
       
   585 	CleanupStack::PushL(self);
       
   586 	self->ConstructL();
       
   587 	CleanupStack::Pop();
       
   588 	return self;
       
   589 	}
       
   590 
       
   591 void CActiveControl::ConstructL()
       
   592 	{
       
   593 	}
       
   594 
       
   595 CActiveControl::CActiveControl(MControlNotify* aControl)
       
   596 : CActive(EPriorityStandard)
       
   597 /**
       
   598 constructor
       
   599 */
       
   600 	{
       
   601 	iControl = aControl;
       
   602 	}
       
   603 
       
   604 CActiveControl::~CActiveControl()
       
   605 	{
       
   606 	}
       
   607 
       
   608 EXPORT_C void CActiveControl::ReStart()
       
   609 	{
       
   610 	TRequestStatus* status = &iStatus;
       
   611 	SetActive();
       
   612 	User::RequestComplete(status, KErrNone);
       
   613 	}
       
   614 
       
   615 void CActiveControl::RunL()
       
   616 	{
       
   617 	if(iControl->CallStateMachine())
       
   618 		{
       
   619 		SetActive();
       
   620 		}
       
   621 	}
       
   622 
       
   623 void CActiveControl::DoCancel()
       
   624 	{
       
   625 	}
       
   626 	
       
   627 EXPORT_C CTestActiveStep::CTestActiveStep(const TDesC &aName):CTestStep(aName)
       
   628 /**
       
   629 constructor
       
   630 */
       
   631 	{
       
   632 	
       
   633 	}
       
   634 EXPORT_C CTestActiveStep::CTestActiveStep()
       
   635 /**
       
   636 constructor
       
   637 */
       
   638 	{
       
   639 	}
       
   640 EXPORT_C CTestActiveStep::~CTestActiveStep()
       
   641 /**
       
   642 destructor
       
   643 */
       
   644 	{
       
   645 	}
       
   646 EXPORT_C enum TVerdict CTestActiveStep::doTestStepPreambleL( void )
       
   647 	{
       
   648 	TVerdict retVal(EPass);
       
   649 	if ((retVal=CTestStep::doTestStepPreambleL())!=EPass)
       
   650 		{
       
   651 		return retVal;
       
   652 		}	
       
   653 	iScheduler = new(ELeave) CActiveScheduler;
       
   654 	CActiveScheduler::Install(iScheduler);
       
   655 	iControl = CActiveControl::NewL(this);
       
   656 	iScheduler->Add(iControl);
       
   657 	iStatus = iControl->Status();	
       
   658 	return retVal;		
       
   659 	}
       
   660 EXPORT_C enum TVerdict CTestActiveStep::doTestStepPostambleL( void )
       
   661 	{
       
   662 	TVerdict retVal(EPass);
       
   663 	if ((retVal=CTestStep::doTestStepPostambleL())!=EPass)
       
   664 		{
       
   665 		return retVal;
       
   666 		}
       
   667 	iStatus=NULL;
       
   668 	if (iControl)
       
   669 		{
       
   670 		delete iControl;
       
   671 		iControl = NULL;
       
   672 		}
       
   673 	if (iScheduler)
       
   674 		{
       
   675 		delete iScheduler;
       
   676 		iScheduler=NULL;
       
   677 		}
       
   678 	return retVal;	
       
   679 	}