phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/CntBaseStep.cpp
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/Integration/CntPerfTest/src/CntBaseStep.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,781 @@
+// 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 "CntBaseStep.h"
+#include "NbCntTestLib.h"
+
+_LIT(KServerUid, "*[10003a73]*" );
+
+
+CCntBaseStep::~CCntBaseStep()
+	{
+	_LIT(KBaseDestructor,"I am in base destructor");
+	INFO_PRINTF1(KBaseDestructor);
+	}
+
+TVerdict CCntBaseStep::doTestStepPreambleL()
+	{
+	if(!CActiveScheduler::Current())
+		{
+		CActiveScheduler* sched = NULL;
+		sched = new(ELeave) CActiveScheduler;
+		CActiveScheduler::Install(sched);
+		}
+
+		
+	iViewAll = CContactItemViewDef::NewL(CContactItemViewDef::EIncludeFields,CContactItemViewDef::EIncludeHiddenFields);
+	iViewAll->AddL(KUidContactFieldMatchAll);
+	/**
+	issue 3.
+	need use custom viewdef otherwise there is discrepency between number of fields between empty fields
+	and edited fields
+	*/
+	
+	iExistingUidsArray = new(ELeave) RArray<TInt32>();
+	iIterate = new(ELeave) RCntList();
+	
+	GetExistingUIDsL(*iExistingUidsArray);
+	
+	//call method in derived class
+	PreTestL();
+	
+	SetTestStepResult(EPass);
+	return TestStepResult();
+	}
+
+TVerdict CCntBaseStep::doTestStepPostambleL()
+	{
+	_LIT(KPostamblePrint,"I am in base doTestStepPostambleL");
+	INFO_PRINTF1(KPostamblePrint);
+	Close();
+	Cleanup();
+	delete iViewAll;
+
+	iExistingUidsArray->Close();
+	CLEAR(iExistingUidsArray);
+	CLEAR(iIterate);
+	
+	TRAPD( err, CContactDatabase::DeleteDefaultFileL() );
+	if( err )
+		{
+		_LIT(KDBDeleteError,"Default database couldn't be deleted, error: %d");
+		ERR_PRINTF2(KDBDeleteError, err);
+		}
+		
+	WaitForServerToExitL();//waits for server to close to allow for any memory leaks to be detected
+	return TestStepResult();
+	}
+
+/**initilize called within __UHEAP_MARK/__UHEAP_MARKEND of doTestStepL, 
+so that all relevant memmory de/allocation is in scope*/
+void CCntBaseStep::InitializeL()
+	{
+	iContactsDatabase = CContactDatabase::ReplaceL();//create  clean/fresh database for all tests		
+
+	iTemplate = STATIC_CAST( CContactTemplate*, 
+	iContactsDatabase->ReadContactL( iContactsDatabase->TemplateId(), *iViewAll ) );
+	
+	AddEmptyContactsL(iContacts);
+	}
+	
+/**cleans up called within __UHEAP_MARK/__UHEAP_MARKEND of doTestStepL, 
+so that all relevant memmory de/allocation is in scope*/	
+void CCntBaseStep::Cleanup()
+	{
+	delete iTemplate;
+	iTemplate = NULL;
+	delete iContactsDatabase;
+	iContactsDatabase = NULL;
+	iIterate->Close();
+	}
+/*
+adds a list of uids to all fields in aFields, uid is incremented from provided seed
+*/	
+void CCntBaseStep::AddUIDsL(CContactItemFieldSet &aFields, const TInt32 aFieldType) const
+	{	
+	TInt length = aFields.Count();
+	for(TInt i = 0, uids=aFieldType; i<length; i++, uids++)
+		{	
+		aFields[i].AddFieldTypeL(TFieldType::Uid(uids));
+		}
+	}
+	
+/*
+check that an extra uid was added to all fields, uid is incremented from provided seed
+*/	
+	
+TBool CCntBaseStep::CheckUIDsL(const CContactItemFieldSet &aFields, const TInt32 aFieldType) const
+	{
+	TBool ret = EFalse;
+	TInt length = aFields.Count();
+	const CContentType *ctype = NULL;
+	for(TInt i = 0, uids=aFieldType; i<length; i++, uids++)
+		{
+		ctype = &aFields[i].ContentType();
+		// SIP ID will always match the system template field, therefore the added uid will be lost
+		if(! ctype->ContainsFieldType(TFieldType::Uid(uids) ) && !ctype->ContainsFieldType(KUidContactFieldSIPID))
+			{
+			return ret;
+			}
+		}
+	ret=ETrue;
+	return ret;
+	}
+
+/*sets the label for  a field at position aPos, in aFields to aLabel*/	
+void CCntBaseStep::SetLabelL(CContactItemFieldSet &aFields, const TInt aPos, const TDesC& aLabel) const 
+	{
+	aFields[aPos].SetLabelL(aLabel);
+	}
+	
+
+/*checks that the label for  a field at position aPos, in aFields equals to aLabel*/	
+TBool CCntBaseStep::CompareLabels(const CContactItemFieldSet &aFields, const TInt aPos, const TDesC& aLabel) 
+	{
+	
+	return aFields[aPos].Label() == aLabel;
+		
+	}
+	
+/*add a new field empty or otherwise to afields, using the supplied label and uid*/
+void CCntBaseStep::AddNewFieldL(CContactItemFieldSet &aFields, const TDesC& aLabel, 
+const TFieldType aFieldType, const TBool aEmpty) const
+	{
+	CContactItemField *field = CContactItemField::NewLC(KStorageTypeText,aFieldType);
+	field->SetLabelL(aLabel);
+	if (!aEmpty)
+		{
+		field->TextStorage()->SetTextL(aLabel);//otherwise new field is not stored
+		}
+	aFields.AddL(*field);
+	CleanupStack::Pop(field);
+	}
+	
+/*checks if empty new field was added and uid of added field*/
+TBool CCntBaseStep::CheckNewFieldL(const CContactItemFieldSet &aFields, const TInt aPos, 
+const TFieldType aFieldType, const TBool aEmpty) const
+	{
+	TBool ret = EFalse;
+	if(aEmpty)
+		{
+		ret = aFields.Count() <= aPos;
+		}
+	else
+		{
+		const CContentType &ctype = aFields[aPos].ContentType();
+	 	ret = (ctype.FieldTypeCount() <= 2) && ( ctype.FieldType( 0 ) == aFieldType );//2 uids if other custom uid added
+		}
+	return ret;
+
+	}
+
+/*sets a specific contact field to a value as determined by its type.
+field at aPos in aFields is set to aText*/
+void CCntBaseStep::SetFieldL(CContactItemFieldSet &aFields, const TInt aPos, const TDesC& aText) const
+	{
+	CContactItemField &field = aFields[aPos];
+	if( field.IsTemplateLabelField() )
+		{
+		return;
+		}
+	switch(field.StorageType())
+		{
+		case KStorageTypeText:
+			field.TextStorage()->SetTextL(aText);
+		break;
+		case KStorageTypeStore:
+			{
+			HBufC8 *buf = HBufC8::NewLC(aText.Size());
+			TPtr8 tptr8 = buf->Des();
+			tptr8.Copy(aText);
+			field.StoreStorage()->SetThingL(*buf);
+			CleanupStack::PopAndDestroy(buf);
+			}
+		break;
+		case KStorageTypeContactItemId:
+			field.AgentStorage()->SetAgentId(TestConstants::KContactId);
+		break;
+		case KStorageTypeDateTime:
+			field.DateTimeStorage()->SetTime(TestConstants::KDateTime);
+		break;
+		default:
+			User::Panic(aText,EInvariantFalse);
+		break;
+		}
+	}
+
+/*checks the value of a specific field as determined by it type
+returns true if field at aPos in aFields equals aText*/
+TBool CCntBaseStep::CompareFieldsL(const CContactItemFieldSet &aFields, const TInt aPos, const TDesC& aText) const
+	{
+	TBool ret = EFalse;
+	const CContactItemField &field = aFields[aPos];
+	if(  field.IsTemplateLabelField() )
+		{
+		return ret;
+		}
+	switch( field.StorageType() )
+		{
+		case KStorageTypeText:
+			ret = field.TextStorage()->Text() == aText;
+		break;
+		case KStorageTypeStore:
+			{
+			HBufC8 *buf = HBufC8::NewLC(aText.Size());
+			TPtr8 tptr8 = buf->Des();
+			tptr8.Copy(aText);
+			ret = field.StoreStorage()->Thing()->Compare(*buf) == 0;
+			CleanupStack::PopAndDestroy(buf);
+			}
+		break;
+		case KStorageTypeContactItemId:
+			ret = field.AgentStorage()->Value() == TestConstants::KContactId;
+		break;
+		case KStorageTypeDateTime:
+			ret = field.DateTimeStorage()->Time() == TestConstants::KDateTime;
+		break;
+		default:
+			User::Panic(aText,EInvariantFalse);
+		break;
+		}
+	return ret;
+	
+	}
+	
+void CCntBaseStep::AddEmptyContactsL(const TInt aNumber)
+/**
+Add number of empty contacts to db, using the system template.
+@return None
+@param aNumber number of contacts to be added
+@pre None
+@post database now contains aNumber of empty contacts
+*/
+	{
+	CContactCard* contact = CContactCard::NewLC(iTemplate);
+	for(TInt k = 0; k<aNumber; k++)
+		{		
+		iIterate->AddL( iContactsDatabase->AddNewContactL(*contact) );
+		}	
+	CleanupStack::PopAndDestroy(contact);
+	}
+
+//sets the value of all fields for a given contact, uses alternating string values
+void CCntBaseStep::SetContactFieldsL(CContactItem &aContact, const TInt aCount) const
+	{
+	CContactItemFieldSet &fields = aContact.CardFields();
+	
+	for(TInt i = 0; i < aCount; i++)
+		{
+		SetFieldL(fields, i, TestConstants::KLongString);
+		}
+	}
+
+void CCntBaseStep::SetContactFieldsL(CContactItem &aContact) const
+	{
+	SetContactFieldsL( aContact, aContact.CardFields().Count() );
+	}
+
+//checks the value of all fields for a given contact, uses alternating string values	
+TBool CCntBaseStep::CheckContactFieldsL(const CContactItem &aContact) const
+	{
+	TBool ret=EFalse;
+	const CContactItemFieldSet& fields = aContact.CardFields();
+	const TInt length = fields.Count();
+
+
+	// Numerous field combinations will result in non-valid combinations, therefore the following
+    // three UIDs are excluded for brevity
+	for(TInt i = 0; i<length;i++)
+		{	
+		if (fields[i].ContentType().Mapping() == KUidContactFieldVCardMapUnusedN) 
+			{
+			continue;
+			}
+			
+		if (fields[i].ContentType().ContainsFieldType(TFieldType::Uid(KIntContactFieldVCardMapTEL)))
+			{
+			continue;
+			}
+			
+		if (fields[i].ContentType().ContainsFieldType(TFieldType::Uid(KIntContactFieldVCardMapSIPID)))
+			{
+			continue;
+			}
+			
+		ret = CompareFieldsL(fields, i, TestConstants::KLongString);
+        if (!ret) 
+			{
+			break;	
+			}
+		}	
+	return ret;
+	}
+
+//set the value of all labels in a contact, uses semi-alternating string values
+void CCntBaseStep::SetContactLabelsL(CContactItem &aContact) const
+	{
+	CContactItemFieldSet &fields = aContact.CardFields();
+	TInt length = fields.Count();
+	for(TInt i = 0; i<length; i++)
+		{
+		SetLabelL(fields, i,   TestConstants::KLongString);
+		}
+	}
+
+//checks the value of all labels in a contact, uses semi-alternating fields	
+TBool CCntBaseStep::CheckContactLabelsL(const CContactItem &aContact)
+	{
+	TBool ret=EFalse;
+	CContactItemFieldSet &fields = aContact.CardFields();
+	TInt length = fields.Count();
+	
+	// Numerous field combinations will result in non-valid combinations, therefore the following
+    // three UIDs are excluded for brevity	
+	for(TInt i = 0; i<length; i++)
+		{	
+		if (fields[i].ContentType().Mapping() == KUidContactFieldVCardMapUnusedN) 
+			{
+			continue;
+			}
+			
+		if (fields[i].ContentType().ContainsFieldType(KUidContactFieldVCardMapTEL))
+			{
+			continue;
+			}
+			
+		if (fields[i].ContentType().ContainsFieldType(KUidContactFieldVCardMapSIPID))
+			{
+			continue;
+			}	
+		
+		ret = CompareLabels(fields, i,   TestConstants::KLongString);
+	
+		if(!ret) 
+			{
+			break;
+			}
+		}
+	return ret;
+	}
+	
+/*returns the number of empty fields in aFields*/
+TInt CCntBaseStep::CountEmpty(const CContactItemFieldSet &aFields)
+	{
+	TInt count = 0;
+	TInt ecount = 0;
+	
+	count = aFields.Count();
+	for(TInt i = 0; i < count; ++i)
+		{
+		if( !( aFields[i].Storage()->IsFull() ) )
+			{
+			++ecount;
+			}
+		}
+	return ecount;
+	}
+	
+/*returns the number of hidden fields in aFields*/
+TInt CCntBaseStep::CountHiddenFields(const CContactItemFieldSet &aFields) const
+	{
+	const TInt count = aFields.Count();;
+	TInt hcount = 0;
+
+	for(TInt i = 0; i < count; ++i)
+		{
+		if( aFields[i].IsHidden() )
+			{
+			++hcount;
+			}
+		}	
+	return hcount;
+	}
+
+/*prints contents of aContact to an html file*/	
+void CCntBaseStep::PrintCurrentContactL(const CContactItem &aContact) const
+	{
+	static TInt counter = 0;
+	TFileName fileName;
+	
+	_LIT(KFileName,"c:\\cntperfviewdef\\%d\\%d.ViewDef.html");
+	fileName.Format(KFileName,counter/4,counter%4);
+	++counter;
+	PrintContactL(fileName, aContact);
+	}
+	
+/*prints contents of contactitem at aCid to an html file*/	
+void CCntBaseStep::PrintCurrentContactL(const TContactItemId aCid) const
+	{
+	CContactItem *citem = iContactsDatabase->ReadContactLC(aCid,*iViewAll);
+	PrintCurrentContactL(*citem);
+	CleanupStack::PopAndDestroy(citem);
+	}
+
+/*opens contact item at aCid using viewdef aView for editing, initilises iContactItem*/
+void CCntBaseStep::OpenL(	const TContactItemId aCid, 
+							const CContactItemViewDef &aView, 
+							const TBool aDefault)
+	{
+	if(aDefault)
+		{
+		iContactItem = iContactsDatabase->OpenContactL(aCid);
+		}
+	else
+		{
+		iContactItem = iContactsDatabase->OpenContactL(aCid,aView);
+		}
+	iFields = &(iContactItem->CardFields());
+	}
+/*commits open contact, must be called after openl*/
+void CCntBaseStep::CommitL()
+	{
+	if(iContactItem != NULL)
+		{		
+		iFields = NULL;
+		iContactsDatabase->CommitContactL(*iContactItem);
+		delete iContactItem;
+		iContactItem = NULL;
+		}
+	}
+/*reads (readonly) contact item at aCid using viewdef aView for viewing, initilises iContactItem*/	
+void CCntBaseStep::ReadL(	const TContactItemId aCid, 
+							const CContactItemViewDef &aView, 
+							const TBool aDefault)
+	{
+	if(aDefault)
+		{
+		iContactItem = iContactsDatabase->ReadContactL(aCid);
+		}
+	else
+		{
+		iContactItem = iContactsDatabase->ReadContactL(aCid,aView);
+		}
+	iFields = &(iContactItem->CardFields());
+	}
+/*reads non empty fields (readonly) for ocontact item at aCid using viewdef 
+aView for viewing, initilises iContactItem*/		
+void CCntBaseStep::ReadMinimalL(const TContactItemId aCid, 
+								const CContactItemViewDef &aView, 
+								const CContactItemViewDef &aDefView,
+								const TBool aDefault)
+	{
+	if(aDefault)
+		{
+		iContactItem = iContactsDatabase->ReadMinimalContactL(aCid);
+		}
+	else
+		{
+		iContactsDatabase->SetViewDefinitionL( CContactViewDef::NewL( CopyViewL(aView) ) );
+		iContactItem = iContactsDatabase->ReadMinimalContactL(aCid);
+		iContactsDatabase->SetViewDefinitionL( CContactViewDef::NewL( CopyViewL(aDefView) ) );
+		}
+	iFields = &(iContactItem->CardFields());
+	}
+	
+/*closes open contact, must be called after readl/openl*/	
+void CCntBaseStep::Close()
+	{
+	if(iContactItem != NULL)
+		{
+		iFields = NULL;
+		TRAPD( err, iContactsDatabase->CloseContactL( iContactItem->Id() ) );
+		if( err )
+			{
+			_LIT(KClosingError,"Default contact couldn't be closed, error: %d");
+			ERR_PRINTF2(KClosingError, err);
+			}
+		delete iContactItem;
+		iContactItem = NULL;
+		}
+	}
+
+/*returns a copy of aView*/	
+CContactItemViewDef *CCntBaseStep::CopyViewL(const CContactItemViewDef &aView)
+	{
+	CContactItemViewDef *ret=CContactItemViewDef::NewLC( aView.Use(), aView.Mode() );
+	TInt count = aView.Count();
+	for(TInt i=0; i < count; i++)
+		{
+		ret->AddL(aView[i]);
+		}
+	CleanupStack::Pop(ret);
+	return ret;
+	}
+
+//populates an array with all - vast majority of - contact uids
+void CCntBaseStep::GetExistingUIDsL(RArray<TInt32> &aArray) const
+	{
+	
+	aArray.AppendL(KUidContactFieldAddressValue);
+	aArray.AppendL(KUidContactFieldPostOfficeValue);
+	aArray.AppendL(KUidContactFieldExtendedAddressValue);
+	aArray.AppendL(KUidContactFieldLocalityValue);
+	aArray.AppendL(KUidContactFieldRegionValue);
+	aArray.AppendL(KUidContactFieldPostCodeValue);
+	aArray.AppendL(KUidContactFieldCountryValue);
+	aArray.AppendL(KUidContactFieldCompanyNameValue);
+	aArray.AppendL(KUidContactFieldCompanyNamePronunciationValue);
+	aArray.AppendL(KUidContactFieldPhoneNumberValue);
+	aArray.AppendL(KUidContactFieldGivenNameValue);
+	aArray.AppendL(KUidContactFieldFamilyNameValue);
+	aArray.AppendL(KUidContactFieldGivenNamePronunciationValue);
+	aArray.AppendL(KUidContactFieldFamilyNamePronunciationValue);
+	aArray.AppendL(KUidContactFieldAdditionalNameValue);
+	aArray.AppendL(KUidContactFieldSuffixNameValue);
+	aArray.AppendL(KUidContactFieldPrefixNameValue);
+	aArray.AppendL(KUidContactFieldHiddenValue);
+	aArray.AppendL(KUidContactFieldEMailValue);
+	aArray.AppendL(KUidContactFieldMsgValue);
+	aArray.AppendL(KUidContactFieldSmsValue);
+	aArray.AppendL(KUidContactFieldFaxValue);
+	aArray.AppendL(KUidContactFieldDefinedTextValue);
+	aArray.AppendL(KUidContactFieldNoteValue);
+	aArray.AppendL(KUidContactFieldBirthdayValue);
+	aArray.AppendL(KUidContactFieldUrlValue);
+	aArray.AppendL(KUidContactFieldStorageInlineValue);
+	aArray.AppendL(KUidContactFieldTemplateLabelValue);
+	aArray.AppendL(KUidContactFieldPictureValue);
+	aArray.AppendL(KUidContactFieldRingToneValue);
+	aArray.AppendL(KUidContactFieldDTMFValue);
+	aArray.AppendL(KUidContactsVoiceDialFieldValue);
+	aArray.AppendL(KUidContactFieldNoneValue);
+	aArray.AppendL(KUidContactFieldJobTitleValue);
+	aArray.AppendL(KUidContactFieldICCSlotValue);
+	aArray.AppendL(KUidContactFieldICCPhonebookValue);
+	aArray.AppendL(KUidContactFieldICCGroupValue);
+	aArray.AppendL(KUidContactFieldIMAddressValue);
+	aArray.AppendL(KUidContactFieldSecondNameValue);
+	aArray.AppendL(KUidContactFieldSIPIDValue);
+	aArray.AppendL(KIntContactFieldVCardMapWORK);
+	aArray.AppendL(KIntContactFieldVCardMapHOME);
+	aArray.AppendL(KIntContactFieldVCardMapMSG);
+	aArray.AppendL(KIntContactFieldVCardMapVOICE);
+	aArray.AppendL(KIntContactFieldVCardMapFAX);
+	aArray.AppendL(KIntContactFieldVCardMapPREF);
+	aArray.AppendL(KIntContactFieldVCardMapCELL);
+	aArray.AppendL(KIntContactFieldVCardMapPAGER);
+	aArray.AppendL(KIntContactFieldVCardMapBBS);
+	aArray.AppendL(KIntContactFieldVCardMapMODEM);
+	aArray.AppendL(KIntContactFieldVCardMapCAR);  
+	aArray.AppendL(KIntContactFieldVCardMapISDN);
+	aArray.AppendL(KIntContactFieldVCardMapVIDEO);
+	aArray.AppendL(KIntContactFieldVCardMapDOM);
+	aArray.AppendL(KIntContactFieldVCardMapADR);
+	aArray.AppendL(KIntContactFieldVCardMapPOSTOFFICE);
+	aArray.AppendL(KIntContactFieldVCardMapEXTENDEDADR);
+	aArray.AppendL(KIntContactFieldVCardMapLOCALITY);
+	aArray.AppendL(KIntContactFieldVCardMapREGION);
+	aArray.AppendL(KIntContactFieldVCardMapPOSTCODE);
+	aArray.AppendL(KIntContactFieldVCardMapCOUNTRY);
+	aArray.AppendL(KIntContactFieldVCardMapAGENT);
+	aArray.AppendL(KIntContactFieldVCardMapBDAY);
+	aArray.AppendL(KIntContactFieldVCardMapEMAILINTERNET);
+	aArray.AppendL(KIntContactFieldVCardMapGEO);
+	aArray.AppendL(KIntContactFieldVCardMapLABEL);
+	aArray.AppendL(KIntContactFieldVCardMapLOGO);
+	aArray.AppendL(KIntContactFieldVCardMapMAILER);
+	aArray.AppendL(KIntContactFieldVCardMapNOTE);
+	aArray.AppendL(KIntContactFieldVCardMapORG);
+	aArray.AppendL(KIntContactFieldVCardMapORGPronunciation);
+	aArray.AppendL(KIntContactFieldVCardMapPHOTO);
+	aArray.AppendL(KIntContactFieldVCardMapROLE);
+	aArray.AppendL(KIntContactFieldVCardMapSOUND);
+	aArray.AppendL(KIntContactFieldVCardMapTEL);
+	aArray.AppendL(KIntContactFieldVCardMapTELFAX);
+	aArray.AppendL(KIntContactFieldVCardMapTITLE);
+	aArray.AppendL(KIntContactFieldVCardMapURL);
+	aArray.AppendL(KIntContactFieldVCardMapUnusedN);
+	aArray.AppendL(KIntContactFieldVCardMapUnusedFN);
+	aArray.AppendL(KIntContactFieldVCardMapNotRequired);
+	aArray.AppendL(KIntContactFieldVCardMapUnknownXDash);
+	aArray.AppendL(KIntContactFieldVCardMapUnknown);
+	aArray.AppendL(KIntContactFieldVCardMapUID);
+	aArray.AppendL(KIntContactFieldVCardMapINTL);
+	aArray.AppendL(KIntContactFieldVCardMapPOSTAL);
+	aArray.AppendL(KIntContactFieldVCardMapPARCEL);
+	aArray.AppendL(KIntContactFieldVCardMapGIF);
+	aArray.AppendL(KIntContactFieldVCardMapCGM);
+	aArray.AppendL(KIntContactFieldVCardMapWMF);
+	aArray.AppendL(KIntContactFieldVCardMapBMP);
+	aArray.AppendL(KIntContactFieldVCardMapMET);
+	aArray.AppendL(KIntContactFieldVCardMapPMB);
+	aArray.AppendL(KIntContactFieldVCardMapDIB);
+	aArray.AppendL(KIntContactFieldVCardMapPICT);
+	aArray.AppendL(KIntContactFieldVCardMapTIFF);
+	aArray.AppendL(KIntContactFieldVCardMapPDF);
+	aArray.AppendL(KIntContactFieldVCardMapPS);
+	aArray.AppendL(KIntContactFieldVCardMapJPEG);
+	aArray.AppendL(KIntContactFieldVCardMapMPEG);
+	aArray.AppendL(KIntContactFieldVCardMapMPEG2);
+	aArray.AppendL(KIntContactFieldVCardMapAVI);
+	aArray.AppendL(KIntContactFieldVCardMapQTIME);
+	aArray.AppendL(KIntContactFieldVCardMapTZ);
+	aArray.AppendL(KIntContactFieldVCardMapKEY);
+	aArray.AppendL(KIntContactFieldVCardMapX509);
+	aArray.AppendL(KIntContactFieldVCardMapPGP);
+	aArray.AppendL(KIntContactFieldVCardMapSMIME);
+	aArray.AppendL(KIntContactFieldVCardMapWV);
+	aArray.AppendL(KIntContactFieldVCardMapSECONDNAME);
+	aArray.AppendL(KIntContactFieldVCardMapSIPID);
+	aArray.AppendL(KIntContactFieldVCardMapPOC);
+	aArray.AppendL(KIntContactFieldVCardMapSWIS);
+	aArray.AppendL(KIntContactFieldVCardMapVOIP);
+
+	
+	}
+	
+		
+void CCntBaseStep::MissngTestPanic() const
+	{
+	_LIT(KInvalidTest,"Invalid Test");
+	User::Panic(KInvalidTest, 444);
+	}
+
+void CCntBaseStep::WaitForServerToExitL()
+	{
+/**
+hardware testing is performed using techview, which always has a session open to cntsrv,
+hence cntsrv never shutsdown when performing HW testing.
+*/
+#ifdef __WINSCW__
+
+	// The name of the CntSrv process includes its uid like this CNTSRV.EXE[10003a73]001
+	TInt findProcessResult = KErrNone;
+	TFindProcess findProcess( KServerUid );
+	TFullName  fullNameLastProcess;
+	TFullName  fullNameNextProcess;
+	//TFullName
+	findProcessResult = findProcess.Next(fullNameNextProcess);
+
+	
+	for ( TInt iteration = 1; findProcessResult == KErrNone; ++iteration )
+		{
+		fullNameLastProcess = fullNameNextProcess;
+		RProcess process;
+		const TInt OpenError = process.Open(fullNameLastProcess);
+		if ( OpenError == KErrNone)
+			{
+			TExitCategoryName category = process.ExitCategory();
+			//if this handle to server is still open, then wait for this handle to close
+			if( 0 == category.Length() )
+			    {
+			    CloseProcessL( fullNameLastProcess, iteration );
+			    }
+			}
+		findProcessResult = findProcess.Next(fullNameNextProcess);
+		}
+
+#else
+KServerUid();//removes unused variable warning			
+#endif
+	}
+
+void CCntBaseStep::CloseProcessL(const TDesC& aProcessName, const TInt aIteration)
+    {
+	_LIT(KillString, "Kill");
+	if ( aProcessName != KNullDesC )
+		{
+		_LIT(KServerRunning,"*** The CntSrv process is running ***");
+		_LIT(KServerIteration, "Found server process on iteration: %d");
+		INFO_PRINTF1(KServerRunning);
+		INFO_PRINTF2(KServerIteration, aIteration);
+		
+		// the CntSrv process is running so wait 
+		RProcess process;
+		const TInt OpenError = process.Open(aProcessName);
+		if ( OpenError == KErrNone)
+			{
+			TRequestStatus status;
+			process.Logon(status); // ask for a callback when the process ends
+			User::WaitForRequest(status);
+			const TInt serverError = process.ExitReason();
+			TExitCategoryName category = process.ExitCategory();
+			_LIT(KServerClosed,"*** The CntSrv process has ended with error type: %S, and error value: %d ***");
+			INFO_PRINTF3(KServerClosed, &category, serverError);
+			process.Close();
+			if( ( category != KillString ) || ( serverError != KErrNone ) )
+				{
+				_LIT(KServerError,"*** The server caused an error while closing ***");
+				ERR_PRINTF1(KServerError);
+				TEST1( EFalse, ETrue);
+				}
+			}
+		else
+			{
+			_LIT(KProcessFailure,"*** Failed to open process, error: %d ***");
+			ERR_PRINTF2(KProcessFailure, OpenError);
+			TEST1(EFalse, ETrue);
+			}
+		}
+	else
+		{
+		_LIT(KNoProcess,"*** The CntSrv process is NOT running ***");
+		ERR_PRINTF1(KNoProcess);
+		TEST1(EFalse, ETrue);
+		}
+    }
+
+TBool CCntBaseStep::StringComparisonTestPrint(	const TDesC &aCompareL,
+												const TText *aCompareOperator,  
+												const TDesC &aCompareR, 
+												const TBool aResult,
+												const TInt 	aIteration, 
+												const TInt 	aSubIteration,  
+												const TInt 	aLine, 
+												const TText *aFile)
+	{
+	_LIT(KComparePrint, "%s %s %s: failed on subiteration %d of iteration %d");
+	_LIT(KFilePrint, "In file: %s at line: %d");
+	if( !aResult )
+		{
+		ERR_PRINTF6( KComparePrint, (TText*)aCompareL.Ptr(), aCompareOperator, (TText*)aCompareR.Ptr(), aSubIteration, aIteration);
+		ERR_PRINTF3( KFilePrint, aFile, aLine );
+		TEST1( EFalse , ETrue );
+		
+		}
+	return aResult;
+	}
+
+
+TBool CCntBaseStep::IntegerComparisonTestPrint(	const TInt	aCompareL,
+												const TText *aCompareOperator,  
+												const TInt 	aCompareR, 
+												const TBool aResult,
+												const TInt 	aIteration, 
+												const TInt 	aSubIteration,  
+												const TInt 	aLine, 
+												const TText *aFile)
+	{
+	_LIT(KComparePrint, "%d %s %d: failed on subiteration %d of iteration %d");
+	_LIT(KFilePrint, "In file: %s at line: %d");
+	if( !aResult )
+		{
+		ERR_PRINTF6( KComparePrint, aCompareL, aCompareOperator, aCompareR, aSubIteration, aIteration);
+		ERR_PRINTF3( KFilePrint, aFile, aLine );
+		TEST1( EFalse , ETrue );
+		}
+	return aResult;
+	}
+
+