phonebookengines/contactsmodel/tsrc/T_TimeIS.CPP
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/T_TimeIS.CPP	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,872 @@
+// Copyright (c) 2003-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:
+// This test code tests the vCard import / export functionality that was introduced as a result of the 
+// defect DEF023159. This defect requires the implementation of a flag which tells the import/export
+// routines to ignore white-space only valued properties within a Contact Entry / vCard file.
+// 
+//
+
+#include "t_timeis.h"
+#include <vutil.h>
+#include <coreappstest/testserver.h>
+// include templates for CleanupResetAndDestroyPushL(T)
+#include "cntviewprivate.h"
+
+
+RTest test(_L("T_TimeIS - exp/importing using TimeIS protocol"));
+
+const TPtrC KDatabaseName=_L("C:TimeISdb.cdb");
+
+const TPtrC KTestFile4_1=_L("Z:\\t_TimeIS\\Connectivity.vcf");
+
+const TPtrC KTestFile1_1=_L("C:\\Test1_1.vcf");
+const TPtrC KTestFile1_2=_L("C:\\Test1_2.vcf");
+const TPtrC KTestFile1_3=_L("C:\\Test1_3.vcf");
+const TPtrC KTestFile3_1=_L("C:\\Test3_1.vcf");
+const TPtrC KTestFile5_1=_L("C:\\Test5_1.vcf");
+const TPtrC KTestFile5_2=_L("C:\\Test5_2.vcf");
+const TPtrC KTestFile5_3=_L("C:\\Test5_3.vcf");
+const TPtrC KTestFile6_1=_L("C:\\Test6_1.vcf");
+const TPtrC KTestFile6_2=_L("C:\\Test6_2.vcf");
+const TPtrC KTestFile7_1=_L("C:\\Test7_1.vcf");
+const TPtrC KTestFile7_2=_L("C:\\Test7_2.vcf");
+const TPtrC KTestFile7_3=_L("C:\\Test7_3.vcf");
+const TPtrC KTestFile8_1=_L("C:\\Test8_1.vcf");
+const TPtrC KTestFile8_2=_L("C:\\Test8_2.vcf");
+const TPtrC KTestFile8_3=_L("C:\\Test8_3.vcf");
+
+
+CTimeISTest::CTimeISTest()
+	{
+
+	} // Contructor
+
+
+CTimeISTest::~CTimeISTest()
+	{
+	delete iDb;
+	CActiveScheduler* scheduler=CActiveScheduler::Current(); //get current
+	CActiveScheduler::Install(NULL); //uninstall
+	delete scheduler; // delete uninstalled scheduler
+	iFs.Close();
+	} // Destructor
+
+CTimeISTest* CTimeISTest::NewLC(RTest& aTest)
+	{
+	CTimeISTest* self=new(ELeave) CTimeISTest();
+	CleanupStack::PushL(self);
+	self->ConstructL(aTest);
+	return(self);
+	}  //NewLC
+
+void CTimeISTest::CloseDb()
+	{
+	delete iDb;
+	iDb = 0;
+	}
+
+void CTimeISTest::ConstructL(RTest& aTest)
+	{
+	User::LeaveIfError(iFs.Connect());
+	CActiveScheduler::Install(new(ELeave) CActiveScheduler);
+	iTest = &aTest;
+	iDb = CContactDatabase::ReplaceL(KDatabaseName);
+	}; // ConstructL
+
+// ---------------- Utility Methods
+
+// Using a text string, create a vCard. Return the pointer to the newly created instance
+// The caller will take ownership of it.
+
+CParserVCard* CTimeISTest::CreateVCardLC(const TDesC8& aContents)
+	{
+	CParserVCard* vCardParser=CParserVCard::NewL();
+	CleanupStack::PushL(vCardParser);
+
+	RDesReadStream stream(aContents);
+	stream.PushL();
+	vCardParser->InternalizeL(stream);
+	CleanupStack::PopAndDestroy(); // stream
+	return vCardParser;
+	}
+
+// Externalise the VCard to the file. If the file does not exist it is created, if the 
+// file already exists it is overwritted.
+void CTimeISTest::WriteVCardL(const TDesC& aFileName, CParserVCard& aVCard)
+	{
+	RFileWriteStream vCardWrite;
+	vCardWrite.PushL();
+	User::LeaveIfError(vCardWrite.Replace(iFs,aFileName,EFileWrite));
+	aVCard.ExternalizeL(vCardWrite);
+	vCardWrite.CommitL();
+	CleanupStack::PopAndDestroy(); //vCardWrite
+	}
+
+// Find a field value of type aFieldType and return true if it matches the aExpected value.
+TBool CTimeISTest::CheckSingleFieldValue(CContactItemFieldSet& aFieldSet, TFieldType aFieldType, const TDesC& aExpectedValue)
+	{
+	TBool correctValue = EFalse;
+
+	TInt pos = aFieldSet.Find(aFieldType);
+	if	(pos != KErrNotFound)
+		{
+		// Verify
+		CContactItemField& field = aFieldSet[pos];
+		CContactTextField* storage = field.TextStorage();
+		correctValue = (storage->Text().CompareF(aExpectedValue) == 0);
+		}
+	//
+	return correctValue;
+	}
+	
+// Find a parameter and field value of type aFieldType and return true if it matches the aExpected value.
+TBool CTimeISTest::CheckSingleParameterFieldValues(CContactItemFieldSet& aFieldSet, TFieldType aFieldType, TUid aMapping, const TDesC& aExpectedValue, TBool aFieldPresent)
+	{
+	TBool correctValue = EFalse;
+	TInt pos = 0;
+	
+	TBool fieldFound = EFalse;
+	TInt startPos = KContactFieldSetSearchAll;
+	
+	while(!fieldFound && !(pos == KErrNotFound))
+		{
+		pos = aFieldSet.FindNext(aFieldType, startPos);
+		startPos = pos + 1;
+		if (pos != KErrNotFound )
+			{
+			CContactItemField& tempField = aFieldSet[pos];
+			const CContentType& tempContentType = tempField.ContentType();
+			
+			if (aMapping == KNullUid)
+				{
+				TBool additionalMapFound = EFalse;
+				additionalMapFound |= tempContentType.ContainsFieldType(KUidContactFieldVCardMapHOME);
+				additionalMapFound |= tempContentType.ContainsFieldType(KUidContactFieldVCardMapWORK);
+				additionalMapFound |= tempContentType.ContainsFieldType(KUidContactFieldVCardMapPREF);
+				if (!additionalMapFound)
+					{
+					fieldFound = ETrue;
+					}
+				}
+			else
+				{
+				fieldFound = tempContentType.ContainsFieldType(aMapping);
+				}
+			}
+		}
+	
+	if (fieldFound)
+		{
+		CContactItemField& aItemField = aFieldSet[pos];
+
+		// Verify
+		CContactTextField* storage = aItemField.TextStorage();
+		correctValue = (storage->Text().CompareF(aExpectedValue) == 0);
+		}
+	if (!aFieldPresent && !fieldFound)
+		{
+		correctValue = ETrue;
+		}
+		
+	return correctValue;
+	}
+
+// Create a contact entry in the Contact Database and return the ID
+
+TContactItemId CTimeISTest::CreateContactL()
+	{
+	const TContactItemId templateId = iDb->TemplateId();
+	CContactItem* templateCard = iDb->ReadContactLC(templateId);
+	CContactCard* card = CContactCard::NewL(templateCard); 
+	CleanupStack::PushL(card);
+	//
+	CContactItemFieldSet& cardFields=card->CardFields();
+	// Set the telephone number
+	TInt pos=cardFields.Find(KUidContactFieldPhoneNumber);
+	if (pos!=KErrNotFound)
+		{
+		cardFields[pos].SetMapping(KUidContactFieldVCardMapTEL);
+		cardFields[pos].TextStorage()->SetTextL(_L("1234"));
+		}
+	// Set the label
+	pos=cardFields.Find(KUidContactFieldNote);
+	if (pos!=KErrNotFound)
+		{
+		cardFields[pos].SetMapping(KUidContactFieldVCardMapLABEL);
+		cardFields[pos].TextStorage()->SetTextL(_L(" "));
+		}
+	//
+	const TContactItemId id = iDb->AddNewContactL(*card);
+	CleanupStack::PopAndDestroy(2, templateCard); 
+	return id;
+	}
+
+
+// Read in the file and parse it using Versit
+CParserVCard* CTimeISTest::ParseVCardLC(const TDesC& aFilename)
+	{
+	CParserVCard* vCardParser=CParserVCard::NewL();
+	CleanupStack::PushL(vCardParser);
+	//
+	RFile readFile;
+	const TInt error = readFile.Open(iFs, aFilename, EFileRead);
+	User::LeaveIfError(error);
+	CleanupClosePushL(readFile);
+	//
+	RFileReadStream stream(readFile);
+	stream.PushL();
+	vCardParser->InternalizeL(stream);
+	CleanupStack::PopAndDestroy(); // stream
+	CleanupStack::PopAndDestroy(); // readFile
+	return vCardParser;
+	}
+
+
+// ---------------- Test Methods
+
+CArrayPtr<CContactItem>* CTimeISTest::ImportVCardLC(const TDesC& aFilename, TBool aConnectWhitespaceOption)
+	{
+	CArrayPtr<CContactItem>* contactItems;
+	RFileReadStream vCardRead;
+	TBool importOK;
+	
+	vCardRead.PushL();
+	User::LeaveIfError(vCardRead.Open(iFs,aFilename,EFileRead));
+	// Just a precaution. This array must be empty before we go and add more data
+	if (aConnectWhitespaceOption)
+		{
+		contactItems = iDb->ImportContactsL(TUid::Uid(KUidVCardConvDefaultImpl),vCardRead,importOK,(CContactVCardConverter::EImportSingleContact | CContactVCardConverter::EConnectWhitespace));
+		}
+	else
+		{
+		contactItems = iDb->ImportContactsL(TUid::Uid(KUidVCardConvDefaultImpl),vCardRead,importOK,(CContactVCardConverter::EImportSingleContact));
+		}
+	CleanupStack::PopAndDestroy(); // vCardRead
+	CleanupStack::PushL(contactItems);
+	return contactItems;
+	}
+
+void CTimeISTest::TestOneL()
+	{
+	// Create a vCard with actual telephone number
+	iTest->Printf(_L("Creating test vCard Files\n"));
+	_LIT8(KRealTel, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nNOTE:text\r\nEND:VCARD\r\n");
+	CParserVCard* vCard = CreateVCardLC(KRealTel);
+	WriteVCardL(KTestFile1_1,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with spaced telephone number
+	_LIT8(KSpaceTel, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nNOTE: \r\nTEL:1\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KSpaceTel);
+	WriteVCardL(KTestFile1_2,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with null telephone number
+	_LIT8(KNULLTel, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nNOTE:\r\nTEL:1\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KNULLTel);
+	WriteVCardL(KTestFile1_3,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+
+
+	// Now import the files and check the behaviour
+	iTest->Printf(_L("Importing vCard files to contacts\n"));
+	iTest->Printf(_L("New File\n"));
+	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile1_1);
+	(*iTest)(contactItems->Count() == 1);
+	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldNote,_L("text")));
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+
+
+	iTest->Printf(_L("Spaced value field\n"));
+	contactItems = ImportVCardLC(KTestFile1_2);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldNote,_L("text")));
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+
+	iTest->Printf(_L("NULL value field\n"));
+	contactItems = ImportVCardLC(KTestFile1_3);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldNote,_L("")));
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+
+	iTest->Printf(_L("Behaviour correct\n"));
+	}
+
+void CTimeISTest::TestTwoL()
+	{
+	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
+	iTest->Printf(_L("Creating test vCard Files\n"));
+	_LIT8(KNewN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nN:A;B;C\r\nEND:VCARD\r\n");
+	CParserVCard* vCard = CreateVCardLC(KNewN);
+	WriteVCardL(KTestFile1_1,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with spaced telephone number, null address regions.
+	_LIT8(KModN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nN:A;;C\r\nTEL:1\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KModN);
+	WriteVCardL(KTestFile1_2,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with null telephone number, spaced address localities.
+	_LIT8(KDelN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nN: ;;C\r\nTEL:2\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KDelN);
+	WriteVCardL(KTestFile1_3,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+
+	// Now import the files and check the behaviour
+	iTest->Printf(_L("Importing vCard files to contacts\n"));
+	iTest->Printf(_L("New File\n"));
+	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile1_1);
+	(*iTest)(contactItems->Count() == 1);
+	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("A")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("B")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
+	
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+
+		
+	iTest->Printf(_L("A non supported field\n"));
+	contactItems = ImportVCardLC(KTestFile1_2);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("A")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("B")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+	
+
+	iTest->Printf(_L("Empty field\n"));
+	contactItems = ImportVCardLC(KTestFile1_3);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("B")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+	}
+
+
+void CTimeISTest::TestThree()
+	{	
+	iTest->Printf(_L("Testing Export\n"));
+	// Create a contacts entry and export it via CntVCard
+	iTest->Printf(_L("Creating the Contact and exporting it\n"));
+	CContactIdArray* idArray = CContactIdArray::NewLC();
+	TContactItemId contactID = CreateContactL();
+	idArray->AddL(contactID);
+	RFileWriteStream vCardWrite;
+	vCardWrite.PushL();
+	User::LeaveIfError(vCardWrite.Replace(iFs,KTestFile3_1,EFileWrite));
+	iDb->ExportSelectedContactsL(TUid::Uid(KUidVCardConvDefaultImpl),*idArray,vCardWrite,(CContactVCardConverter::EImportSingleContact | CContactVCardConverter::EConnectWhitespace));
+	vCardWrite.CommitL();
+	CleanupStack::PopAndDestroy(); //vCardWrite
+	CleanupStack::PopAndDestroy(idArray);
+	// Verify that the card contains a telephone field and NOT a LABEL field.
+	iTest->Printf(_L("Checking its contents\n"));
+	const TUid KVersitTELPropertyValueType = { KVersitPropertyHBufCUid };
+	const TUid KVersitLABELPropertyValueType = { KVersitPropertyHBufCUid };
+	CParserVCard* parser = ParseVCardLC(KTestFile3_1);
+	CArrayPtr<CParserProperty>* properties = parser->PropertyL(KVersitTokenTEL,KVersitTELPropertyValueType, EFalse);
+	// If properties were found this will have a value
+	(*iTest)(!(properties == NULL));
+	delete properties;
+	properties = parser->PropertyL(KVersitTokenLABEL,KVersitLABELPropertyValueType, EFalse);
+	// If properties were found this will have a value
+	(*iTest)(properties == NULL);
+	CleanupStack::PopAndDestroy(parser);
+	}
+
+void CTimeISTest::TestFour()
+	{
+	// Create a badly formatted vCard.
+	iTest->Printf(_L("Importing bad vCard to contacts\n"));
+	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile4_1);
+	
+	(*iTest)(contactItems->Count() == 1);
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(contactItems);
+	}
+	
+void CTimeISTest::TestFiveL()
+	{
+	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
+	iTest->Printf(_L("Creating test vCard Files\n"));
+	_LIT8(KNewN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:3\r\nADR;HOME:;;;HLocal;HRegion;HPost;\r\nADR;WORK:;;;WLocal;WRegion;WPost;\r\nADR:;;;Local;Region;Post;\r\nADR;PREF:;;;PLocal;PRegion;PPost;\r\nEND:VCARD\r\n");
+	CParserVCard* vCard = CreateVCardLC(KNewN);
+	WriteVCardL(KTestFile5_1,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with spaced telephone number, null address regions.
+	_LIT8(KModN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:3\r\nADR;HOME:;;;HLocal;;HPost;\r\nADR;WORK:;;;WLocal;;WPost;\r\nADR:;;;Local;;Post;\r\nADR;PREF:;;;PLocal;;PPost;\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KModN);
+	WriteVCardL(KTestFile5_2,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with null telephone number, spaced address localities.
+	_LIT8(KDelN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:3\r\nADR;HOME:;;; ;;HPost;\r\nADR;WORK:;;; ;;WPost;\r\nADR:;;; ;;Post;\r\nADR;PREF:;;; ;;PPost;\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KDelN);
+	WriteVCardL(KTestFile5_3,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+
+	// Now import the files and check the behaviour
+	iTest->Printf(_L("Importing vCard files to contacts -Test 5\n"));
+	iTest->Printf(_L("New File -Test 5\n\r"));
+	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile5_1);
+	(*iTest)(contactItems->Count() == 1);
+	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L("Local")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L("PLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L("Region")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L("PRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
+			
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+
+	iTest->Printf(_L("A non supported field -Test 5\n\r"));
+	contactItems = ImportVCardLC(KTestFile5_2);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L("Local")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L("PLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L("Region")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L("PRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
+		
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+	
+
+	iTest->Printf(_L("Empty field -Test 5\n\r"));
+	contactItems = ImportVCardLC(KTestFile5_3);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L(""), EFalse));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L(""), EFalse));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L("Region")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L("PRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
+		
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+	}
+
+	
+void CTimeISTest::TestSixL()
+	{
+	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
+	iTest->Printf(_L("Creating test vCard Files\n"));
+	_LIT8(KNewN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:5\r\nADR;HOME:;;;HLocal;HRegion;HPost;\r\nEND:VCARD\r\n");
+	CParserVCard* vCard = CreateVCardLC(KNewN);
+	WriteVCardL(KTestFile6_1,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with spaced telephone number, null address regions.
+	_LIT8(KModN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:5\r\nADR;WORK:;;;WLocal;WRegion;WPost;\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KModN);
+	WriteVCardL(KTestFile6_2,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	
+	// Now import the files and check the behaviour
+	iTest->Printf(_L("Importing vCard files to contacts -Test 6\n"));
+	iTest->Printf(_L("New File -Test 6\n\r"));
+	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile6_1);
+	(*iTest)(contactItems->Count() == 1);
+	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
+			
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+
+	iTest->Printf(_L("A non supported field -Test 6\n\r"));
+	contactItems = ImportVCardLC(KTestFile6_2);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
+		
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+	}
+	
+void CTimeISTest::TestSevenL()
+	{
+	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
+	iTest->Printf(_L("Creating test vCard Files -Test 7\n"));
+	_LIT8(KNewN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:7\r\nN:A;B;C\r\nEND:VCARD\r\n");
+	CParserVCard* vCard = CreateVCardLC(KNewN);
+	WriteVCardL(KTestFile7_1,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with spaced telephone number, null address regions.
+	_LIT8(KModN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:7\r\nN:A;;C\r\nTEL:1\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KModN);
+	WriteVCardL(KTestFile7_2,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with null telephone number, spaced address localities.
+	_LIT8(KDelN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:7\r\nN: ;;C\r\nTEL:2\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KDelN);
+	WriteVCardL(KTestFile7_3,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+
+	// Now import the files and check the behaviour
+	iTest->Printf(_L("Importing vCard files to contacts -Test 7\n"));
+	iTest->Printf(_L("New File -Test 7\n"));
+	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile7_1, 0);
+	(*iTest)(contactItems->Count() == 1);
+	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("A")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("B")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
+	
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+
+		
+	iTest->Printf(_L("A non supported field -Test 7\n"));
+	contactItems = ImportVCardLC(KTestFile7_2, 0);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("A")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+	
+
+	iTest->Printf(_L("Empty field -Test 7\n"));
+	contactItems = ImportVCardLC(KTestFile7_3, 0);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L(" ")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("")));
+	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+	}
+
+
+void CTimeISTest::TestEightL()
+	{
+	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
+	iTest->Printf(_L("Creating test vCard Files - Test 8\n"));
+	_LIT8(KNewN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:8\r\nADR;HOME:;;;HLocal;HRegion;HPost;\r\nADR;WORK:;;;WLocal;WRegion;WPost;\r\nADR:;;;Local;Region;Post;\r\nADR;PREF:;;;PLocal;PRegion;PPost;\r\nEND:VCARD\r\n");
+	CParserVCard* vCard = CreateVCardLC(KNewN);
+	WriteVCardL(KTestFile8_1,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with spaced telephone number, null address regions.
+	_LIT8(KModN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:8\r\nADR;HOME:;;;HLocal;;HPost;\r\nADR;WORK:;;;WLocal;;WPost;\r\nADR:;;;Local;;Post;\r\nADR;PREF:;;;PLocal;;PPost;\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KModN);
+	WriteVCardL(KTestFile8_2,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+	// Create a vCard with null telephone number, spaced address localities.
+	_LIT8(KDelN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:8\r\nADR;HOME:;;; ;;HPost;\r\nADR;WORK:;;; ;;WPost;\r\nADR:;;; ;;Post;\r\nADR;PREF:;;; ;;PPost;\r\nEND:VCARD\r\n");
+	vCard = CreateVCardLC(KDelN);
+	WriteVCardL(KTestFile8_3,*vCard);
+	CleanupStack::PopAndDestroy(vCard);
+
+	// Now import the files and check the behaviour
+	iTest->Printf(_L("Importing vCard files to contacts -Test 8\n"));
+	iTest->Printf(_L("New File -Test 8\n\r"));
+	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile8_1, 0);
+	(*iTest)(contactItems->Count() == 1);
+	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L("Local")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L("PLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L("Region")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L("PRegion")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
+			
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+
+	iTest->Printf(_L("A non supported field -Test 8\n\r"));
+	contactItems = ImportVCardLC(KTestFile8_2, 0);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L("Local")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L("PLocal")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L(""), EFalse));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L(""), EFalse));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
+		
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+	
+
+	iTest->Printf(_L("Empty field -Test 8\n\r"));
+	contactItems = ImportVCardLC(KTestFile8_3, 0);
+	(*iTest)(contactItems->Count() == 1);
+	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
+	
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L(" ")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L(" ")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L(" ")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L(" ")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L(""), EFalse));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L(""), EFalse));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
+	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
+		
+	contactItems->ResetAndDestroy();
+	CleanupStack::PopAndDestroy(cItem);
+	CleanupStack::PopAndDestroy(contactItems);
+	}
+
+
+void CTimeISTest::TestBirthdayDeletionL(TBool aAddNameField)
+/**
+ *Testing the deletion of a birthday field in a contact card through the time IS protocol
+ *@param TBool aAddNameField specify whether or not adding a name field to the contact card
+ */
+	{
+	TDateTime date(1976,EAugust,28,22,0,0,0);
+	TTime time(date);	
+
+	//Create a contact with just a birthday date
+	const TContactItemId templateId = iDb->TemplateId();
+	CContactItem* templateCard = iDb->ReadContactLC(templateId);
+	CContactCard* card = CContactCard::NewL(templateCard); 
+	CleanupStack::PushL(card);
+	//
+	CContactItemFieldSet& cardFields=card->CardFields();
+	// Set the birthday
+	TInt pos=cardFields.Find(KUidContactFieldBirthday);
+	if (pos!=KErrNotFound)
+		{
+		cardFields[pos].SetMapping(KUidContactFieldVCardMapBDAY);
+		cardFields[pos].DateTimeStorage()->SetTime(date);
+		}
+	
+	if (aAddNameField)
+		{
+		pos=cardFields.Find(KUidContactFieldFamilyName);
+		if (pos!=KErrNotFound)
+			{
+			cardFields[pos].TextStorage()->SetTextL(_L("MyName"));
+			}
+		}
+
+	//Create contact now
+	const TContactItemId id = iDb->AddNewContactL(*card);
+	CleanupStack::PopAndDestroy(2, templateCard); 
+	CContactIdArray* idArray = CContactIdArray::NewLC();
+	idArray->AddL(id);
+	
+	//export contact to buf
+	TBuf8<256> buf;//256 bytes should be ok
+	RDesWriteStream vCardWriteStream(buf);
+	vCardWriteStream.PushL();
+	iDb->ExportSelectedContactsL(TUid::Uid(KUidVCardConvDefaultImpl),*idArray,vCardWriteStream,CContactVCardConverter::EConnectWhitespace);
+	vCardWriteStream.CommitL();
+	CleanupStack::PopAndDestroy(&vCardWriteStream);
+	CleanupStack::PopAndDestroy(idArray); 
+
+	//modify the exported vcard to remove birthday date and add a white space
+	pos=buf.Find(KVersitTokenBDAY);
+	(*iTest)(pos>0);
+	pos+=5; //jump over the token and colon	
+	_LIT8(KEndOfLine,"\n");
+	TInt charToDelete=buf.Mid(pos).Find(KEndOfLine); //search for the next 0A
+	charToDelete--; // don't delete the 0A
+	buf.Delete(pos,charToDelete); //delete now
+	//Now add white space in vcard
+	_LIT8(KWhiteSpace," ");
+	buf.Insert(pos,KWhiteSpace); //insert now
+	
+	//now import back that vcard it should not change user data
+	CArrayPtr<CContactItem>* contactItems;
+	RDesReadStream vCardReadStream(buf);
+	TBool importOK;
+	vCardReadStream.PushL();
+	contactItems = iDb->ImportContactsL(TUid::Uid(KUidVCardConvDefaultImpl),vCardReadStream,importOK,CContactVCardConverter::EConnectWhitespace);
+	CleanupStack::PopAndDestroy(); // vCardReadStream
+	CleanupStack::PushL(contactItems);
+	CleanupResetAndDestroyPushL(*contactItems);
+	//make sure contact is imported 
+	(*iTest)(contactItems->Count()==1); 
+
+	TInt fieldPos=contactItems->At(0)->CardFields().Find(KUidContactFieldBirthday);
+	//make sure field has not been deleted 
+	(*iTest)(fieldPos!=KErrNotFound); 
+	//make sure birthday date as not changed
+	(*iTest)(contactItems->At(0)->CardFields()[fieldPos].DateTimeStorage()->Time()==time);
+		
+	CleanupStack::PopAndDestroy(2,contactItems); // ResetAndDestroy
+	
+	//Now try to delete that field through the symbian connect timeIS protocol by importing a NULL field
+	//First delete that space in vcard
+	buf.Delete(pos,1); 
+	//now import back that vcard it should delete the birthday field
+	vCardReadStream.PushL();
+	vCardReadStream.Open(buf);
+	contactItems = iDb->ImportContactsL(TUid::Uid(KUidVCardConvDefaultImpl),vCardReadStream,importOK,CContactVCardConverter::EConnectWhitespace);
+	CleanupStack::PopAndDestroy(); // vCardReadStream
+	CleanupStack::PushL(contactItems);
+	CleanupResetAndDestroyPushL(*contactItems);
+	(*iTest)(contactItems->Count()==1); //make sure one contact is imported
+	
+	//Make sure birthday has been deleted
+	/*TInt*/ fieldPos=contactItems->At(0)->CardFields().Find(KUidContactFieldBirthday);
+	(*iTest)(fieldPos==KErrNotFound); //make sure field has been deleted 
+		
+	CleanupStack::PopAndDestroy(2,contactItems); // ResetAndDestroy
+	}
+
+void CTimeISTest::RunTestsL()
+	{
+	iTest->Printf(_L("Time IS Tests Starting\n"));
+	
+	TestBirthdayDeletionL(ETrue);
+		
+	TestOneL();
+	TestTwoL();
+	TestThree();
+	TestFour();
+	TestFiveL();
+	TestSixL();
+	TestSevenL();
+	TestEightL();
+	}
+
+
+void DoTestsL()
+	{
+	CTimeISTest* theTest = CTimeISTest::NewLC(test);
+
+	CTestRegister * TempFiles = CTestRegister::NewLC();
+
+	TempFiles->RegisterL(KDatabaseName, EFileTypeCnt);
+	TempFiles->RegisterL(KTestFile1_1);
+	TempFiles->RegisterL(KTestFile1_2);
+	TempFiles->RegisterL(KTestFile1_3);
+	TempFiles->RegisterL(KTestFile3_1);
+	TempFiles->RegisterL(KTestFile5_1);
+	TempFiles->RegisterL(KTestFile5_2);
+	TempFiles->RegisterL(KTestFile5_3);
+	TempFiles->RegisterL(KTestFile6_1);
+	TempFiles->RegisterL(KTestFile6_2);
+	TempFiles->RegisterL(KTestFile7_1);
+	TempFiles->RegisterL(KTestFile7_2);
+	TempFiles->RegisterL(KTestFile7_3);
+	TempFiles->RegisterL(KTestFile8_1);
+	TempFiles->RegisterL(KTestFile8_2);
+	TempFiles->RegisterL(KTestFile8_3);
+
+	theTest->RunTestsL();
+
+	theTest->CloseDb();
+	CleanupStack::PopAndDestroy(2, theTest);
+	} //DoTestsL
+
+
+/**
+
+@SYMTestCaseID     PIM-T-TIMEIS-0001
+
+*/
+
+GLDEF_C TInt E32Main()
+	{
+	__UHEAP_MARK;
+	test.Title();
+	test.Start(_L("@SYMTESTCaseID:PIM-T-TIMEIS-0001 CNTVCard - Check TimeIS import / export support"));
+
+	CTrapCleanup* theCleanup = CTrapCleanup::New();
+	if (!theCleanup)
+		return KErrNoMemory;
+	TRAPD(ret, DoTestsL());
+	test(ret == KErrNone);
+	delete theCleanup;
+	test.End();
+	test.Close();
+	__UHEAP_MARKEND;
+	return(0);
+	}
+
+