mmtestenv/mmtestfw/Source/TestFramework/TestFrameworkMain.cpp
author hgs
Tue, 02 Nov 2010 12:28:51 +0000
changeset 6 fe9d1bf55678
parent 0 b8ed18f6c07b
permissions -rw-r--r--
2010wk46_02
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     1
// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     2
// All rights reserved.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     3
// This component and the accompanying materials are made available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     4
// under the terms of "Eclipse Public License v1.0"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     5
// which accompanies this distribution, and is available
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     6
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     7
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     8
// Initial Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
     9
// Nokia Corporation - initial contribution.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    10
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    11
// Contributors:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    12
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    13
// Description:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    14
//
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    15
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    16
#include "TestFrameworkMain.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    17
#include "../../recog/TestFrameworkRecog.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    18
#include "script.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    19
#include "parseline.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    20
#include "Filename.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    21
#include "config.h"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    22
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    23
// Hurricane emulator only - start all services which we require to run tests.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    24
// Future enhancement :- add these startups to TestUtils
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    25
#if defined(__WINS__)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    26
IMPORT_C TInt FbsStartup();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    27
#endif
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    28
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    29
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    30
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    31
 * Literals : program information and usage
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    32
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    33
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    34
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    35
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    36
_LIT(KTxtFrameworkStarting, "%S %S %S starting....");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    37
//_LIT(KTxtUseExample,"Usage:\nTESTFRAMEWORK [-C] [-F] <file.script> [file.ini]"); // EABI warning removal
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    38
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    39
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    40
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    41
 * Compiler switches
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    42
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    43
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    44
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    45
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    46
#ifdef _WIN32
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    47
_LIT(KTxtTarget,"WINS");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    48
#else 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    49
#ifdef __MARM_THUMB__ 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    50
_LIT(KTxtTarget,"THUMB");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    51
#else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    52
_LIT(KTxtTarget,"ARM4");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    53
#endif
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    54
#endif
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    55
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    56
#ifdef _DEBUG
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    57
_LIT(KTxtBuild,"udeb");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    58
#else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    59
_LIT(KTxtBuild,"urel");
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    60
#endif
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    61
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    62
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    63
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    64
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    65
 * max length of command line
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    66
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    67
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    68
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    69
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    70
const TInt KMaxLenCmdLine = 256;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    71
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    72
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    73
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    74
 * Test Framework startup function.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    75
 * Creates an active scheduler for input if required, reads
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    76
 * the command line, starts the main test loop.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    77
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    78
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    79
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    80
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    81
void StartupL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    82
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    83
	CActiveScheduler* pA=new(ELeave) CActiveScheduler;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    84
	CleanupStack::PushL(pA);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    85
	CActiveScheduler::Install(pA);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    86
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    87
// Hurricane emulator only - start all services which we require to run tests.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    88
// Future enhancement :- add these startups to TestUtils
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    89
#if defined(__WINS__)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    90
	#ifndef EXCLUDE_FOR_UNITTEST
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    91
	FbsStartup();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    92
	#endif // EXCLUDE_FOR_UNITTEST
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    93
#endif
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    94
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    95
	// read the command line into cmd
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    96
	TPtr16 cmd(REINTERPRET_CAST(TUint16*,User::AllocLC(KMaxLenCmdLine*2)), 0, KMaxLenCmdLine);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    97
	cmd.Fill('\0', KMaxLenCmdLine);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    98
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
    99
	User::CommandLine(cmd);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   100
	cmd.UpperCase();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   101
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   102
	CTestFrameworkMain* tester = CTestFrameworkMain::NewLC();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   103
	tester->StartTestingL(cmd);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   104
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   105
	// NOTE. Currently there is no need to start the active scheduler, as the input console is
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   106
	// now at the server. This will however change when AOs are implemented to replace
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   107
	// the main client loop.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   108
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   109
	// CActiveScheduler::Start();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   110
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   111
	CleanupStack::PopAndDestroy(3);	//tester, pA, cmd
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   112
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   113
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   114
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   115
GLDEF_C TInt E32Main()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   116
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   117
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   118
	__UHEAP_MARK;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   119
	CTrapCleanup* cleanup = CTrapCleanup::New(); // get clean-up stack
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   120
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   121
	// start scheduler 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   122
	TRAPD(error, StartupL());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   123
	__ASSERT_ALWAYS(!error, User::Panic(_L("TestFramework"), error));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   124
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   125
	delete cleanup; // destroy clean-up stack
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   126
	__UHEAP_MARKEND;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   127
	return KErrNone;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   128
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   129
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   130
// Instructions for Console Display
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   131
// Please add new entries to the right hand column, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   132
// Precede number and text with "\t "
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   133
// Leave \n\ at end of each line except the last line
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   134
//_LIT(KTxtMainInstructions, "Welcome to TestFramework. Press Q to quit ");	// EABI warning removal
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   135
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   136
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   137
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   138
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   139
 * CTestFrameworkMain static constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   140
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   141
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   142
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   143
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   144
CTestFrameworkMain* CTestFrameworkMain::NewLC()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   145
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   146
	CTestFrameworkMain* s = new(ELeave) CTestFrameworkMain;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   147
	CleanupStack::PushL(s);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   148
	s->ConstructL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   149
	return s;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   150
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   151
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   152
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   153
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   154
 * CTestFrameworkMain first-phase constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   155
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   156
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   157
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   158
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   159
CTestFrameworkMain::CTestFrameworkMain()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   160
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   161
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   162
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   163
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   164
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   165
 * CTestFrameworkMain second-phase constructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   166
 * Loads log client and test utils.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   167
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   168
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   169
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   170
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   171
void CTestFrameworkMain::ConstructL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   172
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   173
	iLogClient	  = CLog::NewL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   174
	iLogMode	  = ELogToConsole | ELogToFile;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   175
	iTestUtils	  = CTestUtils::NewL(iLogClient);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   176
	iGuardTimer   = KNoGuardTimer;	// default value
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   177
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   178
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   179
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   180
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   181
 * CTestFrameworkMain destructor.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   182
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   183
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   184
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   185
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   186
CTestFrameworkMain::~CTestFrameworkMain()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   187
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   188
	delete iTestUtils;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   189
	delete iLogClient;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   190
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   191
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   192
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   193
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   194
 * CTestFrameworkMain - start testing.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   195
 * Calls main test loop.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   196
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   197
 * @param "const TDesC& aCmdLine"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   198
 *			The command line
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   199
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   200
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   201
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   202
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   203
void CTestFrameworkMain::StartTestingL(const TDesC& aCmdLine)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   204
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   205
	RunTestScriptL(aCmdLine);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   206
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   207
	RSemaphore sem;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   208
	TInt err = sem.OpenGlobal(KRecogSemaphoreName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   209
	if (err==KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   210
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   211
		// Tell the recognizer thread that we're finished
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   212
		sem.Signal();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   213
		sem.Close();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   214
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   215
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   216
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   217
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   218
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   219
 * Accessor : log client
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   220
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   221
 * @return	"CLog*"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   222
 *			The log client
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   223
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   224
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   225
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   226
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   227
CLog* CTestFrameworkMain::LogClient() const
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   228
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   229
	return iLogClient;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   230
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   231
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   232
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   233
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   234
 * Main testing loop.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   235
 * Read a script file, parse it and execute each test step in turn.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   236
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   237
 * @param "const TDesC& aCmdLine"
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   238
 *			The command line
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   239
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   240
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   241
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   242
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   243
void CTestFrameworkMain::RunTestScriptL(const TDesC& aCmdLine)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   244
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   245
	// use TLex to decode the cmd line
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   246
	TLex lex(aCmdLine);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   247
	TPtrC token=lex.NextToken();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   248
	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   249
	// if there is no input filename on the cmd line, panic
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   250
	if (token.Length() == 0) 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   251
		UsageL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   252
	else
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   253
		{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   254
		// Process any options
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   255
		while(token.Length() > 1 && token[0] == '-')
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   256
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   257
			switch(token[1])
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   258
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   259
				case 'C':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   260
				case 'c':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   261
					// log to console ONLY
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   262
					iLogMode = ELogToConsole;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   263
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   264
				case 'A':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   265
				case 'a':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   266
					iLogMode |= ELogConsoleFull;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   267
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   268
				case 'F':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   269
				case 'f':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   270
					// log to file ONLY
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   271
					iLogMode = ELogToFile; 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   272
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   273
				case 'P':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   274
				case 'p':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   275
					// log to port AS WELL AS to console / file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   276
					iLogMode |= ELogToPort;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   277
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   278
				//This stops the emulator from thowing int 3 if a panic occurs in debug builds
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   279
				case 'T':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   280
				case 't':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   281
					User::SetJustInTime(EFalse);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   282
				// -S flag removed - was for old Unit Test mode only
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   283
				// -A 'automated mode' removed - it's always automated
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   284
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   285
				case 'G':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   286
				case 'g':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   287
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   288
					// ** guard timer override - get numeric value that follows
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   289
					TPtrC val = &token[2];
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   290
					TLex lexTimeOut(val);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   291
					if (lexTimeOut.Val(iGuardTimer) != KErrNone)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   292
						UsageL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   293
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   294
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   295
				case 'm':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   296
				case 'M':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   297
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   298
					if (token.Length()<=2)
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   299
						{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   300
						// only -m found. must be -m<arg> with no space
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   301
						UsageL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   302
						}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   303
					TPtrC restOfLine = &token[2]; // this will be rest of command line
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   304
					TLex argument(restOfLine);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   305
					TPtrC matchString = argument.NextToken(); // will be the argument itself
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   306
					ASSERT(matchString.Length()>1);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   307
					iTestMatchString = matchString;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   308
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   309
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   310
				case 'Q':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   311
				case 'q':
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   312
					{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   313
					// This flag has been removed.  This block is just to ensure that if used it wont panic
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   314
					}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   315
					break;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   316
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   317
				default:
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   318
					UsageL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   319
					return;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   320
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   321
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   322
			token.Set(lex.NextToken());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   323
			}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   324
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   325
		// save the input filename
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   326
		CFileName* scriptFileName = CFileName::NewLC();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   327
		*scriptFileName = token;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   328
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   329
		// make the log file name from the script file name
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   330
		CFileName* logFileName = CFileName::NewLC();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   331
		*logFileName = token;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   332
		RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 1"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   333
		// open the log file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   334
		iLogClient->OpenLogFileL(logFileName->FileName(), iLogMode);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   335
		RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 2"));	
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   336
		iLogClient->LogExtra(__FILE8__, __LINE__, ESevrInfo,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   337
				KTxtFrameworkStarting, &KTxtVersion(), &KTxtTarget(), &KTxtBuild());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   338
		RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 3"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   339
		// create a ParseScript object
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   340
		CScript* parseScript = CScript::NewLC(iTestUtils, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   341
											  iLogClient, 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   342
											  iGuardTimer,
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   343
											  iTestMatchString);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   344
		RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 4"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   345
		// parse all scripts
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   346
		do
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   347
			{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   348
			// get the next file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   349
			*scriptFileName = token;
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   350
				
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   351
			// read in the script file
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   352
			if ( parseScript->OpenScriptFile(scriptFileName))
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   353
				{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   354
				// process it
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   355
				parseScript->ExecuteScriptL();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   356
				// display results summary
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   357
				parseScript->DisplayResults();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   358
				}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   359
			// get the next
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   360
			token.Set(lex.NextToken());
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   361
			} while ( token.Length()!=0 );
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   362
		RDebug::Print(_L("TestFrameWorkMain.cpp: RunTestScriptL 5"));
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   363
		CleanupStack::PopAndDestroy(parseScript);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   364
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   365
		// close the logging system
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   366
		iLogClient->CloseLogFile();
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   367
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   368
		CleanupStack::PopAndDestroy(logFileName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   369
		CleanupStack::PopAndDestroy(scriptFileName);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   370
		}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   371
	}
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   372
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   373
/**
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   374
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   375
 * Display command line format.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   376
 * 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   377
 * @xxxx
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   378
 *
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   379
 */
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   380
void CTestFrameworkMain::UsageL()
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   381
	{
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   382
	// If command line is erroneous, raise a panic. 
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   383
	// At this point, there may be no log outputs at all.
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   384
	User::Panic(_L("TestFramework"), 2);
b8ed18f6c07b 2010wk40
hgs
parents:
diff changeset
   385
	}