--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/t_filterview.cpp Fri Jun 11 13:29:23 2010 +0300
@@ -0,0 +1,962 @@
+// Copyright (c) 2000-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:
+//
+
+#include <e32std.h>
+#include <e32test.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntfldst.h>
+#include "t_utils2.h"
+#include "t_filterview.h"
+#include "T_UTILS.H"
+
+//
+// Constants.
+//
+
+_LIT(KTestName,"t_filterview");
+_LIT(KLogFileName,"t_filterview.log");
+
+_LIT(KDbFileName,"c:t_filterview.cdb");
+
+_LIT(KRemoteViewName,"RemoteView");
+_LIT(KTextDefSeparator,"");
+
+LOCAL_D RTest test(KTestName);
+
+const TInt KNumSmsContacts = 111;
+const TInt KNumWorkEmailContacts = 121;
+const TInt KNumHomeEmailContacts = 131;
+const TInt KNumLandlineContacts = 141;
+const TInt KNumFaxContacts = 151;
+const TInt KNumRingTone = 161;
+const TInt KNumVoiceDial = 171;
+
+const TInt KNumIMProtocolWV = 53;
+const TInt KNumIMAddress= KNumIMProtocolWV;
+
+const TInt KNumPhonable = KNumSmsContacts + KNumLandlineContacts + KNumFaxContacts;
+const TInt KNumUnfiltered = KNumSmsContacts
+ + KNumWorkEmailContacts
+ + KNumHomeEmailContacts
+ + KNumLandlineContacts
+ + KNumFaxContacts
+ + KNumRingTone
+ + KNumVoiceDial
+ + KNumIMAddress;
+
+
+//
+// CTestConductor.
+//
+
+CTestConductor* CTestConductor::NewL()
+ {
+ CTestConductor* self=new(ELeave) CTestConductor();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ self->RunTestsL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+CTestConductor::~CTestConductor()
+ {
+ delete iLog;
+ delete iDb;
+ delete iRandomGenerator;
+ TRAP_IGNORE(CContactDatabase::DeleteDatabaseL(KDbFileName));
+
+ iFs.Close();
+ CCntTest::ProfileReset(0,1); // ensure the profiling 'TLS' used in EKA2 is freed
+ }
+
+CTestConductor::CTestConductor() {}
+
+void CTestConductor::ConstructL()
+ {
+ User::LeaveIfError(iFs.Connect());
+ iLog=CLog::NewL(test,KLogFileName);
+ iDb=CContactDatabase::ReplaceL(KDbFileName);
+ iRandomGenerator=CRandomContactGenerator::NewL();
+ iRandomGenerator->SetDbL(*iDb);
+ AddContactsL();
+ }
+
+void CTestConductor::AddContactL(TInt aBitwiseFilterType)
+ {
+ test.Printf(_L("Adding Contact"));
+ iRandomGenerator->AddTypicalContactForFilterL(aBitwiseFilterType);
+ iTotalContacts++;
+ }
+
+void CTestConductor::AddContactsThatMatchFilterL(TInt aNumberOfContacts, TInt aFilter)
+ {
+ test.Printf(_L("Adding %d contacts which match filter 0x%X : "), aNumberOfContacts, aFilter);
+ TInt counter = 0;
+ for (counter = 0; counter < aNumberOfContacts; counter++)
+ {
+ if(aFilter & CContactDatabase::EWirelessVillage)
+ {
+ iRandomGenerator->AddTypicalContactForFilterL(aFilter, KUidContactFieldVCardMapWV);
+ }
+ else
+ {
+ iRandomGenerator->AddTypicalContactForFilterL(aFilter);
+ }
+ iTotalContacts++;
+ }
+ test.Printf(_L("Done\n"));
+ }
+
+void CTestConductor::AddContactsL()
+ {
+ iTotalContacts=0;
+ test.Printf(_L("Adding \n"));
+
+ AddContactsThatMatchFilterL(KNumSmsContacts, CContactDatabase::ESmsable);
+ AddContactsThatMatchFilterL(KNumWorkEmailContacts, CContactDatabase::EMailable);
+ AddContactsThatMatchFilterL(KNumHomeEmailContacts, CContactDatabase::EMailable | CContactDatabase::EHome);
+ AddContactsThatMatchFilterL(KNumLandlineContacts, CContactDatabase::ELandLine);
+ AddContactsThatMatchFilterL(KNumFaxContacts, CContactDatabase::EFaxable);
+ AddContactsThatMatchFilterL(KNumRingTone, CContactDatabase::ERingTone);
+ AddContactsThatMatchFilterL(KNumVoiceDial, CContactDatabase::EVoiceDial);
+ AddContactsThatMatchFilterL(KNumIMProtocolWV, /*CContactDatabase::EIMAddress |*/ CContactDatabase::EWirelessVillage);
+ }
+
+void CTestConductor::RunTestsL()
+ {
+ CViewTester* tester=CViewTester::NewL(*iLog,*iDb,this);
+ CleanupStack::PushL(tester);
+ CActiveScheduler::Start();
+ CleanupStack::Pop(tester);
+
+ User::LeaveIfError(iTestError);
+ }
+
+
+void CTestConductor::SetTestError(TInt aTestError)
+ {
+ iTestError = aTestError;
+ }
+
+
+//
+// CViewTester.
+//
+
+CViewTester* CViewTester::NewL(CLog& aLog,CContactDatabase& aDb,CTestConductor* aTestConductor)
+ {
+ CViewTester* self=new(ELeave) CViewTester(aLog,aDb,aTestConductor);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+CViewTester::~CViewTester()
+ {
+ iVoiceDialView->Close(*this);
+ iRingToneView->Close(*this);
+ iLandlineFilterView->Close(*this);
+ iLandlineFilterView2Fields->Close(*this);
+ iSmsFilterView->Close(*this);
+ iEmailFilterView->Close(*this);
+ iFaxFilterView->Close(*this);
+ iPhonableFilterView->Close(*this);
+ iWorkFilterView->Close(*this);
+ iHomeFilterView->Close(*this);
+ iUnfilteredView->Close(*this);
+ iWirelessVillageView->Close(*this);
+ iIMAddressView->Close(*this);
+ iOOMIMAddressView->Close(*this);
+ iNamedRemoteView->Close(*this);
+ iSortOrder_1.Close();
+ iSortOrder_2.Close();
+ delete iTextDef;
+ }
+
+CViewTester::CViewTester(CLog& aLog,CContactDatabase& aDb,CTestConductor* aTestConductor)
+ : CActive(EPriorityStandard),iLog(aLog),iDb(aDb),iCurrentTest(-1),iTestConductor(aTestConductor)
+ {
+ CActiveScheduler::Add(this);
+ }
+
+void CViewTester::ConstructL()
+ {
+ iSortOrder_1.AppendL(KUidContactFieldGivenName);
+ iSortOrder_1.AppendL(KUidContactFieldFamilyName);
+ iSortOrder_1.AppendL(KUidContactFieldCompanyName);
+
+ iTextDef=CContactTextDef::NewL();
+ iTextDef->AppendL(TContactTextDefItem(KUidContactFieldGivenName,KTextDefSeparator));
+ iTextDef->AppendL(TContactTextDefItem(KUidContactFieldFamilyName,KTextDefSeparator));
+ iTextDef->AppendL(TContactTextDefItem(KUidContactFieldCompanyName,KTextDefSeparator));
+
+ iSortOrder_2.AppendL(KUidContactFieldCompanyName);
+ iSortOrder_2.AppendL(KUidContactFieldFamilyName);
+ iSortOrder_2.AppendL(KUidContactFieldGivenName);
+
+ NextTest();
+ }
+
+void CViewTester::PrintTimeTaken(TInt aTime)
+ {
+ iScratchBuf.Format(_L("** Test Took [%ds%dus] **\n"), aTime/1000000, aTime%1000000);
+ iLog.LogLine(iScratchBuf);
+ //TBuf<100> buffer;
+ //buffer.Format(_L(" Test Took [%ds%dus]\n"), aProfile.iTime/1000000, aProfile.iTime%1000000);
+ //iLog.LogLine(buffer);
+ }
+
+
+void CViewTester::PrintTotalTimeTaken()
+ {
+ TInt counter;
+ TInt totalTime = 0;
+
+ for (counter = 0; counter < ENumTests; counter++)
+ {
+ totalTime += iTimeForTestsToComplete[counter];
+ }
+
+ iScratchBuf.Format(_L("** Total amount of time taken [%ds%dus] **"), totalTime/1000000, totalTime%1000000);
+ iLog.LogLine(iScratchBuf);
+
+ }
+
+CContactFilteredView* CViewTester::CreateFilterViewL()
+ {
+ CCntTest::ProfileReset(0,1);
+ CCntTest::ProfileStart(0);
+ return CContactFilteredView::NewL(*this,iDb,*iNamedRemoteView, iFilter);
+ }
+
+void CViewTester::RunL()
+ {
+ switch (iCurrentTest)
+ {
+ case ECreateLocalView:
+ iLog.LogLine(_L("=== Create Name Remote local view"));
+ CCntTest::ProfileReset(0,1);
+ CCntTest::ProfileStart(0);
+ iNamedRemoteView=CContactNamedRemoteView::NewL(*this,KRemoteViewName,iDb,iSortOrder_1,EContactsOnly);
+ break;
+ case EExerciseLocalView:
+ iLog.LogLine(_L("=== Exercise local view"));
+ ExceriseViewL(*iNamedRemoteView);
+ NextTest();
+ break;
+ case ECreateLandlineFilterView:
+ {
+ iLog.LogLine(_L("=== Create Land line Filter View {CContactFilteredView}"));
+ iFilter = CContactDatabase::ELandLine;
+ iLandlineFilterView = CreateFilterViewL();
+ }
+ break;
+ case ETestLandlineFilterView:
+ {
+ iLog.LogLine(_L("==== Exercise ETestLandlineFilterView"));
+ test(iLandlineFilterView->CountL()==KNumLandlineContacts);
+ TestViewIndiciesL(*iLandlineFilterView);
+ NextTest();
+ }
+ break;
+ case ECreateSmsFilterView:
+ {
+ iLog.LogLine(_L("==== Create SMS Filter View"));
+ iFilter=CContactDatabase::ESmsable;
+ iSmsFilterView=CreateFilterViewL();
+ }
+ break;
+ case ETestSmsFilterView:
+ {
+ iLog.LogLine(_L("==== Exercise ETestSmsFilterView"));
+ test(iSmsFilterView->CountL()==KNumSmsContacts);
+ TestViewIndiciesL(*iSmsFilterView);
+ NextTest();
+ }
+ break;
+ case ECreateEmailFilterView:
+ {
+ iLog.LogLine(_L("==== Create Email Filter View"));
+ iFilter=CContactDatabase::EMailable;
+ iEmailFilterView=CreateFilterViewL();
+ }
+ break;
+ case ETestEmailFilterView:
+ {
+ iLog.LogLine(_L("==== Exercise ETestEmailFilterView"));
+ CCntTest::ProfileReset(0,1);
+ CCntTest::ProfileStart(0);
+ test(iEmailFilterView->CountL()==KNumWorkEmailContacts+KNumHomeEmailContacts);
+ TestViewIndiciesL(*iEmailFilterView);
+ NextTest();
+ }
+ break;
+ case ECreateFaxFilterView:
+ {
+ iLog.LogLine(_L("==== Create Fax Filter View"));
+ iFilter=CContactDatabase::EFaxable;
+ iFaxFilterView=CreateFilterViewL();
+ }
+ break;
+ case ETestFaxFilterView:
+ {
+ iLog.LogLine(_L("==== Exercise ETestFaxFilterView"));
+ test(iFaxFilterView->CountL()==KNumFaxContacts);
+ TestViewIndiciesL(*iFaxFilterView);
+ NextTest();
+ }
+ break;
+ case ECreatePhonableFilterView:
+ {
+ iLog.LogLine(_L("==== Create Phonable Filter View"));
+ iFilter=CContactDatabase::EPhonable;
+ iPhonableFilterView=CreateFilterViewL();
+ }
+ break;
+ case ECreateWorkFilterView:
+ {
+ iLog.LogLine(_L("==== Create Work Filter View"));
+ iFilter=CContactDatabase::EWork;
+ iFilter|=CContactDatabase::EMailable;
+ iWorkFilterView=CreateFilterViewL();
+ }
+ break;
+ case ECreateHomeFilterView:
+ {
+ iLog.LogLine(_L("==== Create Home Filter View"));
+ iFilter=CContactDatabase::EHome;
+ iFilter|=CContactDatabase::EMailable;
+ iHomeFilterView=CreateFilterViewL();
+ }
+ break;
+ case ECreateUnfilteredView:
+ {
+ iLog.LogLine(_L("==== Create Unfiltered Filter View"));
+ iFilter=0;
+ iUnfilteredView=CreateFilterViewL();
+ }
+ break;
+
+ case ECreateRingToneView:
+ iLog.LogLine(_L("==== Create Unfiltered Filter View"));
+ iFilter = CContactDatabase::ERingTone;
+ CCntTest::ProfileReset(0,1);
+ CCntTest::ProfileStart(0);
+ iRingToneView = CreateFilterViewL();
+ break;
+
+ case ECreateVoiceDialView:
+ iLog.LogLine(_L("==== Create Unfiltered Filter View"));
+ iFilter = CContactDatabase::EVoiceDial;
+ iVoiceDialView = CreateFilterViewL();
+ break;
+
+ case ECreateWirelessVillageAddressView:
+ {
+ iLog.LogLine(_L("==== Create WirelessVillage address view"));
+ iFilter = CContactDatabase::EWirelessVillage;
+ iWirelessVillageView = CreateFilterViewL();
+ }
+ break;
+
+ case ECreateIMAddressView:
+ {
+ iLog.LogLine(_L("==== Create IM address view"));
+ iFilter = CContactDatabase::EIMAddress;
+ iIMAddressView = CreateFilterViewL();
+ }
+ break;
+
+ case ETestPhonableFilterView:
+ {
+ iLog.LogLine(_L("==== Exercise ETestPhonableFilterView"));
+ test(iPhonableFilterView->CountL()==KNumPhonable);
+ TestViewIndiciesL(*iPhonableFilterView);
+ NextTest();
+ }
+ break;
+ case ETestWorkFilterView:
+ {
+ iLog.LogLine(_L("==== Exercise ETestWorkFilterView"));
+ test(iWorkFilterView->CountL()==KNumWorkEmailContacts);
+ TestViewIndiciesL(*iWorkFilterView);
+ NextTest();
+ }
+ break;
+ case ETestHomeFilterView:
+ {
+ iLog.LogLine(_L("==== Exercise ETestHomeFilterView"));
+ test(iHomeFilterView->CountL()==KNumHomeEmailContacts);
+ TestViewIndiciesL(*iHomeFilterView);
+ NextTest();
+ }
+ break;
+ case ETestUnfilteredView:
+ {
+ iLog.LogLine(_L("==== Exercise EUnfilteredView"));
+ test(iUnfilteredView->CountL()==KNumUnfiltered);
+ TestViewIndiciesL(*iUnfilteredView);
+ NextTest();
+ }
+ break;
+
+ case ETestRingToneView:
+ iLog.LogLine(_L("==== Exercise ETestRingToneView"));
+ test(iRingToneView->CountL()==KNumRingTone);
+ TestViewIndiciesL(*iRingToneView);
+ NextTest();
+
+ break;
+
+ case ETestVoiceDialView:
+ iLog.LogLine(_L("==== Exercise ETestVoiceDialView"));
+ test( iVoiceDialView->CountL() == KNumVoiceDial );
+ TestViewIndiciesL(*iVoiceDialView);
+ NextTest();
+
+ break;
+
+ case ETestWirelessVillageAddressView:
+ // this should also test the different protocols assigned to the IMAddress for each contact
+ {
+ iLog.LogLine(_L("==== Exercise WirelessVillageAddressView"));
+ TInt numberContacts = iWirelessVillageView->CountL();
+ test(numberContacts == KNumIMAddress);
+
+ TInt numberWV = 0;
+
+ for(TInt a = 0; a < numberContacts; a++)
+ {
+ TContactItemId contactID = iWirelessVillageView->AtL(a);
+ CContactItem* contact = iDb.ReadContactLC(contactID); // PUSH
+ CContactItemFieldSet& fieldSet = contact->CardFields();
+ CContactItemField& field = fieldSet[contact->CardFields().Find(KUidContactFieldIMAddress)];
+ TFieldType imProtocol = field.ContentType().FieldType(1);
+
+ if(imProtocol == KUidContactFieldVCardMapWV)
+ numberWV++;
+ CleanupStack::PopAndDestroy(); // contact
+ }
+ test(numberWV == KNumIMProtocolWV);
+
+ TestViewIndiciesL(*iWirelessVillageView);
+ NextTest();
+ }
+ break;
+
+ case ETestIMAddressView:
+ {
+ iLog.LogLine(_L("==== Exercise IMAddressView"));
+ test(iIMAddressView->CountL()==KNumIMAddress);
+ TestViewIndiciesL(*iIMAddressView);
+ NextTest();
+ }
+ break;
+
+ case ETestRemoveContacts:
+ {
+ iLog.LogLine(_L("==== Remove Some Contacts"));
+ TContactItemId deletedId = iPhonableFilterView->AtL(10);
+ iDb.DeleteContactL(deletedId);
+ RDebug::Print(_L("DELETED ID : %d"),deletedId);
+ deletedId = iEmailFilterView->AtL(3);
+ iDb.DeleteContactL(deletedId);
+ RDebug::Print(_L("DELETED ID : %d"),deletedId);
+ deletedId = iFaxFilterView->AtL(6);
+ iDb.DeleteContactL(deletedId);
+ RDebug::Print(_L("DELETED ID : %d"),deletedId);
+ iItemEventsExpected=3;
+ iItemsEventsRecieved=0;
+ }
+ break;
+ case ETestViewIndiciesAfterRemoval:
+ {
+ iLog.LogLine(_L("==== Exercise ETestPhonableFilterView after removal"));
+ TestViewIndiciesL(*iPhonableFilterView);
+ TestViewIndiciesL(*iLandlineFilterView);
+ TestViewIndiciesL(*iSmsFilterView);
+ TestViewIndiciesL(*iFaxFilterView);
+ TestViewIndiciesL(*iEmailFilterView);
+ NextTest();
+ }
+ break;
+ case ETestAddContacts:
+ {
+ iLog.LogLine(_L("==== Add some Contacts"));
+ iTestConductor->AddContactL(CContactDatabase::ELandLine);
+ iTestConductor->AddContactL(CContactDatabase::EMailable);
+ iTestConductor->AddContactL(CContactDatabase::ESmsable);
+ iTestConductor->AddContactL(CContactDatabase::EFaxable);
+ iItemEventsExpected=4;
+ iItemsEventsRecieved=0;
+ // NextTest(); //wait until notitifications has gone through the system
+ }
+ break;
+ case ETestViewIndiciesAfterAddition:
+ {
+ iLog.LogLine(_L("==== Exercise ETestPhonableFilterView after addition"));
+ TestViewIndiciesL(*iPhonableFilterView);
+ TestViewIndiciesL(*iLandlineFilterView);
+ TestViewIndiciesL(*iSmsFilterView);
+ TestViewIndiciesL(*iFaxFilterView);
+ TestViewIndiciesL(*iEmailFilterView);
+ NextTest();
+ }
+ break;
+ case EAllViewsOutOfBoundsAccess:
+ {
+ //Views depend on their underlying views being in a good state, however
+ //as some base views are potentially in other processes they must be resistant
+ //to out of date views accessesing out of bound members, views, should not
+ //panic but should leave with KErrNotFound;
+ //local view
+ TInt err=0;
+ iLog.LogLine(_L("=== Test views for out of bounds access"));
+ TInt outCount = iPhonableFilterView->CountL();
+ TRAP(err,iPhonableFilterView->AtL(outCount));
+ test(err==KErrNotFound);
+ TRAP(err,iPhonableFilterView->ContactAtL(outCount));
+ test(err==KErrNotFound);
+ NextTest();
+ }
+ break;
+ case EOOMIMAddressView:
+ {
+ ++iOOMCounter += iOOMCounter/25; //Increasing step as we go further
+ iFilter = CContactDatabase::EIMAddress;
+
+ __UHEAP_SETFAIL(RHeap::EDeterministic,iOOMCounter);
+ TRAPD(ret, iOOMIMAddressView = CContactFilteredView::NewL(*this,iDb,*iNamedRemoteView, iFilter));
+
+ if (ret==KErrNone)
+ {
+ break; //Wait for asynchronous notification in HandleContactViewEvent
+ }
+
+ if (ret != KErrNoMemory)
+ {
+ _LIT(KOMMFail, "OOM Test failed: Leave reason is not KErrNoMemory: %d");
+ test.Printf(KOMMFail, ret);
+ User::Leave(KErrAbort);
+ }
+ __UHEAP_RESET;
+
+ test.Printf(_L("KErrNoMemory at step %5d"), iOOMCounter);
+ TRequestStatus *pS=&iStatus;
+ User::RequestComplete(pS,KErrNone);
+ SetActive();
+ }
+ break;
+
+ case EOOMDeleteIMAddressView:
+ {
+ iOOMIMAddressView->Close(*this);
+ iCurrentTest = EOOMIMAddressView; //Back to OOM
+ TRequestStatus *pS=&iStatus;
+ User::RequestComplete(pS,KErrNone);
+ SetActive();
+ }
+ break;
+
+ case ECreateLandLineFilterView2Fields:
+ {
+ // For DEF077467. Propagated from DEF074316.
+ // Ensure hint field is set to landline when there's < 3 fields but one of them is voice
+ // One contact should appear in the filtered view
+ // Clear the database first
+ while(iDb.CountL() !=0)
+ {
+ iDb.DeleteContactL((*iDb.SortedItemsL())[0]);
+ }
+ iFilterViewSavedId = KErrNotFound;
+ // Loop adds 2 contacts with 2 fields, Hint field should be set with ELandLine
+ // first time through loop and hence should appear in the filtered view
+ // Second time through the loop still 2 fields but not voice and hence will not
+ // appear in the filtered view
+ // Verify the correct one is in the view with the contact id
+ for(TInt i=0;i<2;++i)
+ {
+ CContactCard* card=CContactCard::NewLC();
+ CContactItemField* field=CContactItemField::NewLC(KStorageTypeText);
+ field->AddFieldTypeL(KUidContactFieldPhoneNumber);
+ if(i==0)
+ {
+ field->AddFieldTypeL(KUidContactFieldVCardMapVOICE);
+ }
+ else
+ {
+ field->AddFieldTypeL(KUidContactFieldVCardMapPAGER);
+ }
+ field->TextStorage()->SetTextL(_L("02071541222"));
+ card->AddFieldL(*field);
+ CleanupStack::Pop(field);
+ if(i==0)
+ {
+ iFilterViewSavedId = iDb.AddNewContactL(*card);
+ }
+ else
+ {
+ (void)iDb.AddNewContactL(*card);
+ }
+ CleanupStack::PopAndDestroy(card); // card
+ }
+ // Create the filtered view
+ iFilter = CContactDatabase::ESmsable|CContactDatabase::ELandLine;
+ iLandlineFilterView2Fields = CreateFilterViewL();
+ // Event handler kicks to next state where we check result
+ }
+ break;
+
+ case ETestLandLineFilterView2Fields:
+ {
+ // Should only be one contact in the view even though there's 2 in the database
+ test(iLandlineFilterView2Fields->CountL()==1);
+ TContactItemId id = iLandlineFilterView2Fields->AtL(0);
+ // Make sure it's the one we're expecting
+ test(iFilterViewSavedId == id && iFilterViewSavedId != KErrNotFound);
+ NextTest();
+ }
+ break;
+
+ case ENumTests:
+ iLog.LogLine(_L("==== Filter View Finished"));
+ PrintTotalTimeTaken();
+ CActiveScheduler::Stop();
+ delete this;
+ break;
+ default:
+ ASSERT(EFalse);
+ break;
+ }
+ }
+
+
+TInt CViewTester::RunError(TInt aError)
+ {
+ iTestConductor->SetTestError(aError);
+
+ switch (iCurrentTest)
+ {
+ case ECreateLocalView: test.Printf(_L("Test failed at step CreateLocalView (%i) with error %i"), iCurrentTest, aError); break;
+ case EExerciseLocalView: test.Printf(_L("Test failed at step ExerciseLocalView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateLandlineFilterView: test.Printf(_L("Test failed at step CreateLandlineFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestLandlineFilterView: test.Printf(_L("Test failed at step TestLandlineFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateSmsFilterView: test.Printf(_L("Test failed at step CreateSmsFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestSmsFilterView: test.Printf(_L("Test failed at step TestSmsFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateEmailFilterView: test.Printf(_L("Test failed at step CreateEmailFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestEmailFilterView: test.Printf(_L("Test failed at step TestEmailFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateFaxFilterView: test.Printf(_L("Test failed at step CreateFaxFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestFaxFilterView: test.Printf(_L("Test failed at step TestFaxFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreatePhonableFilterView: test.Printf(_L("Test failed at step CreatePhonableFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateWorkFilterView: test.Printf(_L("Test failed at step CreateWorkFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateHomeFilterView: test.Printf(_L("Test failed at step CreateHomeFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateUnfilteredView: test.Printf(_L("Test failed at step CreateUnfilteredView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateRingToneView: test.Printf(_L("Test failed at step CreateRingToneView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateVoiceDialView: test.Printf(_L("Test failed at step CreateVoiceDialView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateWirelessVillageAddressView: test.Printf(_L("Test failed at step CreateWirelessVillageAddressView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateIMAddressView: test.Printf(_L("Test failed at step CreateIMAddressView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestPhonableFilterView: test.Printf(_L("Test failed at step TestPhonableFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestWorkFilterView: test.Printf(_L("Test failed at step TestWorkFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestHomeFilterView: test.Printf(_L("Test failed at step TestHomeFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestUnfilteredView: test.Printf(_L("Test failed at step TestUnfilteredView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestRingToneView: test.Printf(_L("Test failed at step TestRingToneView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestVoiceDialView: test.Printf(_L("Test failed at step TestVoiceDialView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestWirelessVillageAddressView: test.Printf(_L("Test failed at step TestWirelessVillageAddressView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestIMAddressView: test.Printf(_L("Test failed at step TestIMAddressView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestRemoveContacts: test.Printf(_L("Test failed at step TestRemoveContacts (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestViewIndiciesAfterRemoval: test.Printf(_L("Test failed at step TestViewIndiciesAfterRemoval (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestAddContacts: test.Printf(_L("Test failed at step TestAddContacts (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestViewIndiciesAfterAddition: test.Printf(_L("Test failed at step TestViewIndiciesAfterAddition (%i) with error %i"), iCurrentTest, aError); break;
+ case EAllViewsOutOfBoundsAccess: test.Printf(_L("Test failed at step AllViewsOutOfBoundsAccess (%i) with error %i"), iCurrentTest, aError); break;
+ case EOOMIMAddressView: test.Printf(_L("Test failed at step OOMIMAddressView (%i) with error %i"), iCurrentTest, aError); break;
+ case EOOMDeleteIMAddressView: test.Printf(_L("Test failed at step OOMDeleteIMAddressView (%i) with error %i"), iCurrentTest, aError); break;
+ case ECreateLandLineFilterView2Fields: test.Printf(_L("Test failed at step CreateLandlineFilterView (%i) with error %i"), iCurrentTest, aError); break;
+ case ETestLandLineFilterView2Fields: test.Printf(_L("Test failed at step TestLandlineFilterView (%i) with error %i"), iCurrentTest, aError); break;
+
+ case ENumTests: test.Printf(_L("Test failed at step NumTests (%i) with error %i"), iCurrentTest, aError); break;
+
+ default: test.Printf(_L("Test failed at step %i with error %i"), iCurrentTest, aError); break;
+ }
+
+ CActiveScheduler::Stop();
+ return KErrNone;
+ }
+
+
+// Should always return true for a correct implementation of
+// CContactViewBase
+TBool CViewTester::ContactIdsEqualL(const CContactViewBase& aView, TInt aIndex)
+ {
+ TContactItemId viewId = aView.AtL(aIndex);
+ //RDebug::Print(_L("UnderLyingView viewId : %d"),viewId);
+ TContactItemId contactId = aView.ContactAtL(aIndex).Id();
+ //RDebug::Print(_L("Sub View Id contactId : %d"),contactId);
+ return (contactId == viewId);
+ }
+
+void CViewTester::TestViewIndiciesL(const CContactViewBase& aView)
+ {
+ for (TInt i=0; i < aView.CountL(); ++i)
+ {
+ test(ContactIdsEqualL(aView,i)!=EFalse);
+ }
+ }
+/*
+CContactFilteredView* filteredView = ...;
+for (TInt i=0; i < filteredView->CountL(); ++i)
+ {
+ ASSERT(ContactIdsEqual(*filteredView, i);
+ }*/
+
+void CViewTester::HandleViewCreation(const CContactViewBase& aView, const TContactViewEvent& aEvent, CContactViewBase* aPtrView)
+ {
+ test(aPtrView==&aView);
+ test(aEvent.iEventType==TContactViewEvent::EReady);
+ CCntTest::ProfileEnd(0);
+ CCntTest::ProfileResult(&iProfile,0,1);
+ iTimeForTestsToComplete[iCurrentTest] = iProfile.iTime;
+ PrintTimeTaken(iProfile.iTime);
+ }
+
+
+void CViewTester::HandleContactViewEvent(const CContactViewBase& aView,const TContactViewEvent& aEvent)
+ {
+ switch (iCurrentTest)
+ {
+ case ECreateLocalView:
+ HandleViewCreation( aView, aEvent, iNamedRemoteView );
+ break;
+ case EExerciseLocalView:
+ test(ETrue);
+ break;
+ case ECreateLandlineFilterView:
+ HandleViewCreation( aView, aEvent, iLandlineFilterView );
+ break;
+ case ETestLandlineFilterView:
+ test(EFalse);
+ break;
+ case ECreateSmsFilterView:
+ HandleViewCreation( aView, aEvent, iSmsFilterView );
+ break;
+ case ETestSmsFilterView:
+ test(EFalse);
+ break;
+ case ECreateEmailFilterView:
+ HandleViewCreation( aView, aEvent, iEmailFilterView );
+ break;
+ case ETestEmailFilterView:
+ test(EFalse);
+ break;
+ case ECreateFaxFilterView:
+ HandleViewCreation( aView, aEvent, iFaxFilterView );
+ break;
+ case ETestFaxFilterView:
+ test(EFalse);
+ break;
+ case ECreatePhonableFilterView:
+ HandleViewCreation( aView, aEvent, iPhonableFilterView );
+ break;
+ case ECreateWorkFilterView:
+ HandleViewCreation( aView, aEvent, iWorkFilterView );
+ break;
+ case ECreateHomeFilterView:
+ HandleViewCreation( aView, aEvent, iHomeFilterView );
+ break;
+ case ECreateUnfilteredView:
+ HandleViewCreation( aView, aEvent, iUnfilteredView );
+ break;
+
+ case ECreateRingToneView:
+ HandleViewCreation( aView, aEvent, iRingToneView );
+ break;
+
+ case ECreateVoiceDialView:
+ HandleViewCreation( aView, aEvent, iVoiceDialView );
+ break;
+
+ case ECreateWirelessVillageAddressView:
+ HandleViewCreation( aView, aEvent, iWirelessVillageView );
+ break;
+
+ case ECreateIMAddressView:
+ HandleViewCreation( aView, aEvent, iIMAddressView );
+ break;
+
+ case ETestPhonableFilterView:
+ test(EFalse);
+ break;
+ case ETestRemoveContacts:
+ {
+ if(aEvent.iEventType==TContactViewEvent::EItemRemoved)
+ {
+ iItemsEventsRecieved++;
+ if(iItemEventsExpected==iItemsEventsRecieved)
+ {
+ NextTest();
+ }
+ }
+ return;
+ }
+ case ETestViewIndiciesAfterRemoval:
+ test(aEvent.iEventType==TContactViewEvent::EItemRemoved);
+ return;
+ case ETestAddContacts:
+ {
+ if(aEvent.iEventType==TContactViewEvent::EItemAdded)
+ {
+ iItemsEventsRecieved++;
+ if(iItemEventsExpected==iItemsEventsRecieved)
+ {
+ NextTest();
+ }
+ }
+ return;
+ }
+ case ETestViewIndiciesAfterAddition:
+ test(aEvent.iEventType==TContactViewEvent::EItemAdded);
+ return;
+ case EAllViewsOutOfBoundsAccess:
+ {
+ test(EFalse);
+ break;
+ }
+ case EOOMIMAddressView:
+ {
+ __UHEAP_RESET;
+ test(iOOMIMAddressView==&aView);
+ switch (aEvent.iEventType)
+ {
+ case TContactViewEvent::EReady:
+ test.Printf(_L("OOM: EReady at step %5d\n"), iOOMCounter);
+ ++iCurrentTest; //Exit OOM loop - goto next test
+ break;
+ case TContactViewEvent::ESortError:
+ test.Printf(_L("OOM: ESortError at step %5d\n"), iOOMCounter);
+ break; //Go to EOOMDeleteIMAddressView - we cannot delete view in its callback.
+ default:
+ test.Printf(_L("OOM: Unexpected notification at step %5d\n"), iOOMCounter);
+ test(EFalse); //Unsupported event - fail
+ }
+ }
+ break;
+
+ case ECreateLandLineFilterView2Fields:
+ {
+ HandleViewCreation( aView, aEvent, iLandlineFilterView2Fields);
+ }
+ break;
+
+ case EOOMDeleteIMAddressView: //there should not be any call backs after deletion
+ case ENumTests:
+ default:
+ test(EFalse);
+ break;
+ }
+ if (--iNumNotificationExpected<=0)
+ {
+ NextTest();
+ iNumNotificationExpected=0;
+ }
+ }
+
+void CViewTester::TestViewNotificationsL(CContactViewBase& /*aView*/)
+ {
+ //Test just add some contacts for now...
+/* CRandomContactGenerator* generator=CRandomContactGenerator::NewL();
+ CleanupStack::PushL(generator);
+ generator->SetDbL(iDb);
+ for (TInt ii=0;ii<KInitialNumContacts;++ii)
+ {
+ generator->AddTypicalRandomContactL();
+ }
+ CleanupStack::PopAndDestroy(); // generator.
+*/ }
+
+void CViewTester::NextTest()
+ {
+ ++iCurrentTest;
+ TRequestStatus *pS=&iStatus;
+ User::RequestComplete(pS,KErrNone);
+ SetActive();
+ }
+
+void CViewTester::ExceriseViewL(CContactViewBase& aView)
+ {
+ TContactItemId lastId=0;
+ const TInt numItems=aView.CountL();
+ for (TInt ii=0;ii<numItems;++ii)
+ {
+ if (ii==numItems-1)
+ {
+ lastId=aView.AtL(ii);
+ }
+ iDb.ReadContactTextDefL(aView.AtL(ii),iScratchBuf,iTextDef);
+ iLog.LogLineNoEcho(iScratchBuf);
+ iScratchBuf.SetLength(0);
+ }
+
+ test(aView.FindL(lastId)==numItems-1);
+ }
+
+void CViewTester::DoCancel()
+ {
+ }
+
+void doMainL()
+ {
+ __UHEAP_MARK;
+ CTestConductor* testConductor = NULL;
+ testConductor = CTestConductor::NewL();
+ CleanupStack::PushL( testConductor );
+ CleanupStack::PopAndDestroy( testConductor );
+ __UHEAP_MARKEND;
+ }
+//
+// Main.
+//
+
+
+/**
+
+@SYMTestCaseID PIM-T-FILTERVIEW-0001
+
+*/
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ test.Start(_L("@SYMTESTCaseID:PIM-T-FILTERVIEW-0001 "));
+
+ CActiveScheduler* scheduler=new CActiveScheduler;
+ if (scheduler)
+ {
+ CActiveScheduler::Install(scheduler);
+ CTrapCleanup* cleanup=CTrapCleanup::New();
+ if (cleanup)
+ {
+ TRAPD(err,doMainL());
+ test(err == KErrNone);
+ delete cleanup;
+ }
+ delete scheduler;
+ }
+ test.End();
+ test.Close();
+ __UHEAP_MARKEND;
+ return KErrNone;
+ }