applayerpluginsandutils/bookmarksupport/test/Integration/TestBookmarksSuite/TestBookmarksBaseStep.cpp
changeset 0 b16258d2340f
--- /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);
+				}
+			}
+		}
+	}
+
+