|
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 } |