phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/SimpleViewDefTest.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /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 <e32panic.h>
+#include <test/testexecutelog.h>
+#include <cntfldst.h>
+#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; i<length;i++)
+		{
+		field = &((*fields)[i]);
+		switch(field->StorageType())
+			{
+			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;
+	}
+