--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/T_BIOMSG/SRC/t_biomsg.cpp Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,376 @@
+// Copyright (c) 2003-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:
+//
+
+/**
+ * @file
+ * Copyright (c) 2003 Symbian Ltd. All rights reserved.
+ *
+ * Name of test harness: T_BIO_S
+ *
+ * Owner: GKL
+ *
+ */
+
+#include <e32base.h>
+#include <e32test.h>
+#include <f32file.h>
+#include <bacline.h>
+
+#include "biotestutils.h"
+#include "testframeutils.h"
+#include "harness.h"
+#include "parsers.h"
+#include "msvtestutilsbase.h"
+
+#ifdef SYMBIAN_BOOKMARK_DATABASE
+#include <bookmarkdatabase.h>
+#include <bookmark.h>
+#endif // SYMBIAN_BOOKMARK_DATABASE
+
+// Name of test harness.
+_LIT(KBioTestName, "BIO Msg Tests");
+_LIT(KBioTestExeName, "T_BIOMSG");
+
+// Name of the main script file.
+_LIT(KScriptFileName, "c:\\msgtest\\biomsg\\scripts\\script.txt");
+
+// Where the test harness places the log file.
+_LIT(KMsvMsgLogsSrcPath, "c:\\MsgLogs\\");
+
+
+RFs g_rfs;
+
+void MoveLogsL(const TDesC& aTestScript)
+ {
+ // Move the test log directory and file.
+ //
+ // For example: test script "c:\msgtest\biomsg\Wapp\wapp0001.txt",
+ // under a WINS UDEB build, test harness name T_BIOMSG.
+ //
+ // dir src = c:\MsgLogs\T_BIOMSG
+ // dir dst = c:\MsgLogs\T_BIOMSG_wapp001
+ //
+ // file src = c:\MsgLogs\T_BIOMSG.WINS.DEB.LOG
+ // file dst = c:\MsgLogs\T_BIOMSG_wapp001.WINS.DEB.LOG
+
+ CFileMan* fileMan = CFileMan::NewL(g_rfs);
+ CleanupStack::PushL(fileMan);
+
+ //
+ // Determine dir name for src.
+ TFileName msgLogsSrc;
+
+ msgLogsSrc.Append(KMsvMsgLogsSrcPath); // Add "c:\MsgLogs\".
+ msgLogsSrc.Append(KBioTestExeName); // Add "T_BIOMSG".
+
+ //
+ // Determine dir name for dst.
+ TFileName msgLogsDst;
+ TInt fileErr;
+ TInt loc;
+ TInt len;
+
+ msgLogsDst = msgLogsSrc; // Add "c:\MsgLogs\T_BIOMSG".
+ 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.
+ CBioTestUtils::DoAppendVariantName(msgLogsSrc);
+ CBioTestUtils::DoAppendVariantName(msgLogsDst);
+
+ fileErr = fileMan->Move(msgLogsSrc, msgLogsDst);
+
+ CleanupStack::PopAndDestroy(fileMan);
+ }
+
+
+TInt RunTestL(RTest& aTest, const TDesC& aTestScript)
+ {
+ TInt err = KErrNone;
+
+#ifdef SYMBIAN_BOOKMARK_DATABASE
+ // Reset the bookmark database by deleting all bookmarks in root...
+ RBkDatabase bookmarkDb;
+ bookmarkDb.OpenL();
+ CleanupClosePushL(bookmarkDb);
+ RBkFolder rootFolder = bookmarkDb.OpenRootL();
+ CleanupClosePushL(rootFolder);
+ RBkNode bookmark;
+ const TInt bookmarkCount = rootFolder.Count();
+ for( TInt ii=0; ii<bookmarkCount; ++ii )
+ {
+ bookmark = rootFolder.OpenItemL(0);
+ CleanupClosePushL(bookmark);
+ if( bookmark.Type() == Bookmark::ETypeBookmark )
+ {
+ Bookmark::TItemId bookmarkId = bookmark.Id();
+ CleanupStack::PopAndDestroy(&bookmark);
+ TRAP_IGNORE(bookmarkDb.DeleteItemL(bookmarkId)); // ignore errors
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy(&bookmark);
+ }
+ }
+ bookmarkDb.CommitL();
+ CleanupStack::PopAndDestroy(2, &bookmarkDb); // rootFolder, bookmarkDb
+#endif // SYMBIAN_BOOKMARK_DATABASE
+
+ // Create the test script object, which will use the test script
+ CTestScript* script = CTestScript::NewL(g_rfs);
+ 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.
+ CBioMainSectionParser* mainSectionParser = CBioMainSectionParser::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;
+ }
+
+
+#ifndef CENREP_SOLID_AS_A_ROCK
+void doCleanEnvironmentL(RTest& aTest)
+ {
+
+ // central repository cleanup
+ CFileMan* fman = CFileMan::NewL(g_rfs);
+ CleanupStack::PushL(fman);
+ fman->Delete(_L("c:\\private\\10202be9\\*.*"));
+ CleanupStack::PopAndDestroy(fman);
+
+ // clean message store
+ CBioTestUtils* utils = CBioTestUtils::NewL(aTest);
+ CleanupStack::PushL(utils);
+ TRAPD(ignor, utils->CleanMessageFolderL());
+ CleanupStack::PopAndDestroy(utils);
+ }
+#endif
+
+
+TInt doMainL()
+ {
+ TInt err = KErrNone;
+
+ // Create the test object which we'll use for output etc.
+ RTest test(KBioTestName);
+
+ g_rfs.Connect();
+
+ // 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(g_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)
+ {
+#ifndef CENREP_SOLID_AS_A_ROCK
+ // MLM added to handle KErrCorrupts from CenRep !!!
+ doCleanEnvironmentL(test);
+#endif
+
+ 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 = g_rfs.IsFileOpen(scriptFileName->Des(), dummy);
+ if (fileErr == KErrNone)
+ {
+ // Start the test.
+ err = RunTestL(test, scriptFileName->Des());
+
+ // Move the output log.
+ MoveLogsL(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
+ {
+#ifndef CENREP_SOLID_AS_A_ROCK
+ // MLM added to handle KErrCorrupts from CenRep !!!
+ doCleanEnvironmentL(test);
+#endif
+
+ 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 = g_rfs.IsFileOpen(scriptFileName->Des(), dummy);
+ if (fileErr == KErrNone)
+ {
+ // Start the test.
+ err = RunTestL(test, scriptFileName->Des());
+
+ // Move the output log.
+ MoveLogsL(scriptFileName->Des());
+ }
+ else
+ {
+ test.Printf(KScriptNotFoundErr, scriptFileName);
+ User::After(5000000);
+ }
+ }
+ CleanupStack::PopAndDestroy(scriptFileName);
+ CleanupStack::PopAndDestroy(scheduler);
+
+ g_rfs.Close();
+ test.Close();
+
+ 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;
+ }