phonebookengines_old/contactsmodel/tsrc/T_TIME.CPP
changeset 40 b46a585f6909
equal deleted inserted replaced
37:fd64c38c277d 40:b46a585f6909
       
     1 // Copyright (c) 1997-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 //
       
    15 
       
    16 #include <e32test.h>
       
    17 #include <f32file.h>
       
    18 #include <s32file.h>
       
    19 #include <cntdb.h>
       
    20 #include <cntitem.h>
       
    21 #include <cntfield.h>
       
    22 #include <cntfldst.h>
       
    23 #include "T_UTILS.H"
       
    24 
       
    25 CCntTest* CntTest=NULL;
       
    26 LOCAL_D RTest test(_L("T_TIME"));
       
    27 
       
    28 LOCAL_D TTimeIntervalMicroSeconds TheTestTime;
       
    29 LOCAL_D TTime TheClock;
       
    30 
       
    31 enum
       
    32 	{
       
    33 	KTimeTestExportImportDifferentMachineIds,
       
    34 	KTimeTestVCardExport,
       
    35 	KTimeTestVCardImport,
       
    36 	KTimeTestVCardExportToFile1by1,
       
    37 	KTimeTestVCardImportFromFile1by1,
       
    38 	KTimeTestReadContacts,
       
    39 	KTimeTestUpdateContacts,
       
    40 	KTimeTestAddContacts,
       
    41 	KTimeTestFind,
       
    42 	KTimeTestFindInTextDef,
       
    43 	KTimeTestTextDef,
       
    44 	KTimeTestGroupLoad,
       
    45 	KTimeTestReadContactsWithGroups,
       
    46 	KTimeTestCreateDeleteGroups,
       
    47 	};
       
    48 	
       
    49 const TPtrC KDatabaseFileName=_L("C:T_TIME");
       
    50 
       
    51 const TInt KProfileBase=15;
       
    52 const TInt KProfileCount=6;
       
    53 const TInt KProfileBase2=23;
       
    54 const TInt KProfileCount2=6;
       
    55 const TInt KProfileCountMax=6;
       
    56 const TInt KMaxFieldTypes=8;
       
    57 
       
    58 void TestErr(TInt aErr)
       
    59     {
       
    60 	if (aErr!=KErrNone)
       
    61 		{
       
    62 		test.Printf(_L("Error %d\n"),aErr);
       
    63 		test(EFalse);
       
    64 		}
       
    65 	}
       
    66 
       
    67 LOCAL_C void DisplayProfile(TInt aNumber, TCntProfile aProfile)
       
    68 	{
       
    69 	TInt seconds=aProfile.iTime/1000000;
       
    70 	aProfile.iTime-=seconds*1000000;
       
    71 	TInt hundredths=aProfile.iTime/1000;
       
    72 	test.Printf(_L("[%d:%d]=%03d.%03d "),aNumber,aProfile.iCount,seconds,hundredths);
       
    73 	}
       
    74 
       
    75 LOCAL_C void ResetProfiles(TInt aSet)
       
    76 	{
       
    77 	
       
    78 	if (aSet==1)
       
    79 		{
       
    80 		CCntTest::ProfileReset(KProfileBase,KProfileCount); // reset profiles KProfileBase-KProfileCount
       
    81 		}
       
    82 	else if (aSet==2)
       
    83 		{
       
    84 		CCntTest::ProfileReset(KProfileBase2,KProfileCount2); 
       
    85 		}
       
    86 	}
       
    87 
       
    88 LOCAL_C void DisplayProfiles(TInt aSet)
       
    89 	{
       
    90 	TCntProfile profiles[KProfileCountMax];
       
    91 	TInt base=KProfileBase;
       
    92 	TInt count=KProfileCount;
       
    93 	if (aSet==2)
       
    94 		{
       
    95 		base=KProfileBase2;
       
    96 		count=KProfileCount2;
       
    97 		}
       
    98 	CCntTest::ProfileResult(&profiles[0],0,10);
       
    99 	for(TInt loop=0;loop<count;loop++)
       
   100 		DisplayProfile(base+loop,profiles[loop]);
       
   101 	test.Printf(_L("\n"));
       
   102 	}
       
   103 
       
   104 LOCAL_C void StartTheClock()
       
   105 	{
       
   106 	test.Printf(_L("Starting the clock...\n"));
       
   107 	ResetProfiles(1);
       
   108 	ResetProfiles(2);
       
   109 	TheClock.UniversalTime();
       
   110 	}
       
   111 
       
   112 LOCAL_C void StopTheClock()
       
   113 	{
       
   114 	TTime endTime;
       
   115 	endTime.UniversalTime();
       
   116 	TheTestTime=endTime.MicroSecondsFrom(TheClock);
       
   117 	TInt64 totalTime=TheTestTime.Int64();
       
   118 	TInt64 minutes=totalTime/60000000;
       
   119 	totalTime-=minutes*60000000;
       
   120 	TInt64 seconds=totalTime/1000000;
       
   121 	totalTime-=seconds*1000000;
       
   122 	TInt64 hundredths=totalTime/10000;
       
   123 	DisplayProfiles(1);
       
   124 	DisplayProfiles(2);
       
   125 	test.Printf(_L("Result=%d:%02d.%02d\n"),I64LOW(minutes),I64LOW(seconds),I64LOW(hundredths));
       
   126 	}
       
   127 
       
   128 LOCAL_C void AddFieldL(CContactItem& aItem, TInt aRecordNum, TInt aFieldNum)
       
   129 	{
       
   130 	TBuf<128> buf;
       
   131 	buf.Format(_L("Record number=%d, Field number=%d"),aRecordNum,aFieldNum);
       
   132 	TFieldType fieldType=TUid::Null();
       
   133 	TUid mapping=KUidContactFieldVCardMapUnusedN;
       
   134 	switch(aFieldNum%KMaxFieldTypes)
       
   135 		{
       
   136 		case 0:
       
   137 			fieldType=KUidContactFieldGivenName;
       
   138 			break;
       
   139 		case 1:
       
   140 			fieldType=KUidContactFieldAdditionalName;
       
   141 			break;
       
   142 		case 2:
       
   143 			fieldType=KUidContactFieldFamilyName;
       
   144 			break;
       
   145 		case 3:
       
   146 			mapping=KUidContactFieldVCardMapADR;
       
   147 			fieldType=KUidContactFieldAddress;
       
   148 			break;
       
   149 		case 4:
       
   150     		mapping=KUidContactFieldVCardMapORG;
       
   151 			fieldType=KUidContactFieldCompanyName;
       
   152 			break;
       
   153 		case 5:
       
   154     		mapping=KUidContactFieldVCardMapEMAILINTERNET;
       
   155     		fieldType=KUidContactFieldEMail;
       
   156 			break;
       
   157 		case 6:
       
   158     		mapping=KUidContactFieldVCardMapNOTE;
       
   159 			fieldType=KUidContactFieldNote;
       
   160 			break;
       
   161 		case 7:
       
   162     		mapping=KUidContactFieldVCardMapURL;
       
   163 			fieldType=KUidContactFieldUrl;
       
   164 			break;
       
   165 		}
       
   166 	SetNameL(aItem,fieldType,mapping, buf, ETrue);
       
   167 	}
       
   168 
       
   169 LOCAL_C CContactIdArray *AddRecordsLC(TInt aNumRecords, TInt aNumFields, TInt aBlobSize)
       
   170 	{
       
   171 	CContactIdArray *ids=CContactIdArray::NewLC();
       
   172 	TInt numFields=aNumFields;
       
   173 	HBufC8 *blobData=NULL;
       
   174 	if (aBlobSize>0)
       
   175 		{
       
   176 		numFields--;
       
   177 		blobData=HBufC8::NewLC(aBlobSize);
       
   178 		TUint8 *pData=(TUint8 *)blobData->Ptr();
       
   179 		for(TInt loop1=0;loop1<aBlobSize;loop1++)
       
   180 			*pData++=(TUint8)(loop1&0xFF);
       
   181 		blobData->Des().SetLength(aBlobSize);
       
   182 		}
       
   183 	for(TInt loop=0;loop<aNumRecords;loop++)
       
   184 		{
       
   185 		CContactItem* item=CContactCard::NewLC();
       
   186 		for(TInt fieldNum=0;fieldNum<numFields;fieldNum++)
       
   187 			AddFieldL(*item,loop,fieldNum);
       
   188 		if (aBlobSize>0)
       
   189 			{
       
   190 			CContactItemField* field=CContactItemField::NewLC(KStorageTypeStore,KUidContactFieldVCardMapPHOTO);
       
   191 			field->SetMapping(KUidContactFieldVCardMapUnusedN);
       
   192 			field->StoreStorage()->SetThingL(*blobData);
       
   193 			item->AddFieldL(*field);
       
   194 			CleanupStack::Pop(); // item
       
   195 			}
       
   196 		TContactItemId addId=CntTest->Db()->AddNewContactL(*item);
       
   197 		CleanupStack::PopAndDestroy();	// item
       
   198 		ids->AddL(addId);
       
   199 		if ((loop%100)==0)
       
   200 			CntTest->Db()->CompactL();
       
   201 		}
       
   202 	if (blobData)
       
   203 		CleanupStack::PopAndDestroy(); // blobData
       
   204 	CntTest->Db()->CompactL();
       
   205 	test(CntTest->Db()->CountL()==aNumRecords);
       
   206 	return(ids);
       
   207 	}
       
   208 
       
   209 LOCAL_C void VCardExportL(const CContactIdArray &aIds)
       
   210 	{
       
   211 	StartTheClock();
       
   212 	CntTest->ExportContactsLC(&aIds,CContactDatabase::ETTFormat);
       
   213 	StopTheClock();
       
   214 	CleanupStack::PopAndDestroy();	// store (from ExportContactsLC)
       
   215 	}
       
   216 
       
   217 LOCAL_C void VCardExportToFile1by1L(const CContactIdArray &aIds)
       
   218 	{
       
   219 	StartTheClock();
       
   220 	for(TInt loop=0;loop<aIds.Count();loop++)
       
   221 		{
       
   222 		CntTest->ExportContactLC(aIds[loop],CContactDatabase::ETTFormat,KVCardStoreTypeFile);
       
   223 		CleanupStack::PopAndDestroy();	// store
       
   224 		}
       
   225 	StopTheClock();
       
   226 	}
       
   227 
       
   228 LOCAL_C void VCardImportL(const CContactIdArray &aIds)
       
   229 	{
       
   230 	CVCardTestStore* store=CntTest->ExportContactsLC(&aIds,CContactDatabase::ETTFormat);
       
   231 	StartTheClock();
       
   232 	CArrayPtr<CContactItem>* items=CntTest->ImportContactsL(store,CContactDatabase::ETTFormat);
       
   233 	StopTheClock();
       
   234 	items->ResetAndDestroy();
       
   235 	CleanupStack::PopAndDestroy(); // store
       
   236 	delete items;
       
   237 	}
       
   238 
       
   239 LOCAL_C void VCardImportFromFile1by1L(const CContactIdArray &aIds)
       
   240 	{
       
   241 	CArrayPtrFlat<CVCardTestStore> *stores=new(ELeave) CArrayPtrFlat<CVCardTestStore>(aIds.Count());
       
   242 	TInt loop=0;
       
   243 	for(;loop<aIds.Count();loop++)
       
   244 		{
       
   245 		stores->AppendL(CntTest->ExportContactLC(aIds[loop],CContactDatabase::ETTFormat,KVCardStoreTypeFile,loop));
       
   246 		CleanupStack::Pop();	// store
       
   247 		}
       
   248 	StartTheClock();
       
   249 	for(loop=0;loop<aIds.Count();loop++)
       
   250 		{
       
   251 		CArrayPtr<CContactItem>* items=CntTest->ImportContactsL((*stores)[loop],CContactDatabase::ETTFormat);
       
   252 		items->ResetAndDestroy();
       
   253 		delete items;
       
   254 		delete (*stores)[loop];
       
   255 		}
       
   256 	delete stores;
       
   257 	StopTheClock();
       
   258 	}
       
   259 
       
   260 LOCAL_C void ExportImportDifferentMachineIds(TInt aNumRecords, TInt aNumFields)
       
   261 	{
       
   262 	CntTest->Db()->OverrideMachineUniqueId(0x1);
       
   263 	CContactIdArray *ids=AddRecordsLC(aNumRecords, aNumFields, 0);
       
   264 //
       
   265 	CVCardTestStore* store=CntTest->ExportContactsLC(ids,CContactDatabase::ETTFormat);
       
   266 	CntTest->CloseDatabase();
       
   267 	CntTest->CreateDatabaseL();
       
   268 	CntTest->Db()->OverrideMachineUniqueId(0x2);
       
   269 	StartTheClock();
       
   270 	CntTest->ImportContacts1by1L(store,CContactDatabase::ETTFormat|CContactDatabase::EImportSingleContact);
       
   271 	StopTheClock();
       
   272 //
       
   273 	test(CntTest->Db()->CountL()==aNumRecords);
       
   274 	CntTest->Db()->CompactL();
       
   275 //
       
   276 	StartTheClock();
       
   277 	CntTest->ImportContacts1by1L(store,CContactDatabase::ETTFormat|CContactDatabase::EImportSingleContact);
       
   278 	StopTheClock();
       
   279 //
       
   280 	CleanupStack::PopAndDestroy();	// store
       
   281 	test(CntTest->Db()->CountL()==aNumRecords);
       
   282 //
       
   283 	CleanupStack::PopAndDestroy();	// ids
       
   284 	}
       
   285 
       
   286 /*
       
   287 LOCAL_C void DeleteFiles()
       
   288 	{
       
   289 	for(TInt loop=0;loop<200;loop++)
       
   290 		{
       
   291 		TFileName fileName;
       
   292 		fileName.Format(_L("VCard%04d"),loop);
       
   293 		TInt err=CntTest->Fs().Delete(fileName);
       
   294 		test.Printf(_L("Del %04d err=%d\n"),loop,err);
       
   295 		User::After(100000);
       
   296 		}
       
   297 	}*/
       
   298 
       
   299 void CreateDeleteGroupsL(const CContactIdArray &aIds)
       
   300 	{
       
   301 	StartTheClock();
       
   302 	for(TInt loop=0;loop<20;loop++)
       
   303 		{
       
   304 // Create groups
       
   305 		CContactItem* group1=CntTest->Db()->CreateContactGroupLC();
       
   306 		TContactItemId gr1id=group1->Id();
       
   307 		CContactItem* group2=CntTest->Db()->CreateContactGroupLC();
       
   308 		TContactItemId gr2id=group2->Id();
       
   309 		CContactItem* group3=CntTest->Db()->CreateContactGroupLC();
       
   310 		TContactItemId gr3id=group3->Id();
       
   311 		CleanupStack::PopAndDestroy(3); // group1,2,3
       
   312 // add contacts to groups
       
   313 		for(TInt loop1=0;loop1<aIds.Count();loop1++)
       
   314 			{
       
   315 			if ((loop%4)==0)
       
   316 				CntTest->Db()->AddContactToGroupL(aIds[loop1],gr1id);
       
   317 			if ((loop%8)==0)
       
   318 				CntTest->Db()->AddContactToGroupL(aIds[loop1],gr2id);
       
   319 			if ((loop%16)==0)
       
   320 				CntTest->Db()->AddContactToGroupL(aIds[loop1],gr3id);
       
   321 			}
       
   322 // delete groups
       
   323 		CntTest->Db()->DeleteContactL(gr1id);
       
   324 		CntTest->Db()->DeleteContactL(gr2id);
       
   325 		CntTest->Db()->DeleteContactL(gr3id);
       
   326 		}
       
   327 	StopTheClock();
       
   328 	}
       
   329 
       
   330 void ReadContactsWithGroupsL(const CContactIdArray &aIds)
       
   331 	{
       
   332 /*	CContactItem* group1=CntTest->Db()->CreateContactGroupLC();
       
   333 	TContactItemId gr1id=group1->Id();
       
   334 	CContactItem* group2=CntTest->Db()->CreateContactGroupLC();
       
   335 	TContactItemId gr2id=group2->Id();
       
   336 	CleanupStack::PopAndDestroy(2); // group1,2
       
   337 	for(TInt loop1=0;loop1<aIds.Count();loop1++)
       
   338 		{
       
   339 		if ((loop1%2)==0)
       
   340 			CntTest->Db()->AddContactToGroupL(aIds[loop1],gr1id);
       
   341 		else
       
   342 			CntTest->Db()->AddContactToGroupL(aIds[loop1],gr2id);
       
   343 		}
       
   344 */
       
   345 	TContactItemId grid=0;
       
   346 	for(TInt loop1=0;loop1<aIds.Count();loop1++)
       
   347 		{
       
   348 		if ((loop1%2)==0)
       
   349 			{
       
   350 			CContactItem* group=CntTest->Db()->CreateContactGroupLC();
       
   351 			grid=group->Id();
       
   352 			CleanupStack::PopAndDestroy(); // group
       
   353 			CntTest->Db()->AddContactToGroupL(aIds[loop1],grid);
       
   354 			}
       
   355 		else
       
   356 			CntTest->Db()->AddContactToGroupL(aIds[loop1],grid);
       
   357 		}
       
   358 //
       
   359 	StartTheClock();
       
   360 	for(TInt loop=0;loop<aIds.Count();loop++)
       
   361 		delete CntTest->Db()->ReadContactL(aIds[loop]);
       
   362 	StopTheClock();
       
   363 	}
       
   364 
       
   365 void GroupLoadL(const CContactIdArray &aIds)
       
   366 	{
       
   367 	CContactItem* group1=CntTest->Db()->CreateContactGroupLC();
       
   368 	TContactItemId gr1id=group1->Id();
       
   369 	CContactItem* group2=CntTest->Db()->CreateContactGroupLC();
       
   370 	TContactItemId gr2id=group2->Id();
       
   371 	CContactItem* group3=CntTest->Db()->CreateContactGroupLC();
       
   372 	TContactItemId gr3id=group3->Id();
       
   373 	CleanupStack::PopAndDestroy(3); // group1,2,3
       
   374 	for(TInt loop=0;loop<aIds.Count();loop++)
       
   375 		{
       
   376 		if ((loop%2)==0)
       
   377 			CntTest->Db()->AddContactToGroupL(aIds[loop],gr1id);
       
   378 		else
       
   379 			CntTest->Db()->AddContactToGroupL(aIds[loop],gr2id);
       
   380 		if ((loop%100)==0)
       
   381 			CntTest->Db()->AddContactToGroupL(aIds[loop],gr3id);
       
   382 		}
       
   383 	StartTheClock();
       
   384 	for(TInt times=0;times<200;times++)
       
   385 		delete CntTest->Db()->ReadContactL(gr1id);
       
   386 	StopTheClock();
       
   387 	}
       
   388 
       
   389 void ReadTextDefL(const CContactIdArray &aIds)
       
   390 	{
       
   391 	CContactTextDef* textDef=CContactTextDef::NewLC();
       
   392 	textDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName,_L(",")));
       
   393 	textDef->AppendL(TContactTextDefItem(KUidContactFieldAdditionalName));
       
   394 	TBuf<256> result;
       
   395 	StartTheClock();
       
   396 	for(TInt times=0;times<10;times++)
       
   397 		for(TInt loop=0;loop<aIds.Count();loop++)
       
   398 			CntTest->Db()->ReadContactTextDefL(aIds[loop],result,textDef);
       
   399 	StopTheClock();
       
   400 	CleanupStack::PopAndDestroy(); // textDef
       
   401 	}
       
   402 
       
   403 void ReadContactsL(const CContactIdArray &aIds)
       
   404 	{
       
   405 	StartTheClock();
       
   406 	for(TInt loop=0;loop<aIds.Count();loop++)
       
   407 		delete CntTest->Db()->ReadContactL(aIds[loop]);
       
   408 	StopTheClock();
       
   409 	}
       
   410 
       
   411 void UpdateContactsL(const CContactIdArray &aIds)
       
   412 	{
       
   413 	StartTheClock();
       
   414 	for(TInt loop=0;loop<aIds.Count();loop++)
       
   415 		{
       
   416 		CContactItem *item=CntTest->Db()->OpenContactLX(aIds[loop]);
       
   417 		CleanupStack::PushL(item);
       
   418 		CntTest->Db()->CommitContactL(*item);
       
   419 		CleanupStack::PopAndDestroy(2);	// item,item->close
       
   420 		}
       
   421 	StopTheClock();
       
   422 	}
       
   423 
       
   424 void AddContactsL(TInt aNumRecords, TInt aNumFields)
       
   425 	{
       
   426 	if (aNumFields>8)
       
   427 		{
       
   428 		test.Printf(_L("Error max fields=8"));
       
   429 		test.Getch();
       
   430 		return;
       
   431 		}
       
   432 	CContactItem* item=CContactCard::NewLC();
       
   433 	for(TInt fieldNum=0;fieldNum<aNumFields;fieldNum++)
       
   434 		AddFieldL(*item,0,fieldNum);
       
   435 	StartTheClock();
       
   436 	for(TInt loop=0;loop<aNumRecords;loop++)
       
   437 		CntTest->Db()->AddNewContactL(*item);
       
   438 	StopTheClock();
       
   439 	CleanupStack::PopAndDestroy();	// item
       
   440 	}
       
   441 
       
   442 void FindL(TInt , TInt )
       
   443 	{
       
   444 	StartTheClock();
       
   445 	for(TInt loop=0;loop<200;loop++)
       
   446 		{
       
   447 		TBuf<32> find;
       
   448 		find.Format(_L("rd number=%d"),loop%10);
       
   449 		CContactIdArray* ids=CntTest->Db()->FindLC(find,NULL);
       
   450 		ids->Count();
       
   451 		CleanupStack::PopAndDestroy(); // ids
       
   452 		}
       
   453 	StopTheClock();
       
   454 	}
       
   455 
       
   456 LOCAL_C TInt findWordSplitterL(TAny *aParams)
       
   457 	{
       
   458 	SFindInTextDefWordParser *parser=(SFindInTextDefWordParser *)aParams;
       
   459 	parser->iWordArray->AppendL(*parser->iSearchString);
       
   460 	return(KErrNone);
       
   461 	}
       
   462 
       
   463 void FindInTextDefL(TInt , TInt )
       
   464 	{
       
   465 	TCallBack callBack(findWordSplitterL);
       
   466 	CContactTextDef* textDef=CContactTextDef::NewLC();
       
   467 	textDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName));
       
   468 	CDesCArray *desCA=new(ELeave) CDesCArrayFlat(5);
       
   469 	CleanupStack::PushL(desCA);
       
   470 	StartTheClock();
       
   471 	for(TInt loop=0;loop<200;loop++)
       
   472 		{
       
   473 		TBuf<32> find;
       
   474 		find.Format(_L("Record number=%d"),loop%10);
       
   475 		desCA->AppendL(find);
       
   476 		CContactIdArray* ids=CntTest->Db()->FindInTextDefLC(*desCA,textDef,callBack);
       
   477 		ids->Count();
       
   478 		desCA->Delete(0);
       
   479 		CleanupStack::PopAndDestroy(); // ids
       
   480 		}
       
   481 	StopTheClock();
       
   482 	CleanupStack::PopAndDestroy(2); // textDef,desCA
       
   483 	}
       
   484 
       
   485 TKeyCode RunTimeTestL(TInt aTestNum, TInt aParam1, TInt aParam2, TBool aAddStandardFields, TInt aBlobSize)
       
   486 	{
       
   487 	CContactIdArray *ids=NULL;
       
   488 	test.Printf(_L("Initialising...%d,%d Blob=%d\n"),aParam1,aParam2,aBlobSize);
       
   489 	CntTest->CreateDatabaseL();
       
   490 	if (aAddStandardFields)
       
   491 		ids=AddRecordsLC(aParam1,aParam2,aBlobSize);
       
   492 	switch(aTestNum)
       
   493 		{
       
   494 		case KTimeTestExportImportDifferentMachineIds:
       
   495 			ExportImportDifferentMachineIds(aParam1, aParam2);
       
   496 			break;
       
   497 		case KTimeTestVCardExport:
       
   498 			VCardExportL(*ids);
       
   499 			break;
       
   500 		case KTimeTestVCardImport:
       
   501 			VCardImportL(*ids);
       
   502 			break;
       
   503 		case KTimeTestVCardExportToFile1by1:
       
   504 			VCardExportToFile1by1L(*ids);
       
   505 			break;
       
   506 		case KTimeTestVCardImportFromFile1by1:
       
   507 			VCardImportFromFile1by1L(*ids);
       
   508 			break;
       
   509 		case KTimeTestReadContacts:
       
   510 			ReadContactsL(*ids);
       
   511 			break;
       
   512 		case KTimeTestReadContactsWithGroups:
       
   513 			ReadContactsWithGroupsL(*ids);
       
   514 			break;
       
   515 		case KTimeTestCreateDeleteGroups:
       
   516 			CreateDeleteGroupsL(*ids);
       
   517 			break;
       
   518 		case KTimeTestTextDef:
       
   519 			ReadTextDefL(*ids);
       
   520 			break;
       
   521 		case KTimeTestGroupLoad:
       
   522 			GroupLoadL(*ids);
       
   523 			break;
       
   524 		case KTimeTestUpdateContacts:
       
   525 			UpdateContactsL(*ids);
       
   526 			break;
       
   527 		case KTimeTestAddContacts:
       
   528 			AddContactsL(aParam1,aParam2);
       
   529 			break;
       
   530 		case KTimeTestFind:
       
   531 			FindL(aParam1,aParam2);
       
   532 			break;
       
   533 		case KTimeTestFindInTextDef:
       
   534 			FindInTextDefL(aParam1,aParam2);
       
   535 			break;
       
   536 		}
       
   537 	if (aAddStandardFields)
       
   538 		CleanupStack::PopAndDestroy();	// ids
       
   539 	CntTest->CloseDatabase();
       
   540 	CntTest->DeleteDatabaseL();
       
   541 	return(test.Getch());
       
   542 	}
       
   543 
       
   544 //
       
   545 
       
   546 TInt GetNum()
       
   547 	{
       
   548 	TInt num=0;
       
   549 	TKeyCode key;
       
   550 	TBuf<8> buf;
       
   551 	FOREVER
       
   552 		{
       
   553 		key=test.Getch();
       
   554 		if (key==EKeyEnter)
       
   555 			break;
       
   556 		if (buf.Length()<buf.MaxLength())
       
   557 			buf.Append(key);
       
   558 		TBuf<1> akey;
       
   559 		akey.Append(key);
       
   560 		test.Printf(akey);
       
   561 		}
       
   562 	for(TInt loop=0;loop<buf.Length();loop++)
       
   563 		{
       
   564 		TText chr=buf[loop];
       
   565 		if (TChar(chr).IsDigit())
       
   566 			{
       
   567 			num*=10;
       
   568 			num+=chr-'0';
       
   569 			}
       
   570 		else
       
   571 			{
       
   572 			num=0;
       
   573 			break;
       
   574 			}
       
   575 		}
       
   576 	return(num);
       
   577 	}
       
   578 
       
   579 void SetParams(TInt &aParam1,TInt &aParam2)
       
   580 	{
       
   581 	test.Printf(_L("Param1="));
       
   582 	aParam1=GetNum();
       
   583 	test.Printf(_L("\nParam2="));
       
   584 	aParam2=GetNum();
       
   585 	test.Printf(_L("\nParam1=%d, Param2=%d\n"),aParam1,aParam2);
       
   586 	}
       
   587 
       
   588 void SetBlobSize(TInt &aBlobSize)
       
   589 	{
       
   590 	test.Printf(_L("\nBlob Size="));
       
   591 	aBlobSize=GetNum();
       
   592 	test.Printf(_L("\nBlobSize=%d\n"),aBlobSize);
       
   593 	}
       
   594 
       
   595 void ListDeletedContactsL()
       
   596     {
       
   597 	CContactDatabase *db=CContactDatabase::OpenL();
       
   598 	CleanupStack::PushL(db);
       
   599 //
       
   600 	CContactIdArray *deletedIds=db->DeletedContactsLC();
       
   601 	for(TInt loop=0;loop<deletedIds->Count();loop++)
       
   602 		{
       
   603 		CContactItem *item=db->ReadContactLC((*deletedIds)[loop]);
       
   604 		test(item->IsDeleted());
       
   605 		test.Printf(_L("Item[%d]),count=%d\n"),(*deletedIds)[loop],item->AccessCount());
       
   606 		CleanupStack::PopAndDestroy();	// item
       
   607 		}
       
   608 	CleanupStack::PopAndDestroy();	// deletedIds
       
   609 //
       
   610 	CleanupStack::PopAndDestroy();	// db
       
   611 	test.Printf(_L("\n\nPress Any Key to continue....\n"));
       
   612 	test.Getch();
       
   613 	}
       
   614 
       
   615 /**
       
   616 
       
   617 @SYMTestCaseID     PIM-T-TIME-0001
       
   618 
       
   619 */
       
   620 
       
   621 void DoTestsL()
       
   622     {
       
   623 	CntTest->SelectDriveL();
       
   624 	TInt param1=100;
       
   625 	TInt param2=4;
       
   626 	TInt blobSize=0;
       
   627 	test.Start(_L("@SYMTESTCaseID:PIM-T-TIME-0001 Time tests"));
       
   628 
       
   629 	TInt key=-1;
       
   630 	FOREVER
       
   631 		{
       
   632 		if (key==-1)
       
   633 			{
       
   634 			test.Printf(_L("\n\nSelect test:\n"));
       
   635 			test.Printf(_L("0: VCard non-matching ID import export\n"));
       
   636 			test.Printf(_L("1: VCard export (P1=Records, P2=fields)\n"));
       
   637 			test.Printf(_L("2: VCard import (P1=Records, P2=fields)\n"));
       
   638 			test.Printf(_L("3: VCard export file 1x1 (P1=Records, P2=fields)\n"));
       
   639 			test.Printf(_L("4: VCard import file 1x1 (P1=Records, P2=fields)\n"));
       
   640 			test.Printf(_L("5: Read Contacts (P1=Records, P2=fields)\n"));
       
   641 			test.Printf(_L("6: Update Contacts (P1=Records, P2=fields)\n"));
       
   642 			test.Printf(_L("7: Add Contacts (P1=Records, P2=fields)\n"));
       
   643 			test.Printf(_L("8: Find (P1=Records, P2=fields)\n"));
       
   644 			test.Printf(_L("9: Find in text def (P1=Records, P2=fields)\n"));
       
   645 			test.Printf(_L("a: Read text def (P1=Records, P2=fields)\n"));
       
   646 			test.Printf(_L("g: Load group (P1=Records, P2=fields)\n"));
       
   647 			test.Printf(_L("h: Read contacts with groups (P1=Records, P2=fields)\n"));
       
   648 			test.Printf(_L("D: List deleted contacts"));
       
   649 			test.Printf(_L("P: Set params (%d,%d)\n"),param1,param2);
       
   650 			test.Printf(_L("R: Show pRofile results\n"));
       
   651 			test.Printf(_L("E: Exit\n"));
       
   652 			key=test.Getch();
       
   653 			}
       
   654 //		TAutoSwitchOffBehavior switchOff;
       
   655 //		UserHal::AutoSwitchOffBehavior(switchOff);
       
   656 //		UserHal::SetAutoSwitchOffBehavior(ESwitchOffDisabled);
       
   657 		test.Console()->ClearScreen();
       
   658 		if (key=='e' || key=='E')
       
   659 			break;
       
   660 		TInt switchKey=key;
       
   661 		key=-1;
       
   662 		switch(switchKey)
       
   663 			{
       
   664 			case '0':
       
   665 				key=RunTimeTestL(KTimeTestExportImportDifferentMachineIds,param1,param2,EFalse,blobSize);
       
   666 				break;
       
   667 			case '1':
       
   668 				key=RunTimeTestL(KTimeTestVCardExport,param1,param2,ETrue,blobSize);
       
   669 				break;
       
   670 			case '2':
       
   671 				key=RunTimeTestL(KTimeTestVCardImport,param1,param2,ETrue,blobSize);
       
   672 				break;
       
   673 			case '3':
       
   674 				key=RunTimeTestL(KTimeTestVCardExportToFile1by1,param1,param2,ETrue,blobSize);
       
   675 				break;
       
   676 			case '4':
       
   677 				key=RunTimeTestL(KTimeTestVCardImportFromFile1by1,param1,param2,ETrue,blobSize);
       
   678 				break;
       
   679 			case '5':
       
   680 				key=RunTimeTestL(KTimeTestReadContacts,param1,param2,ETrue,blobSize);
       
   681 				break;
       
   682 			case '6':
       
   683 				key=RunTimeTestL(KTimeTestUpdateContacts,param1,param2,ETrue,blobSize);
       
   684 				break;
       
   685 			case '7':
       
   686 				key=RunTimeTestL(KTimeTestAddContacts,param1,param2,EFalse,blobSize);
       
   687 				break;
       
   688 			case '8':
       
   689 				key=RunTimeTestL(KTimeTestFind,param1,param2,ETrue,blobSize);
       
   690 				break;
       
   691 			case '9':
       
   692 				key=RunTimeTestL(KTimeTestFindInTextDef,param1,param2,ETrue,blobSize);
       
   693 				break;
       
   694 			case 'a':
       
   695 			case 'A':
       
   696 				key=RunTimeTestL(KTimeTestTextDef,param1,param2,ETrue,blobSize);
       
   697 				break;
       
   698 			case 'g':
       
   699 			case 'G':
       
   700 				key=RunTimeTestL(KTimeTestGroupLoad,param1,param2,ETrue,blobSize);
       
   701 				break;
       
   702 			case 'H':
       
   703 			case 'h':
       
   704 				key=RunTimeTestL(KTimeTestReadContactsWithGroups,param1,param2,ETrue,blobSize);
       
   705 				break;
       
   706 			case 'i':
       
   707 				key=RunTimeTestL(KTimeTestCreateDeleteGroups,param1,param2,ETrue,blobSize);
       
   708 				break;
       
   709 //			case 'd':
       
   710 //				DeleteFiles();
       
   711 //				break;
       
   712 			case 'p':
       
   713 			case 'P':
       
   714 				SetParams(param1,param2);
       
   715 				break;
       
   716 			case 'b':
       
   717 			case 'B':
       
   718 				SetBlobSize(blobSize);
       
   719 				break;
       
   720 			case 'r':
       
   721 			case 'R':
       
   722 				DisplayProfiles(1);
       
   723 				DisplayProfiles(2);
       
   724 				ResetProfiles(1);
       
   725 				ResetProfiles(2);
       
   726 				test.Getch();
       
   727 				break;
       
   728 			case 'd':
       
   729 			case 'D':
       
   730 				ListDeletedContactsL();
       
   731 				break;
       
   732 			case 'Q':
       
   733 				test.Printf(_L("Press 'q' to confirm replace contacts file"));
       
   734 				if (test.Getch()=='q')
       
   735 					{
       
   736 					CContactDatabase *db=CContactDatabase::ReplaceL();
       
   737 					delete db;
       
   738 					}
       
   739 				break;
       
   740 			}
       
   741 //		UserHal::SetAutoSwitchOffBehavior(switchOff);
       
   742 		}
       
   743 	TInt ignore;
       
   744 	if (CntTest->Db())
       
   745 		TRAP(ignore,CntTest->DeleteDatabaseL());
       
   746     }
       
   747 
       
   748 GLDEF_C TInt E32Main()
       
   749 	{
       
   750     CntTest=new(ELeave) CCntTest;
       
   751 	CntTest->ConstructL(test,KDatabaseFileName);
       
   752     TRAPD(err,DoTestsL());
       
   753 	if (err!=KErrNone)
       
   754 		{
       
   755 		test.Printf(_L("Exit error=%d"),err);
       
   756 		test.Getch();
       
   757 		}
       
   758 	CntTest->EndTestLib(err);
       
   759 	return KErrNone;
       
   760     }