diff -r 000000000000 -r b16258d2340f applayerpluginsandutils/bookmarksupport/test/Integration/TestBookmarksSuite/TestBookmarksBaseStep.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/applayerpluginsandutils/bookmarksupport/test/Integration/TestBookmarksSuite/TestBookmarksBaseStep.cpp Tue Feb 02 01:09:52 2010 +0200 @@ -0,0 +1,451 @@ +// 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: +// Contains implementation of CTestBookmarksBaseStep class +// +// + +/** + @file + @internalTechnology +*/ + +// User Include +#include "TestBookmarksBaseStep.h" + +/** +Constructor. Sets the test step name and initialises the TestServer +reference. +@internalTechnology +@test +*/ +CTestBookmarksBaseStep::CTestBookmarksBaseStep(CTestBookmarksServer& aTestServer) : iTestServer(aTestServer) + { + //Call base class method to set human readable name for test step + SetTestStepName(KTestBookmarksBaseStep); + } + +/** +Destructor. Closes the database handle +@internalTechnology +@test +*/ +CTestBookmarksBaseStep::~CTestBookmarksBaseStep() + { + iBkDb.Close(); + } + +/** +Base class virtual. Opens connection with the bookmark database. +@internalTechnology +@test +@param None +@return EPass or EFail indicating the result of opening the DB. +*/ +TVerdict CTestBookmarksBaseStep::doTestStepPreambleL() + { + TSecurityInfo info; + info.Set(RProcess()); + INFO_PRINTF2(_L("\n\nSecure id = %U\n\n"), info.iSecureId); + + TInt error = KErrNone; + TPtrC dbMode; + // Get DB mode from ini + if(!GetStringFromConfig(ConfigSection(), KIniDbMode, dbMode)) + { + TRAP(error, iBkDb.OpenL()); + } + else + { + INFO_PRINTF2(_L("Opening DB in %S mode"), &dbMode); + TRAP(error, iBkDb.OpenL(GetDbOpenMode(dbMode))); + } + if(error != KErrNone) + { + ERR_PRINTF2(_L("Error occured while opening DB : %D"), error); + SetTestStepError(error); + } + else + { + INFO_PRINTF1(_L("DB opened successfully")); + } + return TestStepResult(); + } // doTestPreambleL + +/** +Base class pure virtual. Just returns the test step result. +@internalTechnology +@test +@param None +@return EPass or EFail indicating the result of the test step. +*/ +TVerdict CTestBookmarksBaseStep::doTestStepL() + { + return TestStepResult(); + } // doTestStepL + +/** +Commits the Bookmarks Database +@internalTechnology +@test +@param None +@return None +*/ +void CTestBookmarksBaseStep::CommitDb() + { + TRAPD(err, iBkDb.CommitL()); + if(err == KErrNone) + { + INFO_PRINTF1(_L("Commit succeeded")); + } + else + { + ERR_PRINTF2(_L("Error occured during commit: %D"), err); + SetTestStepError(err); + } + } + +/** +Gets the array index of the id for the item with the particular title +@internalTechnology +@test +@param Title of the Bookmark item +@return The index of the item in the array of ids +*/ +TInt CTestBookmarksBaseStep::GetArrayIndex(const TPtrC& aTitle) + { + for(TInt index = 0; index < iTestServer.iTitles.Count(); ++index) + { + if (iTestServer.iTitles[index]->Des().Compare(aTitle) == KErrNone) + { + return index; + } + } + return KErrGeneral; + } + +/** +Opens a folder or root based on title passed +@internalTechnology +@test +@param Title of the parent folder +@param Reference to a non-open folder handle. +@return Error code that indicates the result of the operation. +*/ +TInt CTestBookmarksBaseStep::GetParentFolder(const TPtrC& aParent, RBkFolder& aParentFolder) + { + TInt error = KErrNone; + if(aParent == KRoot) + { + TRAP(error, aParentFolder = iBkDb.OpenRootL()); + } + else + { + TRAP(error, aParentFolder = iBkDb.OpenFolderL(aParent)); + } + return error; + } + +/** +Opens the node which has a particular title +@internalTechnology +@test +@param Title of the item to be opened +@param Type of item : bookmark/folder +@param Type of item +@param Reference to a non-open node handle. +@return Error code that indicates the result of the operation. +*/ +TInt CTestBookmarksBaseStep::GetBkNode(const TPtrC& aTitle, \ + const TPtrC& aTypeOfItem,\ + RBkNode& aBkNode) + { + TInt error = KErrNone; + if(aTitle == KRoot) + { + TRAP(error, aBkNode = iBkDb.OpenRootL()); + } + else if(aTypeOfItem == KFolder) + { + TRAP(error, aBkNode = iBkDb.OpenFolderL(aTitle)); + } + else if(aTypeOfItem == KBookmark) + { + // If type is bookmark, try to find it in the array + TInt index = GetArrayIndex(aTitle); + if(index < KErrNone) + { + // Not found in array, do a search in the tree + INFO_PRINTF1(_L("Item not found in Titles array")); + Bookmark::TItemId id = Bookmark::KNullItemID; + RBkFolder root; + TRAP(error, root = iBkDb.OpenRootL()); + if(error != KErrNone) + { + ERR_PRINTF2(_L("Error occured while opening root: %D"), error); + } + else + { + TRAP(error, id = GetItemFromTreeL(aTitle, root)); + root.Close(); + if(error != KErrNone) + { + ERR_PRINTF2(_L("Error occured in IsItemInFolderL: %D"), error); + } + else if(id == Bookmark::KNullItemID) + { + INFO_PRINTF1(_L("Item not found in folder tree")); + error = KErrNotFound; + } + else + { + INFO_PRINTF2(_L("Trying to open item with id %U"), id); + TRAP(error, aBkNode = iBkDb.OpenBookmarkL(id)); + } + } + } + else + { + TRAP(error, aBkNode = iBkDb.OpenBookmarkL(iTestServer.iIds[index])); + } + } + if(error != KErrNone) + { + ERR_PRINTF2(_L("Error occured in GetBkNode : %D"), error); + } + return error; + } + +/** +Resolves DB open mode from the string passed +@internalTechnology +@test +@param Descriptor indicating mode to open the DB +@return Bookmark::TVisibility enumeration based on the open-mode +*/ +Bookmark::TVisibility CTestBookmarksBaseStep::GetDbOpenMode(const TPtrC& aMode) + { + if(aMode.Compare(KDbModePublic) == KErrNone) + { + return Bookmark::EVisibilityPublic; + } + else if(aMode.Compare(KDbModePrivate) == KErrNone) + { + return Bookmark::EVisibilityPrivate; + } + else if(aMode.Compare(KDbModeAll) == KErrNone) + { + return Bookmark::EVisibilityAll; + } + else if(aMode.Compare(KDbModeManager) == KErrNone) + { + return Bookmark::EVisibilityManager; + } + else + { + return Bookmark::EVisibilityDefault; + } + } + +/** +A recursive routine to find an item with a particular title from the tree +@internalTechnology +@test +@param Title of the item to be found +@param Handle to the main folder from which search is to begin. +@return Id of the bookmark item if found. Null Id if not. +*/ +Bookmark::TItemId CTestBookmarksBaseStep::GetItemFromTreeL(const TDesC& aName, RBkFolder aFolder) + { + RBkNode item; + Bookmark::TItemId id = Bookmark::KNullItemID; + // Loop through all children + TInt index = aFolder.Count() - 1; + for (;index >= 0; --index) + { + item = aFolder.OpenItemL(index); + CleanupClosePushL(item); + const TDesC& title = item.Title(); + + INFO_PRINTF3(_L("Parent-title = %S, id = %U"), &(aFolder.Title()), aFolder.Id()); + INFO_PRINTF4(_L("index = %D Title = %S, id = %U"), index, &title, item.Id()); + + if (title.Compare(aName) == 0) + {// Title matched + id = item.Id(); + } + else if (item.Type() == Bookmark::ETypeFolder) + {// Title did not match, but item is a folder, so recurse into it + RBkFolder folder = item.OpenFolderL(); + CleanupClosePushL(folder); + // recurse + id = GetItemFromTreeL(aName, folder); + CleanupStack::PopAndDestroy(&folder); + } + CleanupStack::PopAndDestroy(&item); + if (id != Bookmark::KNullItemID) + {// If valid id, then we are done + break; + } + } + return id; + } + +/** +Compare two TUints and return verdict +@internalTechnology +@test +@param TUint32 Value 1 to be compared +@param TUint32 Value 2 to be compared +@return EPass or EFail based on comparison +*/ +TVerdict CTestBookmarksBaseStep::CompareTUints(const TUint32& aTUint32Val1, const TUint32& aTUint32Val2) + { + INFO_PRINTF2(_L("Value 1 = %U"), aTUint32Val1); + INFO_PRINTF2(_L("Value 2 = %U"), aTUint32Val2); + return (aTUint32Val1 == aTUint32Val2) ? EPass : EFail; + } + +/** +Compare two TBools and return verdict +@internalTechnology +@test +@param TBool Value 1 to be compared +@param TBool Value 2 to be compared +@return EPass or EFail based on comparison +*/ +TVerdict CTestBookmarksBaseStep::CompareBools(const TBool& aBoolVal1, const TBool& aBoolVal2) + { + INFO_PRINTF2(_L("Value 1 = %S"), &(aBoolVal1 ? KTrue() : KFalse())); + INFO_PRINTF2(_L("Value 2 = %S"), &(aBoolVal2 ? KTrue() : KFalse())); + return (!aBoolVal1 == !aBoolVal2) ? EPass : EFail; + } + +/** +Compare two strings and return verdict +@internalTechnology +@test +@param Descriptor Value 1 to be compared +@param Descriptor Value 2 to be compared +@return EPass or EFail based on comparison +*/ +TVerdict CTestBookmarksBaseStep::CompareStrings(const TPtrC& aStrVal1, const TPtrC& aStrVal2) + { + INFO_PRINTF2(_L("Value 1 = %S"), &aStrVal1); + INFO_PRINTF2(_L("Value 2 = %S"), &aStrVal2); + return (aStrVal1.Compare(aStrVal2) == KErrNone) ? EPass : EFail; + } + +/** +Compare two TInts and return verdict +@internalTechnology +@test +@param TInt Value 1 to be compared +@param TInt Value 2 to be compared +@return EPass or EFail based on comparison +*/ +TVerdict CTestBookmarksBaseStep::CompareTInts(const TInt& aTIntVal1, const TInt& aTIntVal2) + { + INFO_PRINTF2(_L("Value 1 = %D"), aTIntVal1); + INFO_PRINTF2(_L("Value 2 = %D"), aTIntVal2); + return (aTIntVal1 == aTIntVal2) ? EPass : EFail; + } + +/** +Compare two TReals and return verdict +@internalTechnology +@test +@param TReal Value 1 to be compared +@param TReal Value 2 to be compared +@return EPass or EFail based on comparison +*/ +TVerdict CTestBookmarksBaseStep::CompareTReals(const TReal& aTRealVal1, const TReal& aTRealVal2) + { + INFO_PRINTF2(_L("Value 1 = %g"), aTRealVal1); + INFO_PRINTF2(_L("Value 2 = %g"), aTRealVal2); + return (aTRealVal1 == aTRealVal2) ? EPass : EFail; + } + +/** +Compare two TTimes and return verdict +@internalTechnology +@test +@param TTime Value 1 to be compared +@param TTime Value 2 to be compared +@return EPass or EFail based on comparison +*/ +TVerdict CTestBookmarksBaseStep::CompareTTimes(const TTime& aTTimeVal1, const TTime& aTTimeVal2) + { + INFO_PRINTF2(_L("Value 1 = %g"), aTTimeVal1.Int64()); + INFO_PRINTF2(_L("Value 2 = %g"), aTTimeVal2.Int64()); + return (aTTimeVal1 == aTTimeVal2) ? EPass : EFail; + } + +/** +Checks error and commits the DB if error is KErrNone +@internalTechnology +@test +@param Error value to be checked +@return None +*/ +void CTestBookmarksBaseStep::CheckErrorAndCommit(const TInt& aError) + { + // Examine the result + if(TestStepResult() == EPass) + { + if(aError != KErrNone) + { + ERR_PRINTF2(_L("The operation failed with error: %D"), aError); + SetTestStepError(aError); + } + else + { + INFO_PRINTF1(_L("The operation was successful.")); + CommitDb(); + } + } + } + +/** +Checks error and if error is KErrNone, checks and sets the verdict +@internalTechnology +@test +@param Error value to be checked +@param Verdict as a result of some operation +@return None +*/ +void CTestBookmarksBaseStep::CheckErrorAndVerdict(const TInt& aError, const TVerdict& aVerdict) + { + if(TestStepResult() == EPass) + { + if(aError != KErrNone) + { + ERR_PRINTF2(_L("The operation failed with error: %D"), aError); + SetTestStepError(aError); + } + else + { + if(aVerdict == EPass) + { + INFO_PRINTF1(_L("The returned and the expected values matched.")); + } + else + { + INFO_PRINTF1(_L("The returned and the expected values did not match.")); + SetTestStepResult(aVerdict); + } + } + } + } + +