--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/T_DBFill.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,290 @@
+// Copyright (c) 2005-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 <e32test.h>
+#include <e32panic.h>
+#include <cntfldst.h>
+#include <cntdb.h>
+#include <cntitem.h>
+#include <cntdef.h>
+
+#include <cntviewbase.h>
+#include <cntview.h>
+
+
+static RTest test(_L("T_DBFill")) ;
+
+
+_LIT(KTestName,"@SYMTESTCaseID:PIM-T-DBFILL-0001 T_DBFill");
+_LIT(KDBFilled,"Database Filled");
+_LIT(KViewUpdated,"View Updated");
+_LIT(KTestFailed,"RTEST: FAILED : T_DBFill test completed Failed!");
+
+
+class CTestConductor : public CActive, public MContactViewObserver
+ {
+
+public:
+ CTestConductor();
+ void ConstructL();
+ void RunTestsL();
+ static CTestConductor* NewL() ;
+ ~CTestConductor() ;
+ void HandleContactViewEvent(const CContactViewBase &aView,
+ const TContactViewEvent &aEvent) ;
+protected:
+ void RunL();
+ void DoCancel();
+ void RunError();
+
+private:
+ CContactDatabase* iContactsDatabase;
+ TContactItemId iGroupID ;
+ CContactNamedRemoteView *irview ;
+ CContactGroupView *igview ;
+ CContactIdArray* imemberArray ;
+ RTimer iTimer;
+ TBool iFailed;
+ };
+
+
+void CTestConductor::HandleContactViewEvent(const CContactViewBase &aView, const TContactViewEvent &aEvent)
+ {
+ if ((aEvent.iEventType == TContactViewEvent::EItemRemoved)
+ && (aEvent.iContactId == iGroupID) && (&aView == igview))
+ {
+ // Check whether items from imemberArray are in the view
+ // checking one item is good enough for this test
+ TContactItemId id = (*imemberArray)[0];
+ TRAPD(err, igview->FindL(id))
+ if (err == KErrNone)
+ {
+ // the view has been updated
+ test.Printf(KViewUpdated);
+ CActiveScheduler::Stop();
+ }
+ }
+
+ }
+
+CTestConductor* CTestConductor::NewL()
+ {
+ CTestConductor* self=new(ELeave) CTestConductor();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ self->RunTestsL();
+ CleanupStack::Pop();
+ return self;
+ }
+
+CTestConductor::~CTestConductor()
+ {
+
+ Cancel();
+ iTimer.Close();
+
+ delete iContactsDatabase;
+
+
+ }
+
+CTestConductor::CTestConductor() : CActive(0), iFailed(EFalse)
+ {
+
+ CActiveScheduler::Add(this);
+ iTimer.CreateLocal();
+
+ }
+
+void CTestConductor::ConstructL()
+ {
+
+ iContactsDatabase=CContactDatabase::ReplaceL();
+
+ }
+
+void CTestConductor::RunL()
+ {
+
+ iFailed = ETrue;
+ CActiveScheduler::Stop() ; //timeout expired - stop executing
+
+ }
+
+void CTestConductor::RunError()
+ {
+
+ }
+
+void CTestConductor::DoCancel()
+ {
+ iTimer.Cancel();
+ }
+
+void CTestConductor::RunTestsL()
+ {
+
+ //DBFill
+ _LIT(KText, "Group1") ;
+ TBufC<30> g1(KText) ;
+ CContactGroup *group1 = static_cast<CContactGroup*> (iContactsDatabase->CreateContactGroupL(g1)) ;
+ CleanupStack::PushL(group1);
+
+ TContactItemId id1 = group1->Id();
+
+ CContactCard* contact1 = CContactCard::NewL();
+ CleanupStack::PushL(contact1);
+
+ TContactItemId cid1 = iContactsDatabase->AddNewContactL(*contact1);
+ iContactsDatabase->AddContactToGroupL(cid1, id1) ;
+
+ CleanupStack::PopAndDestroy(contact1);
+ CleanupStack::PopAndDestroy(group1);
+
+ iContactsDatabase->CloseContactL(id1);
+ iContactsDatabase->CloseTables();
+
+ test.Printf(KDBFilled);//Database is filled
+
+ delete iContactsDatabase;
+ iContactsDatabase = 0;
+
+ //ViewUpdate
+ iContactsDatabase=CContactDatabase::OpenL();
+
+ RContactViewSortOrder sortOrder ;
+ sortOrder.AppendL(KUidContactFieldGivenName);
+
+ _LIT(KText1, "Remote View") ;
+ TBufC<30> name(KText1) ;
+
+ irview = CContactNamedRemoteView::NewL(*this, name, *iContactsDatabase,
+ sortOrder, EContactAndGroups) ;
+
+ CleanupStack::PushL(irview) ;
+
+ igview = CContactGroupView::NewL(*iContactsDatabase,
+ *irview, *this, id1, CContactGroupView::EShowContactsNotInAnyGroup) ;
+
+ CleanupStack::PushL(igview) ;
+
+
+ CContactIdArray *arrayOfContacts = iContactsDatabase->FindLC(_L("Group1"), NULL) ;
+
+ TInt count = arrayOfContacts->Count();
+
+ TContactItemId id = 0;
+ TInt i ;
+ for(i = 0; i < count; i++)
+ {
+ id = (*arrayOfContacts)[i] ;
+ CContactItem *item = iContactsDatabase->ReadContactL(id) ;
+ CleanupStack::PushL(item) ;
+
+ if (item->Type() == KUidContactGroup)
+ {
+ CleanupStack::PopAndDestroy(item) ;
+ iGroupID = id ;
+ break ; // This group should be deleted
+ }
+ CleanupStack::PopAndDestroy(item) ;
+ }
+
+ CleanupStack::PopAndDestroy(arrayOfContacts) ;
+
+ if (i == count)
+ {
+ sortOrder.Close() ;
+ User::Leave(KErrNotFound) ;
+ }
+
+
+ CContactGroup* group = (static_cast<CContactGroup*> (iContactsDatabase->ReadContactL(iGroupID)));
+ CleanupStack::PushL(group) ;
+
+ imemberArray = (const_cast<CContactIdArray*> (group->ItemsContained()));
+
+ iContactsDatabase->DeleteContactL(id) ;
+
+ iTimer.After(iStatus,3000000);//timeout after 3 seconds
+ SetActive();
+
+ CActiveScheduler::Start() ;
+
+ CleanupStack::PopAndDestroy(group) ;
+
+ CleanupStack::PopAndDestroy(igview) ;
+ CleanupStack::PopAndDestroy(irview) ;
+
+ sortOrder.Close() ;
+
+ if (!iFailed)
+ {
+
+ test.End();
+
+ }
+ else
+ {
+
+ test.Printf(KTestFailed);
+
+ }
+
+ }
+
+
+LOCAL_C void doMainL()
+ {
+ __UHEAP_MARK;
+ CTestConductor* testConductor = NULL;
+ testConductor = CTestConductor::NewL();
+
+ CleanupStack::PushL( testConductor );
+ CleanupStack::PopAndDestroy( testConductor );
+ __UHEAP_MARKEND;
+ }
+
+/**
+
+@SYMTestCaseID PIM-T-DBFILL-0001
+
+*/
+
+GLDEF_C TInt E32Main()
+ {
+ __UHEAP_MARK;
+ test.Start(KTestName);
+
+ test.Title();
+ 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.Close();
+ __UHEAP_MARKEND;
+ return KErrNone;
+ }
+