--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/obexmtms/TObexMTM/SRC/T_main.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,361 @@
+// Copyright (c) 2002-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// $Workfile: t_main.cpp $
+// $Author: Stevep $
+// $Revision: 6 $
+// $Date: 27/03/02 11:13 $
+//
+//
+
+
+#include <e32std.h>
+#include <c32comm.h>
+#include <bacline.h>
+
+#include "obextestutils.h"
+#include "harness.h"
+#include "parsers.h"
+#include "obexparsers.h"
+
+
+// Name of test harness.
+_LIT(KObexTestName, "OBEX Mtm Tests");
+_LIT(KObexTestExeName, "T_OBEXMTM");
+
+//Name of the main script file.
+_LIT(KScriptFileName, "c:\\msgtest\\obexsmoke\\scripts\\script.txt");
+
+// Where the test harness places the log file.
+_LIT(KMsvMsgLogsSrcPath, "c:\\MsgLogs\\");
+
+// Device drivers.
+#if defined (__WINS__)
+#define PDD_NAME _L("ECDRV")
+#define LDD_NAME _L("ECOMM")
+#else // __GCC32__
+#define PDD_NAME _L("EUART2")
+#define LDD_NAME _L("ECOMM")
+#define FIR_PDD_NAME _L("DIFIR") // Brutus FIR PDD
+#define FIR_LDD_NAME _L("EFIR") // Brutus FIR LDD
+#endif
+
+
+void AppendVariantName(TDes& aFileName)
+ {
+#if defined(__WINS__) && defined(__WINSCW__)
+ aFileName.Append(_L(".WINSCW."));
+#elif(__WINS__)
+ aFileName.Append(_L(".WINS."));
+#endif
+#if (defined(__THUMB__) || defined(__MARM_THUMB__))
+ aFileName.Append(_L(".THUMB."));
+#endif
+#if (defined(__ARMI__) || defined(__MARM_ARMI__))
+ aFileName.Append(_L(".ARMI."));
+#endif
+#if (defined(__ARM4__) || defined(__MISA__) || defined(__MARM_ARM4__))
+ aFileName.Append(_L(".ARM4."));
+#endif
+
+#if defined(_DEBUG)
+ aFileName.Append(_L("DEB."));
+#else
+ aFileName.Append(_L("REL."));
+#endif
+
+ aFileName.Append(_L("LOG"));
+ }
+
+
+void MoveLogsL(RFs& aRfs, const TDesC& aTestScript)
+ {
+ // Move the test log directory and file.
+ //
+ // For example: test script "c:\msgtest\mmssmoke\scripts\MTM_Registering_Script.txt",
+ // under a WINS UDEB build, test harness name T_OBEXMTM.
+ //
+ // dir src = c:\MsgLogs\T_OBEXMTM
+ // dir dst = c:\MsgLogs\T_OBEXMTM_MTM_Registering_Script
+ //
+ // file src = c:\MsgLogs\T_OBEXMTM.WINS.DEB.LOG
+ // file dst = c:\MsgLogs\T_OBEXMTM_MTM_Registering_Script.WINS.DEB.LOG
+
+ CFileMan* fileMan = CFileMan::NewL(aRfs);
+ CleanupStack::PushL(fileMan);
+
+ //
+ // Determine dir name for src.
+ TFileName msgLogsSrc;
+
+ msgLogsSrc.Append(KMsvMsgLogsSrcPath); // Add "c:\MsgLogs\".
+ msgLogsSrc.Append(KObexTestExeName); // Add "T_OBEXMTM".
+
+ //
+ // Determine dir name for dst.
+ TFileName msgLogsDst;
+ TInt fileErr;
+ TInt loc;
+ TInt len;
+
+ msgLogsDst = msgLogsSrc; // Add "c:\MsgLogs\T_OBEXMTM".
+ msgLogsDst.Append('_'); // Add "_".
+
+ // Add test name.
+ len = aTestScript.Length();
+ loc = aTestScript.LocateReverse('\\');
+ msgLogsDst.Append(aTestScript.Right(len - loc - 1));
+
+ // Remove the ".ext".
+ msgLogsDst = msgLogsDst.Left(msgLogsDst.Locate('.'));
+
+ //
+ // Move the dir.
+ fileErr = fileMan->Move(msgLogsSrc, msgLogsDst);
+
+ // Move will not delete existing directories, so we have to do it ourself.
+ // The documentation says it will delete directories !!!!
+ if (fileErr == KErrAlreadyExists)
+ {
+ msgLogsDst.Append('\\'); // To ensure we delete the correct directory.
+ fileErr = fileMan->RmDir(msgLogsDst);
+ msgLogsDst = msgLogsDst.Left(msgLogsDst.Length() - 1); // Remove '\' again.
+ if (fileErr == KErrNone)
+ fileErr = fileMan->Move(msgLogsSrc, msgLogsDst);
+ }
+
+ //
+ // Now move the file. Append ".WINS.DEB.LOG" to src and dst.
+ AppendVariantName(msgLogsSrc);
+ AppendVariantName(msgLogsDst);
+
+ fileErr = fileMan->Move(msgLogsSrc, msgLogsDst);
+
+ CleanupStack::PopAndDestroy(fileMan);
+ }
+
+
+TInt RunTestL(RFs& aRfs, RTest& aTest, const TDesC& aTestScript)
+ {
+ TInt err = KErrNone;
+
+ // Create the test script object, which will use the test script
+ CTestScript* script = CTestScript::NewL(aRfs);
+ CleanupStack::PushL(script);
+
+ script->LoadFileL(aTestScript);
+
+ // Create the main test harness, to which all test states will
+ // be appended.
+ CMainTestHarness* mainTest = CMainTestHarness::NewL(aTest);
+ CleanupStack::PushL(mainTest);
+
+ TTestDebugInfo debugInfo(*script, 0, 0);
+
+ mainTest->SetDebugInfo(debugInfo);
+
+ // Create a new section parser.
+ CObexMainSectionParser* mainSectionParser = CObexMainSectionParser::NewL(*mainTest, *script);
+ CleanupStack::PushL(mainSectionParser);
+
+ // Attempt to parse the script
+ TRAP(err, mainSectionParser->ParseL());
+ if (err == KErrNone)
+ {
+ // If we've parsed the script OK, attempt to run the test.
+ // The "waiter" object is provided just in case we don't
+ // want to start and stop the active scheduler.
+ CTestActive* waiter = new (ELeave) CTestActive;
+ CleanupStack::PushL(waiter);
+
+ waiter->StartL();
+ mainTest->StartL(waiter->iStatus);
+ CActiveScheduler::Start();
+ err = waiter->iStatus.Int();
+
+ CleanupStack::PopAndDestroy(waiter);
+ }
+
+ CleanupStack::PopAndDestroy(mainSectionParser);
+ CleanupStack::PopAndDestroy(mainTest);
+ CleanupStack::PopAndDestroy(script);
+
+ return err;
+ }
+
+
+TInt doMainL()
+ {
+ TInt err = KErrNone;
+
+ // Create the test object which we'll use for output etc.
+ RTest test(KObexTestName);
+ CleanupClosePushL(test);
+
+ // Load Device drivers ... may have to move this...
+
+#ifdef __EPOC32__
+ StartC32();
+#endif
+ User::LoadPhysicalDevice(PDD_NAME);
+ User::LoadLogicalDevice(LDD_NAME);
+#ifdef __EPOC32__
+ User::LoadPhysicalDevice(FIR_PDD_NAME);
+ User::LoadLogicalDevice(FIR_LDD_NAME);
+#endif
+
+ // Start the file system.
+ RFs rfs;
+ User::LeaveIfError(rfs.Connect());
+ CleanupClosePushL(rfs);
+
+ // Start a new active scheduler.
+ CActiveScheduler* scheduler = new (ELeave) CActiveScheduler;
+ CActiveScheduler::Install(scheduler);
+ CleanupStack::PushL(scheduler);
+
+ // Name of the actual script being executed.
+ HBufC* scriptFileName = HBufC::NewLC(KMaxFileName);
+ TPtr strPtr = scriptFileName->Des();
+
+ _LIT(KInputScriptParameterId, "-i");
+ _LIT(KScriptNotFoundErr, "%S not found!\n\n");
+
+ // Handle command line arguments
+ CCommandLineArguments* args = CCommandLineArguments::NewLC();
+ TInt argCount = args->Count();
+ TInt currArg = 0;
+
+ // Search for "-i" parameter.
+ while ((currArg < argCount) && args->Arg(currArg).Compare(KInputScriptParameterId))
+ {
+ currArg++;
+ }
+
+ // Input script filename argument NOT present
+ //
+ // Run multiple test scripts, held in KScriptFileName.
+ if ((currArg == argCount) || (currArg == (argCount - 1)))
+ {
+ CleanupStack::PopAndDestroy(args); // Done with arguments.
+
+ // Load the main script file, used to determine which actual test scripts are run.
+ CTestScript* mainScript = CTestScript::NewL(rfs);
+ CleanupStack::PushL(mainScript);
+
+ if (mainScript->LoadFileL(KScriptFileName))
+ {
+ CTestScript::TTestScriptString line;
+ TBool lineGot = false;
+ TInt linePos = 0;
+
+
+ // For each valid line in the main script file, run the test.
+ lineGot = mainScript->GetLineL(line, linePos);
+ while (lineGot)
+ {
+ if (line.Length() > 0)
+ {
+ TInt fileErr;
+ TBool dummy = TRUE;
+
+
+ // Determine the test script file name and path.
+ strPtr.Copy(line);
+ strPtr.Insert(0, KScriptFileName().Left(KScriptFileName().LocateReverse('\\') + 1)); // inserts path
+
+ // Ensure file exsits.
+ fileErr = rfs.IsFileOpen(scriptFileName->Des(), dummy);
+ if (fileErr == KErrNone)
+ {
+ // Start the test.
+ err = RunTestL(rfs, test, scriptFileName->Des());
+
+ // Move the output log.
+ MoveLogsL(rfs, scriptFileName->Des());
+ }
+ }
+
+ else
+ {
+ test.Printf(KScriptNotFoundErr, scriptFileName);
+ }
+
+ linePos += line.Length() + 2; // 2 for cr/lf pair.
+ lineGot = mainScript->GetLineL(line, linePos);
+ }
+ }
+
+ else
+ {
+ test.Printf(KScriptNotFoundErr, &KScriptFileName);
+ User::After(5000000);
+ }
+
+ CleanupStack::PopAndDestroy(mainScript);
+ }
+
+ // Run single test script.
+ else
+ {
+ TInt fileErr;
+ TBool dummy = TRUE;
+
+ // Determine the test script file name and path.
+ strPtr.Copy(args->Arg(currArg + 1));
+ strPtr.Insert(0, KScriptFileName().Left(KScriptFileName().LocateReverse('\\') + 1)); // inserts path
+
+ CleanupStack::PopAndDestroy(args); // Done with arguments.
+
+ // Ensure file exsits.
+ fileErr = rfs.IsFileOpen(scriptFileName->Des(), dummy);
+ if (fileErr == KErrNone)
+ {
+ // Start the test.
+ err = RunTestL(rfs, test, scriptFileName->Des());
+
+ // Move the output log.
+ MoveLogsL(rfs, scriptFileName->Des());
+ }
+ else
+ {
+ test.Printf(KScriptNotFoundErr, scriptFileName);
+ User::After(5000000);
+ }
+ }
+
+ CleanupStack::PopAndDestroy(scriptFileName);
+ CleanupStack::PopAndDestroy(scheduler);
+ CleanupStack::PopAndDestroy(); // rfs
+ CleanupStack::PopAndDestroy(); // test
+
+ return err;
+ }
+
+
+LOCAL_D CTrapCleanup* theCleanup;
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ theCleanup=CTrapCleanup::New();
+
+ TInt status = KErrNone;
+
+ TRAPD(ret, status = doMainL());
+
+ delete theCleanup;
+ __UHEAP_MARKEND;
+ User::Heap().Check();
+ return status;
+ }