/** * * Main testing loop. * Read a script file, parse it and execute each test step in turn. * * @param "const TDesC& aCmdLine" * The command line * * @xxxx * */ void CTestFrameworkMain::RunTestScriptL(const TDesC& aCmdLine) { // use TLex to decode the cmd line TLex lex(aCmdLine); TPtrC token=lex.NextToken(); // if there is no input filename on the cmd line, panic if (token.Length() == 0) UsageL(); else { // Process any options while(token.Length() > 1 && token[0] == '-') { switch(token[1]) { case 'C': case 'c': // log to console ONLY iLogMode = ELogToConsole; break; case 'A': case 'a': iLogMode |= ELogConsoleFull; break; case 'F': case 'f': // log to file ONLY iLogMode = ELogToFile; break; case 'P': case 'p': // log to port AS WELL AS to console / file iLogMode |= ELogToPort; break; //This stops the emulator from thowing int 3 if a panic occurs in debug builds case 'T': case 't': User::SetJustInTime(EFalse); // -S flag removed - was for old Unit Test mode only // -A 'automated mode' removed - it's always automated break; case 'G': case 'g': { // ** guard timer override - get numeric value that follows TPtrC val = &token[2]; TLex lexTimeOut(val); if (lexTimeOut.Val(iGuardTimer) != KErrNone) UsageL(); } break; case 'm': case 'M': { if (token.Length()<=2) { // only -m found. must be -m<arg> with no space UsageL(); } TPtrC restOfLine = &token[2]; // this will be rest of command line TLex argument(restOfLine); TPtrC matchString = argument.NextToken(); // will be the argument itself ASSERT(matchString.Length()>1); iTestMatchString = matchString; } break; case 'Q': case 'q': { // This flag has been removed. This block is just to ensure that if used it wont panic } break; default: UsageL(); return; } token.Set(lex.NextToken()); } // save the input filename CFileName* scriptFileName = CFileName::NewLC(); *scriptFileName = token; // make the log file name from the script file name CFileName* logFileName = CFileName::NewLC(); *logFileName = token; RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 1")); // open the log file iLogClient->OpenLogFileL(logFileName->FileName(), iLogMode); RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 2")); iLogClient->LogExtra(__FILE8__, __LINE__, ESevrInfo, KTxtFrameworkStarting, &KTxtVersion(), &KTxtTarget(), &KTxtBuild()); RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 3")); // create a ParseScript object CScript* parseScript = CScript::NewLC(iTestUtils, iLogClient, iGuardTimer, iTestMatchString); RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 4")); // parse all scripts do { // get the next file *scriptFileName = token; // read in the script file if ( parseScript->OpenScriptFile(scriptFileName)) { // process it parseScript->ExecuteScriptL(); // display results summary parseScript->DisplayResults(); } // get the next token.Set(lex.NextToken()); } while ( token.Length()!=0 ); RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 5")); CleanupStack::PopAndDestroy(parseScript); // close the logging system iLogClient->CloseLogFile(); CleanupStack::PopAndDestroy(logFileName); CleanupStack::PopAndDestroy(scriptFileName); } }