diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/tsrc/t_groupviewmodifiedContact.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/tsrc/t_groupviewmodifiedContact.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,361 @@ +// 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 +#include + +#include "t_groupviewmodifiedContact.h" + +// Test Macro +LOCAL_D RTest test(_L("T_GROUPVIEWMODIFIEDCONTACT")); + +// +// Constants. +// +_LIT(KTestName,"@SYMTESTCaseID:PIM-T-GROUPVIEWMODIFIEDCONTACT-0001 t_groupviewmodifiedcontact"); +_LIT(KLogFileName,"t_groupviewmodifiedcontact.log"); + +_LIT(KDbFileName,"c:t_groupview.cdb"); + +_LIT(KGroupOneName,"GroupOne"); + + +// +// 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; + 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); + } + + +void CTestConductor::RunTestsL() + { + CGroupViewTester* tester=CGroupViewTester::NewL(*iLog, this, *iDb); + 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, CTestConductor* aTestConductor, CContactDatabase& aDb) + { + CGroupViewTester* self=new(ELeave) CGroupViewTester(aLog, aTestConductor, aDb); + CleanupStack::PushL(self); + self->ConstructL(); + CleanupStack::Pop(); + return self; + } + +CGroupViewTester::~CGroupViewTester() + { + iGroupViewOne->Close(*this); + + iLocalView->Close(*this); + iSortOrder_1.Close(); + + delete iGroupOne; + } + +CGroupViewTester::CGroupViewTester(CLog& aLog, CTestConductor* aTestConductor, CContactDatabase& aDb) + : CActive(EPriorityStandard),iLog(aLog),iTestConductor(aTestConductor),iDb(aDb),iCurrentTest(-1) + { + CActiveScheduler::Add(this); + } + +void CGroupViewTester::ConstructL() + { + iSortOrder_1.AppendL(KUidContactFieldGivenName); + iSortOrder_1.AppendL(KUidContactFieldFamilyName); + iSortOrder_1.AppendL(KUidContactFieldCompanyName); + NextTest(); + } + + +void CGroupViewTester::RunL() + { + switch (iCurrentTest) + { + case ECreateLocalView: + iLog.LogLine(_L("=== Create local view")); + iLocalView=CContactLocalView::NewL(*this,iDb,iSortOrder_1,EContactAndGroups/*EContactsOnly*/); + break; + + case ECreateGroupOne: + iLog.LogLine(_L("==== Create Group \n")); + iGroupOne = STATIC_CAST(CContactGroup*,iDb.CreateContactGroupL(KGroupOneName)); + iGroupOneId = iGroupOne->Id(); + delete iGroupOne; + iGroupOne = NULL; + iGroupOne = STATIC_CAST(CContactGroup*,iDb.ReadContactL(iGroupOneId)); + + break; + + case ECreateGroupOneView: + { + iLog.LogLine(_L("=== GroupOneView")); + iGroupViewOne=CContactGroupView::NewL(iDb,*iLocalView,*this,iGroupOne->Id(),CContactGroupView::EShowContactsInGroup); + } + break; + + + case EAddContact: + { + iLog.LogLine(_L("==== Add Contact \n")); + CContactTemplate* templateContact=STATIC_CAST(CContactTemplate*,iDb.ReadContactL(iDb.TemplateId())); + CleanupStack::PushL(templateContact); + CTestContact* contact=CTestContact::NewLC(*templateContact); + + contact->SetFirstNameL(_L("FirstName")); + + contact->SetLastNameL(_L("LastName")); + + contact->SetCompanyNameL(_L("CompanyName")); + + contact->SetWorkPhoneL(_L("02079460090")); + + contact->SetWorkMobileL(_L("02079460789")); + + contact->SetHomePhoneL(_L("02079460987")); + + contact->SetWorkEmailAddressL(_L("work@email.com")); + + iSingleContactId = iDb.AddNewContactL(contact->ContactItem()); + + CleanupStack::PopAndDestroy(contact); + CleanupStack::PopAndDestroy(templateContact); + iNumNotificationExpected = 2; // Once for the total view, one for the group view. + } + + break; + + case EAddContactToGroupOne: // since we've only one contact anyway - we can be sure it's id will be 1. + iLog.LogLine(_L("==== Assign contact to Group \n")); + iDb.AddContactToGroupL(iSingleContactId,iGroupOne->Id()); + iNumNotificationExpected = 6; + break; + + case EModifyContactInGroupOne: + { + iLog.LogLine(_L("==== Modify Contact \n")); + CContactItem* contactToModify = iDb.OpenContactL(iSingleContactId); + CleanupStack::PushL(contactToModify); + CTestContact* testContactToModify = CTestContact::NewLC(*contactToModify); + + CContactItemFieldSet& fields = contactToModify->CardFields(); + CContactItemField& lastNameField = fields[fields.Find(KUidContactFieldFamilyName)]; + CContactTextField* lastNameTextField = static_cast(lastNameField.Storage()); + lastNameTextField->SetText(_L("modified_lastname").AllocL()); + + iDb.CommitContactL(*contactToModify); + iDb.CloseContactL(1); + CleanupStack::PopAndDestroy(testContactToModify); + CleanupStack::PopAndDestroy(contactToModify); + iNumNotificationExpected = 4; + } + + break; + + case ENumTests: + iLog.LogLine(_L("==== Group View Modified Contact 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 ECreateGroupOne: test.Printf(_L("Test failed at step CreateGroupOne (%i) with error %i"), iCurrentTest, aError); break; + case ECreateGroupOneView: test.Printf(_L("Test failed at step CreateGroupOneView (%i) with error %i"), iCurrentTest, aError); break; + case EAddContact: test.Printf(_L("Test failed at step AddContact (%i) with error %i"), iCurrentTest, aError); break; + case EAddContactToGroupOne: test.Printf(_L("Test failed at step AddContactToGroupOne (%i) with error %i"), iCurrentTest, aError); break; + case EModifyContactInGroupOne: test.Printf(_L("Test failed at step ModifyContactInGroupOne (%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: + iLog.LogLine(_L("==== Handling the local view creation \n")); + test(iLocalView==&aView); + test(aEvent.iEventType==TContactViewEvent::EReady); + break; + + case ECreateGroupOne: + iLog.LogLine(_L("==== Handling the group creation \n")); + break; + + case ECreateGroupOneView: + iLog.LogLine(_L("==== Handling the group view creation \n")); + test(iGroupViewOne==&aView); + test(aEvent.iEventType==TContactViewEvent::EReady); + break; + + case EAddContactToGroupOne: + iLog.LogLine(_L("==== Handling the addition of a contact to the group \n")); + break; + + case EAddContact: + iLog.LogLine(_L("==== Handling the addition of a contact \n")); + break; + + case EModifyContactInGroupOne: + iLog.LogLine(_L("==== Handling Contact being modified. \n")); + + switch (aEvent.iEventType) + { + case TContactViewEvent::EItemRemoved: + iLog.LogLine(_L("==== Contact Is removed for modify \n")); + break; + + case TContactViewEvent::EItemAdded: + iLog.LogLine(_L("==== Contact Is added for modify \n")); + { + TInt numberOfEntries = 0; + TRAPD(err, numberOfEntries = aView.CountL() ); + test(err == KErrNone && numberOfEntries != 0); + } + break; + default: + break; + } + break; + + case ENumTests: + default: + test(EFalse); + break; + } + if (--iNumNotificationExpected<=0) + { + NextTest(); + iNumNotificationExpected=0; + } + } + +void CGroupViewTester::NextTest() + { + ++iCurrentTest; + TRequestStatus *pS=&iStatus; + User::RequestComplete(pS,KErrNone); + SetActive(); + } + + + + + + +void CGroupViewTester::DoCancel() + { + } + +// +// Main. +// + +/** + +@SYMTestCaseID PIM-T-GROUPVIEWMODIFIEDCONTACT-0001 + +*/ + +GLDEF_C TInt E32Main() + { + __UHEAP_MARK; + CActiveScheduler* scheduler=new CActiveScheduler; + if (scheduler) + { + CActiveScheduler::Install(scheduler); + CTrapCleanup* cleanup=CTrapCleanup::New(); + if (cleanup) + { + CTestConductor* testConductor=NULL; + test.Start(KTestName); + + TRAPD(err,testConductor=CTestConductor::NewL()); + test(err == KErrNone); + test.End(); + test.Close(); + delete testConductor; + delete cleanup; + } + delete scheduler; + } + __UHEAP_MARKEND; + return KErrNone; + }