--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingfw/biomsgfw/BITSTSRC/TCBIOGEN.CPP Fri Jun 04 10:32:16 2010 +0100
@@ -0,0 +1,493 @@
+// 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:
+// Test harness for CBioClientSideTestUtilities.
+//
+// BIO messages are created by synchronous calls....
+
+#pragma warning( disable : 4100 )
+
+// Includes...
+#include <e32test.h>
+#include <e32hal.h>
+#include <e32uid.h>
+#include <msvapi.h>
+#include <msvuids.h>
+#include <msvids.h>
+#include <f32fsys.h>
+#include <s32file.h>
+#include <barsc.h>
+#include <msvreg.h>
+#include <txtrich.h> // rich text stuff
+#include <txtfmlyr.h> // para format gubbins..
+
+#include <biouids.h> // Important defines for use in the BIO messaging project
+#include <bitsids.h> //Message uids defines for the Test harnesses
+#include "biotestutils.h"
+
+// Uncomment following define to print the details to screen
+// Difficult to view as there's so much information
+// Constants ids.
+
+
+// Classes defined/used
+class CTestScheduler;
+class CObserverTester;
+class CDummySessionObserver;
+
+// Global functions..
+// functions()
+GLDEF_C void doMainL();
+GLDEF_C TInt E32Main();
+
+// Resources..
+GLDEF_C RTest test(_L("BIO Message Generator Test Rig"));
+LOCAL_D CTrapCleanup* theCleanup;
+LOCAL_D CTestScheduler* theScheduler;
+LOCAL_D RFs rFs;
+
+// States for the tester
+typedef enum
+ {
+ EStart,
+ EReadingFiles,
+ ECreatingMessages,
+ EGeneratingResults,
+ EStop
+ } TTesterState;
+
+//
+// CTestScheduler - test active scheduler..
+//
+class CTestScheduler : public CActiveScheduler
+ {
+ public:
+ // inline
+ void Error(TInt aError) const;
+ };
+
+void CTestScheduler::Error(TInt anError) const
+ {
+ CActiveScheduler::Stop();
+ test.Printf(_L("\nLeave signalled, reason=%d\n"),anError);
+ }
+
+//
+
+//
+// //
+// CClientSideMessGeneratorTester - class definition //
+// //
+//
+
+class CClientSideMessGeneratorTester : public CActive
+ {
+ // public API
+ public:
+ static CClientSideMessGeneratorTester * NewL(TTimeIntervalMicroSeconds32 aTime);
+ static CClientSideMessGeneratorTester * NewLC(TTimeIntervalMicroSeconds32 aTime);
+ ~CClientSideMessGeneratorTester ();
+
+ // Starts everything off
+ void StartL();
+ // Sets the active scheduler going
+ void QueueOperationAsync(TInt aErr);
+
+ // Asks Message server to enumerate the results..
+ TInt GenerateResults();
+ void DoGenerateResultsL();
+
+ protected:
+ CClientSideMessGeneratorTester (TTimeIntervalMicroSeconds32 aTime);
+ void ConstructL();
+ void CreateFilenameArrayL();
+ void GenerateNextMessageL();
+ TInt DoGenerateMessages();
+ void InitialiseTesterL();
+ void SetMessageType(const TDesC& aFileName);
+
+#ifdef _TBIOTEST_LOGGING_
+ // Additional Logging functionality
+ void LogNewMessageDetails(TMsvId amessageId);
+ void ChangeELineBreaksToLF(const TDesC& aDesIn, TBuf<1024>& aBuffer);
+ TBool IsEOL( TChar ch); // TUint8 ch );
+#endif //_TBIOTEST_LOGGING_
+
+ private: // Active Object functions
+ void DoCancel();
+ void RunL();
+
+ private:
+ // Resources
+ CBioTestUtils* iBIOGenerator;
+ RTimer iTimer;
+
+ CDir* iDir;
+ TInt iNumFiles;
+ TInt iFilesProcessed;
+ TInt iMessagesCreated;
+ TBIOMessageType iCurrentMessageType;
+
+ // States
+ TTesterState iState;
+ // Service Ids
+ TMsvId iBIOServiceId;
+ TMsvId iNewEntryId;
+ // General.
+ TTimeIntervalMicroSeconds32 iNotificationPeriod;
+ TBool iReleaseContextOnCreate;
+
+ TMsvLocalOperationProgress iProgress;
+ TPckgBuf<TMsvLocalOperationProgress> iLocProgressBuf;
+ };
+
+//
+// //
+// Implementation The tester class.. //
+// //
+//
+
+CClientSideMessGeneratorTester * CClientSideMessGeneratorTester ::NewL(TTimeIntervalMicroSeconds32 aTime)
+ {
+ CClientSideMessGeneratorTester * self =
+ CClientSideMessGeneratorTester ::NewLC(aTime);
+ CleanupStack::Pop();
+ return self;
+ }
+
+CClientSideMessGeneratorTester * CClientSideMessGeneratorTester ::NewLC(TTimeIntervalMicroSeconds32 aTime)
+ {
+ CClientSideMessGeneratorTester * self =
+ new (ELeave) CClientSideMessGeneratorTester (aTime);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+CClientSideMessGeneratorTester ::CClientSideMessGeneratorTester (TTimeIntervalMicroSeconds32 aTime)
+: CActive(EPriorityNormal),
+iNotificationPeriod(aTime)
+ {
+ }
+
+CClientSideMessGeneratorTester ::~CClientSideMessGeneratorTester ()
+ {
+ // NB don't delete the Logger or Printer objects because this object doesn't own them
+ Cancel();
+
+ delete iDir;
+ //
+ delete iBIOGenerator;
+ }
+
+void CClientSideMessGeneratorTester ::ConstructL()
+ {
+ // Create the SMS Test Message Utility object
+ iBIOGenerator = CBioTestUtils::NewL(test);
+ iBIOGenerator->GoClientSideL();
+
+ iNumFiles = 0;
+ iFilesProcessed = 0;
+ iMessagesCreated = 0;
+
+ // Add ourselves to the active scheduler
+ User::LeaveIfError(iTimer.CreateLocal());
+ CActiveScheduler::Add(this);
+ }
+
+//
+// //
+// Start the tester off //
+// //
+//
+void CClientSideMessGeneratorTester ::StartL()
+ {
+ // Set the Scheduler going so we go to our RunL().
+ iState=EStart;
+ QueueOperationAsync(KErrNone);
+ }
+
+//
+// //
+// Active Object Stuff //
+// //
+//
+
+void CClientSideMessGeneratorTester ::RunL()
+ {
+ TInt err = iStatus.Int();
+
+ if(err != KErrNone)
+ {
+ iBIOGenerator->TestHarnessFailed(err);
+ CActiveScheduler::Stop();
+ }
+ switch(iState)
+ {
+ case EStart:
+ iState = EReadingFiles;
+ iBIOGenerator->TestStart(1,_L("Initialise tester"));
+ InitialiseTesterL();
+ iBIOGenerator->TestFinish(1);
+ break;
+ case EReadingFiles:
+ iState = ECreatingMessages;
+ test.Printf(_L("Reading Text Filenames \n"));
+ iBIOGenerator->TestStart(2,_L("Create filename array"));
+ CreateFilenameArrayL();
+ iBIOGenerator->TestFinish(2);
+ QueueOperationAsync(KErrNone);
+ break;
+ case ECreatingMessages: // don't set the next state here
+ if (iFilesProcessed ==0)
+ iBIOGenerator->TestStart(3,_L("Generating messages"));
+ iBIOGenerator->SetSessionPath(KBIOTxtFilePath);
+ GenerateNextMessageL(); // state gets set here when we processed all the messages
+ QueueOperationAsync(KErrNone);
+ break;
+ // 1st time in start the notifications.
+ case EGeneratingResults:
+ iState = EStop;
+ iBIOGenerator->TestFinish(3);
+ iBIOGenerator->TestStart(4,_L("Do some results"));
+ QueueOperationAsync(KErrNone);
+ break;
+ case EStop:
+ iBIOGenerator->FindChildrenL(KMsvGlobalInBoxIndexEntryId);
+ iBIOGenerator->TestHarnessCompleted();
+ CActiveScheduler::Stop();
+ break;
+ }
+ }
+
+void CClientSideMessGeneratorTester ::DoCancel()
+ {
+ }
+
+void CClientSideMessGeneratorTester ::QueueOperationAsync(TInt aErr)
+ {
+ TRequestStatus* pS = &iStatus;
+ iStatus = KRequestPending;
+ User::RequestComplete(pS, aErr);
+ SetActive();
+ }
+
+
+void CClientSideMessGeneratorTester ::InitialiseTesterL()
+ {
+ // Get the NB if we don't need this two step process, use SetSmsServiceL().
+ //iBIOGenerator->SetSmsServiceIdL();
+ iBIOGenerator->SetBIOServiceIdL();
+ // Empty the Inbox
+ iBIOGenerator->EmptyInboxMessagesL();
+ QueueOperationAsync(KErrNone);
+ }
+
+
+void CClientSideMessGeneratorTester ::CreateFilenameArrayL()
+ {
+ // Creates an array of descriptors for the body parts of our messages
+ //Check that the source directory exists, if not warn the user and create one
+ TInt err;
+ if (iDir)
+ delete iDir;
+ err = rFs.GetDir(KBIOTxtFilePath, KEntryAttMatchMask, ESortByName, iDir);
+
+ if (err == KErrPathNotFound)
+ {
+ test.Printf(_L("Error - source file directory not found\n\n"));
+ TInt makeDirErr = rFs.MkDirAll(KBIOTxtFilePath);
+ if (makeDirErr==KErrNone)
+ {
+ test.Printf(_L("Creating directory for files\nPlease add files to %S\n"), KBIOTxtFilePath);
+ User::After(1000000);
+ User::Leave(KErrNotFound);
+ }
+ else
+ {
+ test.Printf(_L("Error %d occurred when making directory %S"),makeDirErr, &KBIOTxtFilePath);
+ User::Leave(makeDirErr);
+ }
+ }
+ else if (err!=KErrNone)
+ {
+ test.Printf(_L("Error %d occurred"),err );
+ User::After(100000);
+ User::Leave(err);
+ }
+
+ // Set the session path for the RF
+
+ rFs.SetSessionPath(KBIOTxtFilePath);
+ test.Printf(_L("Set Session path to %S \n"), &KBIOTxtFilePath);
+
+ // Get a directory listing for the textfiles...
+ if (iDir)
+ delete iDir;
+ User::LeaveIfError(rFs.GetDir(_L("*.txt"), KEntryAttNormal, ESortByName, iDir));
+ TInt count = iDir->Count();
+ if(count == 0)
+ {
+ test.Printf(_L("No files in the source directory %S !!"), &KBIOTxtFilePath);
+ User::Leave(KErrNotFound); // No files to process
+ }
+ iNumFiles = count;
+ iCurrentMessageType = ENoMessage; // Set to error condition
+ // Display some info for the user
+ test.Printf(_L("Have %d text files in directory \n"), count);
+ test.Printf(_L("\n")); //move down one line
+ }
+
+//
+// //
+// Creating one message stuff. //
+// //
+//
+
+void CClientSideMessGeneratorTester ::GenerateNextMessageL()
+ {
+ TBufC<KMaxFileName> currentFile;
+ TEntry tempEntry;
+ HBufC* tempDesc;
+
+ // Check if there are any more files of the current type
+ if (iFilesProcessed < iNumFiles)
+ {
+ tempEntry = (*iDir)[iFilesProcessed];
+ currentFile=( tempEntry.iName );
+ // Not processed all the messages - so keep the current state
+ SetMessageType(currentFile);
+ iFilesProcessed++; // Here because need to update the counter promptly
+ if (iCurrentMessageType!=ENoMessage) // skip any dodgy filenames
+ {
+ tempDesc = currentFile.AllocL();
+ CleanupStack::PushL(tempDesc);
+ test.Console()->SetPos(0, 8);
+ test.Printf(_L("Reading file %S"), tempDesc);
+ iBIOGenerator->CreateBIOEntryFromFileL(currentFile, iCurrentMessageType);
+ iMessagesCreated++;
+ test.Console()->SetPos(0, 10);
+ test.Printf(_L("Created entry No. %d\n"), (iMessagesCreated));
+ test.Printf(_L("So far have discarded %d files out of a total of %d\n"), (iFilesProcessed-iMessagesCreated), iNumFiles);
+ CleanupStack::PopAndDestroy(); // tempDesc;
+ }
+ }
+ else if (iFilesProcessed == iNumFiles) // Completed everything
+ {
+ iState =EGeneratingResults; // Done creating messages
+ }
+ else // shouldn't be anything else as iMessagesProcessed
+ {
+ User::Leave(KErrUnknown); // Have an error but don't know how
+ }
+ }
+
+void CClientSideMessGeneratorTester ::SetMessageType(const TDesC& aFileName)
+ {
+
+ // Check each file prefix in turn with the filename passed as a parameter.
+ // If cannot find the correct type set to ENoMessage to indicate an error.
+ // GenerateNextMessage will then skip the file!
+
+ if (aFileName.MatchF(KBIOIapPrefix)==0) // File starts with "iap"
+ {
+ iCurrentMessageType = EBioIapSettingsMessage;
+ return;
+ }
+ if(aFileName.MatchF(KBIOEnpPrefix)==0) // File name starts "enp"
+ {
+ iCurrentMessageType = EBioEnpMessage;
+ return;
+ }
+ if (aFileName.MatchF(KBIORingTonePrefix)==0)//Filename begins "rtone"
+ {
+ iCurrentMessageType = EBioRingTonesMessage;
+ return;
+ }
+ if (aFileName.MatchF(KBIOOpLogoPrefix)==0) // Filename begins "oplogo"
+ {
+ iCurrentMessageType = EBioOpLogoMessage;
+ return;
+ }
+ if (aFileName.MatchF(KBIOcBusinessCardPrefix)==0)// Filename begins "cbc"
+ {
+ iCurrentMessageType = EBioCompBusCardMessage;
+ return;
+ }
+ if (aFileName.MatchF(KBIOvCardPrefix)==0)
+ {
+ iCurrentMessageType = EBiovCardMessage;
+ return;
+ }
+ if (aFileName.MatchF(KBIOvCalenderPrefix)==0)
+ {
+ iCurrentMessageType = EBiovCalenderMessage;
+ return;
+ }
+ // if we've reached this point it's an unknown filename
+ iCurrentMessageType = ENoMessage;
+ }
+
+TInt CClientSideMessGeneratorTester ::GenerateResults()
+ {
+ TInt err = KErrNone;
+ TRAP(err, DoGenerateResultsL());
+ return err;
+ }
+
+
+void CClientSideMessGeneratorTester ::DoGenerateResultsL()
+ {
+ }
+
+//*****************************************************************************
+//
+// Implementation; global stuff
+//
+//*****************************************************************************
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ theCleanup = CTrapCleanup::New();
+ TRAPD(err,doMainL());
+ test(err==KErrNone);
+ delete theCleanup;
+ test.End();
+ test.Close();
+ __UHEAP_MARKEND;
+ return(KErrNone);
+ }
+
+GLDEF_C void doMainL()
+ {
+ // Create an active scheduler for the program session
+ theScheduler = new (ELeave) CTestScheduler();
+ CleanupStack::PushL(theScheduler);
+ CActiveScheduler::Install(theScheduler);
+ test.Title();
+ test.Start(_L("Starting test harness"));
+ rFs.Connect();
+
+ // Can't actually lock a message client side
+ CClientSideMessGeneratorTester * theTester =
+ CClientSideMessGeneratorTester ::NewLC(100000); // release context on create
+ theTester->StartL();
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(); //theTester
+
+ CleanupStack::PopAndDestroy(); //theScheduler
+ rFs.Close();
+ }
+