--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BIOCTSRC/T_BIOC.CPP Mon Jan 18 20:36:02 2010 +0200
@@ -0,0 +1,473 @@
+// Copyright (c) 1999-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:
+//
+
+#include "TESTENV.H"
+#include <e32test.h>
+#include <e32uid.h>
+
+#include <msvruids.h>
+#include <msvids.h>
+#include <msvuids.h>
+
+#include <mtmdef.h>
+
+#include <txtrich.h> // rich text stuff
+#include <txtfmlyr.h> // para format gubbins..
+
+#include <bsp.h>
+#include "biotestutils.h"
+
+
+
+//
+class TestScheduler : public CActiveScheduler
+ {
+ public:
+ void Error (TInt aError) const;
+ };
+
+//
+void TestScheduler::Error(TInt /*anError*/) const
+ {
+ CActiveScheduler::Stop();
+ }
+
+
+// local variables etc //
+
+LOCAL_D RTest test(_L("BIOC.dll Testrig"));
+LOCAL_D CTrapCleanup* theCleanup;
+LOCAL_D RFs theFs;
+LOCAL_D TestScheduler* scheduler;
+
+LOCAL_D TMsvSelectionOrdering msvSelectionOrdering;
+
+#define KPeriod 10000 // period of timer
+
+//
+
+//
+class TestUiTimer : public CTimer
+ {
+public:
+ static TestUiTimer* NewLC();
+ ~TestUiTimer();
+
+ void RunL();
+ void DoCancel();
+ void ConstructL();
+ void IssueRequest();
+ void SetOperation(CMsvOperation*);
+ TTimeIntervalMicroSeconds32 period;
+protected:
+ TestUiTimer();
+
+ CMsvOperation* iOperation;
+ };
+
+//
+TestUiTimer* TestUiTimer::NewLC()
+ {
+ TestUiTimer* self = new(ELeave) TestUiTimer();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+TestUiTimer::TestUiTimer()
+ : CTimer(5)
+ {
+ period = KPeriod;
+ }
+
+TestUiTimer::~TestUiTimer()
+ {
+ delete iOperation;
+ }
+
+void TestUiTimer::ConstructL()
+ {
+ CTimer::ConstructL();
+ CActiveScheduler::Add(this);
+ }
+
+void TestUiTimer::IssueRequest()
+ {
+ After(period);
+ }
+
+void TestUiTimer::SetOperation(CMsvOperation *aOperation)
+ {
+ if(iOperation)
+ {
+ delete iOperation;
+ iOperation=NULL;
+ }
+ iOperation = aOperation;
+ }
+
+void TestUiTimer::DoCancel()
+ {
+ CTimer::DoCancel();
+// delete iOperation;
+// iOperation = NULL;
+ }
+
+void TestUiTimer::RunL()
+ {
+ // display the current progress
+ if(iOperation!=NULL)
+ {
+ TBioProgress temp;
+ TPckgC<TBioProgress> paramPack(temp);
+
+ const TDesC8& progBuf = iOperation->ProgressL();
+ paramPack.Set(progBuf);
+ TBioProgress progress=paramPack();
+
+ test.Console()->SetPos(0, 13);
+ test.Printf(TRefByValue<const TDesC>_L(" Operation: %d"),progress.iBioState);
+ test.Printf(TRefByValue<const TDesC>_L(" Progress: Error: %d\n"),
+ progress.iErrorCode);
+
+ }
+ IssueRequest();
+ };
+
+
+//
+class CNbscTester : public CBase
+ {
+public:
+ // Construction
+ static CNbscTester* NewLC();
+
+ // Destruction
+ ~CNbscTester();
+
+ // Issue request
+ void StartL();
+
+ void TestFindBodyL(const TDesC& aText);
+ void TestFindSubjectL(const TDesC& aText);
+
+private:
+ CNbscTester();
+ void ConstructL();
+ // functions
+ void CreateParserL();
+ void ReParseL();
+ void ReProcessL();
+ void ProcessError(TInt& aError);
+
+ // Data members defined by this class
+ CMsvEntrySelection* iSelection;
+ CMsvEntrySelection* iMsvSelection; // selection of test messages
+ CBioTestUtils* iBioTestUtils;
+ CBIOClientMtm* iBioClientMtm;
+
+ TUint iMenuState;
+ TUint iPrevState;
+
+ TUint iParseState;
+ TestUiTimer* iTimer;
+
+ TInt iNumMessages;
+ TInt iMsgCtr;
+ TInt iTestCtr;
+ TBool iAllTestsSuccessful;
+ enum
+ {
+ EParserIdle,
+ EParserCreate,
+ EParserParse,
+ EParserCommit
+ };
+ };
+
+//
+CNbscTester* CNbscTester::NewLC()
+ {
+ CNbscTester* self = new(ELeave) CNbscTester();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+CNbscTester::CNbscTester()
+ {
+ }
+
+void CNbscTester::ConstructL()
+ {
+ // create test utilities
+ iBioTestUtils = CBioTestUtils::NewL(test, ETuGoClientSide | ETuCleanMessageFolder);
+
+ test.Printf(_L("Creating services"));
+ iBioTestUtils->CreateServicesL();
+
+ User::After(2500000);
+
+ iBioTestUtils->TestStart(1,_L("Instant client"));
+ TRAPD(error,iBioTestUtils->InstantiateClientMtmsL(););
+ iBioTestUtils->TestFinish(1,error);
+ if(error)
+ User::Leave(error);
+
+ iBioClientMtm = iBioTestUtils->iBioClientMtm;
+
+ iSelection = new (ELeave) CMsvEntrySelection;
+ CleanupStack::PushL(iSelection);
+ CleanupStack::Pop(); //iSelection
+ iTimer = TestUiTimer::NewLC();
+ CleanupStack::Pop(); // iTimer
+ iParseState = EParserCreate;
+ iAllTestsSuccessful = ETrue;
+ }
+
+CNbscTester::~CNbscTester()
+ {
+ delete iSelection;
+ delete iMsvSelection;
+ delete iTimer;
+ delete iBioTestUtils;
+ }
+
+void CNbscTester::StartL()
+ {
+ iBioTestUtils->TestStart(iTestCtr,_L("Generate Test Messages"));
+ iMsvSelection = iBioTestUtils->GenerateMessagesL();
+ iNumMessages = iMsvSelection->Count();
+ iMsgCtr = 0;
+ //
+ iTestCtr++;
+
+ for(TInt i =0; i < iNumMessages; i++)
+ {
+ iSelection->Reset();
+
+ iSelection->AppendL((*iMsvSelection)[i]);
+
+ iBioTestUtils->TestStart(iTestCtr,_L("Parse and process"));
+ TRAPD(error,CreateParserL());
+ ProcessError(error);
+ if(error == KErrNone)
+ {
+ iBioTestUtils->TestFinish(iTestCtr);
+ iTestCtr++;
+ iBioTestUtils->TestStart(iTestCtr,_L("Reparse"));
+ TRAP(error,ReParseL());
+ ProcessError(error);
+ iBioTestUtils->TestFinish(iTestCtr,error);
+ if(error == KErrNone)
+ {
+ iTestCtr++;
+ iBioTestUtils->TestStart(iTestCtr,_L("Reprocess"));
+ TRAP(error,ReProcessL());
+ ProcessError(error);
+ if(error==KErrNone)
+ iBioTestUtils->TestFinish(iTestCtr);
+ else
+ {
+ iBioTestUtils->TestFinish(iTestCtr,error);
+ iAllTestsSuccessful = EFalse;
+ }
+ }
+ }
+ else
+ {
+ iBioTestUtils->TestFinish(iTestCtr,error);
+ iAllTestsSuccessful = EFalse;
+ }
+
+ iTestCtr++;
+ iBioTestUtils->TestStart(iTestCtr,_L("test find in body"));
+ TRAP(error,TestFindBodyL(_L("yashar")));
+ iBioTestUtils->TestFinish(iTestCtr,error);
+
+ iTestCtr++;
+ iBioTestUtils->TestStart(iTestCtr,_L("test find in subject"));
+ TRAP(error,TestFindSubjectL(_L("Configuration")));
+ iBioTestUtils->TestFinish(iTestCtr,error);
+ }
+ if(iAllTestsSuccessful)
+ iBioTestUtils->TestHarnessCompleted();
+ }
+
+void CNbscTester::ProcessError(TInt& aError)
+ {
+ if(aError==KErrNotSupported)
+ {
+ aError = KErrNone;
+ iBioTestUtils->WriteComment(_L("Unsupported operation"));
+ }
+ else if((aError <= -500 && aError >= -521) || (aError <= -600 && aError >= -614))
+ {
+ aError = KErrNone;
+ iBioTestUtils->WriteComment(_L("Corrupt or missing Bio-data"));
+ }
+ }
+
+//
+// Try a get a parser
+//
+void CNbscTester::CreateParserL()
+ {
+ TBuf8<1> aParameter;
+ CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+ wait->iStatus = KRequestPending;
+ wait->Start();
+
+ CMsvOperation* operation = iBioClientMtm->InvokeAsyncFunctionL( KBiosMtmParseThenProcess, *iSelection, aParameter, wait->iStatus);
+
+ iTimer->SetOperation(operation);
+ iTimer->IssueRequest();
+
+ CActiveScheduler::Start();
+
+ TInt error = operation->iStatus.Int();
+ iTimer->Cancel();
+ CleanupStack::PopAndDestroy(); // wait
+ if(error !=KErrNone)
+ User::Leave(error);
+ }
+
+//
+// Interpret the message
+//
+void CNbscTester::ReParseL()
+ {
+ TBuf8<1> parameter;
+
+ CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+ wait->iStatus = KRequestPending;
+ wait->Start();
+
+ CMsvOperation* operation = iBioClientMtm->InvokeAsyncFunctionL( KBiosMtmParse, *iSelection, parameter, wait->iStatus);
+
+ iTimer->SetOperation(operation);
+ iTimer->IssueRequest();
+
+ CActiveScheduler::Start();
+ iTimer->Cancel();
+ TInt error = operation->iStatus.Int();
+
+ CleanupStack::PopAndDestroy(); // wait
+ if(error !=KErrNone)
+ User::Leave(error);
+ }
+
+//
+// Act on the changes
+//
+void CNbscTester::ReProcessL()
+ {
+ TBuf8<1> aParameter;
+ CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+ wait->iStatus = KRequestPending;
+ wait->Start();
+
+ CMsvOperation* operation = iBioClientMtm->InvokeAsyncFunctionL(KBiosMtmProcess, *iSelection, aParameter, wait->iStatus);
+
+ iTimer->SetOperation(operation);
+ iTimer->IssueRequest();
+
+ CActiveScheduler::Start();
+
+ TInt error = operation->iStatus.Int();
+ iTimer->Cancel();
+
+ CleanupStack::PopAndDestroy(); // wait
+ if(error !=KErrNone)
+ User::Leave(error);
+ }
+
+void CNbscTester::TestFindBodyL(const TDesC& aText)
+ {
+ iBioClientMtm->SwitchCurrentEntryL((*iSelection)[0]);
+ iBioClientMtm->LoadMessageL();
+ TMsvPartList retPart = iBioClientMtm->Find(aText,KMsvMessagePartBody);
+ if(retPart&KMsvMessagePartBody)
+ iBioTestUtils->WriteComment(_L("Found in body text"));
+ else
+ iBioTestUtils->WriteComment(_L("Not found in body text"));
+
+ TRAP_IGNORE(iBioClientMtm->SaveMessageL());
+ TRequestStatus st;
+ TMsvId s =0;
+ TRAP_IGNORE(iBioClientMtm->ReplyL(s,retPart,st));
+ TRAP_IGNORE(iBioClientMtm->ForwardL(s,retPart,st));
+ iBioClientMtm->ValidateMessage(retPart);
+
+ const TBufC<1> yy;
+ TRAP_IGNORE(iBioClientMtm->AddAddresseeL(yy) );
+ TRAP_IGNORE(iBioClientMtm->AddAddresseeL(yy ,yy) );
+ TInt ii = 0;
+ iBioClientMtm->RemoveAddressee(ii);
+ TBuf8<1> yy1;
+ const CMsvEntrySelection* selection1 = new(ELeave)CMsvEntrySelection();
+ TRAP_IGNORE(iBioClientMtm->InvokeSyncFunctionL( ii,*selection1, yy1));
+
+ TUid parserUid =TUid::Uid(10);
+ iBioClientMtm->QueryCapability(parserUid,ii);
+ delete selection1;
+ }
+
+void CNbscTester::TestFindSubjectL(const TDesC& aText)
+ {
+ iBioClientMtm->LoadMessageL();
+ TMsvPartList retPart = iBioClientMtm->Find(aText,KMsvMessagePartDescription);
+ if(retPart&KMsvMessagePartDescription)
+ iBioTestUtils->WriteComment(_L("Found in Subject"));
+ else
+ iBioTestUtils->WriteComment(_L("Not found in sbject"));
+ }
+
+LOCAL_C void doMainL()
+ {
+ scheduler = new (ELeave) TestScheduler;
+ CActiveScheduler::Install( scheduler );
+
+ User::LeaveIfError(theFs.Connect());
+ theFs.SetSessionPath(_L("C:\\"));
+
+ test.Console()->SetPos(0, 16);
+
+ CNbscTester* activeConsole = CNbscTester::NewLC();
+ CleanupStack::Pop();
+ activeConsole->StartL(); //Start the active console
+ // Cleanup exit
+ delete activeConsole;
+
+ theFs.Close( );
+ delete scheduler;
+
+ }
+
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ test.Start(_L("T_BIOC - Test Harness"));
+ theCleanup=CTrapCleanup::New();
+ TRAPD(ret,doMainL());
+ test(ret==KErrNone);
+ delete theCleanup;
+ test.Console()->SetPos(0, 13);
+ test.End();
+ test.Close();
+ __UHEAP_MARKEND;
+ return(KErrNone);
+ }