diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/UnifiedSingular.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/UnifiedSingular.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,217 @@ +// Copyright (c) 2006-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: +// + +/** + @file + @publishedAll + @released +*/ + +#include +#include +#include +#include "UnifiedSingular.h" +#include "ClientServer.h" + +_LIT(KNewFieldsTest,"NewFields"); +_LIT(KTest1,"Adding empty new fields test..."); + +CUnifiedSingular::CUnifiedSingular() + : CCntBaseStep(200)//Number of contacts + { + // Call base class method to set up the human readable name for logging + SetTestStepName(SharedConstants::KUnifiedSingular); + } + +TVerdict CUnifiedSingular::doTestStepL() + { + +//Comment out all the tests for sqlite version because it tests against the +//field content based on fields position which is not part of cntmodel contract. +#ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__ + __UHEAP_MARK; + + InitializeL(); + + iIterate->Reset(); + + const TDesC &KSectionName = ConfigSection(); + + + if( KSectionName == KNewFieldsTest ) + { + INFO_PRINTF1(KTest1); + EmptyNewFieldTestL(iIterate->NextL()); + } + else + { + MissngTestPanic(); + } + Cleanup(); + + __UHEAP_MARKEND; +#endif //__SYMBIAN_CNTMODEL_USE_SQLITE__ + + return TestStepResult(); + } + + + + +/*performs a single set on a field, set label, add uid, or add new field, set value*/ +void CUnifiedSingular::SetSingularL(const TContactItemId &aCid, const TInt &aPos, +const TUnitType &aType, const TInt32 &aUid, const TDesC &aLabel, +CContentType ** const aCtype, const TBool aEmpty) + { + CContactItem *cedit = NULL; + cedit = iContactsDatabase->OpenContactLX(aCid,*iViewAll); + CleanupStack::PushL(cedit); + CContactItemFieldSet &fields = cedit->CardFields(); + TBool rptType = EFalse; + const TFieldType &tfield = TFieldType::Uid(aUid); + switch(aType) + { + case EAddUid: + { + CContactItemField &field = fields[aPos]; + rptType = field.ContentType().ContainsFieldType( tfield ) && (field.ContentType().Mapping() != tfield); + field.AddFieldTypeL( tfield ); + *aCtype = CContentType::NewL( field.ContentType() ); + if(rptType) + { + (*aCtype)->RemoveFieldType(tfield); + } + CleanupStack::PushL(*aCtype); + } + break; + case ESetLabel: + SetLabelL(fields,aPos,aLabel); + break; + case EAddField: + AddNewFieldL( fields, aLabel, TFieldType::Uid(aUid),aEmpty ); + break; + case ESetFieldValue: + SetFieldL(fields,aPos,aLabel); + break; + default: + { + _LIT(KSetSingular,"setsingular"); + User::Panic(KSetSingular,EInvariantFalse); + } + break; + } + iContactsDatabase->CommitContactL(*cedit); + if(aCtype) + { + CleanupStack::Pop(*aCtype); + } + CleanupStack::PopAndDestroy(cedit); + CleanupStack::Pop(); + cedit = NULL; + } + +/*performs a single check on a field, check label, check uid, or check new field*/ +TBool CUnifiedSingular::CheckSingularL(const TContactItemId &aCid, const TInt &aPos, +const TUnitType &aType, const TInt32 &aUid, const CContentType &aCtype, const TDesC &aLabel, +const TBool aEmpty) + { + TBool ret=EFalse; + + CContactItem *cedit = NULL; + cedit = iContactsDatabase->ReadContactLC(aCid,*iViewAll); + CContactItemFieldSet &fields = cedit->CardFields(); + switch(aType) + { + case EAddUid: + { + _LIT(KInvalidField, "Following field contains incorrect uids:"); + const CContentType &ctype = fields[aPos].ContentType(); + ret = SINGLECOMPARE( CompareCTypes(ctype,aCtype),0,0 ); + if(!ret) + { + const TPtrC KFieldLabel = fields[aPos].Label(); + ERR_PRINTF1( KInvalidField); + ERR_PRINTF1( KFieldLabel); + } + } + break; + case ESetLabel: + ret = STRINGCOMPARE( fields[aPos].Label(), ==, aLabel,0,0 ); + break; + case EAddField: + ret = SINGLECOMPARE( CheckNewFieldL( fields, aPos, TFieldType::Uid(aUid),aEmpty ),0,0 ); + break; + default: + { + _LIT(KCheckSingular,"checksingular"); + User::Panic(KCheckSingular,EInvariantFalse); + } + break; + } + iContactsDatabase->CloseContactL(aCid); + CleanupStack::PopAndDestroy(cedit); + cedit = NULL; + + return ret; + } + +/*compares atype2 to atype1, must be equal length, and all atype2 items must be contained within +atype1*/ +TBool CUnifiedSingular::CompareCTypes(const CContentType &aType1,const CContentType &aType2) + { + TBool ret = EFalse; + TInt length = aType1.FieldTypeCount(); + if(length != aType2.FieldTypeCount() ) + { + SINGLECOMPARE( ret,0,0 ); + return ret; + } + + for(TInt i = 0; iReadContactLC(aCid,*iViewAll); + CContactItemFieldSet &fields = cedit->CardFields(); + TInt length = fields.Count(); + iContactsDatabase->CloseContactL(aCid); + CleanupStack::PopAndDestroy(cedit); + cedit = NULL; + CContentType * ctype = NULL; + + for(int i=0, uids = TestConstants::KAltUID;i < length; uids++, i++) + { + SetSingularL(aCid,i,EAddField,uids,TestConstants::KLongString,NULL,ETrue); + SINGLECOMPARE( CheckSingularL(aCid,length+i,EAddField,uids,*ctype,KNullDesC,ETrue), i,0 ); + } + + } + + +