phonebookengines_old/contactsmodel/tsrc/t_CntFindAll.cpp
changeset 40 b46a585f6909
--- /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 <e32std.h>
+#include <e32test.h>
+#include <e32math.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfldst.h>
+
+#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;
+    }