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