diff -r 000000000000 -r e686773b3f54 phonebookengines/contactsmodel/tsrc/cntmodel2/T_CProgressNotification.cpp --- /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 +#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(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(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(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(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(iCntDb->ReadContactL(iCntDb->TemplateId(), *matchAll)); + CleanupStack::PopAndDestroy(matchAll); + } + return *iGoldenTemplate; + } + +