--- /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