diff -r 000000000000 -r 8e480a14352b messagingfw/biomsgfw/BDBTSRC/t_bio_observer.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/messagingfw/biomsgfw/BDBTSRC/t_bio_observer.cpp Mon Jan 18 20:36:02 2010 +0200 @@ -0,0 +1,290 @@ +// 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 "BioTest.h" + +RTest test(_L("Bio Database Observer Tests")); + +LOCAL_D void TestInstallL(TInt aDrive); + +const TUid KTestBif = { 0x10009234 }; + +_LIT(KTestDir, "\\test\\bio\\bif\\"); +_LIT(KBifDir, "\\resource\\messaging\\Bif\\"); +_LIT(KTestBif1Src, "testbif1.rsc"); +_LIT(KTestMbm1Src, "testbif1.mbm"); + +_LIT(KTestBif2Src, "testbif2.rsc"); +_LIT(KTestMbm2Src, "testbif2.mbm"); + +_LIT(KTestBifDst, "testbif.rsc"); +_LIT(KTestMbmDst, "testbif.mbm"); + + +class CBifObserver : public CBase , public MBifChangeObserver + { +public: + void HandleBifChangeL(TBifChangeEvent aEvent, TUid aBioUid); + // +public: + TBifChangeEvent iEvent; + TUid iBioUid; + TBool iFlag; + }; + + +void CBifObserver::HandleBifChangeL(TBifChangeEvent aEvent, TUid aBioUid) + { + iEvent = aEvent; + iBioUid = aBioUid; + iFlag = ETrue; + + CActiveScheduler::Stop(); + } + + +LOCAL_C void TestChangeL(TInt aDrive) + { + // Clear the BIF folders + theUtils->ClearBifFoldersL(); + + // Get the name of the drive + TDriveUnit unit(aDrive); + TPtrC drive(unit.Name()); + + TParse src; + TParse dst; + + // Copy the bif file + theUtils->FindFileL(src, KTestDir, KTestBif1Src); + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestBifDst)); + theUtils->FileSession().MkDirAll(dst.FullName()); + User::LeaveIfError(BaflUtils::CopyFile(theUtils->FileSession(), src.FullName(), dst.FullName())); + + // Copy the Mbm file + theUtils->FindFileL(src, KTestDir, KTestMbm1Src); + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestMbmDst)); + theUtils->FileSession().MkDirAll(dst.FullName()); + User::LeaveIfError(BaflUtils::CopyFile(theUtils->FileSession(), src.FullName(), dst.FullName())); + + // Create BIF database + CBIODatabase* db = CBIODatabase::NewLC(theUtils->FileSession()); + + // Create observer + CBifObserver* obs = new(ELeave)CBifObserver; + CleanupStack::PushL(obs); + + CBifChangeObserver* change = CBifChangeObserver::NewL(*obs, theUtils->FileSession()); + CleanupStack::PushL(change); + change->Start(); + + // Check the test BIO is installed + test(theUtils->BifInstalledL(*db, KTestBif)); + test(!obs->iFlag); + + // Short delay to check that the observer isn't fired + CTestTimer* timer = CTestTimer::NewL(); + timer->After(10000000); + CActiveScheduler::Start(); + delete timer; + + // Check the test BIO is still installed + test(theUtils->BifInstalledL(*db, KTestBif)); + test(!obs->iFlag); + + // Copy the bif file + theUtils->FindFileL(src, KTestDir, KTestBif2Src); + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestBifDst)); + theUtils->FileSession().MkDirAll(dst.FullName()); + User::LeaveIfError(BaflUtils::CopyFile(theUtils->FileSession(), src.FullName(), dst.FullName())); + + // Copy the Mbm file + theUtils->FindFileL(src, KTestDir, KTestMbm2Src); + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestMbmDst)); + theUtils->FileSession().MkDirAll(dst.FullName()); + User::LeaveIfError(BaflUtils::CopyFile(theUtils->FileSession(), src.FullName(), dst.FullName())); + + // Wait for the notification to come through + CActiveScheduler::Start(); + test(obs->iFlag); + test(obs->iBioUid == KTestBif); + test(obs->iEvent == MBifChangeObserver::EBifChanged); + + CleanupStack::PopAndDestroy(3); // change, obs, db + } + + +LOCAL_C void TestImmediateCancelL() + { + CBifObserver* obs = new(ELeave)CBifObserver; + CleanupStack::PushL(obs); + + CBifChangeObserver* iObserver=CBifChangeObserver::NewL(*obs, theUtils->FileSession()); + iObserver->Start(); + delete iObserver; + CleanupStack::PopAndDestroy(obs); + } + + +LOCAL_C void TestRemoveL(TInt aDrive) + { + // Clear the BIF folders + theUtils->ClearBifFoldersL(); + + // Get the name of the drive + TDriveUnit unit(aDrive); + TPtrC drive(unit.Name()); + + TParse src; + TParse dst; + + // Copy the bif file + theUtils->FindFileL(src, KTestDir, KTestBif1Src); + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestBifDst)); + theUtils->FileSession().MkDirAll(dst.FullName()); + + User::LeaveIfError(BaflUtils::CopyFile(theUtils->FileSession(), src.FullName(), dst.FullName())); + + // Copy the Mbm file + theUtils->FindFileL(src, KTestDir, KTestMbm1Src); + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestMbmDst)); + theUtils->FileSession().MkDirAll(dst.FullName()); + User::LeaveIfError(BaflUtils::CopyFile(theUtils->FileSession(), src.FullName(), dst.FullName())); + + // Create BIF database + CBIODatabase* db = CBIODatabase::NewLC(theUtils->FileSession()); + + // Create observer + CBifObserver* obs = new(ELeave)CBifObserver; + CleanupStack::PushL(obs); + + CBifChangeObserver* change = CBifChangeObserver::NewL(*obs, theUtils->FileSession()); + CleanupStack::PushL(change); + change->Start(); + + // Check the test BIO is installed + test(theUtils->BifInstalledL(*db, KTestBif)); + test(!obs->iFlag); + + // Short delay to check that the observer isn't fired + CTestTimer* timer = CTestTimer::NewL(); + timer->After(10000000); + CActiveScheduler::Start(); + delete timer; + + // Check the test BIO is still installed + test(theUtils->BifInstalledL(*db, KTestBif)); + test(!obs->iFlag); + + // Delete the bif file + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestBifDst)); + User::LeaveIfError(theUtils->FileSession().Delete(dst.FullName())); + + // Delete the Mbm file + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestMbmDst)); + User::LeaveIfError(theUtils->FileSession().Delete(dst.FullName())); + + // Wait for the notification to come through + CActiveScheduler::Start(); + test(obs->iFlag); + test(obs->iBioUid == KTestBif); + test(obs->iEvent == MBifChangeObserver::EBifDeleted); + + CleanupStack::PopAndDestroy(); // change + CleanupStack::PopAndDestroy(); // obs + CleanupStack::PopAndDestroy(); // db + } + + +LOCAL_C void doTestsL() + { + theUtils->Start(_L("Installing BIF")); + TestInstallL(EDriveC); + TestInstallL(EDriveD); + theUtils->Complete(); + + theUtils->Start(_L("Changing BIF")); + TestChangeL(EDriveC); + TestChangeL(EDriveD); + theUtils->Complete(); + + theUtils->Start(_L("Removing BIF")); + TestRemoveL(EDriveC); + TestRemoveL(EDriveD); + theUtils->Complete(); + + theUtils->Start(_L("Canceling BioObserver before active scheduler has been run")); + TestImmediateCancelL(); + theUtils->Complete(); + } + + +LOCAL_C void TestInstallL(TInt aDrive) + { + // Clear the BIF folders + theUtils->ClearBifFoldersL(); + + // Create BIF database + CBIODatabase* db = CBIODatabase::NewLC(theUtils->FileSession()); + + // Create observer + CBifObserver* obs = new(ELeave)CBifObserver; + CleanupStack::PushL(obs); + + CBifChangeObserver* change = CBifChangeObserver::NewL(*obs, theUtils->FileSession()); + CleanupStack::PushL(change); + change->Start(); + + // Check the test BIO isn't installed + test(!theUtils->BifInstalledL(*db, KTestBif)); + test(!obs->iFlag); + + // Short delay to check that the observer isn't fired + CTestTimer* timer = CTestTimer::NewL(); + timer->After(10000000); + CActiveScheduler::Start(); + delete timer; + + // Check the test BIO still isn't installed + test(!theUtils->BifInstalledL(*db, KTestBif)); + test(!obs->iFlag); + + // Get the name of the drive + TDriveUnit unit(aDrive); + TPtrC drive(unit.Name()); + + TParse src; + TParse dst; + + // Copy the bif file + theUtils->FindFileL(src, KTestDir, KTestBif1Src); + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestBifDst)); + theUtils->FileSession().MkDirAll(dst.FullName()); + User::LeaveIfError(BaflUtils::CopyFile(theUtils->FileSession(), src.FullName(), dst.FullName())); + + // Copy the Mbm file + theUtils->FindFileL(src, KTestDir, KTestMbm1Src); + User::LeaveIfError(dst.Set(drive, &KBifDir, &KTestMbmDst)); + theUtils->FileSession().MkDirAll(dst.FullName()); + User::LeaveIfError(BaflUtils::CopyFile(theUtils->FileSession(), src.FullName(), dst.FullName())); + + // Wait for the notification to come through + CActiveScheduler::Start(); + test(obs->iFlag); + test(obs->iBioUid == KTestBif); + test(obs->iEvent == MBifChangeObserver::EBifAdded); + + CleanupStack::PopAndDestroy(3); // change, obs, db + }