diff -r 000000000000 -r 8e480a14352b messagingfw/biomsgfw/T_BIOMSG/SRC/t_biomsg.cpp --- /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 +#include +#include +#include + +#include "biotestutils.h" +#include "testframeutils.h" +#include "harness.h" +#include "parsers.h" +#include "msvtestutilsbase.h" + +#ifdef SYMBIAN_BOOKMARK_DATABASE +#include +#include +#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; iiLoadFileL(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; + }