phonebookengines/contactsmodel/tsrc/t_viewsoom.h
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /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);
+	};
+