--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/t_viewsoom.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,425 @@
+// Copyright (c) 2001-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 <cntview.h>
+#include "cntviewprivate.h"
+#include "t_utils2.h"
+
+
+//
+// Forward declarations.
+//
+
+class CSortChecker;
+class CTestBase;
+class CViewCreator;
+class CContactAdder;
+class CContactRemover;
+class CViewExerciser;
+class CSortOrderChanger;
+class CContactDbEventQueue;
+
+enum TOomFailureModes
+ {
+ KOomFailNormal,
+ KOomFailFileServerGeneral,
+ KOomFailFileServerOom,
+ KOomFailContactServer,
+ KOomNumFailModes,
+ };
+
+const TInt KNumContactsInGroupOne=27;
+_LIT(KGroupOneName,"GroupOne");
+
+typedef TBuf<0x40> TOomTestName;
+
+//
+// CTestConductor.
+//
+
+class CTestConductor : public CActive, public MContactViewObserver
+ {
+public:
+ static CTestConductor* NewL();
+ ~CTestConductor();
+ void NextTest();
+private:
+ CTestConductor();
+ void ConstructL();
+private: // From CActive.
+ void RunL();
+ TInt RunError(TInt aError);
+ void DoCancel();
+private: // From MContactViewObserver.
+ virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ enum TTest
+ {
+ ECreateLocalView,
+ EAddInitialContacts,
+ EAddGroup,
+ ECreateRemoteView,
+ EDoOOMTests,
+ ENumTests
+ };
+public:
+ RTest iTest;
+ RFs iFs;
+ CLog* iLog;
+ CContactDatabase* iDb;
+ CSortChecker* iSortChecker;
+ RContactViewSortOrder iSortOrder_1;
+ RContactViewSortOrder iSortOrder_2;
+ CContactLocalView* iLocalView;
+ CContactRemoteView* iRemoteView_1;
+private:
+ CViewCreator* iViewCreator;
+ CContactAdder* iContactAdder;
+ CContactRemover* iContactRemover;
+ CViewExerciser* iViewExerciser;
+ CSortOrderChanger* iSortOrderChanger;
+ TInt iCurrentTestNumber;
+ CTestBase* iCurrentTestObject;
+ TBool iGnoreNotifications;
+ CContactGroup* iGroupOne;
+ TContactItemId iGroupId;
+ TInt iTestError;
+ };
+
+
+//
+// CSortChecker.
+//
+
+class CSortChecker : public CBase
+ {
+public:
+ enum TSortOrder
+ {
+ EFirstNameLastName,
+ ELastNameFirstName
+ };
+ enum TCriteria
+ {
+ ELessThan,
+ ELessThanOrEqualTo,
+ EGreaterThan,
+ EGreaterThanOrEqualTo
+ };
+public:
+ static CSortChecker* NewL(CTestConductor& aConductor);
+ ~CSortChecker();
+ void AddContactL(const TDesC& aFirstName,const TDesC& aLastName);
+ void RemoveContactL(const TDesC& aFirstName,const TDesC& aLastName);
+ TPtrC ContactAt(TSortOrder aOrder,TInt aIndex) const;
+ TInt Count() const;
+ TInt Count(TSortOrder aOrder,const TDesC& aLowBoundary,const TDesC& aHighBoundary) const;
+ TInt CountLow(TSortOrder aOrder,const TDesC& aHighBoundary) const;
+ TInt CountHigh(TSortOrder aOrder,const TDesC& aLowBoundary) const;
+ void Sort();
+ void CheckSort(TSortOrder aOrder,const TDesC& aName,TInt aIndex) const;
+ void CheckSortLowSubView(TSortOrder aOrder,const TDesC& aName,TInt aIndex,const TDesC& aHighBoundary) const;
+ void CheckSortHighSubView(TSortOrder aOrder,const TDesC& aName,TInt aIndex,const TDesC& aLowBoundary) const;
+ void CheckSortSubView(TSortOrder aOrder,const TDesC& aName,TInt aIndex,const TDesC& aLowBoundary,const TDesC& aHighBoundary) const;
+private:
+ CSortChecker(CTestConductor& aConductor);
+ void ConstructL();
+ TInt FindIndex(TSortOrder aOrder,const TDesC& aBoundary,TCriteria aCriteria) const;
+ static TInt Compare(const HBufC& aFirst, const HBufC& aSecond);
+ static TBool Match(const HBufC& aFirst,const HBufC& aSecond);
+private:
+ CTestConductor& iConductor;
+ TCollationMethod* iCollateMethod;
+ RPointerArray<HBufC> iSortedFirstLast;
+ RPointerArray<HBufC> iSortedLastFirst;
+ };
+
+
+//
+// CTestBase.
+//
+
+class CTestBase : public CBase
+ {
+public:
+ virtual void HandleNotificationL(const CContactViewBase& aView,const TContactViewEvent& aEvent)=0;
+protected:
+ CTestBase(CTestConductor& aConductor);
+protected:
+ CTestConductor& iConductor;
+ };
+
+
+//
+// CViewCreator.
+//
+
+class CViewCreator : public CTestBase
+ {
+public:
+ static CViewCreator* NewL(CTestConductor& aConductor);
+ CContactLocalView* CreateLocalViewL(const RContactViewSortOrder& aSortOrder);
+ CContactNamedLocalView* CreateNamedLocalViewL(const TDesC& aName,const RContactViewSortOrder& aSortOrder);
+ CContactRemoteView* CreateRemoteViewL(const RContactViewSortOrder& aSortOrder);
+ CContactNamedRemoteView* CreateNamedRemoteViewL(const TDesC& aName,const RContactViewSortOrder& aSortOrder);
+ CContactSubView* CreateSubViewL(CContactViewBase& aUnderlyingView,const TDesC& aBoundary);
+ CContactSubView* CreateSubViewL(CContactViewBase& aUnderlyingView,const TDesC& aLowBoundary,const TDesC& aHighBoundary);
+ CContactConcatenatedView* CreateConcatenatedViewL(RPointerArray<CContactViewBase>& aComponentViews);
+ virtual void HandleNotificationL(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ CViewCreator(CTestConductor& aConductor);
+ CContactViewBase* iView;
+ };
+
+
+//
+// CContactAdder.
+//
+
+class CContactAdder : public CTestBase
+ {
+public:
+ static CContactAdder* NewL(CTestConductor& aConductor);
+ ~CContactAdder();
+ void AddContactsL(const TDesC& aFileName,TInt aNumViews);
+ virtual void HandleNotificationL(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+ static TBool ReadNamePairL(RFile aFile,TDes& aFirstName,TDes& aLastName);
+private:
+ CContactAdder(CTestConductor& aConductor);
+ void ConstructL();
+ void AddOneContactL();
+private:
+ RFs iFs;
+ RFile iFile;
+ CContactTemplate* iTemplate;
+ TBool iFinished;
+ TInt iNumViews;
+ TInt iNumNotifications;
+ CRandomContactGenerator* iRandomGenerator;
+ };
+
+
+//
+// CContactRemover.
+//
+
+class CContactRemover : public CTestBase
+ {
+public:
+ static CContactRemover* NewL(CTestConductor& aConductor);
+ ~CContactRemover();
+ void RemoveContactsL(const TDesC& aFileName,TInt aNumViews);
+ virtual void HandleNotificationL(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ CContactRemover(CTestConductor& aConductor);
+ void ConstructL();
+ void RemoveOneContactL();
+private:
+ RFs iFs;
+ RFile iFile;
+ TBool iFinished;
+ TInt iNumViews;
+ TInt iNumNotifications;
+ };
+
+
+//
+// CViewExerciser.
+//
+
+class CViewExerciser : public CTestBase
+ {
+public:
+ static CViewExerciser* NewL(CTestConductor& aConductor);
+ //void ProfileViewL(CContactViewBase& aView);
+ void ExerciseViewL(CSortChecker::TSortOrder aSortOrder,CContactViewBase& aView);
+ void ExerciseSubViewL(CSortChecker::TSortOrder aSortOrder,CContactViewBase& aView,const TDesC& aLowBoundary,const TDesC& aHighBoundary);
+ void ExerciseLowSubViewL(CSortChecker::TSortOrder aSortOrder,CContactViewBase& aView,const TDesC& aLowBoundary);
+ void ExerciseHighSubViewL(CSortChecker::TSortOrder aSortOrder,CContactViewBase& aView,const TDesC& aHighBoundary);
+ void QueueNextTestWhenComplete(TBool aQueue);
+ ~CViewExerciser();
+ virtual void HandleNotificationL(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ CViewExerciser(CTestConductor& aConductor);
+ void ConstructL();
+private:
+ CContactTextDef* iTextDef_FirstLast;
+ CContactTextDef* iTextDef_LastFirst;
+ TBool iQueue;
+ };
+
+
+//
+// CSortOrderChanger.
+//
+
+class CSortOrderChanger : public CTestBase
+ {
+public:
+ static CSortOrderChanger* NewL(CTestConductor& aConductor);
+ void ChangeSortOrderL(RContactViewSortOrder& aSortOrder,CContactNamedLocalView& aView,TInt aNumViews);
+ void ChangeSortOrderL(RContactViewSortOrder& aSortOrder,CContactNamedRemoteView& aView,TInt aNumViews);
+ ~CSortOrderChanger();
+ virtual void HandleNotificationL(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ CSortOrderChanger(CTestConductor& aConductor);
+private:
+ CContactTextDef* iTextDef;
+ TInt iNumViews;
+ TInt iNumNotifications;
+ };
+
+//
+//OOM TEST CODE
+//
+class COomTest;
+class COomFailBase : public CBase, public MContactViewObserver
+ {
+public:
+ ~COomFailBase();
+ COomFailBase(COomTest *aOomTest,CContactDatabase* aDb,CContactViewBase* aUnderlyingView);
+ virtual void ConstructL();
+ virtual void PreFailL();
+ virtual void ClearUp();
+ virtual void FailL()=0;
+ virtual TOomTestName TestName()=0;
+ virtual TBool Skip(TInt aCount, TOomFailureModes aMode) const;
+ void ClearEventQueueL();
+private: // From MContactViewObserver.
+ virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent)=0;
+protected:
+ COomTest *iOomTest;
+ CContactDatabase* iDb;
+ CContactViewBase* iUnderlyingView;
+ };
+
+
+class COomTest : public CBase
+ {
+public:
+ COomTest(CContactDatabase* aDb,CContactLocalView* aLocalView,CContactRemoteView* aRemoteView,CContactGroup* aGroup,CTestConductor& aConductor);
+ void ConstructL();
+ ~COomTest();
+ TBool DoTestL();
+ void DoOomTestL(COomFailBase *aOomTest, TOomFailureModes aMode);
+ void Test(TBool aMustBeTrue);
+ TBool TestsL();
+ CTestConductor& Conductor() const;
+private:
+ CContactDatabase* iDb;
+ CContactLocalView* iLocalView;
+ CContactRemoteView* iRemoteView;
+ CContactGroup* iGroupOne;//not owned
+ CTestConductor& iConductor;
+ };
+
+
+class COomLocalView : public COomFailBase
+ {
+public:
+ inline COomLocalView(COomTest *aOomTest,CContactDatabase* aDb,CContactViewBase* aUnderlyingView, const TDesC8& aSortPluginName = KNullDesC8) :
+ COomFailBase(aOomTest,aDb,aUnderlyingView), iSortPluginName(aSortPluginName){};
+ void FailL();
+ void PreFailL();
+ void ClearUp();
+ inline TOomTestName TestName() {return(_L("CContactLocalView : NewL"));};
+private:
+ virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ RContactViewSortOrder iSortOrder;
+ CContactLocalView* iLocalView;
+ TPtrC8 iSortPluginName;
+ };
+
+//
+class COomRemoteView : public COomFailBase
+ {
+public:
+ inline COomRemoteView(COomTest *aOomTest,CContactDatabase* aDb,CContactViewBase* aUnderlyingView, const TDesC8& aSortPluginName = KNullDesC8) :
+ COomFailBase(aOomTest,aDb,aUnderlyingView), iSortPluginName(aSortPluginName){};
+ void FailL();
+ void PreFailL();
+ void ClearUp();
+ inline TOomTestName TestName() {return(_L("CContactRemoteView : NewL"));};
+private:
+ virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ RContactViewSortOrder iSortOrder;
+ CContactRemoteView* iRemoteView;
+ TPtrC8 iSortPluginName;
+ };
+
+//
+class COomSubView : public COomFailBase
+ {
+public:
+ inline COomSubView(COomTest *aOomTest,CContactDatabase* aDb,CContactViewBase* aUnderlyingView) : COomFailBase(aOomTest,aDb,aUnderlyingView) {};
+ void FailL();
+ void PreFailL();
+ void ClearUp();
+ inline TOomTestName TestName() {return(_L("CContactSubView : NewL"));};
+ TBool Skip(TInt aCount, TOomFailureModes aMode) const;
+private:
+ virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ CContactSubView* iSubViewAbc;
+ };
+
+//
+class COomFilteredView : public COomFailBase
+ {
+public:
+ inline COomFilteredView(COomTest *aOomTest,CContactDatabase* aDb,CContactViewBase* aUnderlyingView) : COomFailBase(aOomTest,aDb,aUnderlyingView) {};
+ void FailL();
+ void PreFailL();
+ void ClearUp();
+ inline TOomTestName TestName() {return(_L("COomFilteredView : NewL"));};
+private:
+ virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ CContactFilteredView* iPhonableFilterView;
+ };
+
+
+//
+class COomGroupView : public COomFailBase
+ {
+public:
+ inline COomGroupView(COomTest *aOomTest,CContactDatabase* aDb,CContactViewBase* aUnderlyingView,CContactGroup* aGroup) : COomFailBase(aOomTest,aDb,aUnderlyingView),iGroupOne(aGroup) {};
+ void FailL();
+ void PreFailL();
+ void ClearUp();
+ inline TOomTestName TestName() {return(_L("COomGroupView"));};
+ TBool Skip(TInt aCount, TOomFailureModes aMode) const;
+private:
+ virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+private:
+ CContactGroupView* iGroupView;
+ TBool iAsStarted;
+ CContactGroup* iGroupOne;//not owned
+ };
+
+/** Tests construction of contacts matching criteria method in OOM situations */
+class COomMatchingCriteria: public COomFailBase
+ {
+public:
+ inline COomMatchingCriteria(COomTest *aOomTest,CContactDatabase* aDb,CContactViewBase* aUnderlyingView) : COomFailBase(aOomTest,aDb,aUnderlyingView) {};
+ inline TOomTestName TestName() {return(_L("ContactsMatchingCriteriaL"));};
+ void FailL();
+ static void CleanupContactArray(TAny* aArray);
+private:
+ virtual void HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent);
+ };
+