applayerpluginsandutils/bookmarksupport/test/tbookmarktests.cpp
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/bookmarksupport/test/tbookmarktests.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,455 @@
+// 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, "tbookmarktests.cpp");
+
+_LIT(KTxtFolder1, 		"Folder 1");
+_LIT(KTxtFolder1_1, 	"Folder 1.1");
+_LIT(KTxtFolder1_2, 	"Folder 1.2");
+_LIT(KTxtFolder1_2_1, 	"Folder 1.2.1");
+_LIT(KTxtFolder1_2_1_1,	"Folder 1.2.1.1");
+
+_LIT(KTxtBookmark1,		"Bookmark 1");
+_LIT(KTxtBookmark2,		"Bookmark 2");
+_LIT(KTxtBookmark3, 	"Bookmark 3");
+_LIT(KTxtBookmark4, 	"Bookmark 4");
+_LIT(KTxtBookmark5, 	"Bookmark 5");
+_LIT(KTxtBookmark6, 	"Bookmark 6");
+_LIT(KTxtBookmark7, 	"Bookmark 7");
+_LIT(KTxtBookmark8, 	"Bookmark 8");
+_LIT(KTxtBookmark9, 	"Bookmark 9");
+_LIT(KTxtBookmark10, 	"Bookmark 10");
+
+_LIT8(KIconData,		"****4644372131**7*&879");
+
+LOCAL_D CTestWrapper* gTestWrapper;
+LOCAL_D	RBkDatabase gDatabase;
+
+LOCAL_D void CreateBookmarkTreeL()
+	{
+	Bookmark::TAttachmentId iconId = gDatabase.CreateIconL(KIconData);
+	
+	// Create the first two bookmarks in the root
+	RBkBookmark bmrk = gDatabase.CreateBookmarkL();
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark1);
+	bmrk.SetIconIdL(iconId);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	bmrk = gDatabase.CreateBookmarkL();
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark2);
+	
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Create a folder and put 2 bookmarks into it
+	RBkFolder folder = gDatabase.CreateFolderL(KTxtFolder1);
+	CleanupClosePushL(folder);
+	bmrk = gDatabase.CreateBookmarkL(&folder);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark3);
+	CleanupStack::PopAndDestroy(&bmrk);
+	bmrk = gDatabase.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 = gDatabase.CreateFolderL(KTxtFolder1_1, &folder);
+	CleanupClosePushL(folderL2);
+	bmrk = gDatabase.CreateBookmarkL(&folderL2);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark5);
+	CleanupStack::PopAndDestroy(&bmrk);
+	CleanupStack::PopAndDestroy(&folderL2);
+	
+	folderL2 = gDatabase.CreateFolderL(KTxtFolder1_2, &folder);
+	CleanupClosePushL(folderL2);
+	bmrk = gDatabase.CreateBookmarkL(&folderL2);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark6);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Create a folder under 1_2 and add a bookmark
+	RBkFolder folderL3 = gDatabase.CreateFolderL(KTxtFolder1_2_1, &folderL2);
+	CleanupClosePushL(folderL3);
+	bmrk = gDatabase.CreateBookmarkL(&folderL3);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark7);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Create a folder under 1_2_1 and add 3 bookmarks
+	RBkFolder folderL4 = gDatabase.CreateFolderL(KTxtFolder1_2_1_1, &folderL3);
+	CleanupClosePushL(folderL4);
+	bmrk = gDatabase.CreateBookmarkL(&folderL4);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark8);
+	CleanupStack::PopAndDestroy(&bmrk);
+	bmrk = gDatabase.CreateBookmarkL(&folderL4);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark9);
+	CleanupStack::PopAndDestroy(&bmrk);
+	bmrk = gDatabase.CreateBookmarkL(&folderL4);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark10);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	
+	CleanupStack::PopAndDestroy(&folderL4);
+	CleanupStack::PopAndDestroy(&folderL3);
+	CleanupStack::PopAndDestroy(&folderL2);
+	CleanupStack::PopAndDestroy(&folder);
+	}
+
+void CreateSomeBookmarksL()
+	{
+	RBkDatabase database;
+	database.OpenL();
+	CleanupClosePushL(gDatabase);
+	
+	// Create the first two bookmarks in the root
+	RBkBookmark bmrk = database.CreateBookmarkL();
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark1);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	bmrk = database.CreateBookmarkL();
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark2);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Create a folder
+	RBkFolder folder = database.CreateFolderL(KTxtFolder1);
+	CleanupClosePushL(folder);
+	
+	// Put 2 bookmarks into the new folder
+	bmrk = database.CreateBookmarkL(&folder);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark3);
+	CleanupStack::PopAndDestroy(&bmrk);
+	bmrk = database.CreateBookmarkL(&folder);
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark4);
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Close the folder
+	CleanupStack::PopAndDestroy(&folder);
+	
+	// Commit the changes to the database and close it
+	database.CommitL();
+	CleanupStack::PopAndDestroy(&database);
+	}
+
+_LIT8(KFolderIconData,		"****4644372131**7*&879");
+_LIT8(KBookmarkIconData,		"****46=-=-=4372131**7*&879");
+_LIT(KTxtFolderDesc, "This is the folder description");
+_LIT(KTxtBookmarkDesc, "This is the bookmark description");
+_LIT8(KBookmarkUri, "www.ft.com");
+_LIT8(KSearchUri, "www.google.com");
+_LIT(KHomePageDesc, "This is the home page description");
+
+void SettingStandardPropertiesL()
+	{
+	// Open the database
+	RBkDatabase database;
+	database.OpenL();
+	CleanupClosePushL(database);
+
+	// Create some icons	
+	Bookmark::TAttachmentId folderIconId = database.CreateIconL(KFolderIconData);
+	Bookmark::TAttachmentId bookmarkIconId = database.CreateIconL(KBookmarkIconData);
+
+	// Create a folder
+	RBkFolder folder = database.CreateFolderL(KTxtFolder1);
+	CleanupClosePushL(folder);
+	// Set some folder properties
+	folder.SetDescriptionL(KTxtFolderDesc);
+	folder.SetIconIdL(folderIconId);
+	
+	// Create a bookmark in the new folder
+	RBkBookmark bmrk = database.CreateBookmarkL(&folder);
+	CleanupClosePushL(bmrk);
+	// Set some bookmark properties
+	bmrk.SetTitleL(KTxtBookmark1);
+	bmrk.SetDescriptionL(KTxtBookmarkDesc);
+	bmrk.SetUriL(KBookmarkUri);
+	bmrk.SetIconIdL(bookmarkIconId);
+	
+	// Set some database properties
+	database.SetHomePageTextL(KHomePageDesc);
+	database.SetHome(bmrk);
+	database.SetSearchUriL(KSearchUri);
+	
+	// Close the bookmark
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Close the folder
+	CleanupStack::PopAndDestroy(&folder);
+	
+	// Commit the changes to the database and close it
+	database.CommitL();
+	CleanupStack::PopAndDestroy(&database);
+	}
+	
+void CreatingAnIconL()
+	{
+	// Open the database
+	RBkDatabase database;
+	database.OpenL();
+	CleanupClosePushL(database);
+
+	// Create an icon	
+	Bookmark::TAttachmentId bookmarkIconId = database.CreateIconL(KBookmarkIconData);
+
+	// Create a bookmark in the root
+	RBkBookmark bmrk = database.CreateBookmarkL();
+	CleanupClosePushL(bmrk);
+	// Set some bookmark properties
+	bmrk.SetIconIdL(bookmarkIconId);
+	// Close the bookmark
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	// Commit the changes to the database and close it
+	database.CommitL();
+	CleanupStack::PopAndDestroy(&database);
+	}
+	
+void CreateBookmarkWithCustomPropertiesL()
+	{
+	TUid des16PropertyUid = {0x00001234};
+	TUid des8PropertyUid = {0x00001235};
+	TUid intPropertyUid = {0x00001236};
+	TUid realPropertyUid = {0x00001237};
+	
+	_LIT(KTxtFirst16EditorName, "Joe Bloggs");
+	_LIT(KTxtSecond16EditorName, "Joe Bloggs II");
+	
+	_LIT8(KTxtFirst8ReferrerName, "Krishna");
+	_LIT8(KTxtSecond8RefererName, "Ganesh");
+		
+	// Register a custom propery
+	gDatabase.RegisterBookmarkPropertyL(des16PropertyUid, Bookmark::EDataTypeDes16);
+	
+	// Register a custom propery
+	gDatabase.RegisterBookmarkPropertyL(des8PropertyUid, Bookmark::EDataTypeDes8);
+	
+	// Register a custom propery
+	gDatabase.RegisterBookmarkPropertyL(intPropertyUid, Bookmark::EDataTypeInt);
+	
+	// Register a custom propery
+	gDatabase.RegisterBookmarkPropertyL(realPropertyUid, Bookmark::EDataTypeReal);
+	
+	// Create a bookmark in the root
+	RBkBookmark bmrk = gDatabase.CreateBookmarkL();
+	CleanupClosePushL(bmrk);
+	bmrk.SetTitleL(KTxtBookmark1);
+	
+	//Added twice to check for memory leak described in INC067424
+	
+	// Set the custom property value
+	bmrk.SetCustomPropertyL(des16PropertyUid, KTxtFirst16EditorName);
+	bmrk.SetCustomPropertyL(des16PropertyUid, KTxtSecond16EditorName);
+	
+	// Set the custom property value
+	bmrk.SetCustomPropertyL(des8PropertyUid, KTxtFirst8ReferrerName);
+	bmrk.SetCustomPropertyL(des8PropertyUid, KTxtSecond8RefererName);
+	
+	
+	// Set the custom property value
+	bmrk.SetCustomPropertyL(intPropertyUid, 1);
+	bmrk.SetCustomPropertyL(intPropertyUid, 2);
+	
+	// Set the custom property value
+	bmrk.SetCustomPropertyL(realPropertyUid, 3.14159);
+	bmrk.SetCustomPropertyL(realPropertyUid, 3.14159);
+	
+	
+	CleanupStack::PopAndDestroy(&bmrk);
+	
+	}
+
+Bookmark::TItemId FindBookmarkIdL(const TDesC& aName, RBkFolder aFolder)	
+	{
+	RBkNode item;
+	Bookmark::TItemId id = Bookmark::KNullItemID;
+	for (TInt index = aFolder.Count() - 1; index >= 0; --index)
+		{
+		// open the child item at this index value
+		item = aFolder.OpenItemL(index);
+		CleanupClosePushL(item);
+		// check the title
+		const TDesC& title = item.Title();
+		if (item.Type() == Bookmark::ETypeBookmark && title.Compare(aName) == 0)
+			{
+			id = item.Id();
+			}
+		else if (item.Type() == Bookmark::ETypeFolder)
+			{
+			// if the item is a folder, open as a folder and call FindBookmarkL to
+			// check its children
+			RBkFolder folder = item.OpenFolderL();
+			CleanupClosePushL(folder);
+			id = FindBookmarkIdL(aName, folder);
+			// close the folder
+			CleanupStack::PopAndDestroy(&folder);
+			}
+		// close the child item
+		CleanupStack::PopAndDestroy(&item);
+		if (id != Bookmark::KNullItemID)
+			{
+			// the bookmark has been found so no need to look at any more items
+			break;
+			}
+		}
+	return id;
+	}	
+
+	
+LOCAL_D TBool IsItemInFolderL(const TDesC& aName, RBkFolder aFolder)	
+	{
+	RBkNode item;
+	TBool found = EFalse;
+	TInt index = aFolder.Count() - 1;
+	for (;index >= 0; --index)
+		{
+		item = aFolder.OpenItemL(index);
+		CleanupClosePushL(item);
+		const TDesC& title = item.Title();
+		if (title.Compare(aName) == 0)
+			{
+			found = ETrue;
+			}
+		CleanupStack::PopAndDestroy(&item);
+		if (found)
+			{
+			break;
+			}
+		}
+	return found;
+	}
+	
+LOCAL_D void CreateBookmarksL()	
+	{
+	gTestWrapper->Next(_L("[Bookmark tests] create bookmarks"));
+	
+	CreateBookmarkTreeL();
+	
+	// Check there are 3 items in the root (2 bookmarks and 1 folder)
+	RBkFolder folder = gDatabase.OpenRootL();
+	CleanupClosePushL(folder);
+	gTestWrapper->TEST(folder.Count() == 3);
+	// Check the titles are correct
+	gTestWrapper->TEST(IsItemInFolderL(KTxtFolder1, folder));
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark1, folder));
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark2, folder));
+	CleanupStack::PopAndDestroy(&folder);
+	
+	// Open folder 1 and check there are 4 items (2 bookmarks and 2 folders)
+	folder = gDatabase.OpenFolderL(KTxtFolder1);
+	CleanupClosePushL(folder);
+	gTestWrapper->TEST(folder.Count() == 4);
+	// Check the titles are correct
+	gTestWrapper->TEST(IsItemInFolderL(KTxtFolder1_1, folder));
+	gTestWrapper->TEST(IsItemInFolderL(KTxtFolder1_2, folder));
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark3, folder));
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark4, folder));
+	CleanupStack::PopAndDestroy(&folder);
+
+	// Open folder 1.1 and check there is 1 item
+	folder = gDatabase.OpenFolderL(KTxtFolder1_1);
+	CleanupClosePushL(folder);
+	gTestWrapper->TEST(folder.Count() == 1);
+	// Check the title is correct
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark5, folder));
+	CleanupStack::PopAndDestroy(&folder);
+
+	// Open folder 1.2 and check there are 2 items (1 bookmark and 1 folder)
+	folder = gDatabase.OpenFolderL(KTxtFolder1_2);
+	CleanupClosePushL(folder);
+	gTestWrapper->TEST(folder.Count() == 2);
+	// Check the titles are correct
+	gTestWrapper->TEST(IsItemInFolderL(KTxtFolder1_2_1, folder));
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark6, folder));
+	CleanupStack::PopAndDestroy(&folder);
+	
+	// Open folder 1.2.1 and check there are 2 items (1 bookmark and 1 folder)
+	folder = gDatabase.OpenFolderL(KTxtFolder1_2_1);
+	CleanupClosePushL(folder);
+	gTestWrapper->TEST(folder.Count() == 2);
+	// Check the titles are correct
+	gTestWrapper->TEST(IsItemInFolderL(KTxtFolder1_2_1_1, folder));
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark7, folder));
+	CleanupStack::PopAndDestroy(&folder);
+	
+	// Open folder 1.2.1.1 and check there are 3 items (3 bookmarks)
+	folder = gDatabase.OpenFolderL(KTxtFolder1_2_1_1);
+	CleanupClosePushL(folder);
+	gTestWrapper->TEST(folder.Count() == 3);
+	// Check the titles are correct
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark8, folder));
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark9, folder));
+	gTestWrapper->TEST(IsItemInFolderL(KTxtBookmark10, folder));
+	CleanupStack::PopAndDestroy(&folder);
+	}
+
+LOCAL_D void CreateDatabaseL()
+	{
+	gDatabase.OpenL();
+	CleanupClosePushL(gDatabase);
+	CreateBookmarkTreeL();
+	CleanupStack::PopAndDestroy(&gDatabase);
+	}
+
+LOCAL_D void OOMTestL()
+	{
+	gTestWrapper->Next(_L("[Bookmark tests] OOM testing"));
+	TInt ret = KErrNoMemory;
+	TInt failAt = 0;
+	while(ret != KErrNone)
+		{
+		failAt++;
+		gTestWrapper->Tester().Printf(_L("OOM test step: %d\n"),failAt);
+
+		__UHEAP_SETFAIL(RHeap::EDeterministic, failAt);
+		__UHEAP_MARK;
+		TRAP(ret, CreateDatabaseL());
+		__UHEAP_MARKEND;
+		__UHEAP_RESET;
+		
+		gTestWrapper->TESTE(ret == KErrNoMemory || ret == KErrNone, ret);
+		}
+	}
+	
+void DoBookmarkTestsL(CTestWrapper* aTest)
+	{
+	gTestWrapper = aTest;
+	gTestWrapper->SetFile(KFilename);
+	gTestWrapper->Next(_L("*** Bookmark tests ***"));
+	
+	gDatabase.OpenL();
+	CleanupClosePushL(gDatabase);
+
+	CreateBookmarksL();
+    CreateBookmarkWithCustomPropertiesL();
+    
+	CleanupStack::PopAndDestroy(&gDatabase);
+	
+	OOMTestL();
+	
+	
+	}