messagingfw/biomsgfw/BDBTSRC/t_bio_observer.cpp
changeset 0 8e480a14352b
--- /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
+	}