phonebookengines_old/contactsmodel/tsrc/T_TimeIS.CPP
changeset 40 b46a585f6909
equal deleted inserted replaced
37:fd64c38c277d 40:b46a585f6909
       
     1 // Copyright (c) 2003-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // This test code tests the vCard import / export functionality that was introduced as a result of the 
       
    15 // defect DEF023159. This defect requires the implementation of a flag which tells the import/export
       
    16 // routines to ignore white-space only valued properties within a Contact Entry / vCard file.
       
    17 // 
       
    18 //
       
    19 
       
    20 #include "t_timeis.h"
       
    21 #include <vutil.h>
       
    22 #include <coreappstest/testserver.h>
       
    23 // include templates for CleanupResetAndDestroyPushL(T)
       
    24 #include "cntviewprivate.h"
       
    25 
       
    26 
       
    27 RTest test(_L("T_TimeIS - exp/importing using TimeIS protocol"));
       
    28 
       
    29 const TPtrC KDatabaseName=_L("C:TimeISdb.cdb");
       
    30 
       
    31 const TPtrC KTestFile4_1=_L("Z:\\t_TimeIS\\Connectivity.vcf");
       
    32 
       
    33 const TPtrC KTestFile1_1=_L("C:\\Test1_1.vcf");
       
    34 const TPtrC KTestFile1_2=_L("C:\\Test1_2.vcf");
       
    35 const TPtrC KTestFile1_3=_L("C:\\Test1_3.vcf");
       
    36 const TPtrC KTestFile3_1=_L("C:\\Test3_1.vcf");
       
    37 const TPtrC KTestFile5_1=_L("C:\\Test5_1.vcf");
       
    38 const TPtrC KTestFile5_2=_L("C:\\Test5_2.vcf");
       
    39 const TPtrC KTestFile5_3=_L("C:\\Test5_3.vcf");
       
    40 const TPtrC KTestFile6_1=_L("C:\\Test6_1.vcf");
       
    41 const TPtrC KTestFile6_2=_L("C:\\Test6_2.vcf");
       
    42 const TPtrC KTestFile7_1=_L("C:\\Test7_1.vcf");
       
    43 const TPtrC KTestFile7_2=_L("C:\\Test7_2.vcf");
       
    44 const TPtrC KTestFile7_3=_L("C:\\Test7_3.vcf");
       
    45 const TPtrC KTestFile8_1=_L("C:\\Test8_1.vcf");
       
    46 const TPtrC KTestFile8_2=_L("C:\\Test8_2.vcf");
       
    47 const TPtrC KTestFile8_3=_L("C:\\Test8_3.vcf");
       
    48 
       
    49 
       
    50 CTimeISTest::CTimeISTest()
       
    51 	{
       
    52 
       
    53 	} // Contructor
       
    54 
       
    55 
       
    56 CTimeISTest::~CTimeISTest()
       
    57 	{
       
    58 	delete iDb;
       
    59 	CActiveScheduler* scheduler=CActiveScheduler::Current(); //get current
       
    60 	CActiveScheduler::Install(NULL); //uninstall
       
    61 	delete scheduler; // delete uninstalled scheduler
       
    62 	iFs.Close();
       
    63 	} // Destructor
       
    64 
       
    65 CTimeISTest* CTimeISTest::NewLC(RTest& aTest)
       
    66 	{
       
    67 	CTimeISTest* self=new(ELeave) CTimeISTest();
       
    68 	CleanupStack::PushL(self);
       
    69 	self->ConstructL(aTest);
       
    70 	return(self);
       
    71 	}  //NewLC
       
    72 
       
    73 void CTimeISTest::CloseDb()
       
    74 	{
       
    75 	delete iDb;
       
    76 	iDb = 0;
       
    77 	}
       
    78 
       
    79 void CTimeISTest::ConstructL(RTest& aTest)
       
    80 	{
       
    81 	User::LeaveIfError(iFs.Connect());
       
    82 	CActiveScheduler::Install(new(ELeave) CActiveScheduler);
       
    83 	iTest = &aTest;
       
    84 	iDb = CContactDatabase::ReplaceL(KDatabaseName);
       
    85 	}; // ConstructL
       
    86 
       
    87 // ---------------- Utility Methods
       
    88 
       
    89 // Using a text string, create a vCard. Return the pointer to the newly created instance
       
    90 // The caller will take ownership of it.
       
    91 
       
    92 CParserVCard* CTimeISTest::CreateVCardLC(const TDesC8& aContents)
       
    93 	{
       
    94 	CParserVCard* vCardParser=CParserVCard::NewL();
       
    95 	CleanupStack::PushL(vCardParser);
       
    96 
       
    97 	RDesReadStream stream(aContents);
       
    98 	stream.PushL();
       
    99 	vCardParser->InternalizeL(stream);
       
   100 	CleanupStack::PopAndDestroy(); // stream
       
   101 	return vCardParser;
       
   102 	}
       
   103 
       
   104 // Externalise the VCard to the file. If the file does not exist it is created, if the 
       
   105 // file already exists it is overwritted.
       
   106 void CTimeISTest::WriteVCardL(const TDesC& aFileName, CParserVCard& aVCard)
       
   107 	{
       
   108 	RFileWriteStream vCardWrite;
       
   109 	vCardWrite.PushL();
       
   110 	User::LeaveIfError(vCardWrite.Replace(iFs,aFileName,EFileWrite));
       
   111 	aVCard.ExternalizeL(vCardWrite);
       
   112 	vCardWrite.CommitL();
       
   113 	CleanupStack::PopAndDestroy(); //vCardWrite
       
   114 	}
       
   115 
       
   116 // Find a field value of type aFieldType and return true if it matches the aExpected value.
       
   117 TBool CTimeISTest::CheckSingleFieldValue(CContactItemFieldSet& aFieldSet, TFieldType aFieldType, const TDesC& aExpectedValue)
       
   118 	{
       
   119 	TBool correctValue = EFalse;
       
   120 
       
   121 	TInt pos = aFieldSet.Find(aFieldType);
       
   122 	if	(pos != KErrNotFound)
       
   123 		{
       
   124 		// Verify
       
   125 		CContactItemField& field = aFieldSet[pos];
       
   126 		CContactTextField* storage = field.TextStorage();
       
   127 		correctValue = (storage->Text().CompareF(aExpectedValue) == 0);
       
   128 		}
       
   129 	//
       
   130 	return correctValue;
       
   131 	}
       
   132 	
       
   133 // Find a parameter and field value of type aFieldType and return true if it matches the aExpected value.
       
   134 TBool CTimeISTest::CheckSingleParameterFieldValues(CContactItemFieldSet& aFieldSet, TFieldType aFieldType, TUid aMapping, const TDesC& aExpectedValue, TBool aFieldPresent)
       
   135 	{
       
   136 	TBool correctValue = EFalse;
       
   137 	TInt pos = 0;
       
   138 	
       
   139 	TBool fieldFound = EFalse;
       
   140 	TInt startPos = KContactFieldSetSearchAll;
       
   141 	
       
   142 	while(!fieldFound && !(pos == KErrNotFound))
       
   143 		{
       
   144 		pos = aFieldSet.FindNext(aFieldType, startPos);
       
   145 		startPos = pos + 1;
       
   146 		if (pos != KErrNotFound )
       
   147 			{
       
   148 			CContactItemField& tempField = aFieldSet[pos];
       
   149 			const CContentType& tempContentType = tempField.ContentType();
       
   150 			
       
   151 			if (aMapping == KNullUid)
       
   152 				{
       
   153 				TBool additionalMapFound = EFalse;
       
   154 				additionalMapFound |= tempContentType.ContainsFieldType(KUidContactFieldVCardMapHOME);
       
   155 				additionalMapFound |= tempContentType.ContainsFieldType(KUidContactFieldVCardMapWORK);
       
   156 				additionalMapFound |= tempContentType.ContainsFieldType(KUidContactFieldVCardMapPREF);
       
   157 				if (!additionalMapFound)
       
   158 					{
       
   159 					fieldFound = ETrue;
       
   160 					}
       
   161 				}
       
   162 			else
       
   163 				{
       
   164 				fieldFound = tempContentType.ContainsFieldType(aMapping);
       
   165 				}
       
   166 			}
       
   167 		}
       
   168 	
       
   169 	if (fieldFound)
       
   170 		{
       
   171 		CContactItemField& aItemField = aFieldSet[pos];
       
   172 
       
   173 		// Verify
       
   174 		CContactTextField* storage = aItemField.TextStorage();
       
   175 		correctValue = (storage->Text().CompareF(aExpectedValue) == 0);
       
   176 		}
       
   177 	if (!aFieldPresent && !fieldFound)
       
   178 		{
       
   179 		correctValue = ETrue;
       
   180 		}
       
   181 		
       
   182 	return correctValue;
       
   183 	}
       
   184 
       
   185 // Create a contact entry in the Contact Database and return the ID
       
   186 
       
   187 TContactItemId CTimeISTest::CreateContactL()
       
   188 	{
       
   189 	const TContactItemId templateId = iDb->TemplateId();
       
   190 	CContactItem* templateCard = iDb->ReadContactLC(templateId);
       
   191 	CContactCard* card = CContactCard::NewL(templateCard); 
       
   192 	CleanupStack::PushL(card);
       
   193 	//
       
   194 	CContactItemFieldSet& cardFields=card->CardFields();
       
   195 	// Set the telephone number
       
   196 	TInt pos=cardFields.Find(KUidContactFieldPhoneNumber);
       
   197 	if (pos!=KErrNotFound)
       
   198 		{
       
   199 		cardFields[pos].SetMapping(KUidContactFieldVCardMapTEL);
       
   200 		cardFields[pos].TextStorage()->SetTextL(_L("1234"));
       
   201 		}
       
   202 	// Set the label
       
   203 	pos=cardFields.Find(KUidContactFieldNote);
       
   204 	if (pos!=KErrNotFound)
       
   205 		{
       
   206 		cardFields[pos].SetMapping(KUidContactFieldVCardMapLABEL);
       
   207 		cardFields[pos].TextStorage()->SetTextL(_L(" "));
       
   208 		}
       
   209 	//
       
   210 	const TContactItemId id = iDb->AddNewContactL(*card);
       
   211 	CleanupStack::PopAndDestroy(2, templateCard); 
       
   212 	return id;
       
   213 	}
       
   214 
       
   215 
       
   216 // Read in the file and parse it using Versit
       
   217 CParserVCard* CTimeISTest::ParseVCardLC(const TDesC& aFilename)
       
   218 	{
       
   219 	CParserVCard* vCardParser=CParserVCard::NewL();
       
   220 	CleanupStack::PushL(vCardParser);
       
   221 	//
       
   222 	RFile readFile;
       
   223 	const TInt error = readFile.Open(iFs, aFilename, EFileRead);
       
   224 	User::LeaveIfError(error);
       
   225 	CleanupClosePushL(readFile);
       
   226 	//
       
   227 	RFileReadStream stream(readFile);
       
   228 	stream.PushL();
       
   229 	vCardParser->InternalizeL(stream);
       
   230 	CleanupStack::PopAndDestroy(); // stream
       
   231 	CleanupStack::PopAndDestroy(); // readFile
       
   232 	return vCardParser;
       
   233 	}
       
   234 
       
   235 
       
   236 // ---------------- Test Methods
       
   237 
       
   238 CArrayPtr<CContactItem>* CTimeISTest::ImportVCardLC(const TDesC& aFilename, TBool aConnectWhitespaceOption)
       
   239 	{
       
   240 	CArrayPtr<CContactItem>* contactItems;
       
   241 	RFileReadStream vCardRead;
       
   242 	TBool importOK;
       
   243 	
       
   244 	vCardRead.PushL();
       
   245 	User::LeaveIfError(vCardRead.Open(iFs,aFilename,EFileRead));
       
   246 	// Just a precaution. This array must be empty before we go and add more data
       
   247 	if (aConnectWhitespaceOption)
       
   248 		{
       
   249 		contactItems = iDb->ImportContactsL(TUid::Uid(KUidVCardConvDefaultImpl),vCardRead,importOK,(CContactVCardConverter::EImportSingleContact | CContactVCardConverter::EConnectWhitespace));
       
   250 		}
       
   251 	else
       
   252 		{
       
   253 		contactItems = iDb->ImportContactsL(TUid::Uid(KUidVCardConvDefaultImpl),vCardRead,importOK,(CContactVCardConverter::EImportSingleContact));
       
   254 		}
       
   255 	CleanupStack::PopAndDestroy(); // vCardRead
       
   256 	CleanupStack::PushL(contactItems);
       
   257 	return contactItems;
       
   258 	}
       
   259 
       
   260 void CTimeISTest::TestOneL()
       
   261 	{
       
   262 	// Create a vCard with actual telephone number
       
   263 	iTest->Printf(_L("Creating test vCard Files\n"));
       
   264 	_LIT8(KRealTel, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nNOTE:text\r\nEND:VCARD\r\n");
       
   265 	CParserVCard* vCard = CreateVCardLC(KRealTel);
       
   266 	WriteVCardL(KTestFile1_1,*vCard);
       
   267 	CleanupStack::PopAndDestroy(vCard);
       
   268 	// Create a vCard with spaced telephone number
       
   269 	_LIT8(KSpaceTel, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nNOTE: \r\nTEL:1\r\nEND:VCARD\r\n");
       
   270 	vCard = CreateVCardLC(KSpaceTel);
       
   271 	WriteVCardL(KTestFile1_2,*vCard);
       
   272 	CleanupStack::PopAndDestroy(vCard);
       
   273 	// Create a vCard with null telephone number
       
   274 	_LIT8(KNULLTel, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nNOTE:\r\nTEL:1\r\nEND:VCARD\r\n");
       
   275 	vCard = CreateVCardLC(KNULLTel);
       
   276 	WriteVCardL(KTestFile1_3,*vCard);
       
   277 	CleanupStack::PopAndDestroy(vCard);
       
   278 
       
   279 
       
   280 	// Now import the files and check the behaviour
       
   281 	iTest->Printf(_L("Importing vCard files to contacts\n"));
       
   282 	iTest->Printf(_L("New File\n"));
       
   283 	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile1_1);
       
   284 	(*iTest)(contactItems->Count() == 1);
       
   285 	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   286 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldNote,_L("text")));
       
   287 	contactItems->ResetAndDestroy();
       
   288 	CleanupStack::PopAndDestroy(cItem);
       
   289 	CleanupStack::PopAndDestroy(contactItems);
       
   290 
       
   291 
       
   292 	iTest->Printf(_L("Spaced value field\n"));
       
   293 	contactItems = ImportVCardLC(KTestFile1_2);
       
   294 	(*iTest)(contactItems->Count() == 1);
       
   295 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   296 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldNote,_L("text")));
       
   297 	contactItems->ResetAndDestroy();
       
   298 	CleanupStack::PopAndDestroy(cItem);
       
   299 	CleanupStack::PopAndDestroy(contactItems);
       
   300 
       
   301 	iTest->Printf(_L("NULL value field\n"));
       
   302 	contactItems = ImportVCardLC(KTestFile1_3);
       
   303 	(*iTest)(contactItems->Count() == 1);
       
   304 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   305 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldNote,_L("")));
       
   306 	contactItems->ResetAndDestroy();
       
   307 	CleanupStack::PopAndDestroy(cItem);
       
   308 	CleanupStack::PopAndDestroy(contactItems);
       
   309 
       
   310 	iTest->Printf(_L("Behaviour correct\n"));
       
   311 	}
       
   312 
       
   313 void CTimeISTest::TestTwoL()
       
   314 	{
       
   315 	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
       
   316 	iTest->Printf(_L("Creating test vCard Files\n"));
       
   317 	_LIT8(KNewN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nN:A;B;C\r\nEND:VCARD\r\n");
       
   318 	CParserVCard* vCard = CreateVCardLC(KNewN);
       
   319 	WriteVCardL(KTestFile1_1,*vCard);
       
   320 	CleanupStack::PopAndDestroy(vCard);
       
   321 	// Create a vCard with spaced telephone number, null address regions.
       
   322 	_LIT8(KModN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nN:A;;C\r\nTEL:1\r\nEND:VCARD\r\n");
       
   323 	vCard = CreateVCardLC(KModN);
       
   324 	WriteVCardL(KTestFile1_2,*vCard);
       
   325 	CleanupStack::PopAndDestroy(vCard);
       
   326 	// Create a vCard with null telephone number, spaced address localities.
       
   327 	_LIT8(KDelN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:1\r\nN: ;;C\r\nTEL:2\r\nEND:VCARD\r\n");
       
   328 	vCard = CreateVCardLC(KDelN);
       
   329 	WriteVCardL(KTestFile1_3,*vCard);
       
   330 	CleanupStack::PopAndDestroy(vCard);
       
   331 
       
   332 	// Now import the files and check the behaviour
       
   333 	iTest->Printf(_L("Importing vCard files to contacts\n"));
       
   334 	iTest->Printf(_L("New File\n"));
       
   335 	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile1_1);
       
   336 	(*iTest)(contactItems->Count() == 1);
       
   337 	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   338 	
       
   339 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("A")));
       
   340 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("B")));
       
   341 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
       
   342 	
       
   343 	contactItems->ResetAndDestroy();
       
   344 	CleanupStack::PopAndDestroy(cItem);
       
   345 	CleanupStack::PopAndDestroy(contactItems);
       
   346 
       
   347 		
       
   348 	iTest->Printf(_L("A non supported field\n"));
       
   349 	contactItems = ImportVCardLC(KTestFile1_2);
       
   350 	(*iTest)(contactItems->Count() == 1);
       
   351 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   352 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("A")));
       
   353 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("B")));
       
   354 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
       
   355 	contactItems->ResetAndDestroy();
       
   356 	CleanupStack::PopAndDestroy(cItem);
       
   357 	CleanupStack::PopAndDestroy(contactItems);
       
   358 	
       
   359 
       
   360 	iTest->Printf(_L("Empty field\n"));
       
   361 	contactItems = ImportVCardLC(KTestFile1_3);
       
   362 	(*iTest)(contactItems->Count() == 1);
       
   363 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   364 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("")));
       
   365 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("B")));
       
   366 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
       
   367 	contactItems->ResetAndDestroy();
       
   368 	CleanupStack::PopAndDestroy(cItem);
       
   369 	CleanupStack::PopAndDestroy(contactItems);
       
   370 	}
       
   371 
       
   372 
       
   373 void CTimeISTest::TestThree()
       
   374 	{	
       
   375 	iTest->Printf(_L("Testing Export\n"));
       
   376 	// Create a contacts entry and export it via CntVCard
       
   377 	iTest->Printf(_L("Creating the Contact and exporting it\n"));
       
   378 	CContactIdArray* idArray = CContactIdArray::NewLC();
       
   379 	TContactItemId contactID = CreateContactL();
       
   380 	idArray->AddL(contactID);
       
   381 	RFileWriteStream vCardWrite;
       
   382 	vCardWrite.PushL();
       
   383 	User::LeaveIfError(vCardWrite.Replace(iFs,KTestFile3_1,EFileWrite));
       
   384 	iDb->ExportSelectedContactsL(TUid::Uid(KUidVCardConvDefaultImpl),*idArray,vCardWrite,(CContactVCardConverter::EImportSingleContact | CContactVCardConverter::EConnectWhitespace));
       
   385 	vCardWrite.CommitL();
       
   386 	CleanupStack::PopAndDestroy(); //vCardWrite
       
   387 	CleanupStack::PopAndDestroy(idArray);
       
   388 	// Verify that the card contains a telephone field and NOT a LABEL field.
       
   389 	iTest->Printf(_L("Checking its contents\n"));
       
   390 	const TUid KVersitTELPropertyValueType = { KVersitPropertyHBufCUid };
       
   391 	const TUid KVersitLABELPropertyValueType = { KVersitPropertyHBufCUid };
       
   392 	CParserVCard* parser = ParseVCardLC(KTestFile3_1);
       
   393 	CArrayPtr<CParserProperty>* properties = parser->PropertyL(KVersitTokenTEL,KVersitTELPropertyValueType, EFalse);
       
   394 	// If properties were found this will have a value
       
   395 	(*iTest)(!(properties == NULL));
       
   396 	delete properties;
       
   397 	properties = parser->PropertyL(KVersitTokenLABEL,KVersitLABELPropertyValueType, EFalse);
       
   398 	// If properties were found this will have a value
       
   399 	(*iTest)(properties == NULL);
       
   400 	CleanupStack::PopAndDestroy(parser);
       
   401 	}
       
   402 
       
   403 void CTimeISTest::TestFour()
       
   404 	{
       
   405 	// Create a badly formatted vCard.
       
   406 	iTest->Printf(_L("Importing bad vCard to contacts\n"));
       
   407 	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile4_1);
       
   408 	
       
   409 	(*iTest)(contactItems->Count() == 1);
       
   410 	contactItems->ResetAndDestroy();
       
   411 	CleanupStack::PopAndDestroy(contactItems);
       
   412 	}
       
   413 	
       
   414 void CTimeISTest::TestFiveL()
       
   415 	{
       
   416 	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
       
   417 	iTest->Printf(_L("Creating test vCard Files\n"));
       
   418 	_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");
       
   419 	CParserVCard* vCard = CreateVCardLC(KNewN);
       
   420 	WriteVCardL(KTestFile5_1,*vCard);
       
   421 	CleanupStack::PopAndDestroy(vCard);
       
   422 	// Create a vCard with spaced telephone number, null address regions.
       
   423 	_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");
       
   424 	vCard = CreateVCardLC(KModN);
       
   425 	WriteVCardL(KTestFile5_2,*vCard);
       
   426 	CleanupStack::PopAndDestroy(vCard);
       
   427 	// Create a vCard with null telephone number, spaced address localities.
       
   428 	_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");
       
   429 	vCard = CreateVCardLC(KDelN);
       
   430 	WriteVCardL(KTestFile5_3,*vCard);
       
   431 	CleanupStack::PopAndDestroy(vCard);
       
   432 
       
   433 	// Now import the files and check the behaviour
       
   434 	iTest->Printf(_L("Importing vCard files to contacts -Test 5\n"));
       
   435 	iTest->Printf(_L("New File -Test 5\n\r"));
       
   436 	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile5_1);
       
   437 	(*iTest)(contactItems->Count() == 1);
       
   438 	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   439 	
       
   440 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
       
   441 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
       
   442 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L("Local")));
       
   443 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L("PLocal")));
       
   444 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
       
   445 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
       
   446 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L("Region")));
       
   447 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L("PRegion")));
       
   448 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
       
   449 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
       
   450 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
       
   451 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
       
   452 			
       
   453 	contactItems->ResetAndDestroy();
       
   454 	CleanupStack::PopAndDestroy(cItem);
       
   455 	CleanupStack::PopAndDestroy(contactItems);
       
   456 
       
   457 	iTest->Printf(_L("A non supported field -Test 5\n\r"));
       
   458 	contactItems = ImportVCardLC(KTestFile5_2);
       
   459 	(*iTest)(contactItems->Count() == 1);
       
   460 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   461 	
       
   462 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
       
   463 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
       
   464 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L("Local")));
       
   465 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L("PLocal")));
       
   466 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
       
   467 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
       
   468 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L("Region")));
       
   469 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L("PRegion")));
       
   470 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
       
   471 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
       
   472 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
       
   473 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
       
   474 		
       
   475 	contactItems->ResetAndDestroy();
       
   476 	CleanupStack::PopAndDestroy(cItem);
       
   477 	CleanupStack::PopAndDestroy(contactItems);
       
   478 	
       
   479 
       
   480 	iTest->Printf(_L("Empty field -Test 5\n\r"));
       
   481 	contactItems = ImportVCardLC(KTestFile5_3);
       
   482 	(*iTest)(contactItems->Count() == 1);
       
   483 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   484 	
       
   485 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("")));
       
   486 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("")));
       
   487 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L(""), EFalse));
       
   488 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L(""), EFalse));
       
   489 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
       
   490 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
       
   491 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L("Region")));
       
   492 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L("PRegion")));
       
   493 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
       
   494 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
       
   495 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
       
   496 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
       
   497 		
       
   498 	contactItems->ResetAndDestroy();
       
   499 	CleanupStack::PopAndDestroy(cItem);
       
   500 	CleanupStack::PopAndDestroy(contactItems);
       
   501 	}
       
   502 
       
   503 	
       
   504 void CTimeISTest::TestSixL()
       
   505 	{
       
   506 	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
       
   507 	iTest->Printf(_L("Creating test vCard Files\n"));
       
   508 	_LIT8(KNewN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:5\r\nADR;HOME:;;;HLocal;HRegion;HPost;\r\nEND:VCARD\r\n");
       
   509 	CParserVCard* vCard = CreateVCardLC(KNewN);
       
   510 	WriteVCardL(KTestFile6_1,*vCard);
       
   511 	CleanupStack::PopAndDestroy(vCard);
       
   512 	// Create a vCard with spaced telephone number, null address regions.
       
   513 	_LIT8(KModN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:5\r\nADR;WORK:;;;WLocal;WRegion;WPost;\r\nEND:VCARD\r\n");
       
   514 	vCard = CreateVCardLC(KModN);
       
   515 	WriteVCardL(KTestFile6_2,*vCard);
       
   516 	CleanupStack::PopAndDestroy(vCard);
       
   517 	
       
   518 	// Now import the files and check the behaviour
       
   519 	iTest->Printf(_L("Importing vCard files to contacts -Test 6\n"));
       
   520 	iTest->Printf(_L("New File -Test 6\n\r"));
       
   521 	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile6_1);
       
   522 	(*iTest)(contactItems->Count() == 1);
       
   523 	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   524 	
       
   525 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
       
   526 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
       
   527 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
       
   528 			
       
   529 	contactItems->ResetAndDestroy();
       
   530 	CleanupStack::PopAndDestroy(cItem);
       
   531 	CleanupStack::PopAndDestroy(contactItems);
       
   532 
       
   533 	iTest->Printf(_L("A non supported field -Test 6\n\r"));
       
   534 	contactItems = ImportVCardLC(KTestFile6_2);
       
   535 	(*iTest)(contactItems->Count() == 1);
       
   536 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   537 	
       
   538 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
       
   539 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
       
   540 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
       
   541 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
       
   542 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
       
   543 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
       
   544 		
       
   545 	contactItems->ResetAndDestroy();
       
   546 	CleanupStack::PopAndDestroy(cItem);
       
   547 	CleanupStack::PopAndDestroy(contactItems);
       
   548 	}
       
   549 	
       
   550 void CTimeISTest::TestSevenL()
       
   551 	{
       
   552 	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
       
   553 	iTest->Printf(_L("Creating test vCard Files -Test 7\n"));
       
   554 	_LIT8(KNewN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:7\r\nN:A;B;C\r\nEND:VCARD\r\n");
       
   555 	CParserVCard* vCard = CreateVCardLC(KNewN);
       
   556 	WriteVCardL(KTestFile7_1,*vCard);
       
   557 	CleanupStack::PopAndDestroy(vCard);
       
   558 	// Create a vCard with spaced telephone number, null address regions.
       
   559 	_LIT8(KModN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:7\r\nN:A;;C\r\nTEL:1\r\nEND:VCARD\r\n");
       
   560 	vCard = CreateVCardLC(KModN);
       
   561 	WriteVCardL(KTestFile7_2,*vCard);
       
   562 	CleanupStack::PopAndDestroy(vCard);
       
   563 	// Create a vCard with null telephone number, spaced address localities.
       
   564 	_LIT8(KDelN, "BEGIN:VCARD\r\nVERSION:2.1\r\nUID:7\r\nN: ;;C\r\nTEL:2\r\nEND:VCARD\r\n");
       
   565 	vCard = CreateVCardLC(KDelN);
       
   566 	WriteVCardL(KTestFile7_3,*vCard);
       
   567 	CleanupStack::PopAndDestroy(vCard);
       
   568 
       
   569 	// Now import the files and check the behaviour
       
   570 	iTest->Printf(_L("Importing vCard files to contacts -Test 7\n"));
       
   571 	iTest->Printf(_L("New File -Test 7\n"));
       
   572 	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile7_1, 0);
       
   573 	(*iTest)(contactItems->Count() == 1);
       
   574 	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   575 	
       
   576 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("A")));
       
   577 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("B")));
       
   578 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
       
   579 	
       
   580 	contactItems->ResetAndDestroy();
       
   581 	CleanupStack::PopAndDestroy(cItem);
       
   582 	CleanupStack::PopAndDestroy(contactItems);
       
   583 
       
   584 		
       
   585 	iTest->Printf(_L("A non supported field -Test 7\n"));
       
   586 	contactItems = ImportVCardLC(KTestFile7_2, 0);
       
   587 	(*iTest)(contactItems->Count() == 1);
       
   588 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   589 	
       
   590 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L("A")));
       
   591 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("")));
       
   592 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
       
   593 	contactItems->ResetAndDestroy();
       
   594 	CleanupStack::PopAndDestroy(cItem);
       
   595 	CleanupStack::PopAndDestroy(contactItems);
       
   596 	
       
   597 
       
   598 	iTest->Printf(_L("Empty field -Test 7\n"));
       
   599 	contactItems = ImportVCardLC(KTestFile7_3, 0);
       
   600 	(*iTest)(contactItems->Count() == 1);
       
   601 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   602 	
       
   603 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldFamilyName,_L(" ")));
       
   604 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldGivenName,_L("")));
       
   605 	(*iTest)(CheckSingleFieldValue(cItem->CardFields(),KUidContactFieldAdditionalName,_L("C")));
       
   606 	contactItems->ResetAndDestroy();
       
   607 	CleanupStack::PopAndDestroy(cItem);
       
   608 	CleanupStack::PopAndDestroy(contactItems);
       
   609 	}
       
   610 
       
   611 
       
   612 void CTimeISTest::TestEightL()
       
   613 	{
       
   614 	// Create a vCard with actual telephone number, Home Work Preferred and default addresses.
       
   615 	iTest->Printf(_L("Creating test vCard Files - Test 8\n"));
       
   616 	_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");
       
   617 	CParserVCard* vCard = CreateVCardLC(KNewN);
       
   618 	WriteVCardL(KTestFile8_1,*vCard);
       
   619 	CleanupStack::PopAndDestroy(vCard);
       
   620 	// Create a vCard with spaced telephone number, null address regions.
       
   621 	_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");
       
   622 	vCard = CreateVCardLC(KModN);
       
   623 	WriteVCardL(KTestFile8_2,*vCard);
       
   624 	CleanupStack::PopAndDestroy(vCard);
       
   625 	// Create a vCard with null telephone number, spaced address localities.
       
   626 	_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");
       
   627 	vCard = CreateVCardLC(KDelN);
       
   628 	WriteVCardL(KTestFile8_3,*vCard);
       
   629 	CleanupStack::PopAndDestroy(vCard);
       
   630 
       
   631 	// Now import the files and check the behaviour
       
   632 	iTest->Printf(_L("Importing vCard files to contacts -Test 8\n"));
       
   633 	iTest->Printf(_L("New File -Test 8\n\r"));
       
   634 	CArrayPtr<CContactItem>* contactItems = ImportVCardLC(KTestFile8_1, 0);
       
   635 	(*iTest)(contactItems->Count() == 1);
       
   636 	CContactItem* cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   637 	
       
   638 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
       
   639 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
       
   640 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L("Local")));
       
   641 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L("PLocal")));
       
   642 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("HRegion")));
       
   643 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("WRegion")));
       
   644 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L("Region")));
       
   645 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L("PRegion")));
       
   646 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
       
   647 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
       
   648 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
       
   649 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
       
   650 			
       
   651 	contactItems->ResetAndDestroy();
       
   652 	CleanupStack::PopAndDestroy(cItem);
       
   653 	CleanupStack::PopAndDestroy(contactItems);
       
   654 
       
   655 	iTest->Printf(_L("A non supported field -Test 8\n\r"));
       
   656 	contactItems = ImportVCardLC(KTestFile8_2, 0);
       
   657 	(*iTest)(contactItems->Count() == 1);
       
   658 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   659 	
       
   660 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L("HLocal")));
       
   661 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L("WLocal")));
       
   662 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L("Local")));
       
   663 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L("PLocal")));
       
   664 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("")));
       
   665 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("")));
       
   666 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L(""), EFalse));
       
   667 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L(""), EFalse));
       
   668 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
       
   669 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
       
   670 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
       
   671 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
       
   672 		
       
   673 	contactItems->ResetAndDestroy();
       
   674 	CleanupStack::PopAndDestroy(cItem);
       
   675 	CleanupStack::PopAndDestroy(contactItems);
       
   676 	
       
   677 
       
   678 	iTest->Printf(_L("Empty field -Test 8\n\r"));
       
   679 	contactItems = ImportVCardLC(KTestFile8_3, 0);
       
   680 	(*iTest)(contactItems->Count() == 1);
       
   681 	cItem = iDb->ReadContactLC(contactItems->At(0)->Id());
       
   682 	
       
   683 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapHOME,_L(" ")));
       
   684 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapWORK,_L(" ")));
       
   685 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KNullUid,_L(" ")));
       
   686 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldLocality,KUidContactFieldVCardMapPREF,_L(" ")));
       
   687 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapHOME,_L("")));
       
   688 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapWORK,_L("")));
       
   689 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KNullUid,_L(""), EFalse));
       
   690 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldRegion,KUidContactFieldVCardMapPREF,_L(""), EFalse));
       
   691 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapHOME,_L("HPost")));
       
   692 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapWORK,_L("WPost")));
       
   693 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KNullUid,_L("Post")));
       
   694 	(*iTest)(CheckSingleParameterFieldValues(cItem->CardFields(),KUidContactFieldPostcode,KUidContactFieldVCardMapPREF,_L("PPost")));
       
   695 		
       
   696 	contactItems->ResetAndDestroy();
       
   697 	CleanupStack::PopAndDestroy(cItem);
       
   698 	CleanupStack::PopAndDestroy(contactItems);
       
   699 	}
       
   700 
       
   701 
       
   702 void CTimeISTest::TestBirthdayDeletionL(TBool aAddNameField)
       
   703 /**
       
   704  *Testing the deletion of a birthday field in a contact card through the time IS protocol
       
   705  *@param TBool aAddNameField specify whether or not adding a name field to the contact card
       
   706  */
       
   707 	{
       
   708 	TDateTime date(1976,EAugust,28,22,0,0,0);
       
   709 	TTime time(date);	
       
   710 
       
   711 	//Create a contact with just a birthday date
       
   712 	const TContactItemId templateId = iDb->TemplateId();
       
   713 	CContactItem* templateCard = iDb->ReadContactLC(templateId);
       
   714 	CContactCard* card = CContactCard::NewL(templateCard); 
       
   715 	CleanupStack::PushL(card);
       
   716 	//
       
   717 	CContactItemFieldSet& cardFields=card->CardFields();
       
   718 	// Set the birthday
       
   719 	TInt pos=cardFields.Find(KUidContactFieldBirthday);
       
   720 	if (pos!=KErrNotFound)
       
   721 		{
       
   722 		cardFields[pos].SetMapping(KUidContactFieldVCardMapBDAY);
       
   723 		cardFields[pos].DateTimeStorage()->SetTime(date);
       
   724 		}
       
   725 	
       
   726 	if (aAddNameField)
       
   727 		{
       
   728 		pos=cardFields.Find(KUidContactFieldFamilyName);
       
   729 		if (pos!=KErrNotFound)
       
   730 			{
       
   731 			cardFields[pos].TextStorage()->SetTextL(_L("MyName"));
       
   732 			}
       
   733 		}
       
   734 
       
   735 	//Create contact now
       
   736 	const TContactItemId id = iDb->AddNewContactL(*card);
       
   737 	CleanupStack::PopAndDestroy(2, templateCard); 
       
   738 	CContactIdArray* idArray = CContactIdArray::NewLC();
       
   739 	idArray->AddL(id);
       
   740 	
       
   741 	//export contact to buf
       
   742 	TBuf8<256> buf;//256 bytes should be ok
       
   743 	RDesWriteStream vCardWriteStream(buf);
       
   744 	vCardWriteStream.PushL();
       
   745 	iDb->ExportSelectedContactsL(TUid::Uid(KUidVCardConvDefaultImpl),*idArray,vCardWriteStream,CContactVCardConverter::EConnectWhitespace);
       
   746 	vCardWriteStream.CommitL();
       
   747 	CleanupStack::PopAndDestroy(&vCardWriteStream);
       
   748 	CleanupStack::PopAndDestroy(idArray); 
       
   749 
       
   750 	//modify the exported vcard to remove birthday date and add a white space
       
   751 	pos=buf.Find(KVersitTokenBDAY);
       
   752 	(*iTest)(pos>0);
       
   753 	pos+=5; //jump over the token and colon	
       
   754 	_LIT8(KEndOfLine,"\n");
       
   755 	TInt charToDelete=buf.Mid(pos).Find(KEndOfLine); //search for the next 0A
       
   756 	charToDelete--; // don't delete the 0A
       
   757 	buf.Delete(pos,charToDelete); //delete now
       
   758 	//Now add white space in vcard
       
   759 	_LIT8(KWhiteSpace," ");
       
   760 	buf.Insert(pos,KWhiteSpace); //insert now
       
   761 	
       
   762 	//now import back that vcard it should not change user data
       
   763 	CArrayPtr<CContactItem>* contactItems;
       
   764 	RDesReadStream vCardReadStream(buf);
       
   765 	TBool importOK;
       
   766 	vCardReadStream.PushL();
       
   767 	contactItems = iDb->ImportContactsL(TUid::Uid(KUidVCardConvDefaultImpl),vCardReadStream,importOK,CContactVCardConverter::EConnectWhitespace);
       
   768 	CleanupStack::PopAndDestroy(); // vCardReadStream
       
   769 	CleanupStack::PushL(contactItems);
       
   770 	CleanupResetAndDestroyPushL(*contactItems);
       
   771 	//make sure contact is imported 
       
   772 	(*iTest)(contactItems->Count()==1); 
       
   773 
       
   774 	TInt fieldPos=contactItems->At(0)->CardFields().Find(KUidContactFieldBirthday);
       
   775 	//make sure field has not been deleted 
       
   776 	(*iTest)(fieldPos!=KErrNotFound); 
       
   777 	//make sure birthday date as not changed
       
   778 	(*iTest)(contactItems->At(0)->CardFields()[fieldPos].DateTimeStorage()->Time()==time);
       
   779 		
       
   780 	CleanupStack::PopAndDestroy(2,contactItems); // ResetAndDestroy
       
   781 	
       
   782 	//Now try to delete that field through the symbian connect timeIS protocol by importing a NULL field
       
   783 	//First delete that space in vcard
       
   784 	buf.Delete(pos,1); 
       
   785 	//now import back that vcard it should delete the birthday field
       
   786 	vCardReadStream.PushL();
       
   787 	vCardReadStream.Open(buf);
       
   788 	contactItems = iDb->ImportContactsL(TUid::Uid(KUidVCardConvDefaultImpl),vCardReadStream,importOK,CContactVCardConverter::EConnectWhitespace);
       
   789 	CleanupStack::PopAndDestroy(); // vCardReadStream
       
   790 	CleanupStack::PushL(contactItems);
       
   791 	CleanupResetAndDestroyPushL(*contactItems);
       
   792 	(*iTest)(contactItems->Count()==1); //make sure one contact is imported
       
   793 	
       
   794 	//Make sure birthday has been deleted
       
   795 	/*TInt*/ fieldPos=contactItems->At(0)->CardFields().Find(KUidContactFieldBirthday);
       
   796 	(*iTest)(fieldPos==KErrNotFound); //make sure field has been deleted 
       
   797 		
       
   798 	CleanupStack::PopAndDestroy(2,contactItems); // ResetAndDestroy
       
   799 	}
       
   800 
       
   801 void CTimeISTest::RunTestsL()
       
   802 	{
       
   803 	iTest->Printf(_L("Time IS Tests Starting\n"));
       
   804 	
       
   805 	TestBirthdayDeletionL(ETrue);
       
   806 		
       
   807 	TestOneL();
       
   808 	TestTwoL();
       
   809 	TestThree();
       
   810 	TestFour();
       
   811 	TestFiveL();
       
   812 	TestSixL();
       
   813 	TestSevenL();
       
   814 	TestEightL();
       
   815 	}
       
   816 
       
   817 
       
   818 void DoTestsL()
       
   819 	{
       
   820 	CTimeISTest* theTest = CTimeISTest::NewLC(test);
       
   821 
       
   822 	CTestRegister * TempFiles = CTestRegister::NewLC();
       
   823 
       
   824 	TempFiles->RegisterL(KDatabaseName, EFileTypeCnt);
       
   825 	TempFiles->RegisterL(KTestFile1_1);
       
   826 	TempFiles->RegisterL(KTestFile1_2);
       
   827 	TempFiles->RegisterL(KTestFile1_3);
       
   828 	TempFiles->RegisterL(KTestFile3_1);
       
   829 	TempFiles->RegisterL(KTestFile5_1);
       
   830 	TempFiles->RegisterL(KTestFile5_2);
       
   831 	TempFiles->RegisterL(KTestFile5_3);
       
   832 	TempFiles->RegisterL(KTestFile6_1);
       
   833 	TempFiles->RegisterL(KTestFile6_2);
       
   834 	TempFiles->RegisterL(KTestFile7_1);
       
   835 	TempFiles->RegisterL(KTestFile7_2);
       
   836 	TempFiles->RegisterL(KTestFile7_3);
       
   837 	TempFiles->RegisterL(KTestFile8_1);
       
   838 	TempFiles->RegisterL(KTestFile8_2);
       
   839 	TempFiles->RegisterL(KTestFile8_3);
       
   840 
       
   841 	theTest->RunTestsL();
       
   842 
       
   843 	theTest->CloseDb();
       
   844 	CleanupStack::PopAndDestroy(2, theTest);
       
   845 	} //DoTestsL
       
   846 
       
   847 
       
   848 /**
       
   849 
       
   850 @SYMTestCaseID     PIM-T-TIMEIS-0001
       
   851 
       
   852 */
       
   853 
       
   854 GLDEF_C TInt E32Main()
       
   855 	{
       
   856 	__UHEAP_MARK;
       
   857 	test.Title();
       
   858 	test.Start(_L("@SYMTESTCaseID:PIM-T-TIMEIS-0001 CNTVCard - Check TimeIS import / export support"));
       
   859 
       
   860 	CTrapCleanup* theCleanup = CTrapCleanup::New();
       
   861 	if (!theCleanup)
       
   862 		return KErrNoMemory;
       
   863 	TRAPD(ret, DoTestsL());
       
   864 	test(ret == KErrNone);
       
   865 	delete theCleanup;
       
   866 	test.End();
       
   867 	test.Close();
       
   868 	__UHEAP_MARKEND;
       
   869 	return(0);
       
   870 	}
       
   871 
       
   872