diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/SimpleViewDefTest.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/SimpleViewDefTest.cpp Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,256 @@ +// 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 "ClientServer.h" +#include "SimpleViewDefTests.h" + +_LIT(KTest1,"Testing Inverse behaviour of MI viewdef..."); +_LIT(KTest2,"Testing Omission of primary mapping in viewdefs..."); +_LIT(KTest3,"Semi-Complex Testing to demonstrate that the primary mapping for all uids are ignored..."); + +_LIT(KMedium, "MSajkldjKJIlk30aksdjjfeiME"); +_LIT(KTimeS,"22000101:235959.999999");// time to use for datetime storage +static const TContactItemId KId = 1;//contact id to use for agent storage +static const TTime KTime(KTimeS); + + +//Number of contacts +CSimpleViewDefTest::CSimpleViewDefTest():CViewDefBase(1) + { + // Call base class method to set up the human readable name for logging + SetTestStepName(SharedConstants::KSimpleViewDefTest); + } + +TVerdict CSimpleViewDefTest::doTestStepL() + { + __UHEAP_MARK; + static const TInt KManyContacts = 3; + + CContactItemViewDef *viewAll = CContactItemViewDef::NewLC(CContactItemViewDef::EIncludeFields, + CContactItemViewDef::EIncludeHiddenFields); + viewAll->AddL(KUidContactFieldMatchAll); + + CContactDatabase *contactsDatabase = CContactDatabase::ReplaceL(); + CleanupStack::PushL(contactsDatabase); + + CContactTemplate* ctemplate = STATIC_CAST( CContactTemplate*, + contactsDatabase->ReadContactLC( contactsDatabase->TemplateId(), *viewAll ) ); + + CContactCard* contact = CContactCard::NewLC(ctemplate); + for(TInt i = 0; i< KManyContacts; ++i) + { + iIterate->AddL( contactsDatabase->AddNewContactL(*contact) ); + } + CleanupStack::PopAndDestroy(contact); + iIterate->Reset(); + INFO_PRINTF1(KTest1); + MIInverseTestL( iIterate->NextL(), *contactsDatabase, *viewAll ); + INFO_PRINTF1(KTest2); + PrimayMappingsTestL( iIterate->NextL(), *contactsDatabase, *viewAll ); + //this is not really a simple test, using it to confirm that behaviour applies acroos the board + INFO_PRINTF1(KTest3); + AllPrimayMappingsTestL( iIterate->NextL(), *contactsDatabase, *viewAll ); + + CleanupStack::PopAndDestroy(ctemplate); + CleanupStack::PopAndDestroy(contactsDatabase); + CleanupStack::PopAndDestroy(viewAll); + iIterate->Close(); + __UHEAP_MARKEND; + + return TestStepResult(); + } + +/*this is for developers to test, doesnt use any memeber variable or such +for the sake of simplicity and demonstrability.... This adds one contact to the +database and sets all of its fiedls +*/ +void CSimpleViewDefTest::SetupTestL( const TContactItemId aCid, + CContactDatabase &aContactsDatabase, + const CContactItemViewDef &aViewAll) + { + TInt length =0; + + CContactItem *contactItem = NULL; + + contactItem = aContactsDatabase.OpenContactLX(aCid,aViewAll); + CleanupStack::PushL(contactItem); + + CContactItemFieldSet *fields = &( contactItem->CardFields() ); + CContactItemField *field = NULL; + length = fields->Count(); + + for(TInt i = 0; iStorageType()) + { + case KStorageTypeText: + field->TextStorage()->SetTextL(KMedium); + break; + case KStorageTypeStore: + { + const TDesC &mstring = KMedium; + HBufC8 *buf = HBufC8::NewLC(mstring.Size()); + TPtr8 tptr8 = buf->Des(); + tptr8.Copy(KMedium); + field->StoreStorage()->SetThingL(*buf); + CleanupStack::PopAndDestroy(buf); + } + break; + case KStorageTypeContactItemId: + field->AgentStorage()->SetAgentId(KId); + break; + case KStorageTypeDateTime: + field->DateTimeStorage()->SetTime(KTime); + break; + default: + User::Panic(KMedium,EInvariantFalse); + break; + } + } + + + aContactsDatabase.CommitContactL(*contactItem); + CleanupStack::PopAndDestroy(contactItem); + CleanupStack::Pop();//lock + //CleanupStack::Pop(viewMI); + contactItem = NULL; + fields = NULL; + + } +/*when using mi viewdef to load data no hidden fields have their values restored, +i.e. that action of include hidden fields is reveresed to act as exclude*/ +void CSimpleViewDefTest::MIInverseTestL( const TContactItemId aCid, + CContactDatabase &aContactsDatabase, + const CContactItemViewDef &aViewAll) + { + SetupTestL(aCid,aContactsDatabase,aViewAll); + CContactItem *contactItem = NULL; + + CContactItemViewDef *viewMI = NULL; + viewMI = CContactItemViewDef::NewLC(CContactItemViewDef::EMaskFields, + CContactItemViewDef::EIncludeHiddenFields); + viewMI->AddL(KUidContactFieldMatchAll); + + aContactsDatabase.SetViewDefinitionL(CContactViewDef::NewL(viewMI)); + CleanupStack::Pop(viewMI); + contactItem = aContactsDatabase.ReadMinimalContactLC(aCid); + + CContactItemFieldSet &fields = contactItem->CardFields(); + TInt hcount = fields.Count(); + + INTCOMPARE(hcount, ==, 0, 0, 0);/*there should be three fields in readminimal, all hidden + as in instead if including all hidden, they are all excluded*/ + + CleanupStack::PopAndDestroy(contactItem); + contactItem = NULL; + } + +/*when using any viewdef that contains a primary mapping uid to load data, +then those fields which use that uid are not excluded/included as necessary*/ +void CSimpleViewDefTest::PrimayMappingsTestL( const TContactItemId aCid, + CContactDatabase &aContactsDatabase, + const CContactItemViewDef &aViewAll) + { + SetupTestL(aCid,aContactsDatabase,aViewAll); + doPrimayMappingsTestL(aCid, aContactsDatabase, aViewAll, KIntContactFieldVCardMapADR); + + } + +/*when using any viewdef that contains a primary mapping uid to load data, +then those fields which use that uid are not excluded/included as necessary*/ +void CSimpleViewDefTest::AllPrimayMappingsTestL( const TContactItemId aCid, + CContactDatabase &aContactsDatabase, + const CContactItemViewDef &aViewAll) + { + SetupTestL(aCid,aContactsDatabase,aViewAll); + TInt length = iExistingUidsArray->Count(); + for(TInt i = 0; i < length; ++i) + { + doPrimayMappingsTestL(aCid, aContactsDatabase, aViewAll, (*iExistingUidsArray)[i]); + } + } + +void CSimpleViewDefTest::doPrimayMappingsTestL( const TContactItemId aCid, + CContactDatabase &aContactsDatabase, + const CContactItemViewDef &aViewAll, + const TInt32 aUid) + { + CContactItem *contactItem = NULL; + TInt fieldsIV = 0;//fields in viewdef + TInt primaryFieldsIV = 0; + + contactItem = aContactsDatabase.ReadContactLC(aCid,aViewAll); + CContactItemFieldSet *fields = &( contactItem->CardFields() ); + TInt fcount = fields->Count(); + TInt ccount = 0; + TBool uInArray = EFalse; + const CContentType *ctype = NULL; + + for(TInt i = 0; i < fcount; ++i) + { + ctype = &( (*fields)[i].ContentType() ); + ccount = ctype->FieldTypeCount(); + uInArray = EFalse; + for(TInt j = 0; j < ccount; ++j) + { + if( ctype->FieldType(j).iUid == aUid ) //uid stored in standard fieldtype array + { + ++fieldsIV; + uInArray = ETrue; + break; + } + } + if( !uInArray && ( ctype->Mapping().iUid == aUid ) )//uid only stored in primary mapping + { + ++primaryFieldsIV; + } + } + + CleanupStack::PopAndDestroy(contactItem); + contactItem = NULL; + fields = NULL; + + CContactItemViewDef *viewII = NULL; + viewII = CContactItemViewDef::NewLC(CContactItemViewDef::EIncludeFields, + CContactItemViewDef::EIncludeHiddenFields); + viewII->AddL( TUid::Uid(aUid) ); + + aContactsDatabase.SetViewDefinitionL( CContactViewDef::NewL(viewII) ); + CleanupStack::Pop(viewII); + contactItem = aContactsDatabase.ReadMinimalContactLC(aCid); + fields = &( contactItem->CardFields() ); + + TInt resCount = 0; + resCount = fields->Count(); + + INTCOMPARE( fcount, >, 0, aUid, 0 ); + //primaryFieldsIV is ignored + INTCOMPARE( resCount, ==, fieldsIV , aUid, 0 ); + + CleanupStack::PopAndDestroy(contactItem); + contactItem = NULL; + fields = NULL; + } +