applayerpluginsandutils/bookmarksupport/test/Integration/TestBookmarksSuite/TestSetPropertyStep.cpp
changeset 0 b16258d2340f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/bookmarksupport/test/Integration/TestBookmarksSuite/TestSetPropertyStep.cpp	Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,378 @@
+// 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 CTestSetPropertyStep class
+// 
+//
+
+/**
+ @file
+ @internalTechnology 
+*/
+
+// System Includes
+#include <bookmarkdatabase.h>
+#include <escapeutils.h>
+#include <cauthentication.h>
+
+// User Include
+#include "TestSetPropertyStep.h"
+
+/**
+Constructor. Sets the test step name
+@internalTechnology
+@test
+*/
+CTestSetPropertyStep::CTestSetPropertyStep(CTestBookmarksServer& aTestServer) : CTestBookmarksBaseStep(aTestServer)
+	{
+	//Call base class method to set human readable name for test step
+	SetTestStepName(KTestSetPropertyStep);
+	}
+
+
+/**
+Base class pure virtual.
+@internalTechnology
+@test
+@param		None
+@return		EPass or EFail indicating the result of the test step.
+*/
+TVerdict CTestSetPropertyStep::doTestStepL()
+	{
+	TInt property;
+	TPtrC value;
+	if(!GetIntFromConfig(ConfigSection(), 	 KIniProperty, property ) ||
+	  (!GetStringFromConfig(ConfigSection(), KIniValue,	   value	) && property != EBookmarkAuth)
+	  )
+		{
+		ERR_PRINTF3(_L("Problem in reading values from ini.			\
+						\nExpected fields are: \n%S\n%S\n"
+					  ),&KIniProperty, &KIniValue
+				   );
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		TRAPD(error, DoTestL(property, value));
+		if(error != KErrNone)
+			{
+			ERR_PRINTF2(_L("Error occured in CTestSetPropertyStep::DoTestL"), error);
+			SetTestStepResult(EFail);
+			}
+		}
+	return TestStepResult();
+	}	// doTestStepL
+
+/**
+Checks whether DB or item property is to be set and calls the appropriate
+function
+@internalTechnology
+@test
+@param		Enumeration indicating the property to be set
+@param		Value to be set for the property
+@return		None
+*/
+void CTestSetPropertyStep::DoTestL(const TInt& aProperty, const TPtrC& aValue)
+	{
+	TPtrC title;
+	TPtrC typeOfItem;
+	if(aProperty < KDbGeneralPropertiesStart)
+		{// Item property
+		if(!GetStringFromConfig(ConfigSection(), KIniTitle, 	 title			) ||
+	   	   !GetStringFromConfig(ConfigSection(), KIniTypeOfItem, typeOfItem		)
+	   	  )
+			{
+			ERR_PRINTF3(_L("%S and %S must also be provided for item property"),&KIniTypeOfItem, &KIniTitle);
+			SetTestStepResult(EFail);
+			}
+		else
+			{
+			TInt error = KErrNone;
+			RBkNode bkNode;
+			if((error = GetBkNode(title, typeOfItem, bkNode)) != KErrNone)
+				{
+				ERR_PRINTF3(_L("Error occured while opening item %S : %D"), &title, error);
+				SetTestStepError(error);
+				}
+			else
+				{
+				// Node opened, set the property
+				CleanupClosePushL(bkNode);
+				SetItemPropertyValueL(bkNode, aProperty, aValue);
+				CleanupStack::PopAndDestroy(&bkNode);
+				}
+			}
+		}
+	else
+		{// Database property
+		SetDbPropertyValueL(aProperty, aValue);
+		}
+	}	// DoTestL
+
+/**
+Sets an item's property
+@internalTechnology
+@test
+@param		Reference to the handle of the node whose property is to be set
+@param		Enumeration indicating the property to be set
+@param		Value to be set for the property
+@return		None
+*/
+void CTestSetPropertyStep::SetItemPropertyValueL(RBkNode& aBkNode, const TInt& aProperty, const TPtrC& aValue)
+	{
+	INFO_PRINTF2(_L("Property length = %D"), aValue.Length());
+	TInt error = KErrNone;
+	switch(aProperty)
+		{
+		case EItemWritable:
+			TRAP(error, aBkNode.SetWritableL(CTestBookmarksServer::GetBool(aValue)));
+			break;
+		case EItemPublic:
+			TRAP(error, aBkNode.SetPublicL(CTestBookmarksServer::GetBool(aValue)));
+			break;
+		case EItemDescription:
+			TRAP(error, aBkNode.SetDescriptionL(aValue));
+			break;
+		case EItemParent:
+			{
+			error = SetItemParent(aBkNode, aValue);
+			break;
+			}
+		case EItemTitle:
+			TRAP(error, aBkNode.SetTitleL(aValue));
+			break;
+		case EBookmarkNap:
+			{
+			RBkBookmark bkBkMrk = aBkNode.OpenBookmarkL();
+			TRAP(error, bkBkMrk.SetNapL(CTestBookmarksServer::GetTUint32(aValue)));
+			bkBkMrk.Close();
+			break;
+			}
+		case EBookmarkProxy:
+			{
+			RBkBookmark bkBkMrk = aBkNode.OpenBookmarkL();
+			TRAP(error, bkBkMrk.SetProxyL(CTestBookmarksServer::GetTUint32(aValue)));
+			bkBkMrk.Close();
+			break;
+			}
+		case EBookmarkUri:
+			{
+			RBkBookmark bkBkMrk = aBkNode.OpenBookmarkL();
+			CleanupClosePushL(bkBkMrk);
+			// Convert to 8-bit
+			HBufC8* hBufC8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aValue);
+			TRAP(error, bkBkMrk.SetUriL(hBufC8->Des()));
+			delete hBufC8;
+			CleanupStack::PopAndDestroy(&bkBkMrk);
+			break;
+			}
+		case EBookmarkAuth:
+			{
+			RBkBookmark bkBkMrk = aBkNode.OpenBookmarkL();
+			TRAP(error, DoSetAuthenticationL(bkBkMrk));
+			bkBkMrk.Close();
+			break;
+			}
+		case EBookmarkLastVisited:
+			{
+			RBkBookmark bkBkMrk = aBkNode.OpenBookmarkL();
+			TTime time(aValue);
+			TRAP(error, bkBkMrk.SetLastVisitedL(time));
+			bkBkMrk.Close();
+			break;
+			}
+		case EBookmarkLastModified:
+			{
+			RBkBookmark bkBkMrk = aBkNode.OpenBookmarkL();
+			TTime time(aValue);
+			TRAP(error, bkBkMrk.SetLastModifiedL(time));
+			bkBkMrk.Close();
+			break;
+			}
+		case EItemOwner:
+			TRAP(error, aBkNode.SetOwnerL(CTestBookmarksServer::GetTUint32(aValue)));
+			break;
+		default:
+			INFO_PRINTF2(_L("Invalid property number : %D"), aProperty);
+			SetTestStepResult(EFail);
+			break;
+		}
+
+	// Examine the result
+	CheckErrorAndCommit(error);
+	}	// SetItemPropertyValueL
+
+/**
+Sets the item's parent to a folder with the title passed as parameter
+@internalTechnology
+@test
+@param		Reference to the handle to the node whose parent we have to set
+@param		The title of the parent folder to be set
+@return		Error resulting out of the operation, if any. Else, KErrNone
+*/
+TInt CTestSetPropertyStep::SetItemParent(RBkNode& aBkNode, const TPtrC& aValue)
+	{
+	TInt error = KErrNone;
+	RBkNode parentNode;
+	if((error = GetBkNode(aValue, KFolder(), parentNode)) != KErrNone)
+		{
+		ERR_PRINTF3(_L("Error occured while opening item %S : %D"), &aValue, error);
+		SetTestStepError(error);
+		}
+	else
+		{
+		RBkFolder parentFolder;
+		TRAP(error, parentFolder = parentNode.OpenFolderL());
+		if(error == KErrNone)
+			{
+			TRAP(error, aBkNode.SetParentL(parentFolder));
+			parentFolder.Close();
+			}
+		parentNode.Close();
+		}
+	return error;	
+	}
+
+/**
+Sets a database property
+@internalTechnology
+@test
+@param		Enumeration indicating the property to be set
+@param		Value to be set for the property
+@return		None
+*/
+void CTestSetPropertyStep::SetDbPropertyValueL(const TInt& aProperty, const TPtrC& aValue)
+	{
+	TInt error = KErrNone;
+	switch(aProperty)
+		{
+		case EDbDefaultNap:
+			iBkDb.SetDefaultNap(CTestBookmarksServer::GetTUint32(aValue));
+			break;
+		case EDbDefaultProxy:
+			iBkDb.SetDefaultProxy(CTestBookmarksServer::GetTUint32(aValue));
+			break;
+		case EDbHome:
+			{
+			error = SetHomePageBookmark(aValue);
+			break;
+			}
+		case EDbHomePageText:
+			TRAP(error, iBkDb.SetHomePageTextL(aValue));
+			break;
+		case EDbSearchUri:
+			{
+			// Convert to 8-bit
+			HBufC8* hBufC8 = EscapeUtils::ConvertFromUnicodeToUtf8L(aValue);
+			TRAP(error, iBkDb.SetSearchUriL(hBufC8->Des()));
+			delete hBufC8;
+			break;
+			}
+		default:
+			INFO_PRINTF2(_L("Invalid property number : %D"), aProperty);
+			SetTestStepResult(EFail);
+			break;
+		}
+
+	// Examine the result
+	CheckErrorAndCommit(error);
+	}	// SetDbPropertyValueL
+
+/**
+Sets the item's homepage bookmark to a bookmark indicated by the parameter
+@internalTechnology
+@test
+@param		Descriptor identifying the bookmark to be set as homepage
+@return		Error resulting out of the operation, if any. Else, KErrNone
+*/
+TInt CTestSetPropertyStep::SetHomePageBookmark(const TPtrC& aValue)
+	{
+	TInt error = KErrNone;
+	RBkNode bkNode;
+	if((error = GetBkNode(aValue, KBookmark(), bkNode)) != KErrNone)
+		{
+		ERR_PRINTF3(_L("Error occured while opening item %S : %D"), &aValue, error);
+		SetTestStepError(error);
+		}
+	else
+		{
+		CleanupClosePushL(bkNode);
+		RBkBookmark homePageBkMrk = bkNode.OpenBookmarkL();
+		iBkDb.SetHome(homePageBkMrk);
+		homePageBkMrk.Close();
+		CleanupStack::PopAndDestroy(&bkNode);
+		}
+	return error;	
+	}
+				
+/**
+Reads authentication detail from ini, constructs an authentication object
+and sets it to the bookmark.
+@internalTechnology
+@test
+@param		Reference to handle to the bookmark whose auth-params are to be set
+@return		None
+*/
+void CTestSetPropertyStep::DoSetAuthenticationL(RBkBookmark& bkBkMrk)
+	{
+	TPtrC name;
+	TPtrC password;
+
+	if(!GetStringFromConfig(ConfigSection(), KIniAuthName, 	   name		) ||
+	   !GetStringFromConfig(ConfigSection(), KIniAuthPassword, password	)
+	  )
+		{
+		ERR_PRINTF3(_L("%S and %S must also be mentioned in ini file"),&KIniAuthName, &KIniAuthPassword);
+		SetTestStepResult(EFail);
+		}
+	else
+		{
+		HBufC8* name8 = EscapeUtils::ConvertFromUnicodeToUtf8L(name);
+		CleanupStack::PushL(name8);
+		HBufC8* password8 = EscapeUtils::ConvertFromUnicodeToUtf8L(password);
+		CleanupStack::PushL(password8);
+
+		TPtrC method;
+		CAuthentication *auth = NULL;
+		// Construct authentication object
+		if(!GetStringFromConfig(ConfigSection(), KIniAuthMethod, method))
+			{
+			// No method supplied
+			INFO_PRINTF1(_L("No method supplied, calling without method argument"));
+			auth = CAuthentication::NewL(name8->Des(), password8->Des());
+			}
+		else if(method.Compare(KMethodBasic()) == KErrNone)
+			{
+			auth = CAuthentication::NewL(name8->Des(), password8->Des(), CAuthentication::EBasic);
+			}
+		else if(method.Compare(KMethodDigest()) == KErrNone)
+			{
+			auth = CAuthentication::NewL(name8->Des(), password8->Des(), CAuthentication::EDigest);
+			}
+		else
+			{
+			INFO_PRINTF2(_L("Invalid method %S"), &method);
+			SetTestStepResult(EFail);
+			}
+
+		if(auth != NULL)
+			{
+			CleanupStack::PushL(auth);
+			// Set the bookmark's authentication object
+			bkBkMrk.SetAuthenticationL(*auth);
+			CleanupStack::PopAndDestroy(auth);
+			}
+
+		CleanupStack::PopAndDestroy(2, name8);
+		}
+	}	// DoSetAuthenticationL