kerneltest/e32test/usbho/t_otgdi/src/testengine.cpp
changeset 253 d37db4dcc88d
parent 0 a41df078684a
child 257 3e88ff8f41d5
equal deleted inserted replaced
252:0a40b8675b23 253:d37db4dcc88d
     1 // Copyright (c) 2007-2009 Nokia Corporation and/or its subsidiary(-ies).
     1 // Copyright (c) 2007-2010 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     3 // This component and the accompanying materials are made available
     4 // under the terms of the License "Eclipse Public License v1.0"
     4 // under the terms of the License "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
    27 #include "debugmacros.h"
    27 #include "debugmacros.h"
    28 #include "TestEngine.h"
    28 #include "TestEngine.h"
    29 #include "TestCaseController.h"
    29 #include "TestCaseController.h"
    30 #include "TestCaseFactory.h"
    30 #include "TestCaseFactory.h"
    31 #include "TestCaseRoot.h"
    31 #include "TestCaseRoot.h"
       
    32 #include "OstTraceDefinitions.h"
       
    33 #ifdef OST_TRACE_COMPILER_IN_USE
       
    34 #include "testengineTraces.h"
       
    35 #endif
    32 
    36 
    33 // Console application parameter options
    37 // Console application parameter options
    34 _LIT(KArgAllTestCases,"/ALL");			// see default test-list below
    38 _LIT(KArgAllTestCases,"/ALL");			// see default test-list below
    35 _LIT(KArgGoTestCase, "/G:");
    39 _LIT(KArgGoTestCase, "/G:");
    36 _LIT(KArgAutomatedTest, "/AUTO");		// removes "press any key to continue" prompts
    40 _LIT(KArgAutomatedTest, "/AUTO");		// removes "press any key to continue" prompts
    78 	}
    82 	}
    79 
    83 
    80 
    84 
    81 CTestEngine::~CTestEngine()
    85 CTestEngine::~CTestEngine()
    82 	{
    86 	{
    83 	LOG_FUNC
    87 	if(gVerboseOutput)
       
    88 	    {
       
    89 	    OstTraceFunctionEntry0(CTESTENGINE_DCTESTENGINE);
       
    90 	    }
    84 	// Destroy the test case controller
    91 	// Destroy the test case controller
    85 	if (iTestCaseController)
    92 	if (iTestCaseController)
    86 		{
    93 		{
    87 		delete iTestCaseController;
    94 		delete iTestCaseController;
    88 		}
    95 		}
    92 	}
    99 	}
    93 	
   100 	
    94 	
   101 	
    95 void CTestEngine::ConstructL()
   102 void CTestEngine::ConstructL()
    96 	{
   103 	{
    97 	LOG_FUNC
   104 	if(gVerboseOutput)
       
   105 	    {
       
   106 	    OstTraceFunctionEntry0(CTESTENGINE_CONSTRUCTL);
       
   107 	    }
    98 	TInt menuSelection(0);
   108 	TInt menuSelection(0);
    99 
   109 
   100 	// Display information 
   110 	// Display information 
   101 	test.Title();
   111 	test.Title();
   102 	test.Start(_L("Test Engine Initiation v2.00 "));
   112 	test.Start(_L("Test Engine Initiation v2.00 "));
   103 	test.Printf(_L(">>\n"));
   113 	test.Printf(_L(">>\n"));
       
   114 	OstTrace0(TRACE_NORMAL, CTESTENGINE_CONSTRUCTL_DUP01, ">>\n");
   104 	test.Printf(_L(">>   T E S T   R U N \n"));
   115 	test.Printf(_L(">>   T E S T   R U N \n"));
       
   116 	OstTrace0(TRACE_NORMAL, CTESTENGINE_CONSTRUCTL_DUP02, ">>   T E S T   R U N \n");
   105 	test.Printf(_L(">>\n"));
   117 	test.Printf(_L(">>\n"));
       
   118 	OstTrace0(TRACE_NORMAL, CTESTENGINE_CONSTRUCTL_DUP03, ">>\n");
   106 	
   119 	
   107 
   120 
   108 	// Process the command line parameters for batch/etc
   121 	// Process the command line parameters for batch/etc
   109 	TRAPD(err, ProcessCommandLineL());
   122 	TRAPD(err, ProcessCommandLineL());
   110 	if (err != KErrNone)
   123 	if (err != KErrNone)
   129 
   142 
   130 		iTestCaseIndex = 0;	// be sure we go back to beginning of the collection!
   143 		iTestCaseIndex = 0;	// be sure we go back to beginning of the collection!
   131 		iTestCasesIdentities.ResetAndDestroy();
   144 		iTestCasesIdentities.ResetAndDestroy();
   132 		
   145 		
   133 		test.Printf(_L("Please select 0 to %d\n"), RTestFactory::TestCaseCount()-1);
   146 		test.Printf(_L("Please select 0 to %d\n"), RTestFactory::TestCaseCount()-1);
       
   147 		OstTrace1(TRACE_NORMAL, CTESTENGINE_CONSTRUCTL_DUP04, "Please select 0 to %d\n", RTestFactory::TestCaseCount()-1);
   134 		test.Printf(_L("or 99<ENTER> to exit\n"));
   148 		test.Printf(_L("or 99<ENTER> to exit\n"));
       
   149 		OstTrace0(TRACE_NORMAL, CTESTENGINE_CONSTRUCTL_DUP05, "or 99<ENTER> to exit\n");
   135 		GetNumericInput(menuSelection);
   150 		GetNumericInput(menuSelection);
   136 		if ((menuSelection >=0) &&(menuSelection < RTestFactory::TestCaseCount()))
   151 		if ((menuSelection >=0) &&(menuSelection < RTestFactory::TestCaseCount()))
   137 			{
   152 			{
   138 			// add it to the list,and we can go
   153 			// add it to the list,and we can go
   139 			TBuf<KTestCaseIdLength> aSelectionID;
   154 			TBuf<KTestCaseIdLength> aSelectionID;
   151 	
   166 	
   152 	if ((menuSelection < RTestFactory::TestCaseCount()) && (menuSelection>=0))
   167 	if ((menuSelection < RTestFactory::TestCaseCount()) && (menuSelection>=0))
   153 		{
   168 		{
   154 		// Create the test case controller
   169 		// Create the test case controller
   155 		test.Printf(_L("Creating the test controller\n"));
   170 		test.Printf(_L("Creating the test controller\n"));
       
   171 		OstTrace0(TRACE_NORMAL, CTESTENGINE_CONSTRUCTL_DUP06, "Creating the test controller\n");
   156 		iTestCaseController = CTestCaseController::NewL(*this, ETrue);
   172 		iTestCaseController = CTestCaseController::NewL(*this, ETrue);
   157 		
   173 		
   158 		// Test-engine is non CActive class
   174 		// Test-engine is non CActive class
   159 		}
   175 		}
   160 	else
   176 	else
   161 		{
   177 		{
   162 		// nothing to do, exit. USER aborted
   178 		// nothing to do, exit. USER aborted
   163 		test.Printf(_L("Test run stopped by user, nothing to do.\n"));
   179 		test.Printf(_L("Test run stopped by user, nothing to do.\n"));
       
   180 		OstTrace0(TRACE_NORMAL, CTESTENGINE_CONSTRUCTL_DUP07, "Test run stopped by user, nothing to do.\n");
   164 		User::Leave(-2);
   181 		User::Leave(-2);
   165 		}
   182 		}
   166 	}
   183 	}
   167 	
   184 	
   168 
   185 
   169 /* Displayed if used supplied no parameters, garbage, or a ? in the parameters
   186 /* Displayed if used supplied no parameters, garbage, or a ? in the parameters
   170  */
   187  */
   171 void CTestEngine::PrintUsage()
   188 void CTestEngine::PrintUsage()
   172 	{
   189 	{
   173 	test.Printf(_L("OTGDI Unit Test Suite.\n"));
   190 	test.Printf(_L("OTGDI Unit Test Suite.\n"));
       
   191 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE, "OTGDI Unit Test Suite.\n");
   174 	test.Printf(_L("Usage : t_otgdi.exe [/option] /G:<TESTNUM1>\n"));
   192 	test.Printf(_L("Usage : t_otgdi.exe [/option] /G:<TESTNUM1>\n"));
       
   193 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP01, "Usage : t_otgdi.exe [/option] /G:<TESTNUM1>\n");
   175 	test.Printf(_L("  /ALL = add default test subset to List\n"));
   194 	test.Printf(_L("  /ALL = add default test subset to List\n"));
       
   195 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP02, "  /ALL = add default test subset to List\n");
   176 	test.Printf(_L("  /G:<TESTNUM>  where <testname> is the test# to add \n"));
   196 	test.Printf(_L("  /G:<TESTNUM>  where <testname> is the test# to add \n"));
       
   197 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP03, "  /G:<TESTNUM>  where <testname> is the test# to add \n");
   177 	test.Printf(_L("  /AUTO  = largely unattended operation\n"));
   198 	test.Printf(_L("  /AUTO  = largely unattended operation\n"));
       
   199 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP04, "  /AUTO  = largely unattended operation\n");
   178 	test.Printf(_L("  /VERBOSE = test debugging info\n"));
   200 	test.Printf(_L("  /VERBOSE = test debugging info\n"));
       
   201 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP05, "  /VERBOSE = test debugging info\n");
   179 	test.Printf(_L("  /LOOPO:<n> = Open/close repeat counter<n>\n"));
   202 	test.Printf(_L("  /LOOPO:<n> = Open/close repeat counter<n>\n"));
       
   203 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP06, "  /LOOPO:<n> = Open/close repeat counter<n>\n");
   180 	test.Printf(_L("  /LOOPM:<n> = OOM HEAP_ALLOCS counter<n>\n"));
   204 	test.Printf(_L("  /LOOPM:<n> = OOM HEAP_ALLOCS counter<n>\n"));
       
   205 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP07, "  /LOOPM:<n> = OOM HEAP_ALLOCS counter<n>\n");
   181 	test.Printf(_L("  /SLAVE = Test-peer server mode\n"));
   206 	test.Printf(_L("  /SLAVE = Test-peer server mode\n"));
       
   207 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP08, "  /SLAVE = Test-peer server mode\n");
   182 	test.Printf(_L("  /PID:<n> = USB VID/PID in hex eg 2670\n"));
   208 	test.Printf(_L("  /PID:<n> = USB VID/PID in hex eg 2670\n"));
       
   209 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP09, "  /PID:<n> = USB VID/PID in hex eg 2670\n");
   183 	test.Printf(_L("Valid test ID range 0456...0469\n"));
   210 	test.Printf(_L("Valid test ID range 0456...0469\n"));
       
   211 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP10, "Valid test ID range 0456...0469\n");
   184 	test.Printf(_L("and 0675...0684 .\n"));
   212 	test.Printf(_L("and 0675...0684 .\n"));
       
   213 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP11, "and 0675...0684 .\n");
   185 	test.Printf(_L("\n"));
   214 	test.Printf(_L("\n"));
       
   215 	OstTrace0(TRACE_NORMAL, CTESTENGINE_PRINTUSAGE_DUP12, "\n");
   186 	}
   216 	}
   187 	
   217 	
   188 /** process the command-line, ; arguments appear in any order
   218 /** process the command-line, ; arguments appear in any order
   189  IN   : User::CommandLine()
   219  IN   : User::CommandLine()
   190  OUT  : iTestCasesIdentities
   220  OUT  : iTestCasesIdentities
   236 		pos = tc->FindF(KArgAutomatedTest);
   266 		pos = tc->FindF(KArgAutomatedTest);
   237 		if (pos != KErrNotFound)
   267 		if (pos != KErrNotFound)
   238 			{
   268 			{
   239 			// skip some of the press-any key things
   269 			// skip some of the press-any key things
   240 			test.Printf(_L("Test semi-automated mode.\n"));
   270 			test.Printf(_L("Test semi-automated mode.\n"));
       
   271 			OstTrace0(TRACE_NORMAL, CTESTENGINE_PROCESSCOMMANDLINEL, "Test semi-automated mode.\n");
   241 			gSemiAutomated = ETrue;
   272 			gSemiAutomated = ETrue;
   242 			tokenParsed = ETrue;
   273 			tokenParsed = ETrue;
   243 			}
   274 			}
   244 
   275 
   245 		// '/G:TESTNAME'
   276 		// '/G:TESTNAME'
   248 			{ 
   279 			{ 
   249 			HBufC* tcPart = HBufC::NewLC(KTestCaseIdLength);
   280 			HBufC* tcPart = HBufC::NewLC(KTestCaseIdLength);
   250 			TPtrC testID = tc->Right(tc->Length() - pos - KArgGoTestCase().Length());
   281 			TPtrC testID = tc->Right(tc->Length() - pos - KArgGoTestCase().Length());
   251 
   282 
   252 			LOG_VERBOSE2(_L("Parameter found:'%S'\n"), &testID);
   283 			LOG_VERBOSE2(_L("Parameter found:'%S'\n"), &testID);
       
   284 			if(gVerboseOutput)
       
   285 			    {
       
   286 			    OstTraceExt1(TRACE_VERBOSE, CTESTENGINE_PROCESSCOMMANDLINEL_DUP01, "Parameter found:'%S'\n", testID);
       
   287 			    }
   253 
   288 
   254 			// Check if it is a test we know of in our suite, users may provide the full  
   289 			// Check if it is a test we know of in our suite, users may provide the full  
   255 			// name "PBASE-USB_OTGDI-0466", or just the last 4 digits "0466", in such cases, fetch the full name
   290 			// name "PBASE-USB_OTGDI-0466", or just the last 4 digits "0466", in such cases, fetch the full name
   256 			if (!RTestFactory::TestCaseExists(testID))
   291 			if (!RTestFactory::TestCaseExists(testID))
   257 				{ // try use just the test#part
   292 				{ // try use just the test#part
   261 				tcDes.Format(KidFormatterS, &testID);
   296 				tcDes.Format(KidFormatterS, &testID);
   262 				if (!RTestFactory::TestCaseExists(tcDes))
   297 				if (!RTestFactory::TestCaseExists(tcDes))
   263 					{
   298 					{
   264 					
   299 					
   265 					test.Printf(_L("Test case does NOT Exist: '%lS'\n"), &testID);
   300 					test.Printf(_L("Test case does NOT Exist: '%lS'\n"), &testID);
       
   301 					OstTraceExt1(TRACE_NORMAL, CTESTENGINE_PROCESSCOMMANDLINEL_DUP02, "Test case does NOT Exist: '%lS'\n", testID);
   266 					}
   302 					}
   267 				else
   303 				else
   268 					{ // only the number was supplied, copy the full name
   304 					{ // only the number was supplied, copy the full name
   269 					testID.Set(tcDes);
   305 					testID.Set(tcDes);
   270 					}
   306 					}
   273 			if (RTestFactory::TestCaseExists(testID))
   309 			if (RTestFactory::TestCaseExists(testID))
   274 				{
   310 				{
   275 				HBufC* testIdentity = HBufC::NewLC(KTestCaseIdLength);
   311 				HBufC* testIdentity = HBufC::NewLC(KTestCaseIdLength);
   276 				*testIdentity = testID;
   312 				*testIdentity = testID;
   277 				test.Printf(_L("Test case specified: %lS\n"), testIdentity);
   313 				test.Printf(_L("Test case specified: %lS\n"), testIdentity);
       
   314 				OstTraceExt1(TRACE_NORMAL, CTESTENGINE_PROCESSCOMMANDLINEL_DUP03, "Test case specified: %lS\n", *testIdentity);
   278 
   315 
   279 				iTestCasesIdentities.Append(testIdentity);
   316 				iTestCasesIdentities.Append(testIdentity);
   280 				CleanupStack::Pop(testIdentity);
   317 				CleanupStack::Pop(testIdentity);
   281 				}
   318 				}
   282 			CleanupStack::PopAndDestroy(tcPart);
   319 			CleanupStack::PopAndDestroy(tcPart);
   330 				{
   367 				{
   331 				if (prodID> 0xFFFF)
   368 				if (prodID> 0xFFFF)
   332 					prodID = 0xFFFF;
   369 					prodID = 0xFFFF;
   333 				tokenParsed = ETrue;
   370 				tokenParsed = ETrue;
   334 				LOG_VERBOSE2(_L(" accept param %04X \n\n"), prodID);
   371 				LOG_VERBOSE2(_L(" accept param %04X \n\n"), prodID);
       
   372 				if(gVerboseOutput)
       
   373 				    {
       
   374 				    OstTrace1(TRACE_VERBOSE, CTESTENGINE_PROCESSCOMMANDLINEL_DUP05, " accept param %04X \n\n", prodID);
       
   375 				    }
   335 				gUSBVidPid = prodID; // replace the vid-pid with the user-supplied one 
   376 				gUSBVidPid = prodID; // replace the vid-pid with the user-supplied one 
   336 				}
   377 				}
   337 			else
   378 			else
   338 				{
   379 				{
   339 				// print error
   380 				// print error
   340 				test.Printf(_L("Warning: VID+PID '%lS' not parsed .\n"), tc);
   381 				test.Printf(_L("Warning: VID+PID '%lS' not parsed .\n"), tc);
       
   382 				OstTraceExt1(TRACE_NORMAL, CTESTENGINE_PROCESSCOMMANDLINEL_DUP06, "Warning: VID+PID '%lS' not parsed .\n", *tc);
   341 				}
   383 				}
   342 			}
   384 			}
   343 		
   385 		
   344 		// '/SLAVE' (peer)
   386 		// '/SLAVE' (peer)
   345 		pos = tc->FindF(KArgSetRoleSlave);
   387 		pos = tc->FindF(KArgSetRoleSlave);
   358 		
   400 		
   359 		if (!tokenParsed)
   401 		if (!tokenParsed)
   360 			{
   402 			{
   361 			// warn about unparsed parameter
   403 			// warn about unparsed parameter
   362 			test.Printf(_L("Warning: '%lS'??? not parsed\n"), tc);
   404 			test.Printf(_L("Warning: '%lS'??? not parsed\n"), tc);
       
   405 			OstTraceExt1(TRACE_NORMAL, CTESTENGINE_PROCESSCOMMANDLINEL_DUP07, "Warning: '%lS'??? not parsed\n", *tc);
   363 			iHelpRequested = ETrue;
   406 			iHelpRequested = ETrue;
   364 			}
   407 			}
   365 			
   408 			
   366 		// next parameter
   409 		// next parameter
   367 		*tc = args.NextToken();
   410 		*tc = args.NextToken();
   374 /** Add all default tests to the front of the test-list so we run them all in sequence
   417 /** Add all default tests to the front of the test-list so we run them all in sequence
   375 */	
   418 */	
   376 void CTestEngine::AddAllDefaultTests()
   419 void CTestEngine::AddAllDefaultTests()
   377 	{
   420 	{
   378 	test.Printf(_L("Adding default set test cases\n"));
   421 	test.Printf(_L("Adding default set test cases\n"));
       
   422 	OstTrace0(TRACE_NORMAL, CTESTENGINE_ADDALLDEFAULTTESTS, "Adding default set test cases\n");
   379 	//
   423 	//
   380 	TInt index(0);
   424 	TInt index(0);
   381 	while (index < sizeof(KAllDefaultTestIDs)/sizeof(KAllDefaultTestIDs[0]))
   425 	while (index < sizeof(KAllDefaultTestIDs)/sizeof(KAllDefaultTestIDs[0]))
   382 		{
   426 		{
   383 		// allocate heap string
   427 		// allocate heap string
   428 		key = test.Getch();
   472 		key = test.Getch();
   429 
   473 
   430 		if ( ( key >= '0' ) && ( key <= '9' ) )
   474 		if ( ( key >= '0' ) && ( key <= '9' ) )
   431 			{
   475 			{
   432 			test.Printf(_L("%c"),key);
   476 			test.Printf(_L("%c"),key);
       
   477 			OstTraceExt1(TRACE_NORMAL, CTESTENGINE_GETNUMERICINPUT, "%c",key);
   433 			
   478 			
   434 			value = ( 10 * value ) + ( key - '0' );
   479 			value = ( 10 * value ) + ( key - '0' );
   435 			digits++;
   480 			digits++;
   436 			} else 
   481 			} else 
   437 			{ // very basic keyboard processing, backspace
   482 			{ // very basic keyboard processing, backspace
   438 				if (key == EKeyBackspace)
   483 				if (key == EKeyBackspace)
   439 				{
   484 				{
   440 				value = value/10;
   485 				value = value/10;
   441 				digits--;
   486 				digits--;
   442 				test.Printf(_L("\r    \r%d"), value);
   487 				test.Printf(_L("\r    \r%d"), value);
       
   488 				OstTrace1(TRACE_NORMAL, CTESTENGINE_GETNUMERICINPUT_DUP01, "\r    \r%d", value);
   443 				}
   489 				}
   444 			}
   490 			}
   445 		}
   491 		}
   446 
   492 
   447 	if (digits > 0)
   493 	if (digits > 0)
   448 		{
   494 		{
   449 		aNumber = value;
   495 		aNumber = value;
   450 		}
   496 		}
   451 	test.Printf(_L("\n"));
   497 	test.Printf(_L("\n"));
       
   498 	OstTrace0(TRACE_NORMAL, CTESTENGINE_GETNUMERICINPUT_DUP02, "\n");
   452 	}
   499 	}
   453 
   500 
   454 
   501 
   455 /** Print a report at the end of a test run of all PASSED tests, Note: If a 
   502 /** Print a report at the end of a test run of all PASSED tests, Note: If a 
   456  test fails, the framework gets Panic'd */
   503  test fails, the framework gets Panic'd */
   457 void CTestEngine::Report()
   504 void CTestEngine::Report()
   458 	{
   505 	{
   459 	TBuf<KTestCaseIdLength> aTestCaseId;
   506 	TBuf<KTestCaseIdLength> aTestCaseId;
   460 	test.Printf(_L("============================\n"));
   507 	test.Printf(_L("============================\n"));
       
   508 	OstTrace0(TRACE_NORMAL, CTESTENGINE_REPORT, "============================\n");
   461 	test.Printf(_L("PASSED TESTS:\n"));
   509 	test.Printf(_L("PASSED TESTS:\n"));
       
   510 	OstTrace0(TRACE_NORMAL, CTESTENGINE_REPORT_DUP01, "PASSED TESTS:\n");
   462 	// itterate our list of tests to perform
   511 	// itterate our list of tests to perform
   463 	ResetTestCaseIndex();
   512 	ResetTestCaseIndex();
   464 	while (KErrNone == NextTestCaseId(aTestCaseId))
   513 	while (KErrNone == NextTestCaseId(aTestCaseId))
   465 		{
   514 		{
   466 		test.Printf(_L("%S\n"), &aTestCaseId);
   515 		test.Printf(_L("%S\n"), &aTestCaseId);
       
   516 		OstTraceExt1(TRACE_NORMAL, CTESTENGINE_REPORT_DUP02, "%S\n", aTestCaseId);
   467 		}
   517 		}
   468 	}
   518 	}
   469 	
   519 	
   470 	
   520 	
   471 void CTestEngine::DoCancel()
   521 void CTestEngine::DoCancel()
   472 	{
   522 	{
   473 	LOG_FUNC
   523 	if(gVerboseOutput)
       
   524 	    {
       
   525 	    OstTraceFunctionEntry0(CTESTENGINE_DOCANCEL);
       
   526 	    }
   474 	test.Console()->ReadCancel();	
   527 	test.Console()->ReadCancel();	
   475 	}
   528 	}
   476 		
   529 		
   477 	
   530 	
   478 TInt CTestEngine::RunError(TInt aError)
   531 TInt CTestEngine::RunError(TInt aError)