--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/tsrc/caltestlib.h Tue Feb 02 10:12:19 2010 +0200
@@ -0,0 +1,323 @@
+// Copyright (c) 1997-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:
+//
+
+#ifndef __CALTESTLIB_H__
+#define __CALTESTLIB_H__
+
+#include <badesca.h>
+#include <e32base.h>
+#include <hal.h>
+#include <f32file.h>
+#include <e32test.h>
+#include <calprogresscallback.h>
+#include <calentry.h>
+#include <coreappstest/testserver.h>
+#include <caldataexchange.h>
+#include <asclisession.h>
+#include <asshdalarm.h>
+
+class CCalSession;
+class CCalEntry;
+class CCalEntryView;
+class CCalInstance;
+class CCalInstanceView;
+class CCalIter;
+
+_LIT8(KDefaultTimeZone, "Europe/London");
+
+_LIT(KCalTestLibMutex, "CalTestLib_GlobalMutex");
+
+class CCalDataExchange;
+
+class CSetTimezone : public CActive
+ {
+public:
+ static CSetTimezone* NewL(const TDesC8& aZoneId, RPIMTestServer* aPIMTestServer);
+ ~CSetTimezone();
+ void Start();
+
+ // from CActive
+ void RunL();
+ void DoCancel();
+
+private:
+ void ConstructL(const TDesC8& aZoneId, RPIMTestServer* aPIMTestServer);
+ CSetTimezone();
+ RPIMTestServer* iPIMTestServer; // Not owned
+ HBufC8* iZoneId;
+ TInt8 iStep;
+ };
+
+/** This is the Calendar Test Library class for Unit testing
+@internalComponent
+@test
+*/
+class CCalTestLibrary : public CBase, public MCalProgressCallBack
+ {
+public:
+
+// Implementation of MCalProgressCallBack interface
+
+ void Progress(TInt /*aPercentageCompleted*/);
+ void Completed(TInt /*aError*/);
+ TBool NotifyProgress();
+
+
+// Constructor / Destructor
+
+ // In its destructor, the current opened calendar file will be closed and deleted
+ IMPORT_C ~CCalTestLibrary();
+
+ // To be used by most of test code, if it does not contains any asynchronous task.
+ // Use the following functions to create an object. It will start the alarm console alert server.
+ IMPORT_C static CCalTestLibrary* NewL(TBool aDelFileFlag=ETrue);
+ IMPORT_C static CCalTestLibrary* NewLC(TBool aDelFileFlag=ETrue);
+
+
+// File handling
+
+ // Return a file handle.
+ IMPORT_C RFs& FileSession();
+
+ // Create a calendar file. It leaves if the file exists.
+ IMPORT_C void CreateFileL(const TDesC& aFileName);
+
+ // Create a calendar file. It will overwrite the existing file.
+ IMPORT_C void ReplaceFileL(const TDesC& aFileName);
+
+ // Open a calendar file.
+ IMPORT_C void OpenFileL(const TDesC& aFileName, TBool aDelFileFlag=EFalse);
+
+ // Delete either a file which is in server's private directory by default or any other file in public directory.
+ IMPORT_C void DeleteFileL(const TDesC& aFileName, TBool aIsCalFile = ETrue);
+
+ // Used to append the file to the delete list
+ IMPORT_C void RegisterCalFileL(const TDesC& aFileName);
+
+
+// Session and Views handling
+
+ // To be used by both synchronous and asynchronous test.
+ IMPORT_C CCalSession& GetSession();
+
+ // The following functions cause index building.
+ // They should be used by asynchronous test.
+ // There is no guarantee that the views are ready to use when the function returns.
+ // The test code should use the call back function to be notified when the building index is completed.
+ IMPORT_C CCalEntryView& AsynCGetEntryViewL();
+ IMPORT_C CCalInstanceView& AsynCGetInstanceViewL();
+
+ // The following functions cause index building.
+ // They should be used by synchronous test.
+ // The views are ready to be used when the function returns.
+ // Those two functions can be called as many times as you like.
+ IMPORT_C CCalEntryView& SynCGetEntryViewL();
+ IMPORT_C CCalInstanceView& SynCGetInstanceViewL();
+
+ // Delete entry and instance views
+ IMPORT_C void DeleteViews();
+
+
+// Entry handling
+
+ // Create a GS entry. The uid of the entry will be filled with some random letters if aUid is NULL, otherwise, it use the uid specified.
+ IMPORT_C CCalEntry* CreateCalEntryL(CCalEntry::TType aType, HBufC8*& aUid);
+
+ // Set start and end time according to the type of the entry. It will set an random time its start\end time if it is not specified.
+ IMPORT_C static void SetEntryStartAndEndTimeL(CCalEntry* entry, const TTime& aStartTime=Time::NullTTime(), const TTime& aEndTime=Time::NullTTime(), TInt aYear = 2000);
+
+ // Fill the descriptor with some random letters.
+ IMPORT_C void RandomText(TDes& aText, TBool aPossibleNulDes = EFalse);
+ IMPORT_C void RandomText8(TDes8& aText,TBool aPossibleNulDes = EFalse);
+
+ IMPORT_C void CleanDatabaseL();
+
+ IMPORT_C CCalIter& GetIterL();
+
+// Provide access to test server for time setting and file operations
+ IMPORT_C RPIMTestServer& PIMTestServer();
+
+// Useful utility functions
+ IMPORT_C void StoreEntryL(const CCalEntry& aEntry);
+ IMPORT_C void FetchAllInstancesL(RPointerArray<CCalInstance>& aInstances);
+ IMPORT_C void OutputInstanceDataL(const RPointerArray<CCalInstance>& aInstances);
+
+ /* Import / Export utility functions */
+ IMPORT_C void CreateTestFileL(const TDesC8& aVCalData, const TDesC& aFileName);
+ IMPORT_C void ImportL(const TDesC& aImportVCalendarFile, RPointerArray<CCalEntry>& aEntriesImported);
+ IMPORT_C void ImportL(const TDesC8& aVCalendar, RPointerArray<CCalEntry>& aEntriesImported);
+ IMPORT_C void ExportL(const TDesC& aExportVCalendarFile, RPointerArray<CCalEntry>& aEntriesExported);
+
+
+ IMPORT_C CCalDataExchange& DataExchangeL();
+ IMPORT_C CTestRegister& TestRegister();
+
+ IMPORT_C void SetTimeZoneL(const TDesC8& aZoneName);
+ //Used for closing the agenda serve
+ IMPORT_C void CloseAgendaServer();
+ IMPORT_C static void WaitForAgendaServerClose();
+
+//Used for reconnecting the agnda server after it has been closed
+ IMPORT_C void ConnectAgendaServerL();
+
+#if __WINS__
+ IMPORT_C static void StartAlarmServerL();
+#endif
+
+ IMPORT_C TBool WaitForAlarmEvent(TAlarmId aAlarmId, TAlarmChangeEvent aExpectedEvent, TAlarmState aExpectedState, TInt aTimeout);
+
+protected:
+
+// Constructor
+
+ // To be used by derived classes.
+ IMPORT_C CCalTestLibrary(TBool aDelFileFlag=ETrue);
+ // BaseConstructL(), which starts the alarm console alert server, should be called in the constructor of the derived class.
+ // Typically, it is the case that the test contains some asynchronous behaviour.
+ IMPORT_C void BaseConstructL();
+
+private:
+
+// No copy constructor and assignment operator
+
+ CCalTestLibrary(CCalTestLibrary& );
+ CCalTestLibrary& operator = (const CCalTestLibrary& );
+ void OpenCalendarSessionL(TBool aRefCountExists=ETrue);
+ void CloseCalendarSession(TBool aWaitForAgendaToClose=ETrue);
+public:
+ IMPORT_C void __dbgClearTzClientCacheL(TBool aRestartCaching);
+
+private:
+
+// Member data
+
+ RPIMTestServer iPIMTestServer;
+ CCalSession* iSession;
+ CCalInstanceView* iInstanceView;
+ CCalEntryView* iEntryView;
+ CCalIter* iIter;
+ CCalDataExchange* iDataExchange;
+ CTestRegister* iTestRegister;
+ TInt64 iSeed;
+ RFs iFs;
+ RChunk iChunk;
+ TInt* iRefCount;
+ TInt iCompletedError;
+
+ CDesCArray* iFilesToDel;
+ TBool iDelFileFlag;
+ RMutex iChunkMutex;
+ RASCliSession iAlarmServer;
+ };
+
+
+/** Template class for cleanup that needs ResetAndDestroy or Reset to be called
+
+@internalComponent
+@test
+
+@code
+
+To be used in the following way:
+
+ // array to store the loaded instances
+
+ RPointerArray<CCalInstance> instanceArray;
+ CleanupResetAndDestroyPushL(instanceArray);
+
+
+ iTestLibrary->SynCGetInstanceViewL().FindInstanceL(instanceArray, CalCommon::EIncludeAll, timeRange);
+
+
+ CleanupStack::PopAndDestroy(&instanceArray);
+
+@endcode
+*/
+
+template<class T> class CleanupResetAndDestroy
+ {
+public:
+ static inline void PushL(T& aRef);
+private:
+ static void ResetAndDestroy(TAny* aPtr);
+ };
+
+// CleanupResetAndDestroy
+
+template <class T> inline void CleanupResetAndDestroy<T>::PushL(T& aRef)
+ {
+ CleanupStack::PushL(TCleanupItem(&ResetAndDestroy, &aRef));
+ }
+
+template <class T> void CleanupResetAndDestroy<T>::ResetAndDestroy(TAny *aPtr)
+ {
+ (static_cast<T*>(aPtr))->ResetAndDestroy();
+ }
+
+template <class T> inline void CleanupResetAndDestroyPushL(T& aRef)
+ {
+ CleanupResetAndDestroy<T>::PushL(aRef);
+ }
+
+
+/** Performance timer measurement class
+
+@internalComponent
+@test
+
+@code
+
+To be used in the following way:
+
+ static RTest test(_L("The test"));
+
+
+ <snip>
+
+
+ TPerformanceTimer timer(test);
+
+ timer.Start();
+
+ <blah blah>
+
+ timer.Stop();
+
+ test.Printf(_L("Done\n"));
+
+ // printout the time it took to do <blah blah>
+
+ timer.PrintOut();
+
+@endcode
+*/
+
+class TPerformanceTimer
+ {
+public:
+ IMPORT_C TPerformanceTimer(RTest& aTest);
+
+ IMPORT_C void Start();
+ IMPORT_C void Stop();
+ IMPORT_C void PrintOut() const;
+ IMPORT_C TTimeIntervalMicroSeconds32 ElapsedTime() const;
+
+private:
+ RTest& iTest;
+ TUint iStartTickCount;
+ TUint iEndTickCount;
+ };
+
+#endif