diff -r 000000000000 -r f979ecb2b13e pimappservices/calendar/tsrc/caltestlib.h --- /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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +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& aInstances); + IMPORT_C void OutputInstanceDataL(const RPointerArray& aInstances); + + /* Import / Export utility functions */ + IMPORT_C void CreateTestFileL(const TDesC8& aVCalData, const TDesC& aFileName); + IMPORT_C void ImportL(const TDesC& aImportVCalendarFile, RPointerArray& aEntriesImported); + IMPORT_C void ImportL(const TDesC8& aVCalendar, RPointerArray& aEntriesImported); + IMPORT_C void ExportL(const TDesC& aExportVCalendarFile, RPointerArray& 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 instanceArray; + CleanupResetAndDestroyPushL(instanceArray); + + + iTestLibrary->SynCGetInstanceViewL().FindInstanceL(instanceArray, CalCommon::EIncludeAll, timeRange); + + + CleanupStack::PopAndDestroy(&instanceArray); + +@endcode +*/ + +template class CleanupResetAndDestroy + { +public: + static inline void PushL(T& aRef); +private: + static void ResetAndDestroy(TAny* aPtr); + }; + +// CleanupResetAndDestroy + +template inline void CleanupResetAndDestroy::PushL(T& aRef) + { + CleanupStack::PushL(TCleanupItem(&ResetAndDestroy, &aRef)); + } + +template void CleanupResetAndDestroy::ResetAndDestroy(TAny *aPtr) + { + (static_cast(aPtr))->ResetAndDestroy(); + } + +template inline void CleanupResetAndDestroyPushL(T& aRef) + { + CleanupResetAndDestroy::PushL(aRef); + } + + +/** Performance timer measurement class + +@internalComponent +@test + +@code + +To be used in the following way: + + static RTest test(_L("The test")); + + + + + + TPerformanceTimer timer(test); + + timer.Start(); + + + + timer.Stop(); + + test.Printf(_L("Done\n")); + + // printout the time it took to do + + 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