diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/bookmarksupport/test/tbookmarktests.cpp --- /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 +#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(); + + + }