diff -r fd64c38c277d -r b46a585f6909 phonebookengines_old/contactsmodel/tsrc/t_CntFindAll.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookengines_old/contactsmodel/tsrc/t_CntFindAll.cpp Fri Jun 11 13:29:23 2010 +0300 @@ -0,0 +1,609 @@ +// Copyright (c) 1999-2009 Nokia Corporation and/or its subsidiary(-ies). +// All rights reserved. +// This component and the accompanying materials are made available +// under the terms of "Eclipse Public License v1.0" +// which accompanies this distribution, and is available +// at the URL "http://www.eclipse.org/legal/epl-v10.html". +// +// Initial Contributors: +// Nokia Corporation - initial contribution. +// +// Contributors: +// +// Description: +// + +/** +@SYMTestCaseID PIM-T-CNTFINDALL-INC049017-0001 +@SYMTestPriority High +@SYMDEF INC049017 +@SYMTestCaseDependencies cnttutil +@SYMTestCaseDesc Tests that Identity fields are searched when FindAsyncL and FindLC are used with KUidContactFieldMatchAll. +@SYMTestActions Create a contact database and add four contacts. +Search the database by using identity fields: GivenName, FamilyName and CompanyName. +Search for contacts by providing a name and using KUidContactFieldMatchAll. +Perform the search synchronously and asynchronously. +@SYMTestExpectedResults Contacts are found by given name, family name or company name when using KUidContactFieldMatchAll. +*/ +#include +#include +#include +#include +#include +#include + +#include "t_utils2.h" +#include "t_CntFindAll.h" + + +// Constants. +_LIT(KTestName,"t_CntFindAll"); +_LIT(KDbFileName,"c:contacts.cdb"); +_LIT(KLogFileName,"t_cntFindAll.log"); +_LIT(KDummyData, "Some dummy data"); + +// CFindTest. +CFindTest::CFindTest() + : iTest(KTestName), + iLogFileName(KLogFileName), + iDbFileName(KDbFileName) + { + } + +CFindTest::~CFindTest() + { + delete iTemplate; + delete iDb; + delete iLog; + iTest.Close(); + } + +void CFindTest::ConstructL() + { + iLog=CLog::NewL(iTest,iLogFileName); + } + + +void CFindTest::DoTestsL() + { + iTest.Title(); + iTest.Start(_L("@SYMTestCaseID:PIM-T-CNTFINDALL-INC049017-0001 CREATING THE DATABASE")); + iDb=CContactDatabase::ReplaceL(iDbFileName); + iTemplate=STATIC_CAST(CContactTemplate*,iDb->ReadContactL(iDb->TemplateId())); + + iTest.Next(_L("ADDING COMPACT CONTACTS")); + { + iLog->LogLine(_L("Adding The Contacts.")); + // AddContactCompactL(aFirstName,aLastName,aCompanyName,aWorkPhone, + // aHomePhone,& aWorkMobile,aHomeMobile,aWorkEmail) + AddContactCompactL(_L("TestRt"),_L("Jrtstn"),_L("Example Company"),_L("02079460100"), + _L("02079460900"), _L("07700900329"),_L("07700900300"),_L("tj2@example_company.abc")); + AddContactCompactL(_L("Atsta"),_L("Jrtstn"),_L("Example Company"),_L("02079460100"), + _L("02079460900"), _L("07700900101"),_L("07700900301"),_L("aj2@example_company.abc")); + AddContactCompactL(_L("Btest"),_L("Tester"),_L("High Test Example"),_L("02079460658"), + _L("02079460901"), _L("07700900210"),_L("07700900321"),_L("btester@hightestex.abc")); + AddContactCompactL(_L("Chtsts"),_L("Artestw"),_L("Testx Kick"),_L("1234567890"), + _L("02079460678"), _L("07700900890"),_L("07700900891"),_L("c_Artestw@testxkick.abc")); + } + + //start of tests for defect where identity fields were not searched when using KUidMatchInAllFields + iTest.Next(_L("FINDING CONTACTS BY NAME FROM GIVEN NAME FIELD.")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY NAME FROM GIVEN NAME FIELD.")); + FindNameInFirstNameFieldL(_L("Chtsts"),1); + FindNameInFirstNameFieldL(_L("Tester"),0); + FindNameInFirstNameFieldL(_L("e"),2); + } + + iTest.Next(_L("FINDING CONTACTS BY NAME FROM FAMILY NAME FIELD")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY NAME FROM FAMILY NAME FIELD.")); + FindNameInLastNameFieldL(_L("Tester"),1); + FindNameInLastNameFieldL(_L("Jrtstn"),2); + FindNameInLastNameFieldL(_L("r"),4); + FindNameInLastNameFieldL(_L("Chtsts"),0); + } + + iTest.Next(_L("FINDING CONTACTS BY NAME FROM ALL FIELDS")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY NAME FROM ALL FIELDS")); + FindInAllFieldsL(_L("Btest"),1); + FindInAllFieldsL(_L("Jrtstn"),2); + FindInAllFieldsL(_L("r"),4); + FindInAllFieldsL(_L("xxxxxxxxx"),0); + } + + iTest.Next(_L("FINDING CONTACTS BY COMPANY FROM COMPANY NAME FIELD")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS COMPANY FROM COMPANY NAME FIELD")); + FindInCompanyFieldL(_L("Btest"),0); + FindInCompanyFieldL(_L("High Test Example"),1); + FindInCompanyFieldL(_L("Example Company"),2); + FindInCompanyFieldL(_L("c"),3); + } + + iTest.Next(_L("FINDING CONTACTS BY COMPANY FROM ALL FIELDS")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY COMPANY FROM ALL FIELDS")); + FindInAllFieldsL(_L("Kick"),1); + FindInAllFieldsL(_L("High Test Example"),1); + FindInAllFieldsL(_L("Example Company"),2); + FindInAllFieldsL(_L("c"),4); + } + //end of tests for defect where identity fields were not searched when using KUidMatchInAllFields + + //start of Async tests for defect where identity fields were not searched when using KUidMatchInAllFields + iTest.Next(_L("FINDING CONTACTS BY NAME FROM GIVEN NAME FIELD ASYNCHRONOUSLY")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY NAME FROM GIVEN NAME FIELD ASYNCHRONOUSLY.")); + FindNameInFirstNameFieldL(_L("Chtsts"),1,ETrue); + FindNameInFirstNameFieldL(_L("Tester"),0,ETrue); + FindNameInFirstNameFieldL(_L("e"),2,ETrue); + } + + iTest.Next(_L("FINDING CONTACTS BY NAME FROM FAMILY NAME FIELD ASYNCHRONOUSLY")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY NAME FROM FAMILY NAME FIELD ASYNCHRONOUSLY.")); + FindNameInLastNameFieldL(_L("Tester"),1,ETrue); + FindNameInLastNameFieldL(_L("Jrtstn"),2,ETrue); + FindNameInLastNameFieldL(_L("r"),4,ETrue); + FindNameInLastNameFieldL(_L("Chtsts"),0,ETrue); + } + + iTest.Next(_L("FINDING CONTACTS BY NAME FROM ALL FIELDS ASYNCHRONOUSLY")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY NAME FROM ALL FIELDS ASYNCHRONOUSLY")); + FindInAllFieldsL(_L("Btest"),1,ETrue); + FindInAllFieldsL(_L("Jrtstn"),2,ETrue); + FindInAllFieldsL(_L("r"),4,ETrue); + FindInAllFieldsL(_L("xxxxxxxxx"),0,ETrue); + } + + iTest.Next(_L("FINDING CONTACTS BY COMPANY FROM COMPANY NAME FIELD")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS COMPANY FROM COMPANY NAME FIELD ASYNCHRONOUSLY")); + FindInCompanyFieldL(_L("Btest"),0,ETrue); + FindInCompanyFieldL(_L("High Test Example"),1,ETrue); + FindInCompanyFieldL(_L("Example Company"),2,ETrue); + FindInCompanyFieldL(_L("s"),2,ETrue); + } + + iTest.Next(_L("FINDING CONTACTS BY COMPANY FROM ALL FIELDS ASYNCHRONOUSLY")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY COMPANY FROM ALL FIELDS ASYNCHRONOUSLY")); + FindInAllFieldsL(_L("Kick"),1,ETrue); + FindInAllFieldsL(_L("High Test Example"),1,ETrue); + FindInAllFieldsL(_L("Example Company"),2,ETrue); + FindInAllFieldsL(_L("s"),4,ETrue); + } + iTest.Next(_L("FINDING CONTACTS BY SIP ADDRESS IN ALL FIELDS ASYNCHRONOUSLY")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY SIP ADDRESS IN ALL FIELDS")); + FindInSipAddressL(_L("123@a.com"),1, ETrue); + } + //end of Async tests for defect where identity fields were not searched when using KUidMatchInAllFields + + //the following tests were not part of the defect but included as regression testing + iTest.Next(_L("FINDING CONTACTS BY WORK PHONE NUMBER FROM PHONE FIELD")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY WORK PHONE NUMBER FROM PHONE FIELD")); + FindPhoneNumberL(_L("02079460100"),2); + FindPhoneNumberL(_L("02079460658"),1); + FindPhoneNumberL(_L("999999999999"),0); + } + iTest.Next(_L("FINDING CONTACTS BY HOME PHONE NUMBER FROM PHONE FIELD")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY HOME PHONE NUMBER FROM PHONE FIELD")); + FindPhoneNumberL(_L("02079460900"),2); + FindPhoneNumberL(_L("02079460678"),1); + FindPhoneNumberL(_L("999999999999"),0); + } + iTest.Next(_L("FINDING CONTACTS BY WORK MOBILE NUMBER FROM PHONE FIELD")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY WORK MOBILE NUMBER FROM PHONE FIELD")); + FindPhoneNumberL(_L("07700900329"),1); + FindPhoneNumberL(_L("07700900101"),1); + FindPhoneNumberL(_L("07700900210"),1); + FindPhoneNumberL(_L("999999999999"),0); + } + iTest.Next(_L("FINDING CONTACTS BY HOME MOBILE NUMBER FROM PHONE FIELD")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY HOME MOBILE NUMBER FROM PHONE FIELD")); + FindPhoneNumberL(_L("07700900891"),1); + FindPhoneNumberL(_L("07700900301"),1); + FindPhoneNumberL(_L("07700900300"),1); + FindPhoneNumberL(_L("999999999999"),0); + } + iTest.Next(_L("FINDING CONTACTS BY PHONE NUMBER FROM ALL FIELDS")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY PHONE NUMBER FROM ALL FIELDS")); + FindInAllFieldsL(_L("02079460100"),2); + FindInAllFieldsL(_L("02079460900"),2); + FindInAllFieldsL(_L("02079460658"),1); + FindInAllFieldsL(_L("02079460678"),1); + FindInAllFieldsL(_L("999999999999"),0); + } + iTest.Next(_L("FINDING CONTACTS BY EMAIL FROM EMAIL FIELD")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY EMAIL FROM EMAIL FIELD")); + FindEmailAddressL(_L("@@"),0); + FindEmailAddressL(_L("aj2@example_company.abc"),1); + FindEmailAddressL(_L("example_company.abc"),2); + FindEmailAddressL(_L("example"),2); + FindEmailAddressL(_L("@"),4); + } + iTest.Next(_L("FINDING CONTACTS BY EMAIL FROM ALL FIELDS")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY EMAIL FROM ALL FIELDS")); + FindInAllFieldsL(_L("@@"),0); + FindInAllFieldsL(_L("aj2@example_company.abc"),1); + FindInAllFieldsL(_L("example_company.abc"),2); + FindInAllFieldsL(_L("example"),3); + FindInAllFieldsL(_L("@"),4); + } + iTest.Next(_L("FINDING CONTACTS BY NOTES FROM NOTES FIELDS")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY NOTES FROM NOTES FIELDS")); + FindNotesL(_L("dummy"),4); + FindNotesL(_L("dummy"),4, ETrue); + FindNotesL(_L("nonexistant"),0); + FindNotesL(_L("nonexistant"),0, ETrue); + } + iTest.Next(_L("FINDING CONTACTS BY SIP ADDRESS IN ALL FIELDS")); + { + iLog->LogLine(_L("\r\nFINDING CONTACTS BY SIP ADDRESS IN ALL FIELDS")); + FindInSipAddressL(_L("123@a.com"),1); + } + iTest.Next(_L("FINDING NOTES FROM ALL FIELDS")); + { + iLog->LogLine(_L("\r\nFINDING NOTES FROM ALL FIELDS")); + FindInAllFieldsL(_L("dummy"),4); + FindInAllFieldsL(_L("dummy"),4, ETrue); + FindInAllFieldsL(_L("nonexistant"),0); + FindInAllFieldsL(_L("nonexistant"),0, ETrue); + } + iTest.Next(_L("FINDING All CONTACTS WITH NULL SEARCH STRING")); + { + iLog->LogLine(_L("\r\nFINDING All CONTACTS WITH NULL SEARCH STRING")); + + //Create a new database and check that there are no contacts on it. + delete iDb; + iDb=CContactDatabase::ReplaceL(iDbFileName); + iTest(iDb->CountL() == 0); + + //Add a fixed number of contacts to the database and check if they have been added or not. + CRandomContactGenerator* rcg = CRandomContactGenerator::NewL(); + CleanupStack::PushL(rcg); + rcg->SetDbL(*iDb); + const TInt KContactsCount = 50; + for(TInt count = 0;count < KContactsCount;++count) + { + rcg->AddTypicalRandomContactL(); + } + iTest(iDb->CountL() == KContactsCount); + + //Actual Test: This should return all 50 contacts. No less, no more! + FindInAllFieldsL(_L(""), KContactsCount, ETrue); + CleanupStack::PopAndDestroy(); + } + iTest.End(); + } + +void CFindTest::AddContactL(const TDesC& aFirstName,const TDesC& aLastName,const TDesC& aCompanyName, + const TDesC& aWorkPhone,const TDesC& aHomePhone,const TDesC& aWorkMobile, + const TDesC& aHomeMobile,const TDesC& aWorkEmail) + { + iLog->LogLine(_L("\r\nAdding Contact ")); + iLog->LogLine(_L("Name: %S %S"),&aFirstName,&aLastName); + iLog->LogLine(_L("Company: %S "),&aCompanyName); + iLog->LogLine(_L("WorkPhone: %S "),&aWorkPhone); + iLog->LogLine(_L("WorkMob: %S"),&aWorkMobile); + iLog->LogLine(_L("HomePhone: %S"),&aHomePhone); + iLog->LogLine(_L("HomeMob: %S"),&aHomeMobile); + iLog->LogLine(_L("Email: %S "),&aWorkEmail); + + CTestContact* contact=CTestContact::NewLC(*iTemplate); + + contact->SetFirstNameL(aFirstName); + contact->SetLastNameL(aLastName); + contact->SetCompanyNameL(aCompanyName); + contact->SetWorkPhoneL(aWorkPhone); + contact->SetHomePhoneL(aHomePhone); + contact->SetWorkMobileL(aWorkMobile); + contact->SetHomeMobileL(aHomeMobile); + contact->SetWorkEmailAddressL(aWorkEmail); + contact->SetNotesL(KDummyData); + iDb->AddNewContactL(contact->ContactItem()); + CleanupStack::PopAndDestroy(1); //contact. + + } + +void CFindTest::AddContactCompactL(const TDesC& aFirstName,const TDesC& aLastName,const TDesC& aCompanyName, + const TDesC& aWorkPhone,const TDesC& aHomePhone,const TDesC& aWorkMobile, + const TDesC& aHomeMobile,const TDesC& aWorkEmail) + { + AddContactL(aFirstName,aLastName,aCompanyName,aWorkPhone,aHomePhone,aWorkMobile,aHomeMobile,aWorkEmail); + iDb->CompactL(); + } + +void CFindTest::FindNameInFirstNameFieldL(const TDesC& aTextToFind, const TInt aNumExpectedFinds,TBool aAsync) + { + iLog->LogLine(_L("Find %S in Given name field"),&aTextToFind); + CContactItemFieldDef* def=new(ELeave) CContactItemFieldDef(); + CleanupStack::PushL(def); + def->AppendL(KUidContactFieldGivenName); + if(!aAsync) + { + DoFindL(aTextToFind,*def,aNumExpectedFinds); + } + else + { + DoFindAsyncL(aTextToFind,*def,aNumExpectedFinds); + } + CleanupStack::PopAndDestroy(); // def. + } + +void CFindTest::FindNameInLastNameFieldL(const TDesC& aTextToFind, const TInt aNumExpectedFinds,TBool aAsync) + { + iLog->LogLine(_L("Find %S in Family name field"),&aTextToFind); + CContactItemFieldDef* def=new(ELeave) CContactItemFieldDef(); + CleanupStack::PushL(def); + def->AppendL(KUidContactFieldFamilyName); + if(!aAsync) + { + DoFindL(aTextToFind,*def,aNumExpectedFinds); + } + else + { + DoFindAsyncL(aTextToFind,*def,aNumExpectedFinds); + } + CleanupStack::PopAndDestroy(); // def. + } + +void CFindTest::FindInSipAddressL(const TDesC& aTextToFind, const TInt aNumExpectedFinds,TBool aAsync) + { + CContactCard *contactItem = CContactCard::NewL(iTemplate); CleanupStack::PushL(contactItem); + + CContactItemField* itemFieldPtr = CContactItemField::NewLC( KStorageTypeText, KUidContactFieldSIPID ); + CContactTextField* textStoragePtr = itemFieldPtr->TextStorage(); + textStoragePtr->SetTextL( aTextToFind ); + contactItem->AddFieldL( *itemFieldPtr ); + CleanupStack::Pop( itemFieldPtr ); + + CContactItemField* itemFieldPtr_1 = CContactItemField::NewLC( KStorageTypeStore, KUidContactFieldPicture ); + CContactStoreField* binaryStoragePtr = itemFieldPtr_1->StoreStorage(); + + binaryStoragePtr->SetThingL(_L8("Jpeg")); + + contactItem->AddFieldL( *itemFieldPtr_1 ); + CleanupStack::Pop( itemFieldPtr_1 ); + + TContactItemId id = iDb->AddNewContactL(*contactItem); + + CContactItemFieldDef* def = new(ELeave) CContactItemFieldDef(); + CleanupStack::PushL(def); + def->AppendL(KUidContactFieldSIPID); + + if(!aAsync) + { + DoFindL(aTextToFind,*def,aNumExpectedFinds); + } + else + { + DoFindAsyncL(aTextToFind,*def,aNumExpectedFinds); + } + + CleanupStack::PopAndDestroy(2); //def, contactItem + + iDb->DeleteContactL(id); + + contactItem = CContactCard::NewL(iTemplate); + CleanupStack::PushL(contactItem); + + itemFieldPtr = CContactItemField::NewLC( KStorageTypeText, KUidContactFieldFamilyName ); + textStoragePtr = itemFieldPtr->TextStorage(); + textStoragePtr->SetTextL( _L("A") ); + contactItem->AddFieldL( *itemFieldPtr ); + CleanupStack::Pop( itemFieldPtr ); + id = iDb->AddNewContactL(*contactItem); + CleanupStack::PopAndDestroy( contactItem ); + + // retrieve the contact add an image to it + CContactItem *contactItem1 = iDb->OpenContactL( id ); + CleanupStack::PushL( contactItem1 ); + itemFieldPtr_1 = CContactItemField::NewLC( KStorageTypeStore, KUidContactFieldVCardMapJPEG ); + binaryStoragePtr = itemFieldPtr_1->StoreStorage(); + binaryStoragePtr->SetThingL(_L8("Jpeg")); + + contactItem1->AddFieldL( *itemFieldPtr_1 ); + CleanupStack::Pop( itemFieldPtr_1 ); + iDb->CommitContactL(*contactItem1); + iDb->CloseContactL( id ); + CleanupStack::PopAndDestroy( contactItem1 ); + + //retrieve the contact and add voip to it + CContactItem *contactItem2 = iDb->OpenContactL( id ); + CleanupStack::PushL( contactItem2 ); + CContactItemField* itemFieldPtr2 = CContactItemField::NewLC( KStorageTypeText, KUidContactFieldSIPID ); + CContactTextField* textStoragePtr2 = itemFieldPtr2->TextStorage(); + textStoragePtr2->SetTextL( aTextToFind ); + contactItem2->AddFieldL( *itemFieldPtr2 ); + CleanupStack::Pop( itemFieldPtr2 ); + iDb->CommitContactL( *contactItem2 ); + iDb->CloseContactL( id ); + CleanupStack::PopAndDestroy( contactItem2 ); + + // find the contact with voip number + def = new(ELeave) CContactItemFieldDef(); + CleanupStack::PushL(def); + def->AppendL(KUidContactFieldSIPID); + if(!aAsync) + { + DoFindL(aTextToFind,*def,aNumExpectedFinds); + } + else + { + DoFindAsyncL(aTextToFind,*def,aNumExpectedFinds); + } + + CleanupStack::PopAndDestroy(1); + + iDb->DeleteContactL(id); + } + +void CFindTest::FindInAllFieldsL(const TDesC& aTextToFind, const TInt aNumExpectedFinds,TBool aAsync) + { + iLog->LogLine(_L("Find %S in All fields"),&aTextToFind); + CContactItemFieldDef* def=new(ELeave) CContactItemFieldDef(); + CleanupStack::PushL(def); + def->AppendL(KUidContactFieldMatchAll); + if(!aAsync) + { + DoFindL(aTextToFind,*def,aNumExpectedFinds); + } + else + { + DoFindAsyncL(aTextToFind,*def,aNumExpectedFinds); + } + CleanupStack::PopAndDestroy(); // def. + } + +void CFindTest::FindInCompanyFieldL(const TDesC& aTextToFind, const TInt aNumExpectedFinds,TBool aAsync) + { + iLog->LogLine(_L("Find %S in Company name field"),&aTextToFind); + CContactItemFieldDef* def=new(ELeave) CContactItemFieldDef(); + CleanupStack::PushL(def); + def->AppendL(KUidContactFieldCompanyName); + if(!aAsync) + { + DoFindL(aTextToFind,*def,aNumExpectedFinds); + } + else + { + DoFindAsyncL(aTextToFind,*def,aNumExpectedFinds); + } + CleanupStack::PopAndDestroy(); // def. + } + +void CFindTest::FindPhoneNumberL(const TDesC& aTextToFind, const TInt aNumExpectedFinds,TBool aAsync) + { + iLog->LogLine(_L("Find %S in Phone fields"),&aTextToFind); + CContactItemFieldDef* def=new(ELeave) CContactItemFieldDef(); + CleanupStack::PushL(def); + def->AppendL(KUidContactFieldPhoneNumber); + if(!aAsync) + { + DoFindL(aTextToFind,*def,aNumExpectedFinds); + } + else + { + DoFindAsyncL(aTextToFind,*def,aNumExpectedFinds); + } + CleanupStack::PopAndDestroy(); // def. + } + +void CFindTest::FindEmailAddressL(const TDesC& aTextToFind, const TInt aNumExpectedFinds,TBool aAsync) + { + iLog->LogLine(_L("Find %S in Email fields"),&aTextToFind); + CContactItemFieldDef* def=new(ELeave) CContactItemFieldDef(); + CleanupStack::PushL(def); + def->AppendL(KUidContactFieldEMail); + if(!aAsync) + { + DoFindL(aTextToFind,*def,aNumExpectedFinds); + } + else + { + DoFindAsyncL(aTextToFind,*def,aNumExpectedFinds); + } + CleanupStack::PopAndDestroy(); // def. + } + +void CFindTest::FindNotesL(const TDesC& aTextToFind, const TInt aNumExpectedFinds,TBool aAsync) + { + iLog->LogLine(_L("Find %S in Email fields"),&aTextToFind); + CContactItemFieldDef* def=new(ELeave) CContactItemFieldDef(); + CleanupStack::PushL(def); + def->AppendL(KUidContactFieldNote); + + if(!aAsync) + { + DoFindL(aTextToFind,*def,aNumExpectedFinds); + } + else + { + DoFindAsyncL(aTextToFind,*def,aNumExpectedFinds); + } + CleanupStack::PopAndDestroy(); // def. + } + +void CFindTest::DoFindL(const TDesC& aTextToFind,const CContactItemFieldDef& aFieldDef, const TInt aNumExpectedFinds) + { + CContactIdArray* matchList=iDb->FindLC(aTextToFind,&aFieldDef); + + const TInt numIds=matchList->Count(); + iLog->LogLine(_L("Matched %d contact(s) of %d expected"),numIds,aNumExpectedFinds); + if(numIds!=aNumExpectedFinds) + { + iLog->LogLine(_L("%S FAILED!"),&KTestName); + } + iTest(numIds==aNumExpectedFinds); + CleanupStack::PopAndDestroy(); // matchList. + } + +void CFindTest::DoFindAsyncL(const TDesC& aTextToFind,const CContactItemFieldDef& aFieldDef, const TInt aNumExpectedFinds) + { + iIdleFinder=iDb->FindAsyncL(aTextToFind,&aFieldDef,this); + CleanupStack::PushL(iIdleFinder); // Handle on cleanup stack because object is very temporary. + CActiveScheduler::Start(); + + CContactIdArray* matchList=iIdleFinder->TakeContactIds(); + CleanupStack::PushL(matchList); + const TInt numIds=matchList->Count(); + iLog->LogLine(_L("Matched %d contact(s) of %d expected"),numIds,aNumExpectedFinds); + if(numIds!=aNumExpectedFinds) + { + iLog->LogLine(_L("%S FAILED!"),&KTestName); + } + iTest(numIds==aNumExpectedFinds); + CleanupStack::PopAndDestroy(2); // matchList. iIdleFinder. + } + +void CFindTest::IdleFindCallback() + { + if (iIdleFinder->IsComplete()) + { + CActiveScheduler::Stop(); + } + } + +// +// Main. +// + +GLDEF_C TInt E32Main() + { + RDebug::Print(_L("t_cntfindall started")); + __UHEAP_MARK; + + CActiveScheduler* sheduler=new CActiveScheduler; + if (sheduler) + { + CActiveScheduler::Install(sheduler); + CTrapCleanup* cleanup=CTrapCleanup::New(); + if (cleanup) + { + CFindTest* findtest=new CFindTest();//::NewL(); + if (findtest) + { + TRAPD(err, findtest->ConstructL(); findtest->DoTestsL();); + RDebug::Print(_L("t_cntFindAll finish with %d error"),err); + delete findtest; + } + delete cleanup; + } + delete sheduler; + } + __UHEAP_MARKEND; + return KErrNone; + }