--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/applayerpluginsandutils/bookmarksupport/test/Integration/TestBookmarksSuite/TestCustomPropertyStep.cpp Tue Feb 02 01:09:52 2010 +0200
@@ -0,0 +1,420 @@
+// 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 CTestCustomPropertyStep class
+//
+//
+
+/**
+ @file
+ @internalTechnology
+*/
+
+// System Includes
+#include <bookmarkdatabase.h>
+
+// User Include
+#include "TestCustomPropertyStep.h"
+
+/**
+Constructor. Sets the test step name
+@internalTechnology
+@test
+*/
+CTestCustomPropertyStep::CTestCustomPropertyStep(CTestBookmarksServer& aTestServer) : CTestBookmarksBaseStep(aTestServer)
+ {
+ //Call base class method to set human readable name for test step
+ SetTestStepName(KTestCustomPropertyStep);
+ }
+
+
+/**
+Base class pure virtual.
+@internalTechnology
+@test
+@param None
+@return EPass or EFail indicating the result of the test step.
+*/
+TVerdict CTestCustomPropertyStep::doTestStepL()
+ {
+ TPtrC operation;
+ TPtrC category;
+ TPtrC uniqueId;
+ if(!GetStringFromConfig(ConfigSection(), KIniOperation, operation ) ||
+ !GetStringFromConfig(ConfigSection(), KIniCategory, category ) ||
+ !GetStringFromConfig(ConfigSection(), KIniUid, uniqueId )
+ )
+ {
+ ERR_PRINTF4(_L("Problem in reading values from ini. \
+ \nExpected fields are: \n%S\n%S\n%S\n"
+ ),&KIniOperation, &KIniCategory, &KIniUid
+ );
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ if(operation.Compare(KRegisterOperation) == KErrNone || operation.Compare(KDeRegisterOperation) == KErrNone)
+ {// Register or deregister custom property
+ DoRegDeregCustomProperty(operation, category, uniqueId);
+ }
+ else if(operation.Compare(KSetOperation) == KErrNone || operation.Compare(KGetOperation) == KErrNone)
+ {// Set or get custom property
+ TRAPD(error, DoSetGetCustomPropertyL(operation, category, uniqueId));
+ if(error != KErrNone)
+ {
+ ERR_PRINTF3(_L("Error occured while doing %S operation: %D"), operation, error);
+ SetTestStepResult(EFail);
+ }
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Invalid operation : %S"), &operation);
+ SetTestStepResult(EFail);
+ }
+ }
+ return TestStepResult();
+ } // doTestStepL
+
+/**
+Registers or deregisters a custom property
+@internalTechnology
+@test
+@param Operation to be performed : set/get/register/deregister
+@param Category: db/folder/bookmark
+@param Uid of the custom property
+@return None
+*/
+void CTestCustomPropertyStep::DoRegDeregCustomProperty(const TPtrC& aOperation, const TPtrC& aCategory, const TPtrC& aUid)
+ {
+ TInt error = KErrNone;
+ TPtrC dataType;
+ if(aOperation.Compare(KRegisterOperation) == KErrNone)
+ {
+ if(!GetStringFromConfig(ConfigSection(), KIniDataType, dataType))
+ {
+ ERR_PRINTF2(_L("%S should be mentioned in ini for registering a property"), &KIniDataType);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ // Register property
+ error = RegisterCustomProperty(aUid, aCategory, dataType);
+ }
+ }
+ else if(aOperation.Compare(KDeRegisterOperation) == KErrNone)
+ {
+ // Deregister property
+ error = DeRegisterCustomProperty(aUid, aCategory);
+ }
+
+ // Examine the result
+ CheckErrorAndCommit(error);
+ } // DoRegDeregCustomProperty
+
+/**
+Resolves and returns the enumeration indicating the custom property type
+function
+@internalTechnology
+@test
+@param Descriptor indicating the data type of the custom property
+@return Bookmark::TPropertyType enumeration indicating the type of property
+*/
+Bookmark::TPropertyType CTestCustomPropertyStep::GetPropertyType(const TPtrC& aDataType)
+ {
+ if(aDataType.Compare(KTypeInt) == KErrNone)
+ {
+ return Bookmark::EDataTypeInt;
+ }
+ else if(aDataType.Compare(KTypeReal) == KErrNone)
+ {
+ return Bookmark::EDataTypeReal;
+ }
+ else if(aDataType.Compare(KTypeDes8) == KErrNone)
+ {
+ return Bookmark::EDataTypeDes8;
+ }
+ else
+ {
+ return Bookmark::EDataTypeDes16;
+ }
+ }
+
+/**
+Registers the custom property
+@internalTechnology
+@test
+@param Descriptor indicating the UID of the property
+@param Category: db/folder/bookmark
+@param Datatype of the custom property
+@return Error code as a result of the register operation
+*/
+TInt CTestCustomPropertyStep::RegisterCustomProperty(const TPtrC& aUid, const TPtrC& aCategory, const TPtrC& aDataType)
+ {
+ // Resolve property type
+ Bookmark::TPropertyType propertyType = GetPropertyType(aDataType);
+ // Register property
+ TInt error = KErrNone;
+ if(aCategory.Compare(KDb()) == KErrNone)
+ {
+ TRAP(error, iBkDb.RegisterDatabasePropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), propertyType));
+ }
+ else if(aCategory.Compare(KFolder()) == KErrNone)
+ {
+ TRAP(error, iBkDb.RegisterFolderPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), propertyType));
+ }
+ else if(aCategory.Compare(KBookmark()) == KErrNone)
+ {
+ TRAP(error, iBkDb.RegisterBookmarkPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), propertyType));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Invalid category: %S"), aCategory);
+ SetTestStepResult(EFail);
+ }
+ return error;
+ }
+
+/**
+De-registers the custom property
+@internalTechnology
+@test
+@param Descriptor indicating the UID of the property
+@param Category: db/folder/bookmark
+@return Error code as a result of the de-register operation
+*/
+TInt CTestCustomPropertyStep::DeRegisterCustomProperty(const TPtrC& aUid, const TPtrC& aCategory)
+ {
+ TInt error = KErrNone;
+ if(aCategory.Compare(KDb()) == KErrNone)
+ {
+ TRAP(error, iBkDb.DeregisterDatabasePropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid))));
+ }
+ else if(aCategory.Compare(KFolder()) == KErrNone)
+ {
+ TRAP(error, iBkDb.DeregisterFolderPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid))));
+ }
+ else if(aCategory.Compare(KBookmark()) == KErrNone)
+ {
+ TRAP(error, iBkDb.DeregisterBookmarkPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid))));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Invalid category: %S"), aCategory);
+ SetTestStepResult(EFail);
+ }
+ return error;
+ }
+
+/**
+Resolves whether to set or get a custom property and calls tha appropriate
+function
+@internalTechnology
+@test
+@param Operation to be performed : set/get/register/deregister
+@param Category: db/folder/bookmark
+@param Uid of the custom property
+@return None
+*/
+void CTestCustomPropertyStep::DoSetGetCustomPropertyL(const TPtrC& aOperation, const TPtrC& aCategory, const TPtrC& aUid)
+ {
+ TPtrC dataType;
+ if(!GetStringFromConfig(ConfigSection(), KIniDataType, dataType))
+ {
+ ERR_PRINTF2(_L("%S should be mentioned in ini for setting/getting a property"), &KIniDataType);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ if(aCategory.Compare(KDb) == KErrNone)
+ {
+ if(aOperation.Compare(KSetOperation) == KErrNone)
+ {
+ DoSetPropertyL(iBkDb, dataType, aUid);
+ }
+ else
+ {
+ DoGetPropertyL(iBkDb, dataType, aUid);
+ }
+ }
+ else
+ {
+ TPtrC title;
+ TPtrC typeOfItem;
+ if(!GetStringFromConfig(ConfigSection(), KIniTypeOfItem, typeOfItem ) ||
+ !GetStringFromConfig(ConfigSection(), KIniTitle, title )
+ )
+ {
+ ERR_PRINTF3(_L("%S and %S should be mentioned in ini for setting property for bookmark or a folder"), &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 successfully. Can Set or Get property
+ if(aOperation.Compare(KSetOperation) == KErrNone)
+ {
+ DoSetPropertyL(bkNode, dataType, aUid);
+ }
+ else
+ {
+ DoGetPropertyL(bkNode, dataType, aUid);
+ }
+ bkNode.Close();
+ }
+ }
+ }
+ }
+ } // DoSetGetCustomProperty
+
+/**
+Template that sets the custom property using SetCustomPropertyL
+@internalTechnology
+@test
+@param Reference to handle to the DB/Folder/Bookmark
+@param Datatype of the property : int/real/des8/des16
+@param Uid of the custom property
+@return None
+*/
+template <class RType>
+void CTestCustomPropertyStep::DoSetPropertyL(RType &aBkWho, const TPtrC& aDataType, const TPtrC& aUid)
+ {
+ TPtrC value;
+ if(!GetStringFromConfig(ConfigSection(), KIniValue, value))
+ {
+ ERR_PRINTF2(_L("%S should be mentioned in ini for setting a property"), &KIniValue);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ TInt error = KErrNone;
+ INFO_PRINTF2(_L("Setting val for : %U"), CTestBookmarksServer::GetTUint32(aUid));
+ if(aDataType.Compare(KTypeInt) == KErrNone)
+ {
+ TRAP(error, aBkWho.SetCustomPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), CTestBookmarksServer::GetTInt(value)));
+ }
+ else if(aDataType.Compare(KTypeReal) == KErrNone)
+ {
+ TRAP(error, aBkWho.SetCustomPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), CTestBookmarksServer::GetTReal(value)));
+ }
+ else if(aDataType.Compare(KTypeDes8) == KErrNone)
+ {
+ // Construct 8-bit descriptor
+ HBufC8* hBufC8 = HBufC8::NewL(value.Length());
+ hBufC8->Des().Copy(value);
+ TRAP(error, aBkWho.SetCustomPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), hBufC8->Des()));
+ delete hBufC8;
+ }
+ else if(aDataType.Compare(KTypeDes16) == KErrNone)
+ {
+ TRAP(error, aBkWho.SetCustomPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), value));
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Invalid datatype: %S"), &aDataType);
+ SetTestStepResult(EFail);
+ }
+
+ // Examine the result
+ CheckErrorAndCommit(error);
+ }
+ } // DoSetPropertyL
+
+/**
+Gets the custom property using GetCustomPropertyL and compares with
+expected result
+@internalTechnology
+@test
+@param Reference to handle to the DB/Folder/Bookmark
+@param Datatype of the property : int/real/des8/des16
+@param Uid of the custom property
+@return None
+*/
+template <class RType>
+void CTestCustomPropertyStep::DoGetPropertyL(RType &aBkWho, const TPtrC& aDataType, const TPtrC& aUid)
+ {
+ TPtrC expectedValue;
+ if(!GetStringFromConfig(ConfigSection(), KIniExpectedValue, expectedValue))
+ {
+ ERR_PRINTF2(_L("%S should be mentioned in ini for setting a property"), &KIniExpectedValue);
+ SetTestStepResult(EFail);
+ }
+ else
+ {
+ TInt error = KErrNone;
+ TVerdict verdict = EPass;
+
+ // Check the datatype and process accordingly
+ if(aDataType.Compare(KTypeInt) == KErrNone)
+ {
+ TInt retVal = KErrNone;
+ TRAP(error, aBkWho.GetCustomPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), retVal));
+ if(error == KErrNone)
+ {
+ verdict = CompareTInts(retVal, CTestBookmarksServer::GetTInt(expectedValue));
+ }
+ }
+ else if(aDataType.Compare(KTypeReal) == KErrNone)
+ {
+ TReal retVal = KErrNone;
+ TRAP(error, aBkWho.GetCustomPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), retVal));
+ if(error == KErrNone)
+ {
+ verdict = CompareTReals(retVal, CTestBookmarksServer::GetTReal(expectedValue));
+ }
+ }
+ else if(aDataType.Compare(KTypeDes8) == KErrNone)
+ {
+ // Construct 8-bit descriptor
+ HBufC8* retVal8 = HBufC8::NewL(Bookmark::KMaxDataLength);
+ TPtr8 ptr8 = retVal8->Des();
+ TRAP(error, aBkWho.GetCustomPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), ptr8));
+ if(error == KErrNone)
+ {
+ CleanupStack::PushL(retVal8);
+ HBufC* retVal = HBufC::NewL(ptr8.Length());
+ retVal->Des().Copy(ptr8);
+ verdict = CompareStrings(retVal->Des(), expectedValue);
+ delete retVal;
+ }
+ CleanupStack::PopAndDestroy(retVal8);
+ }
+ else if(aDataType.Compare(KTypeDes16) == KErrNone)
+ {
+ HBufC* retVal = HBufC::NewL(Bookmark::KMaxDataLength);
+ TPtr ptr = retVal->Des();
+ TRAP(error, aBkWho.GetCustomPropertyL(TUid::Uid(CTestBookmarksServer::GetTUint32(aUid)), ptr));
+ if(error == KErrNone)
+ {
+ verdict = CompareStrings(ptr, expectedValue);
+ }
+ delete retVal;
+ }
+ else
+ {
+ ERR_PRINTF2(_L("Invalid datatype: %S"), &aDataType);
+ SetTestStepResult(EFail);
+ }
+
+ // Examine the result
+ CheckErrorAndVerdict(error, verdict);
+ }
+ } // DoGetPropertyL
+
+