diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/TestContactViewUnderLyingViewUpdateStep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/TestContactViewUnderLyingViewUpdateStep.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,289 @@ +// Copyright (c) 2007-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 "TestContactViewUnderLyingViewUpdateStep.h" + +/** + * Test Step Constructor + */ +CTestContactViewUnderlyingViewUpdateStep::CTestContactViewUnderlyingViewUpdateStep() +:CTestContactViewDatabaseUtilitiesStep() + { + // Mandatory call to base class method to set up the human readable name for logging. + SetTestStepName(KTestContactViewUnderLyingViewUpdateStep); + } + +/** + * Base class pure virtual. + * This function sets up the work envirnoment required by the test step + * @return EPass or EFail indicating the result of the test step preamble operation. + */ +TVerdict CTestContactViewUnderlyingViewUpdateStep::doTestStepPreambleL() + { + CTestContactViewDatabaseUtilitiesStep::doTestStepPreambleL(); + return TestStepResult(); + } + +/** + *Base class pure virtual. + *@return EPass or EFail indicating the result of the test step. + */ +TVerdict CTestContactViewUnderlyingViewUpdateStep::doTestStepL() + { + ConstructViewsL(); + ReadIniAndConstructViewUpdateObjectsL(); + ReadIniAndConstructViewValidationObjectsL(); + RemoveContactsFromTheUnderLyingViewsL(); + ListenForViewEventsAndValidateL(); + ValidateViewCountL(); + return TestStepResult(); + } + +/** + * Reads data specified in the ini file and constructs all relevant view update objects + * These view update objects serve as source for performing underlying view update operations + */ +void CTestContactViewUnderlyingViewUpdateStep::ReadIniAndConstructViewUpdateObjectsL() + { + _LIT(KListOfViewsToBeRemoved, "ListOfViewsToBeUpdated"); + TPtrC listOfViewsToBeUpdated; + TESTL(GetStringFromConfig(ConfigSection(), KListOfViewsToBeRemoved, listOfViewsToBeUpdated)); + + RArray sections; + CleanupClosePushL(sections); + ViewUtilityReference().TokenizeStringL(listOfViewsToBeUpdated, sections); + + for ( TInt i = 0; i < sections.Count(); ++i ) + { + TViewModificationData viewModificationData; + + // Here data is read from the ini file about various contact view update operations + // to be performed. This information comprises of view to be updated and number of contacts + // to be removed in the specified view + _LIT(KContactViewType, "ViewType"); + TPtrC contactViewTypeString; + GetStringFromConfig(sections[i], KContactViewType, contactViewTypeString); + viewModificationData.SetViewType(contactViewTypeString); + + _LIT(KContactViewIndex, "ViewIndex"); + TInt contactViewIndex; + GetIntFromConfig(sections[i], KContactViewIndex, contactViewIndex); + viewModificationData.SetViewIndex(contactViewIndex); + + _LIT(KNumberOfContactToBeRemoved, "NumberOfContactsToBeRemoved"); + TInt numberOfContactsToBeRemoved; + GetIntFromConfig(sections[i], KNumberOfContactToBeRemoved, numberOfContactsToBeRemoved); + viewModificationData.SetNumberOfContactsToBeRemoved(numberOfContactsToBeRemoved); + + iViewUpdateArray.AppendL(viewModificationData); + } + + CleanupStack::PopAndDestroy(§ions); + } + + +/** + * Reads data specified in the ini file and constructs all view validation objects + */ +void CTestContactViewUnderlyingViewUpdateStep::ReadIniAndConstructViewValidationObjectsL() + { + _LIT(KListOfViewsToBeValidated, "ListOfViewsToBeValidated"); + TPtrC listOfViewsToBeRemoved; + TESTL(GetStringFromConfig(ConfigSection(), KListOfViewsToBeValidated, listOfViewsToBeRemoved)); + + RArray sections; + CleanupClosePushL(sections); + ViewUtilityReference().TokenizeStringL(listOfViewsToBeRemoved, sections); + + for ( TInt i = 0; i < sections.Count(); ++i ) + { + TViewValidationData ViewValidationData; + + _LIT(KContactViewType, "ViewType"); + TPtrC contactViewTypeString; + GetStringFromConfig(sections[i], KContactViewType, contactViewTypeString); + ViewValidationData.SetViewType(contactViewTypeString); + + _LIT(KContactViewIndex, "ViewIndex"); + TInt contactViewIndex; + GetIntFromConfig(sections[i], KContactViewIndex, contactViewIndex); + ViewValidationData.SetViewIndex(contactViewIndex); + + _LIT(KUpdatedViewCount, "UpdatedViewCount"); + TInt updatedViewCount = 0; + GetIntFromConfig(sections[i], KUpdatedViewCount, updatedViewCount); + ViewValidationData.SetExpectedViewCount(updatedViewCount); + + iViewValidationArray.AppendL(ViewValidationData); + } + + CleanupStack::PopAndDestroy(§ions); + } + + + +/** + * Removes contacts from the underlying view based on the data available with contact view update objects + */ +void CTestContactViewUnderlyingViewUpdateStep::RemoveContactsFromTheUnderLyingViewsL() + { + for(TInt i = 0; i < iViewUpdateArray.Count(); ++i) + { + TViewModificationData contactViewValidationObject = iViewUpdateArray[i]; + CContactViewBase* contactView = ViewCollectionReference().GetDesiredView + (contactViewValidationObject.ViewTypeInStringFormat(), contactViewValidationObject.ViewIndex()); + + + RArray contactItemIdArray; + CleanupClosePushL(contactItemIdArray); + + for(TInt j = 0; j < contactViewValidationObject.NumberOfContactsToBeRemoved(); ++j) + { + TContactItemId contactItemId = contactView->AtL(j); + contactItemIdArray.AppendL(contactItemId); + } + + for(TInt j = 0; j < contactItemIdArray.Count(); ++j) + { + DatabaseReference().DeleteContactL(contactItemIdArray[j]); + } + + CleanupStack::PopAndDestroy(&contactItemIdArray); + } + } + +/** + * Listens for contact view notifications and validates that only remove contact item events are received + */ +void CTestContactViewUnderlyingViewUpdateStep::ListenForViewEventsAndValidateL() + { + TContactViewEvent contactViewEvent; + while(CTestContactViewDatabaseUtilitiesStep::ListenForViewEventsL(contactViewEvent)) + { + if(contactViewEvent.iEventType != TContactViewEvent::EItemRemoved) + { + _LIT(KUndesiredContactViewEvent, " An undesired contact view event i.e. a contact view event other than remove item contact event was received was received : %d"); + ERR_PRINTF2(KUndesiredContactViewEvent, contactViewEvent.iEventType); + SetTestStepResult(EFail); + } + } + } + +/** + * Validates the contact view count against expected data specified in the contact view validation objects + */ +void CTestContactViewUnderlyingViewUpdateStep::ValidateViewCountL() + { + for(TInt i = 0; i < iViewValidationArray.Count(); ++i) + { + TViewValidationData validationInfo = iViewValidationArray[i]; + CContactViewBase* contactView = ViewCollectionReference().GetDesiredView(validationInfo.ViewTypeInStringFormat(), validationInfo.ViewIndex()); + + if(contactView->CountL() != validationInfo.ExpectedViewCount()) + { + _LIT(KErrContactViewMisMatch, "The contact view doesnt reflect the desired view count \n"); + ERR_PRINTF1(KErrContactViewMisMatch); + + _LIT(KInfoViewCountData, "The expected view count is %d while the actual view count is %d \n"); + INFO_PRINTF3(KInfoViewCountData, validationInfo.ExpectedViewCount(), contactView->CountL()); + + SetTestStepResult(EFail); + } + } + } + +/** + * Converts the view type information in TViewData::TContactViewType to string format + */ +void TViewData::ConvertViewTypeToString(TViewData::TContactViewType aViewType, TDes& aViewTypeInString) + { + if ( aViewType == TViewData::ELocalView ) + { + aViewTypeInString.Copy(KLocalView); + } + else if ( aViewType == TViewData::ERemoteView) + { + aViewTypeInString.Copy(KRemoteView); + } + else if ( aViewType == TViewData::ENamedRemoteView) + { + aViewTypeInString.Copy(KNamedRemoteView); + } + else if ( aViewType == TViewData::EGroupView) + { + aViewTypeInString.Copy(KGroupView); + } + else if ( aViewType == TViewData::EFindView) + { + aViewTypeInString.Copy(KFindView); + } + else if ( aViewType == TViewData::EFilteredView) + { + aViewTypeInString.Copy(KFilteredView); + } + else if ( aViewType == TViewData::EConcatenatedView) + { + aViewTypeInString.Copy(KConcatenatedView); + } + else if ( aViewType == TViewData::ESubView) + { + aViewTypeInString.Copy(KSubView); + } + } + +/** + * Converts the view type information available in string format to TViewData::TContactViewType + * @param aViewTypeString view type information in string format + * @return TViewData::TContactViewType - view type information in TViewData::TContactViewType format + */ +TViewData::TContactViewType TViewData::ConvertViewType(const TPtrC& aViewTypeString) + { + TViewData::TContactViewType viewType = TViewData::ELocalView; + + if ( aViewTypeString.Compare(KLocalView) == 0 ) + { + viewType = TViewData::ELocalView; + } + else if ( aViewTypeString.Compare(KRemoteView) == 0 ) + { + viewType = TViewData::ERemoteView; + } + else if ( aViewTypeString.Compare(KNamedRemoteView) == 0 ) + { + viewType = TViewData::ENamedRemoteView; + } + else if ( aViewTypeString.Compare(KGroupView) == 0 ) + { + viewType = TViewData::EGroupView; + } + else if ( aViewTypeString.Compare(KFindView) == 0 ) + { + viewType = TViewData::EFindView; + } + else if ( aViewTypeString.Compare(KFilteredView) == 0 ) + { + viewType = TViewData::EFilteredView; + } + else if ( aViewTypeString.Compare(KConcatenatedView) == 0 ) + { + viewType = TViewData::EConcatenatedView; + } + else if ( aViewTypeString.Compare(KSubView) == 0 ) + { + viewType = TViewData::ESubView; + } + + return viewType; + }