--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/cntmodel2/T_CProgressNotification.cpp Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,256 @@
+// 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 "cntdb.h"
+
+#include "T_CProgressNotification.h"
+
+/*
+3 steps to create test
+======================
+1 Derive from MContactUiCompactObserver
+2 Get an instance fo the activebase class via - CContactActiveCompress* CContactDatabase::CreateCompressorLC()
+3 Call CContactActiveCompress::SetObserver to recieve notifications
+*/
+
+_LIT(KTestDbName, "c:T_CProgressNotification.cdb");
+
+void CProgressNotificationTest::AddContactsL(TInt aNoOfCnts)
+ {
+ TInt max = KMaxArraySize < aNoOfCnts ? KMaxArraySize : aNoOfCnts;
+ // Add contacts
+ CContactItem* cntItem = NULL;
+ for (TInt ii = 0; ii < max; ++ii)
+ {
+ cntItem = iCntItemBldr->GetCntItemLC();
+ iIDarray[ii] = iCntDb->AddNewContactL(*cntItem);
+ CleanupStack::PopAndDestroy(cntItem);
+ }
+ }
+
+void CProgressNotificationTest::DeleteContactsL(TInt aNoOfCnts)
+ {
+ TInt max = KMaxArraySize < aNoOfCnts ? KMaxArraySize : aNoOfCnts;
+ //Remove the contacts
+ for (TInt ii = 0; ii < max; ++ii)
+ {
+ iCntDb->DeleteContactL(iIDarray[ii]);
+ iIDarray[ii] = 0;
+ }
+ }
+
+
+void CProgressNotificationTest::HandleError(TInt aError)
+ {
+ iTest->Printf(_L(" - Received Compress Recover ERROR code: %d \r\n"), aError);
+ (*iTest)(EFalse); //Panic here
+ }
+
+
+
+void CProgressNotificationTest::Step(TInt aStep)
+ {
+ iTest->Printf(_L(" - Recieved Compress/Recover Event - Step: %d \r\n"), aStep);
+ iSteps = aStep;
+
+ if(aStep > 0 && iActiveCompress != NULL)
+ {
+ if(!(iActiveCompress->StepsTogo() > 0 ))
+ {
+ iTest->Printf(_L(" ---- *****ERROR**** Compress Test Error - StepsTogo should be greater than zero \r\n"));
+ (*iTest)(EFalse); //Panic here
+ }
+ }
+ }
+
+
+void CProgressNotificationTest::RunCompressNotifyTestL()
+ {
+ iTest->Start(_L("Compress Test"));
+
+ if (iActiveCompress)
+ delete iActiveCompress;
+ iActiveCompress = iCntDb->CreateCompressorLC();
+ CleanupStack::Pop(iActiveCompress);
+
+ // check if first step is greater than 0; CreateCompressorLC should have started the compression
+ if(!(iActiveCompress->StepsTogo() > 0 ))
+ {
+ iTest->Printf(_L(" ---- *****ERROR**** Compress Test Error - StepsTogo should be greater than zero \r\n"));
+ (*iTest)(EFalse); //Panic here
+ }
+
+ iActiveCompress->SetObserver(static_cast<MContactUiCompactObserver*>(this));
+ while(iActiveCompress->Step()) {};
+
+ iTest->End(); //If we are here test completed with success
+ }
+
+
+void CProgressNotificationTest::RunCompressNotifyCancelTestL()
+ {
+ iTest->Start(_L("Compress CANCEL Test"));
+
+ if (iActiveCompress)
+ delete iActiveCompress;
+ iActiveCompress = iCntDb->CreateCompressorLC();
+ CleanupStack::Pop(iActiveCompress);
+
+ iActiveCompress->SetObserver(static_cast<MContactUiCompactObserver*>(this));
+ iActiveCompress->Step();
+ TInt halfSteps = iSteps/2;
+
+ while (iSteps > halfSteps)
+ {
+ iActiveCompress->Step();
+ }
+
+ delete iActiveCompress;
+ iActiveCompress = NULL;
+
+ iTest->End(); //If we are here test completed with success
+ }
+
+
+void CProgressNotificationTest::RunRecoverNotifyCancelTestL()
+ {
+ iTest->Start(_L("Recover CANCEL Test"));
+
+ iCntDb->DamageDatabaseL(0x666);
+
+ if (iCntDb->IsDamaged() == EFalse)
+ {
+ iTest->Printf(_L(" ---- DATABASE IS NOT DAMAGED For Test ---- \r\n"));
+#ifndef __SYMBIAN_CNTMODEL_USE_SQLITE__
+ (*iTest)(EFalse); //Panic here
+#else
+ return; // test has no meaning with SQLite
+#endif
+ }
+
+ if (iActiveRecover)
+ delete iActiveRecover;
+ iActiveRecover = iCntDb->CreateRecoverLC();
+ CleanupStack::Pop(iActiveRecover);
+
+ iActiveRecover->SetObserver(static_cast<MContactUiCompactObserver*>(this));
+
+ //do only one step
+ iActiveRecover->Step();
+
+ if (iCntDb->IsDamaged() == EFalse)
+ {
+ iTest->Printf(_L(" ---- DATABASE IS NOT DAMAGED For Test ---- \r\n"));
+ (*iTest)(EFalse); //Panic here
+ }
+
+ TRAPD(err, AddContactsL(1));
+ if(err == KErrNone)
+ {
+ iTest->Printf(_L(" ---- *****ERROR**** recover cancellation does not works ---- \r\n"));
+ (*iTest)(EFalse); //Panic here
+ }
+
+ //recover stop in destructor
+ delete iActiveRecover;
+ iActiveRecover = NULL;
+
+ iCntDb->RecoverL();
+
+ iTest->End(); //If we are here test completed with success
+ }
+
+
+void CProgressNotificationTest::RunRecoverNotifyTestL()
+ {
+ iTest->Start(_L("Recover Test"));
+
+ iCntDb->DamageDatabaseL(0x666);
+ if (iCntDb->IsDamaged())
+ {
+ iTest->Printf(_L(" ---- DATABASE IS DAMAGED ---- \r\n"));
+ }
+
+ if (iActiveRecover)
+ delete iActiveRecover;
+ iActiveRecover = iCntDb->CreateRecoverLC();
+ CleanupStack::Pop(iActiveRecover);
+
+ iActiveRecover->SetObserver(static_cast<MContactUiCompactObserver*>(this));
+ while(iActiveRecover->Step()) {};
+
+ if (iCntDb->IsDamaged())
+ {
+ iTest->Printf(_L(" ----*****ERROR**** DATABASE IS STILL DAMAGED ---- \r\n"));
+ (*iTest)(EFalse); //Panic here
+ }
+
+ iTest->End(); //If we are here test completed with success
+ }
+
+
+CProgressNotificationTest* CProgressNotificationTest::NewLC()
+ {
+ CProgressNotificationTest* self = new (ELeave) CProgressNotificationTest();
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+CProgressNotificationTest::CProgressNotificationTest()
+ {}
+
+
+void CProgressNotificationTest::ConstructL()
+ {
+ // For multi-threaded test harness.
+ iTest = new(ELeave) RTest(_L(""));
+
+ iCntDb = CContactDatabase::ReplaceL(KTestDbName); // Default Database.
+ const CContactTemplate& sysTempl(GetSysTemplateL() );
+ iCntItemBldr = CCntItemBuilder::NewLC(sysTempl);
+ CleanupStack::Pop(iCntItemBldr);
+ }
+
+CProgressNotificationTest::~CProgressNotificationTest()
+ {
+ iTest->Close();
+ delete iTest;
+
+ delete iCntDb;
+ delete iGoldenTemplate;
+ delete iCntItemBldr;
+
+ delete iActiveCompress;
+ delete iActiveRecover;
+ TRAP_IGNORE(CContactDatabase::DeleteDatabaseL(KTestDbName));
+ }
+
+const CContactTemplate& CProgressNotificationTest::GetSysTemplateL()
+ {
+ if (!iGoldenTemplate)
+ {
+ CContactItemViewDef* matchAll = CContactItemViewDef::NewLC(CContactItemViewDef::EIncludeFields,CContactItemViewDef::EIncludeHiddenFields);
+ matchAll->AddL(KUidContactFieldMatchAll);
+
+ iGoldenTemplate = static_cast<CContactTemplate*>(iCntDb->ReadContactL(iCntDb->TemplateId(), *matchAll));
+ CleanupStack::PopAndDestroy(matchAll);
+ }
+ return *iGoldenTemplate;
+ }
+
+