applayerpluginsandutils/bookmarksupport/test/tnotifytests.cpp
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/bookmarksupport/test/tnotifytests.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,478 @@
+// 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 <bookmarkdatabase.h>
+#include "testutils.h"
+
+_LIT(KFilename, "tnotifytests.cpp");
+
+LOCAL_D CTestWrapper* gTestWrapper;
+LOCAL_D Bookmark::TAttachmentId gIconId;
+
+_LIT(KTxtTester1, 		"NotifyTEST Tester 1");
+_LIT(KTxtTester2, 		"NotifyTEST Tester 2");
+
+_LIT(KTxtFolder1, 		"NotifyTEST Folder 1");
+_LIT(KTxtFolder1_1, 	"NotifyTEST Folder 1.1");
+_LIT(KTxtFolder1_2, 	"NotifyTEST Folder 1.2");
+_LIT(KTxtFolder1_2_1, 	"NotifyTEST Folder 1.2.1");
+_LIT(KTxtFolder1_2_1_1,	"NotifyTEST Folder 1.2.1.1");
+
+_LIT(KTxtBookmark1,		"NotifyTEST Bookmark 1");
+_LIT(KTxtBookmark2,		"NotifyTEST Bookmark 2");
+_LIT(KTxtBookmark3, 	"NotifyTEST Bookmark 3");
+_LIT(KTxtBookmark4, 	"NotifyTEST Bookmark 4");
+_LIT(KTxtBookmark5, 	"NotifyTEST Bookmark 5");
+_LIT(KTxtBookmark6, 	"NotifyTEST Bookmark 6");
+_LIT(KTxtBookmark7, 	"NotifyTEST Bookmark 7");
+_LIT(KTxtBookmark8, 	"NotifyTEST Bookmark 8");
+_LIT(KTxtBookmark9, 	"NotifyTEST Bookmark 9");
+_LIT(KTxtBookmark10, 	"NotifyTEST Bookmark 10");
+
+_LIT8(KIconData,		"****4644372131**7*&879");
+const TUint32 KProxyId 	= 0x7CFFFFFF;
+
+/*
+TInt gIndentLevel = 0;
+TBufC<256> gBuffer;
+
+LOCAL_D const TDesC& Indented(const TDesC& aText)
+	{
+	TPtr ptr = gBuffer.Des();
+	ptr.SetLength(0);
+	TInt dots = gIndentLevel - 1;
+	for (;dots >= 0; --dots)
+		{
+		ptr.Append(_L(" . "));
+		}
+	ptr.Append(aText);
+	
+	return gBuffer;
+	}
+	
+LOCAL_D void DumpTreeL(RBkFolder& aFolder)
+	{
+	const TDesC& title = aFolder.Title();
+	gTestWrapper->Tester().Printf(Indented(title));
+
+	++gIndentLevel;
+	RBkNode item;
+	TInt count = aFolder.Count();
+	TInt index = 0;
+	for (;index < count; ++index)
+		{
+		item = aFolder.OpenItemL(index);
+		CleanupClosePushL(item);
+		if (item.Type() == Bookmark::ETypeFolder)
+			{
+			RBkFolder folder;
+			folder.OpenL(item);
+			CleanupClosePushL(folder);
+			DumpTreeL(folder);
+			CleanupStack::PopAndDestroy(&folder);
+			}
+		else
+			{
+			gTestWrapper->Tester().Printf(Indented(item.Title()));
+			}
+		CleanupStack::PopAndDestroy(&item);
+		}
+	--gIndentLevel;
+	}
+*/
+class CNotifyTester: public CActive, public MBookmarkObserver
+	{
+public:
+	static CNotifyTester* NewL(const TDesC& aTitle);
+	~CNotifyTester();
+	
+	void CreateInitialTreeL();
+	void CheckInitialTreeL();
+	
+	void InitiateTest1L();
+	void InitiateTest2L();
+	void InitiateTest3L();
+	void StartTestL();
+	
+	void DeleteBookmarksL();
+	
+protected:
+	// From CActive
+	void RunL();
+	void DoCancel();
+	
+	// From MBookmarkObserver
+	void MBONotify(TEvent aEvent);
+	
+private:
+	CNotifyTester();
+	void ConstructL(const TDesC& aTitle);
+	
+private:
+	RBkDatabase iDatabase;
+	HBufC*		iTitle;
+	TInt		iCurrentTest;
+	};
+
+CNotifyTester* CNotifyTester::NewL(const TDesC& aTitle)
+	{
+	CNotifyTester* self = new (ELeave) CNotifyTester();
+	CleanupStack::PushL(self);
+	self->ConstructL(aTitle);
+	CleanupStack::Pop(self);
+	return self;
+	}
+
+CNotifyTester::CNotifyTester()
+	: CActive(EPriorityStandard), iCurrentTest(1)
+	{
+	}
+	
+CNotifyTester::~CNotifyTester()
+	{
+	delete iTitle;
+	Cancel();
+	iDatabase.Close();
+	}
+	
+void CNotifyTester::ConstructL(const TDesC& aTitle)
+	{
+	iTitle = aTitle.AllocL();
+	CActiveScheduler::Add(this);
+	iDatabase.OpenL(Bookmark::EVisibilityDefault, this);
+	}
+	
+void CNotifyTester::RunL()
+	{
+	iDatabase.RefreshL();
+	TInt err = KErrNone;
+	switch (iCurrentTest)
+		{
+	case 1:
+		gTestWrapper->Next(_L("Tree After Refresh"));
+		TRAP(err, iDatabase.GetIconL(gIconId));
+		gTestWrapper->TESTE(err == KErrNotFound, err);
+		gTestWrapper->TEST(iDatabase.DefaultProxy() == 0);
+		CheckInitialTreeL();
+		break;
+	case 2:
+		gTestWrapper->Next(_L("Check Icon"));
+		gTestWrapper->TEST(iDatabase.GetIconL(gIconId).Compare(KIconData) == 0);
+		gTestWrapper->TEST(iDatabase.DefaultProxy() == 0);
+		break;
+	case 3:
+		gTestWrapper->Next(_L("Check Config"));
+		gTestWrapper->TEST(iDatabase.DefaultProxy() == KProxyId);
+		break;
+	default:
+		// should not get here
+		User::Leave(KErrUnknown);
+		break;
+		}
+		
+	++iCurrentTest;
+    CActiveScheduler::Stop();
+	}
+
+void CNotifyTester::DoCancel()
+	{
+	}
+	
+void CNotifyTester::MBONotify(TEvent aEvent)
+	{
+	if (IsActive())
+		{
+		if ((aEvent == EEventUpdatedBookmarkTree && iCurrentTest == 1) ||
+			(aEvent == EEventUpdatedIcons && iCurrentTest == 2 ) ||
+			(aEvent == EEventUpdatedConfig && iCurrentTest == 3 ) )
+			{
+			TRequestStatus* reqStatus = &iStatus;
+			User::RequestComplete(reqStatus, KErrNone);
+			}
+		}
+	}
+	
+void CNotifyTester::InitiateTest1L()
+	{
+	iDatabase.SetDefaultProxy(0);
+	CreateInitialTreeL();
+	CheckInitialTreeL();
+	iDatabase.CommitL();
+	}
+
+void CNotifyTester::InitiateTest2L()
+	{
+	gIconId = iDatabase.CreateIconL(KIconData);
+	iDatabase.CommitL();
+	}
+
+void CNotifyTester::InitiateTest3L()
+	{
+	iDatabase.SetDefaultProxy(KProxyId);
+	iDatabase.CommitL();
+	}
+
+void CNotifyTester::StartTestL()
+	{
+	if (IsActive())
+		{
+		return;
+		}
+	iStatus = KRequestPending;
+	SetActive();
+	}
+
+void CNotifyTester::DeleteBookmarksL()
+	{
+	RBkFolder root = iDatabase.OpenRootL();
+	CleanupClosePushL(root);
+	RBkNode item;
+	TInt index = root.Count() -1;
+	for (; index >= 0; --index)
+		{
+		item = root.OpenItemL(index);
+		CleanupClosePushL(item);
+		iDatabase.DeleteItemL(item.Id(), ETrue);
+		CleanupStack::PopAndDestroy(&item);
+		}
+	CleanupStack::PopAndDestroy(&root);
+	
+	User::LeaveIfError(iDatabase.DeleteIconL(gIconId));
+	iDatabase.SetDefaultProxy(0);
+	
+	iDatabase.CommitL();
+	
+	}
+
+/* 	
+After a call to the the tree structure looks like:
+			Root
+			 |
+[Bookmark1	Bookmark2	Folder1]
+						  |
+[Bookmark3	Bookmark4	Folder1_1	Folder1_2]
+						  |		  	 |
+					[Bookmark5]		[Bookmark6	Folder1_2_1]
+									  			  |
+								  			[Bookmark7	Folder1_2_1_1]
+								  						  |
+								  		[Bookmark8	Bookmark9	Bookmark10]
+
+*/							  				 
+void CNotifyTester::CreateInitialTreeL()
+	{
+	// Create the first two bookmarks in the root
+	RBkBookmark bmrk = iDatabase.CreateBookmarkL();
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark1);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	bmrk = iDatabase.CreateBookmarkL();
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark2);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Create a folder and put 2 bookmarks into it
+	RBkFolder folder = iDatabase.CreateFolderL(KTxtFolder1);
+	CleanupClosePushL(folder);
+	bmrk = iDatabase.CreateBookmarkL(&folder);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark3);
+	CleanupStack::PopAndDestroy(&bmrk);
+	bmrk = iDatabase.CreateBookmarkL(&folder);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark4);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Create two more folders in this folder and place a bookmark in each one
+	RBkFolder folderL2 = iDatabase.CreateFolderL(KTxtFolder1_1, &folder);
+	CleanupClosePushL(folderL2);
+	bmrk = iDatabase.CreateBookmarkL(&folderL2);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark5);
+	CleanupStack::PopAndDestroy(&bmrk);
+	CleanupStack::PopAndDestroy(&folderL2);
+	
+	folderL2 = iDatabase.CreateFolderL(KTxtFolder1_2, &folder);
+	CleanupClosePushL(folderL2);
+	bmrk = iDatabase.CreateBookmarkL(&folderL2);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark6);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Create a folder under 1_2 and add a bookmark
+	RBkFolder folderL3 = iDatabase.CreateFolderL(KTxtFolder1_2_1, &folderL2);
+	CleanupClosePushL(folderL3);
+	bmrk = iDatabase.CreateBookmarkL(&folderL3);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark7);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Create a folder under 1_2_1 and add 3 bookmarks
+	RBkFolder folderL4 = iDatabase.CreateFolderL(KTxtFolder1_2_1_1, &folderL3);
+	CleanupClosePushL(folderL4);
+	bmrk = iDatabase.CreateBookmarkL(&folderL4);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark8);
+	CleanupStack::PopAndDestroy(&bmrk);
+	bmrk = iDatabase.CreateBookmarkL(&folderL4);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark9);
+	CleanupStack::PopAndDestroy(&bmrk);
+	bmrk = iDatabase.CreateBookmarkL(&folderL4);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark10);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	
+	CleanupStack::PopAndDestroy(&folderL4);
+	CleanupStack::PopAndDestroy(&folderL3);
+	CleanupStack::PopAndDestroy(&folderL2);
+	CleanupStack::PopAndDestroy(&folder);
+	}
+
+void CNotifyTester::CheckInitialTreeL()
+	{
+	RBkFolder root = iDatabase.OpenRootL();
+	CleanupClosePushL(root);
+	gTestWrapper->TEST(root.Count() == 3);
+	
+	if (root.Count() != 3)
+		{
+		User::Leave(KErrNotFound);
+		}
+		
+	RBkNode item = root.OpenItemL(0);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Title().Compare(KTxtBookmark1) == 0);
+	CleanupStack::PopAndDestroy(&item);
+	
+	item = root.OpenItemL(2);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Type() == Bookmark::ETypeFolder);
+	RBkFolder folder1;
+	folder1 = item.OpenFolderL();
+	CleanupStack::PopAndDestroy(&item);
+	CleanupClosePushL(folder1);
+	
+	item = folder1.OpenItemL(0);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Title().Compare(KTxtBookmark3) == 0);
+	CleanupStack::PopAndDestroy(&item);
+	
+	item = folder1.OpenItemL(2);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Type() == Bookmark::ETypeFolder);
+	RBkFolder folder1_1;
+	folder1_1 = item.OpenFolderL();
+	CleanupStack::PopAndDestroy(&item);
+	CleanupClosePushL(folder1_1);
+	
+	item = folder1_1.OpenItemL(0);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Title().Compare(KTxtBookmark5) == 0);
+	CleanupStack::PopAndDestroy(&item);
+	
+	CleanupStack::PopAndDestroy(&folder1_1);
+	
+	item = folder1.OpenItemL(3);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Type() == Bookmark::ETypeFolder);
+	RBkFolder folder1_2;
+	folder1_2 = item.OpenFolderL();
+	CleanupStack::PopAndDestroy(&item);
+	CleanupClosePushL(folder1_2);
+
+	item = folder1_2.OpenItemL(0);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Title().Compare(KTxtBookmark6) == 0);
+	CleanupStack::PopAndDestroy(&item);
+	
+	item = folder1_2.OpenItemL(1);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Type() == Bookmark::ETypeFolder);
+	RBkFolder folder1_2_1;
+	folder1_2_1 = item.OpenFolderL();
+	CleanupStack::PopAndDestroy(&item);
+	CleanupClosePushL(folder1_2_1);
+	
+	item = folder1_2_1.OpenItemL(0);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Title().Compare(KTxtBookmark7) == 0);
+	CleanupStack::PopAndDestroy(&item);
+	
+	item = folder1_2_1.OpenItemL(1);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Type() == Bookmark::ETypeFolder);
+	RBkFolder folder1_2_1_1;
+	folder1_2_1_1 = item.OpenFolderL();
+	CleanupStack::PopAndDestroy(&item);
+	CleanupClosePushL(folder1_2_1_1);
+	
+	item = folder1_2_1_1.OpenItemL(2);
+	CleanupClosePushL(item);
+	gTestWrapper->TEST(item.Title().Compare(KTxtBookmark10) == 0);
+	CleanupStack::PopAndDestroy(&item);
+	
+	CleanupStack::PopAndDestroy(&folder1_2_1_1);
+	CleanupStack::PopAndDestroy(&folder1_2_1);
+	CleanupStack::PopAndDestroy(&folder1_2);
+	CleanupStack::PopAndDestroy(&folder1);
+	CleanupStack::PopAndDestroy(&root);
+	}
+
+void DoNotifyTestsL(CTestWrapper* aTest)
+	{
+	gTestWrapper = aTest;
+	gTestWrapper->SetFile(KFilename);
+	gTestWrapper->Next(_L("*** Notify tests ***"));
+	
+    // Create and install the active scheduler
+    CActiveScheduler* scheduler=new (ELeave) CActiveScheduler;
+    CleanupStack::PushL(scheduler);
+    CActiveScheduler::Install(scheduler);
+
+	CNotifyTester* tester1 = CNotifyTester::NewL(KTxtTester1);
+	gTestWrapper->TEST(tester1 != NULL);
+	CleanupStack::PushL(tester1);
+	
+	CNotifyTester* tester2 = CNotifyTester::NewL(KTxtTester2);
+	gTestWrapper->TEST(tester2 != NULL);
+	CleanupStack::PushL(tester2);
+	
+	tester1->InitiateTest1L();
+	tester2->StartTestL();
+
+    // start the active scheduler
+    CActiveScheduler::Start();
+
+	tester1->InitiateTest2L();
+	tester2->StartTestL();
+
+    // start the active scheduler
+    CActiveScheduler::Start();
+
+	tester1->InitiateTest3L();
+	tester2->StartTestL();
+
+    // start the active scheduler
+    CActiveScheduler::Start();
+
+	tester1->DeleteBookmarksL();
+	
+	CleanupStack::PopAndDestroy(tester2);
+	CleanupStack::PopAndDestroy(tester1);
+	CleanupStack::PopAndDestroy(scheduler);
+	}