diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/tsrc/t_groupview_unfiled_profile.cpp --- /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 +#include +#include +#include +#include +#include +#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;iiAddTypicalRandomContactL(); + iTotalContacts++; + test.Printf(_L("Adding %d \n"),ii); + } + CreateGroupTestDataL(); + } + +void CTestConductor::CreateGroupTestDataL() + { + CContactGroup* groupOne = static_cast(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(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( static_cast(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 ")); + const TInt numItems=aView.CountL(); + iLog.LogLine(_L("aView.CountL = [%d] \n"), numItems ); + for (TInt ii=0;iiConstructL(); + 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( static_cast(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; + }