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