kerneltest/e32test/usbho/t_usbdi/src/TestEngine.cpp
changeset 0 a41df078684a
child 253 d37db4dcc88d
equal deleted inserted replaced
-1:000000000000 0:a41df078684a
       
     1 // Copyright (c) 2007-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 the License "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 // @file testengine.cpp
       
    15 // @internalComponent
       
    16 // 
       
    17 //
       
    18 
       
    19 #include "TestEngine.h"
       
    20 #include "testdebug.h"
       
    21 #include "TestCaseController.h"
       
    22 #include "TestCaseFactory.h"
       
    23 
       
    24 // Console application options
       
    25 
       
    26 _LIT(KArgRole,"-role=");
       
    27 _LIT(KArgTestCases,"-cases=");
       
    28 _LIT(KArgTestRepeats,"-repeats=");
       
    29 
       
    30 // Role values 
       
    31 
       
    32 _LIT(KArgRoleHost,"host");
       
    33 _LIT(KArgRoleClient,"client");
       
    34 
       
    35 
       
    36 extern RTest gtest;
       
    37 
       
    38 namespace NUnitTesting_USBDI
       
    39 	{
       
    40 const TUint KDefaultNumRepeats = 1;
       
    41 const TUint KTestIdSize = 4;
       
    42 _LIT(KTestStringPreamble,"PBASE-T_USBDI-");
       
    43 	
       
    44 CTestEngine* CTestEngine::NewL()
       
    45 	{
       
    46 	CTestEngine* self = new (ELeave) CTestEngine;
       
    47 	CleanupStack::PushL(self);
       
    48 	self->ConstructL();
       
    49 	CleanupStack::Pop(self);
       
    50 	return self;
       
    51 	}
       
    52 
       
    53 
       
    54 
       
    55 CTestEngine::CTestEngine()
       
    56 :	CActive(EPriorityUserInput),
       
    57 	iTestCaseIndex(0), iRepeat(0), iNumRepeats(KDefaultNumRepeats)
       
    58 	{
       
    59 	}
       
    60 
       
    61 
       
    62 
       
    63 CTestEngine::~CTestEngine()
       
    64 	{
       
    65 	// Cancel reading user console input
       
    66 	Cancel();
       
    67 	
       
    68 	// Destroy the test case controller
       
    69 	delete iTestCaseController;
       
    70 	
       
    71 	// Destroy the identity array and its contents
       
    72 	iTestCasesIdentities.ResetAndDestroy();
       
    73 	
       
    74 	// Finish test and release resources
       
    75 	gtest.End();
       
    76 	gtest.Close();
       
    77 	}
       
    78 	
       
    79 	
       
    80 	
       
    81 void CTestEngine::ConstructL()
       
    82 	{
       
    83 	LOG_FUNC
       
    84 	CActiveScheduler::Add(this);
       
    85 
       
    86 	// Display information (construction text and OS build version number
       
    87 	gtest.Title();
       
    88 	gtest.Start(_L("Test Engine Initiation"));
       
    89 	gtest.Printf(_L(">>\n"));
       
    90 	gtest.Printf(_L(">>   T E S T   R U N \n"));
       
    91 	gtest.Printf(_L(">>\n"));
       
    92 
       
    93 	// Process the command line option for role
       
    94 	TInt cmdLineLength(User::CommandLineLength());
       
    95 	HBufC* cmdLine = HBufC::NewMax(cmdLineLength);
       
    96 	CleanupStack::PushL(cmdLine);
       
    97 	TPtr cmdLinePtr = cmdLine->Des();
       
    98 	User::CommandLine(cmdLinePtr);
       
    99 	
       
   100 	// be careful, command line length is limited(248 characters)	
       
   101 	gtest.Printf(_L("***cmdLine = %lS\n"), cmdLine);
       
   102 		
       
   103 	TLex args(*cmdLine);
       
   104 	args.SkipSpace();
       
   105 	
       
   106 	// Obtain the role of this test module
       
   107 	TPtrC roleToken = args.NextToken(); // e.g. -role=host
       
   108 	TBool hostFlag(ETrue);
       
   109 	
       
   110 	TInt pos(roleToken.FindF(KArgRole));
       
   111 	if(pos != KErrNotFound)
       
   112 		{
       
   113 		pos = roleToken.FindF(_L("="));
       
   114 		TPtrC role = roleToken.Right(roleToken.Length()-pos-1);
       
   115 		if(role.Compare(KArgRoleHost) == 0)
       
   116 			{
       
   117 			hostFlag = ETrue;
       
   118 			}
       
   119 		else if(role.Compare(KArgRoleClient) == 0)
       
   120 			{
       
   121 			hostFlag = EFalse;
       
   122 			}
       
   123 		else
       
   124 			{
       
   125 			gtest.Printf(_L("Test configuration: could not find option -role\n"));
       
   126 			gtest(EFalse);
       
   127 			}
       
   128 		}
       
   129 	else
       
   130 		{
       
   131 		gtest.Printf(_L("Test configuration option not found: %S\n"),&KArgRole);
       
   132 		gtest(EFalse);
       
   133 		}
       
   134 		
       
   135 	// Obtain the test cases to be run
       
   136 	TPtrC casesToken = args.NextToken();
       
   137 	
       
   138 	pos = casesToken.FindF(KArgTestCases);
       
   139 	if(pos != KErrNotFound)
       
   140 		{
       
   141 		pos = casesToken.FindF(_L("="));
       
   142 		TPtrC testCases = casesToken.Right(casesToken.Length()-pos-1);
       
   143 	
       
   144 		// Remaining test cases
       
   145 		TPtrC remCases(testCases);
       
   146 		while(pos != KErrNotFound)
       
   147 			{
       
   148 			pos = remCases.FindF(_L(","));
       
   149 			HBufC* tc = HBufC::NewLC(KTestCaseIdLength);
       
   150 			TPtr tcPtr = tc->Des();
       
   151 			tcPtr.Append(KTestStringPreamble);	
       
   152 			
       
   153 			if(pos == KErrNotFound)
       
   154 				{
       
   155 				// This is the last test case identity			
       
   156 				tcPtr.Append(remCases);
       
   157 				}
       
   158 			else
       
   159 				{ 			
       
   160 				tcPtr.Append(remCases.Left(KTestIdSize));
       
   161 				}									
       
   162 							
       
   163 			gtest.Printf(_L("Test case specified: %S\n"),tc);
       
   164 			
       
   165 						
       
   166 			iTestCasesIdentities.Append(tc);
       
   167 			CleanupStack::Pop(tc);
       
   168 			remCases.Set(testCases.Right(remCases.Length()-pos-1));
       
   169 			}
       
   170 		}
       
   171 	else
       
   172 		{
       
   173 		gtest.Printf(_L("Test configuration option not found: %S\n"),&KArgTestCases);
       
   174 		gtest(EFalse);		
       
   175 		}
       
   176 				
       
   177 	// Obtain the role of this test module
       
   178 	TPtrC repeatsToken = args.NextToken(); // e.g. -repeats=4
       
   179 	
       
   180 	pos = repeatsToken.FindF(KArgTestRepeats);
       
   181 	if(pos != KErrNotFound)
       
   182 		{
       
   183 		pos = repeatsToken.FindF(_L("="));
       
   184 		TPtrC repeats = repeatsToken.Right(repeatsToken.Length()-pos-1);
       
   185 		TLex lex(repeats);
       
   186 		TInt ret = lex.Val(iNumRepeats, EDecimal);
       
   187 		if(ret)
       
   188 			{
       
   189 			gtest.Printf(_L("Test configuration option not found: %S\n"),&KArgTestRepeats);
       
   190 			gtest.Printf(_L("DEFAULT to number of repeats = %d\n"),KDefaultNumRepeats);
       
   191 			iNumRepeats = KDefaultNumRepeats;
       
   192 			}
       
   193 		gtest.Printf(_L("Test repeats specified: %d cycles\n"),iNumRepeats);
       
   194 		}
       
   195 	else
       
   196 		{
       
   197 		gtest.Printf(_L("Test configuration option not found: %S\n"),&KArgTestRepeats);
       
   198 		gtest.Printf(_L("DEFAULT to number of repeats = %d\n"),KDefaultNumRepeats);
       
   199 		iNumRepeats = KDefaultNumRepeats;
       
   200 		}
       
   201 		
       
   202 	// Create the test case controller
       
   203 	gtest.Printf(_L("Creating the test controller\n"));
       
   204 	iTestCaseController = CTestCaseController::NewL(*this,hostFlag);
       
   205 
       
   206 	CleanupStack::PopAndDestroy(cmdLine);
       
   207 
       
   208 	gtest.Console()->Read(iStatus);
       
   209 	SetActive();	
       
   210 	}
       
   211 	
       
   212 
       
   213 TInt CTestEngine::NextTestCaseId(TDes& aTestCaseId)
       
   214 	{
       
   215 	LOG_FUNC
       
   216 	if(iTestCaseIndex < iTestCasesIdentities.Count())
       
   217 		{
       
   218 		aTestCaseId = *iTestCasesIdentities[iTestCaseIndex++];
       
   219 		if(iTestCaseIndex==iTestCasesIdentities.Count())
       
   220 			{
       
   221 			iRepeat++;
       
   222 			if(iRepeat < iNumRepeats)
       
   223 				{
       
   224 				iTestCaseIndex = 0; //prepare to start again
       
   225 				}
       
   226 			}
       
   227 		return KErrNone;
       
   228 		}
       
   229 	else
       
   230 		{
       
   231 		return KErrNotFound;
       
   232 		}
       
   233 	}
       
   234 
       
   235 RPointerArray<HBufC>& CTestEngine::TestCasesIdentities()
       
   236 	{
       
   237 	return iTestCasesIdentities;
       
   238 	}
       
   239 
       
   240 TUint CTestEngine::NumRepeats()
       
   241 	{
       
   242 	return iNumRepeats;
       
   243 	}
       
   244 
       
   245 void CTestEngine::DoCancel()
       
   246 	{
       
   247 	LOG_FUNC
       
   248 	gtest.Console()->ReadCancel();	
       
   249 	}
       
   250 	
       
   251 
       
   252 void CTestEngine::RunL()
       
   253 	{
       
   254 	LOG_FUNC
       
   255 	TInt completionCode(iStatus.Int());
       
   256 	
       
   257 	if(completionCode == KErrNone)
       
   258 		{
       
   259 		// Possibility of displaying a range of key commands
       
   260 		// then gtest.Console()->Getch()
       
   261 		
       
   262 		TKeyCode keyCode(gtest.Console()->KeyCode());
       
   263 		if(keyCode == EKeySpace)
       
   264 			{
       
   265 			iTestCaseController->Cancel();
       
   266 			gtest.Printf(_L("Test module terminating\n"));
       
   267 			RDebug::Printf("CActiveScheduler::Stop CTestEngine::RunL");
       
   268 			CActiveScheduler::Stop();
       
   269 			}
       
   270 		else
       
   271 			{
       
   272 			gtest.Printf(_L("%d key pressed"),keyCode);
       
   273 			}
       
   274 		}
       
   275 	else
       
   276 		{
       
   277 		gtest.Printf(_L("Manual key error %d\n"),completionCode);
       
   278 		SetActive();
       
   279 		}
       
   280 	}
       
   281 	
       
   282 	
       
   283 TInt CTestEngine::RunError(TInt aError)
       
   284 	{
       
   285 	return KErrNone;
       
   286 	}
       
   287 
       
   288 	}