--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/t_groupview_unfiled_profile.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,601 @@
+// Copyright (c) 2000-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 <e32std.h>
+#include <e32test.h>
+#include <e32math.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfldst.h>
+#include "t_utils2.h"
+#include "T_UTILS.H"
+#include "t_groupview_unfiled_profile.h"
+
+//
+// Macro's
+//
+#define CLEAR_ALL_CLOCKS CCntTest::ProfileReset(0, 30)
+#define START_CLOCK CCntTest::ProfileReset(macroTimer, 1); CCntTest::ProfileStart(macroTimer++)
+#define STOP_CLOCK CCntTest::ProfileEnd(--macroTimer)
+#define STOP_CLOCK_TIME( profile ) CCntTest::ProfileEnd(--macroTimer); CCntTest::ProfileResult(&(profile), macroTimer, 1)
+#define GET_LAST_CLOCK_TIME( profile ) CCntTest::ProfileResult(&profile, macroTimer, 1)
+
+//
+// Constants.
+//
+
+_LIT(KTestName,"t_groupview_unfiled_profile");
+_LIT(KLogFileName,"t_groupview_unfiled_profile.log");
+
+_LIT(KDbFileName,"c:t_groupview_unfiled_profile.cdb");
+
+_LIT(KRemoteViewName,"RemoteView");
+_LIT(KTextDefSeparator,"");
+
+RTest test(KTestName);
+
+
+const TInt KNumContacts=500;
+const TInt KNumContactsInGroupOne=250;
+const TInt KMaxContactsToAddInGroupTest = 50;
+const TInt KMaxContactsToRemoveInGroupTest = 50;
+
+_LIT(KGroupOneName,"GroupOne");
+
+//
+// File scope variable
+//
+TInt macroTimer = 1;
+
+//
+// CTestConductor.
+//
+
+CTestConductor* CTestConductor::NewL()
+ {
+ CTestConductor* self=new(ELeave) CTestConductor();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ self->RunTestsL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+CTestConductor::~CTestConductor()
+ {
+ delete iLog;
+ delete iDb;
+ delete iRandomGenerator;
+ TRAP_IGNORE(CContactDatabase::DeleteDatabaseL(KDbFileName));
+ iFs.Close();
+ }
+
+CTestConductor::CTestConductor() {}
+
+void CTestConductor::ConstructL()
+ {
+ User::LeaveIfError(iFs.Connect());
+ iLog=CLog::NewL(test,KLogFileName);
+ iDb=CContactDatabase::ReplaceL(KDbFileName);
+ iRandomGenerator=CRandomContactGenerator::NewL();
+ iRandomGenerator->SetDbL(*iDb);
+ AddContactsL();
+ }
+
+void CTestConductor::AddContactsL()
+ {
+ iTotalContacts=0;
+ TInt ii;
+ for (ii=0;ii<KNumContacts;ii++)
+ {
+ iRandomGenerator->AddTypicalRandomContactL();
+ iTotalContacts++;
+ test.Printf(_L("Adding %d \n"),ii);
+ }
+ CreateGroupTestDataL();
+ }
+
+void CTestConductor::CreateGroupTestDataL()
+ {
+ CContactGroup* groupOne = static_cast<CContactGroup*>(iDb->CreateContactGroupL(KGroupOneName));
+ CContactIdArray* idsInGroupViewOne = NULL;
+
+ CleanupStack::PushL(groupOne);
+
+ iGroupOneId = groupOne->Id();
+ for (TInt ii=1;ii<=KNumContactsInGroupOne;++ii)
+ {
+ test.Printf(_L("Making Group Contact %d \n"),ii);
+ iDb->AddContactToGroupL(ii,iGroupOneId);
+ }
+
+ CleanupStack::PopAndDestroy(groupOne);
+
+ groupOne = static_cast<CContactGroup*>(iDb->ReadContactL(iGroupOneId));
+ CleanupStack::PushL(groupOne);
+
+ idsInGroupViewOne = groupOne->ItemsContainedLC();
+ CleanupStack::PopAndDestroy(idsInGroupViewOne);
+ CleanupStack::PopAndDestroy(groupOne);
+ }
+
+void CTestConductor::AddSingleContactL()
+ {
+ test.Printf(_L("Adding Contact [%d] "), ++iTotalContacts);
+ iRandomGenerator->AddTypicalRandomContactL();
+ test.Printf(_L(" \n"));
+ }
+
+
+void CTestConductor::PrintTimeTaken(TInt aTime)
+ {
+ iLog->LogLine(_L(" Time Taken [%d.%dus] \n"), aTime/1000000, aTime%1000000);
+ }
+
+void CTestConductor::RunTestsL()
+ {
+ CGroupViewTester* tester=CGroupViewTester::NewL(*iLog,*iDb, *this);
+ CleanupStack::PushL(tester);
+ CActiveScheduler::Start();
+ CleanupStack::Pop(tester);
+ // error from CGroupViewTester?
+ User::LeaveIfError(iTestError);
+ }
+
+void CTestConductor::SetTestError(TInt aTestError)
+ {
+ iTestError = aTestError;
+ }
+
+
+//
+// CGroupViewTester.
+//
+
+CGroupViewTester* CGroupViewTester::NewL(CLog& aLog,CContactDatabase& aDb, CTestConductor& aTestConductor)
+ {
+ CGroupViewTester* self=new(ELeave) CGroupViewTester(aLog,aDb, aTestConductor);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+CGroupViewTester::~CGroupViewTester()
+ {
+ iLocalView->Close(*this);
+ iNamedRemoteView->Close(*this);
+ iSortOrder_1.Close();
+ delete iTextDef;
+ }
+
+CGroupViewTester::CGroupViewTester(CLog& aLog,CContactDatabase& aDb, CTestConductor& aTestConductor)
+ : CActive(EPriorityStandard),iLog(aLog),iDb(aDb),iTestConductor(aTestConductor),iCurrentTest(EPreStartTest)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+void CGroupViewTester::ConstructL()
+ {
+ iSortOrder_1.AppendL(KUidContactFieldGivenName);
+ iSortOrder_1.AppendL(KUidContactFieldFamilyName);
+ iSortOrder_1.AppendL(KUidContactFieldCompanyName);
+
+ iTextDef=CContactTextDef::NewL();
+ iTextDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName,KTextDefSeparator));
+ iTextDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName,KTextDefSeparator));
+ iTextDef->AppendL(TContactTextDefItem(KUidContactFieldCompanyName,KTextDefSeparator));
+
+ NextTest();
+ }
+
+void CGroupViewTester::RunL()
+ {
+ TCntProfile profile;
+
+ switch (iCurrentTest)
+ {
+ case ECreateLocalView:
+ iLog.LogLine(_L("=== Create local view \n"));
+ iLocalView=CContactLocalView::NewL(*this,iDb,iSortOrder_1,EContactAndGroups);
+ break;
+
+ case ECreateRemoteNamedView:
+ iLog.LogLine(_L("=== Create Remote named view \n"));
+ iNamedRemoteView = CContactNamedRemoteView::NewL(*this,KRemoteViewName,iDb,iSortOrder_1,EContactAndGroups);
+ break;
+
+ case EStartLocalTests:
+ iLog.LogLine(_L("=== Start Local Tests \n"));
+ CLEAR_ALL_CLOCKS;
+ iLog.LogLine(_L(">> Start Clock [%d] \n"), macroTimer);
+ START_CLOCK;
+ iTester = CUnfiledGroupViewTester::NewL(iLog, iDb, iTestConductor, *iLocalView, iStatus);
+ SetActive();
+ iCurrentTest = EEndLocalTests;
+ iTester->StartL();
+ break;
+
+ case EEndLocalTests:
+ STOP_CLOCK_TIME( profile );
+ iLog.LogLine(_L("<< Stop Clock [%d] \n"), macroTimer);
+ iLog.LogLine(_L("== End Local Tests Time to complete \n"));
+ delete iTester; iTester = NULL;
+ iTestConductor.PrintTimeTaken(profile.iTime);
+ NextTest();
+ break;
+
+ case EStartRemoteTests:
+ iLog.LogLine(_L("=== Start Remote Tests \n"));
+ CLEAR_ALL_CLOCKS;
+ iLog.LogLine(_L(">> Start Clock [%d] \n"), macroTimer);
+ START_CLOCK;
+ iTester = CUnfiledGroupViewTester::NewL(iLog, iDb, iTestConductor, *iNamedRemoteView, iStatus);
+ SetActive();
+ iCurrentTest = EEndRemoteTests;
+ iTester->StartL();
+ break;
+
+ case EEndRemoteTests:
+ STOP_CLOCK_TIME( profile );
+ iLog.LogLine(_L("<< Stop Clock [%d] \n"), macroTimer);
+ iLog.LogLine(_L("== End Remote Tests Time to complete\n"));
+ delete iTester; iTester = NULL;
+ iTestConductor.PrintTimeTaken(profile.iTime);
+ NextTest();
+ break;
+
+
+ case ENumTests:
+ iLog.LogLine(_L("==== No Time to report, tests over ! \n"));
+ iLog.LogLine(_L("==== Group View Tests Finished, All Passed...\n"));
+ CActiveScheduler::Stop();
+ delete this;
+ break;
+ default:
+ ASSERT(EFalse);
+ break;
+ }
+ }
+
+TInt CGroupViewTester::RunError(TInt aError)
+ {
+ // propagate error
+ iTestConductor.SetTestError(aError);
+
+ switch (iCurrentTest)
+ {
+ case ECreateLocalView: test.Printf(_L("Test failed at step CreateLocalView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateRemoteNamedView: test.Printf(_L("Test failed at step CreateRemoteNamedView (%i) with error %i"), iCurrentTest, aError); break;
+ case EStartLocalTests: test.Printf(_L("Test failed at step StartLocalTests (%i) with error %i"), iCurrentTest, aError); break;
+ case EEndLocalTests: test.Printf(_L("Test failed at step EndLocalTests (%i) with error %i"), iCurrentTest, aError); break;
+ case EStartRemoteTests: test.Printf(_L("Test failed at step StartRemoteTests (%i) with error %i"), iCurrentTest, aError); break;
+ case EEndRemoteTests: test.Printf(_L("Test failed at step EndRemoteTests (%i) with error %i"), iCurrentTest, aError); break;
+
+ case ENumTests: test.Printf(_L("Test failed at step NumTests (%i) with error %i"), iCurrentTest, aError); break;
+
+ default: test.Printf(_L("Test failed at step %i with error %i"), iCurrentTest, aError); break;
+ }
+
+ CActiveScheduler::Stop();
+ return KErrNone;
+ }
+
+void CGroupViewTester::HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent)
+ {
+ switch (iCurrentTest)
+ {
+ case ECreateLocalView:
+ test(iLocalView==&aView);
+ test(aEvent.iEventType==TContactViewEvent::EReady);
+ NextTest();
+ break;
+ case ECreateRemoteNamedView:
+ test(iNamedRemoteView==&aView);
+ test(aEvent.iEventType==TContactViewEvent::EReady);
+ NextTest();
+ break;
+ case EStartLocalTests:
+ case EEndLocalTests:
+ case EStartRemoteTests:
+ case EEndRemoteTests:
+ case ENumTests:
+ break;
+ default:
+ test(EFalse);
+ break;
+ }
+
+ }
+
+void CGroupViewTester::NextTest()
+ {
+ iCurrentTest = static_cast<TTest>( static_cast<TInt>(iCurrentTest) + 1 ) ;
+ TRequestStatus *pS=&iStatus;
+ User::RequestComplete(pS,KErrNone);
+ SetActive();
+ }
+
+void CGroupViewTester::ExceriseViewL(CContactViewBase& aView)
+ {
+ TContactItemId lastId=0;
+ const TInt numItems=aView.CountL();
+ for (TInt ii=0;ii<numItems;++ii)
+ {
+ if (ii==numItems-1)
+ {
+ lastId=aView.AtL(ii);
+ }
+ iDb.ReadContactTextDefL(aView.AtL(ii),iScratchBuf,iTextDef);
+ iLog.LogLineNoEcho(iScratchBuf);
+ iScratchBuf.SetLength(0);
+ }
+
+ test(aView.FindL(lastId)==numItems-1);
+ }
+
+
+void CGroupViewTester::TestGroupViewSortOrderL(CContactGroupView& aView)
+ {
+ iLog.LogLine(_L("<TestGroupViewSortOrderL> "));
+ const TInt numItems=aView.CountL();
+ iLog.LogLine(_L("aView.CountL = [%d] \n"), numItems );
+ for (TInt ii=0;ii<numItems;++ii)
+ {
+ if(ii!=numItems-1)//not last item
+ {
+ TContactIdWithMapping first = (aView.iGroupContacts)[ii];
+ TContactIdWithMapping second = (aView.iGroupContacts)[ii+1];
+ test(first.iMapping < second.iMapping);
+ }
+ }
+ }
+
+
+void CGroupViewTester::DoCancel()
+ {
+ }
+
+
+//
+// CUnfiledGroupViewTester
+//
+CUnfiledGroupViewTester* CUnfiledGroupViewTester::NewL(CLog& aLog, CContactDatabase& aDb, CTestConductor& aTestConductor, CContactViewBase& aView, TRequestStatus& aClientStatus)
+ {
+ CUnfiledGroupViewTester* self = new (ELeave) CUnfiledGroupViewTester(aLog, aDb, aTestConductor, aView, aClientStatus);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop(self);
+ return self;
+ }
+
+CUnfiledGroupViewTester::CUnfiledGroupViewTester(CLog& aLog, CContactDatabase& aDb, CTestConductor& aTestConductor, CContactViewBase& aView, TRequestStatus& aClientStatus)
+ : CActive(EPriorityStandard),
+ iLog(aLog),
+ iDb(aDb),
+ iView(aView),
+ iTestConductor(aTestConductor),
+ iClientStatus(aClientStatus)
+ {
+ CActiveScheduler::Add(this);
+ iCurrentTest = EPreStartTest;
+ }
+
+CUnfiledGroupViewTester::~CUnfiledGroupViewTester()
+ {
+ delete iGroupViewUnfiled;
+ }
+
+void CUnfiledGroupViewTester::ConstructL()
+ {
+ }
+
+void CUnfiledGroupViewTester::DoCancel()
+ {
+ }
+
+void CUnfiledGroupViewTester::StartL()
+ {
+ iClientStatus = KRequestPending;
+ NextTest();
+ }
+
+void CUnfiledGroupViewTester::NextTest()
+ {
+ iCurrentTest = static_cast<TTest>( static_cast<TInt>(iCurrentTest) + 1 ) ;
+ TRequestStatus *pS=&iStatus;
+ User::RequestComplete(pS,KErrNone);
+ SetActive();
+ }
+
+void CUnfiledGroupViewTester::HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent)
+ {
+ TCntProfile profile;
+ TInt sizeOfView = 0;
+
+ switch (iCurrentTest)
+ {
+ case ECreateUnfiledGroupView:
+ test(iGroupViewUnfiled==&aView);
+ test(aEvent.iEventType==TContactViewEvent::EReady);
+ // Stop timer.
+ STOP_CLOCK_TIME( profile );
+ iLog.LogLine(_L("<< Stop Clock [%d] \n"), macroTimer);
+ iLog.LogLine(_L("=== Time Taken to create view "));
+ iTestConductor.PrintTimeTaken(profile.iTime);
+ NextTest();
+ break;
+
+ case ETestAddUnfiledContacts:
+ case ETestRemoveUnfiledContacts:
+ TRAPD(err, sizeOfView = iGroupViewUnfiled->CountL() );
+ test(err == KErrNone);
+ if (sizeOfView == iSizeOfViewToExpect)
+ {
+ // Stop timer.
+ STOP_CLOCK_TIME( profile );
+ iLog.LogLine(_L("=== Time Taken handle all Messages "));
+ iLog.LogLine(_L("<< Stop Clock [%d] \n"), macroTimer);
+ iTestConductor.PrintTimeTaken(profile.iTime);
+ iSizeOfViewToExpect = 0;
+ NextTest();
+ }
+ break;
+
+
+ case ENumTests:
+ break;
+ default:
+ test(EFalse);
+ break;
+ }
+
+ }
+
+void CUnfiledGroupViewTester::RunL()
+ {
+ TContactItemId deletedId;
+ TCntProfile profile;
+ TRequestStatus* clientStatus = &iClientStatus;
+ TInt counter = 0;
+ TInt currentSizeOfView = 0;
+
+ switch (iCurrentTest)
+ {
+ case ECreateUnfiledGroupView:
+ iLog.LogLine(_L("=== Create Unfiled group view"));
+ iLog.LogLine(_L(">> Start Clock [%d] \n"), macroTimer);
+ START_CLOCK;
+ iGroupViewUnfiled=CContactGroupView::NewL(iDb,iView,*this,KNullContactId,CContactGroupView::EShowContactsNotInAnyGroup);
+ break;
+
+ case ETestAddUnfiledContacts:
+ iLog.LogLine(_L("==== Add Un-filed Contacts to group"));
+
+ // Contact added here.
+ // Start timer
+ iLog.LogLine(_L(">> Start Clock [%d] \n"), macroTimer);
+ iSizeOfViewToExpect = iGroupViewUnfiled->CountL() + KMaxContactsToAddInGroupTest;
+
+ START_CLOCK;
+ for (counter= 0; counter< KMaxContactsToAddInGroupTest; counter++)
+ {
+ iTestConductor.AddSingleContactL();
+ }
+ // Stop timer.
+ STOP_CLOCK_TIME( profile );
+ iLog.LogLine(_L("<< Stop Clock [%d] \n"), macroTimer);
+ iTestConductor.PrintTimeTaken(profile.iTime);
+ // Start timer
+ iLog.LogLine(_L(">> Start Clock [%d] \n"), macroTimer);
+ START_CLOCK;
+ break;
+
+ case ETestRemoveUnfiledContacts:
+ iLog.LogLine(_L("==== Remove Un-filed Contacts to group"));
+
+ // Contact added here.
+ // Start timer
+ currentSizeOfView = iGroupViewUnfiled->CountL();
+ iSizeOfViewToExpect = currentSizeOfView - KMaxContactsToRemoveInGroupTest;
+ currentSizeOfView--;
+
+ iLog.LogLine(_L(">> Start Clock [%d] \n"), macroTimer);
+ START_CLOCK;
+
+ for (counter = 0; counter < KMaxContactsToRemoveInGroupTest; counter++)
+ {
+ deletedId = iGroupViewUnfiled->AtL( currentSizeOfView - counter );
+ iDb.DeleteContactL(deletedId);
+ iLog.LogLine(_L("==== Removed contact from DB [%d]"), currentSizeOfView - counter);
+ }
+ // Stop timer.
+ STOP_CLOCK_TIME( profile );
+ iLog.LogLine(_L("<< Stop Clock [%d] \n"), macroTimer);
+ iTestConductor.PrintTimeTaken(profile.iTime);
+ // Start timer
+ iLog.LogLine(_L(">> Start Clock [%d] \n"), macroTimer);
+ START_CLOCK;
+ break;
+
+ case ENumTests:
+ iLog.LogLine(_L("==== Group View Tests Finished, All Passed...\n"));
+ User::RequestComplete(clientStatus,KErrNone);
+ break;
+ default:
+ ASSERT(EFalse);
+ break;
+ }
+ }
+
+TInt CUnfiledGroupViewTester::RunError(TInt aError)
+ {
+ // propagate error
+ iTestConductor.SetTestError(aError);
+
+ switch (iCurrentTest)
+ {
+ case ECreateUnfiledGroupView: test.Printf(_L("Test failed at step CreateUnfiledGroupView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestAddUnfiledContacts: test.Printf(_L("Test failed at step TestAddUnfiledContacts (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestRemoveUnfiledContacts: test.Printf(_L("Test failed at step TestRemoveUnfiledContacts (%i) with error %i"), iCurrentTest, aError); break;
+
+ case ENumTests: test.Printf(_L("Test failed at step NumTests (%i) with error %i"), iCurrentTest, aError); break;
+
+ default: test.Printf(_L("Test failed at step %i with error %i"), iCurrentTest, aError); break;
+ }
+
+ CActiveScheduler::Stop();
+ return KErrNone;
+ }
+
+
+
+
+
+//
+// Main.
+//
+/**
+
+@SYMTestCaseID PIM-T-GROUPVIEW-UNFILED-PROFILE-0001
+
+*/
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ RProcess().SetPriority(EPriorityBackground);
+ CActiveScheduler* scheduler=new CActiveScheduler;
+ test.Start(_L("@SYMTESTCaseID:PIM-T-GROUPVIEW-UNFILED-PROFILE-0001 Test Groupview unfiled profile"));
+
+ if (scheduler)
+ {
+ CActiveScheduler::Install(scheduler);
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+ if (cleanup)
+ {
+ CTestConductor* testConductor=NULL;
+ TRAPD(err,testConductor=CTestConductor::NewL());
+ test(err == KErrNone);
+ delete testConductor;
+ delete cleanup;
+ }
+ delete scheduler;
+ }
+ test.End();
+ test.Close();
+ __UHEAP_MARKEND;
+ return KErrNone;
+ }