common/tools/ats/smoketest/graphics/fbserv/src/T_DataFbsBitmap.cpp
changeset 833 6ffc235847d0
child 872 17498133d9ad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/ats/smoketest/graphics/fbserv/src/T_DataFbsBitmap.cpp	Fri Dec 18 14:46:04 2009 +0000
@@ -0,0 +1,2294 @@
+/*
+* 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 the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+*
+*/
+
+/**
+@test
+@internalComponent
+v
+This contains CT_DataFbsBitmap
+*/
+
+//	User includes
+#include "T_DataFbsBitmap.h"
+#include "T_GraphicsUtil.h"
+
+
+/*@{*/
+///	Parameters
+_LIT(KAlways,								"always");
+_LIT(KBitmapId,								"bitmap_id");
+_LIT(KBuffLength,							"buff_length");
+_LIT(KDitherOffsetX,						"dither_offset_x");
+_LIT(KDitherOffsetY,						"dither_offset_y");
+_LIT(KExpectedBool,							"expected_bool");
+_LIT(KExpectedInt,							"expected_int");
+_LIT(KFbsBitmapName,						"fbs_bitmap_name");
+_LIT(KFileName,								"file_name");
+_LIT(KFileOffset,							"file_offset");
+_LIT(KHeight,								"height");
+_LIT(KHandle,								"handle");
+_LIT(KWidth,								"width");
+_LIT(KLength,								"length");
+_LIT(KNullExpected,							"null_expected");
+_LIT(KDevice,								"device");
+_LIT(KNumberOfSources,						"number_of_sources");
+_LIT(KPixels,								"pixels");
+_LIT(KPointX,								"point_x");
+_LIT(KPointY,								"point_y");
+_LIT(KRectTlX,								"rect_tl_x");
+_LIT(KRectTlY,								"rect_tl_y");
+_LIT(KRectBrX,								"rect_br_x");
+_LIT(KRectBrY,								"rect_br_y");
+_LIT(KScanLineCoord,						"scan_line_coord");
+_LIT(KSourceFileName0,						"source_file_name_0"); // we don't need more than 3 sources for our test anyway.
+_LIT(KSourceFileName1,						"source_file_name_1"); // So that this solution is ok
+_LIT(KSourceFileName2,						"source_file_name_2");
+_LIT(KSourceBitmapId0,						"source_bitmap_id_0");
+_LIT(KSourceBitmapId1,						"source_bitmap_id_1");
+_LIT(KSourceBitmapId2,						"source_bitmap_id_2");
+_LIT(KShareIfLoaded,						"share_if_loaded");
+_LIT(KTwips,								"twips");
+_LIT(KUseDitherOffset,						"use_dither_offset");
+_LIT(KUseRFile,								"use_rfile");
+_LIT(KUseClosedRFile,						"use_closed_rfile");
+_LIT(KUseClosedStream,						"use_closed_stream");
+_LIT(KUseRequestStatus,						"use_request_status");
+_LIT(KUid,									"uid");
+_LIT(KPalette,								"palette");
+_LIT(KModifiable,							"modifiable");
+_LIT(KEntries,								"entries");
+_LIT(KRed,									"red");
+_LIT(KGreen,								"green");
+_LIT(KBlue,									"blue");
+_LIT(KDisplayMode,							"displaymode");
+_LIT(KBitmapfileCompressionScheme,			"bitmap_compression_scheme");
+
+///	Commands
+_LIT(KCmdDisown,								"disown");
+_LIT(KCmdNew,								"new");
+_LIT(KCmdDestructor,						"~");
+_LIT(KCmdCompress,							"Compress");
+_LIT(KCmdCompressInBackground,				"CompressInBackground");
+_LIT(KCmdCreate,							"Create");
+_LIT(KCmdCreateHardwareBitmap,				"CreateHardwareBitmap");
+_LIT(KCmdDataAddress,						"DataAddress");
+_LIT(KCmdDataStride,						"DataStride");
+_LIT(KCmdDisplayMode,						"DisplayMode");
+_LIT(KCmdDuplicate,							"Duplicate");
+_LIT(KCmdExternalizeL,						"ExternalizeL");
+_LIT(KCmdExternalizeRectangleL,				"ExternalizeRectangleL");
+_LIT(KCmdGetPalette,						"GetPalette");
+_LIT(KCmdGetPixel,							"GetPixel");
+_LIT(KCmdGetScanLine,						"GetScanLine");
+_LIT(KCmdGetVerticalScanLine,				"GetVerticalScanLine");
+_LIT(KCmdHandle,							"Handle");
+_LIT(KCmdHardwareBitmapHandle,				"HardwareBitmapHandle");
+_LIT(KCmdHeader,							"Header");
+_LIT(KCmdHorizontalPixelsToTwips,			"HorizontalPixelsToTwips");
+_LIT(KCmdHorizontalTwipsToPixels,			"HorizontalTwipsToPixels");
+_LIT(KCmdInitialDisplayMode,				"InitialDisplayMode");
+_LIT(KCmdInternalizeL,						"InternalizeL");
+_LIT(KCmdIsCompressedInRAM,					"IsCompressedInRAM");
+_LIT(KCmdIsFileInRom,						"IsFileInRom");
+_LIT(KCmdIsLargeBitmap,						"IsLargeBitmap");
+_LIT(KCmdIsMonochrome,						"IsMonochrome");
+_LIT(KCmdIsRomBitmap,						"IsRomBitmap");
+_LIT(KCmdLoad,								"Load");
+_LIT(KCmdLoadAndCompress,					"LoadAndCompress");
+_LIT(KCmdLockHeap,							"LockHeap");
+_LIT(KCmdLockHeapLC,						"LockHeapLC");
+_LIT(KCmdPaletteAttributes,					"PaletteAttributes");
+_LIT(KCmdReset,								"Reset");
+_LIT(KCmdResize,							"Resize");
+_LIT(KCmdSave,								"Save");
+_LIT(KCmdScanLineLength,					"ScanLineLength");
+_LIT(KCmdSetDisplayMode,					"SetDisplayMode");
+_LIT(KCmdSetPalette,						"SetPalette");
+_LIT(KCmdSetRomBitmapL,						"SetRomBitmapL");
+_LIT(KCmdSetScanLine,						"SetScanLine");
+_LIT(KCmdSetSizeInTwips,					"SetSizeInTwips");
+_LIT(KCmdSizeInPixels,						"SizeInPixels");
+_LIT(KCmdSizeInTwips,						"SizeInTwips");
+_LIT(KCmdStoreL,							"StoreL");
+_LIT(KCmdSwapWidthAndHeight,				"SwapWidthAndHeight");
+_LIT(KCmdUnlockHeap,						"UnlockHeap");
+_LIT(KCmdVerticalPixelsToTwips,				"VerticalPixelsToTwips");
+_LIT(KCmdVerticalTwipsToPixels,				"VerticalTwipsToPixels");
+
+//??	SetRomBitmapL
+//	Begin
+//	End
+//	GetDecompressionBuffer
+//	GetAllBitmapHandles
+/*@}*/
+
+/**
+* Two phase constructor
+*/
+CT_DataFbsBitmap* CT_DataFbsBitmap::NewL()
+	{
+	CT_DataFbsBitmap* ret = new (ELeave) CT_DataFbsBitmap();
+	CleanupStack::PushL(ret);
+	ret->ConstructL();
+	CleanupStack::Pop(ret);
+	return ret;
+	}
+
+/**
+* Protected constructor. First phase construction
+*/
+CT_DataFbsBitmap::CT_DataFbsBitmap()
+:	CDataWrapperBase()
+,	iFbsBitmap(NULL)
+,	iDisplayMode(ENone)
+,	iPopWhenUnlocking(EFalse)
+,	iCompressFailed(EFalse)
+,	iActiveCompressInBackground(NULL)
+	{
+	}
+
+/**
+* Protected constructor. Second phase construction
+*/
+void CT_DataFbsBitmap::ConstructL()
+	{
+	iActiveCompressInBackground=CActiveCallback::NewL(*this);
+	}
+
+/**
+* Destructor.
+*/
+CT_DataFbsBitmap::~CT_DataFbsBitmap()
+	{
+	DestroyData();
+	delete iActiveCompressInBackground;
+	iActiveCompressInBackground=NULL;
+	}
+
+/**
+* Contains cleanup implementation
+*/
+void CT_DataFbsBitmap::DestroyData()
+	{
+	delete iFbsBitmap;
+	iFbsBitmap=NULL;
+	}
+
+/**
+* Return a pointer to the object that the data wraps
+*
+* @return pointer to the object that the data wraps
+*/
+TAny* CT_DataFbsBitmap::GetObject()
+	{
+	return iFbsBitmap;
+	}
+
+void CT_DataFbsBitmap::SetObjectL(TAny* aAny)
+    {
+    DestroyData();
+    iFbsBitmap=static_cast<CFbsBitmap*> (aAny);
+    }
+
+void CT_DataFbsBitmap::DisownObjectL()
+	{
+	iFbsBitmap=NULL;
+	}
+
+CFbsBitmap* CT_DataFbsBitmap::GetFbsBitmap() const
+	{
+	return iFbsBitmap;
+	}
+
+/**
+* Process a command read from the ini file
+*
+* @param aDataWrapper	test step requiring command to be processed
+* @param aCommand	the command to process
+* @param aSection		the entry in the ini file requiring the command to be processed
+*
+* @return ETrue if the command is processed
+*/
+TBool CT_DataFbsBitmap::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	retVal = ETrue;
+
+	if (aCommand == KCmdNew)
+		{
+		DoCmdNewL();
+		}
+	else if (aCommand == KCmdDestructor)
+		{
+		DoCmdDestructor();
+		}
+	else if (aCommand == KCmdCompress)
+		{
+		DoCmdCompress(aSection);
+		}
+	else if (aCommand == KCmdCompressInBackground)
+		{
+		DoCmdCompressInBackground(aSection, aAsyncErrorIndex);
+		}
+	else if (aCommand == KCmdCreate)
+		{
+		DoCmdCreate(aSection);
+		}
+	else if (aCommand == KCmdCreateHardwareBitmap)
+		{
+		DoCmdCreateHardwareBitmap(aSection);
+		}
+	else if (aCommand == KCmdDataAddress)
+		{
+		DoCmdDataAddress(aSection);
+		}
+	else if (aCommand == KCmdDataStride)
+		{
+		DoCmdDataStride(aSection);
+		}
+	else if (aCommand == KCmdDisplayMode)
+		{
+		DoCmdDisplayMode(aSection);
+		}
+	else if (aCommand == KCmdDuplicate)
+		{
+		DoCmdDuplicateL(aSection);
+		}
+	else if (aCommand == KCmdExternalizeL)
+		{
+		DoCmdExternalizeL(aSection);
+		}
+	else if (aCommand == KCmdExternalizeRectangleL)
+		{
+		DoCmdExternalizeRectangleL(aSection);
+		}
+	else if (aCommand == KCmdGetPalette)
+		{
+		DoCmdGetPaletteL(aSection);
+		}
+	else if (aCommand == KCmdGetPixel)
+		{
+		DoCmdGetPixel(aSection);
+		}
+	else if (aCommand == KCmdGetScanLine)
+		{
+		DoCmdGetScanLineL(aSection);
+		}
+	else if (aCommand == KCmdGetVerticalScanLine)
+		{
+		DoCmdGetVerticalScanLineL(aSection);
+		}
+	else if (aCommand == KCmdHandle)
+		{
+		DoCmdHandle(aSection);
+		}
+	else if (aCommand == KCmdHardwareBitmapHandle)
+		{
+		DoCmdHardwareBitmapHandle(aSection);
+		}
+	else if (aCommand == KCmdHeader)
+		{
+		DoCmdHeader();
+		}
+	else if (aCommand == KCmdHorizontalPixelsToTwips)
+		{
+		DoCmdHorizontalPixelsToTwips(aSection);
+		}
+	else if (aCommand == KCmdHorizontalTwipsToPixels)
+		{
+		DoCmdHorizontalTwipsToPixels(aSection);
+		}
+	else if (aCommand == KCmdInitialDisplayMode)
+		{
+		DoCmdInitialDisplayMode(aSection);
+		}
+	else if (aCommand == KCmdInternalizeL)
+		{
+		DoCmdInternalizeL(aSection);
+		}
+	else if (aCommand == KCmdIsCompressedInRAM)
+		{
+		DoCmdIsCompressedInRAM(aSection);
+		}
+	else if (aCommand == KCmdIsFileInRom)
+		{
+		DoCmdIsFileInRom(aSection);
+		}
+	else if (aCommand == KCmdIsLargeBitmap)
+		{
+		DoCmdIsLargeBitmap(aSection);
+		}
+	else if (aCommand == KCmdIsMonochrome)
+		{
+		DoCmdIsMonochrome(aSection);
+		}
+	else if (aCommand == KCmdIsRomBitmap)
+		{
+		DoCmdIsRomBitmap(aSection);
+		}
+	else if (aCommand == KCmdLoad)
+		{
+		DoCmdLoadL(aSection);
+		}
+	else if (aCommand == KCmdLoadAndCompress)
+		{
+		DoCmdLoadAndCompressL(aSection);
+		}
+	else if (aCommand == KCmdLockHeap)
+		{
+		DoCmdLockHeap(aSection);
+		}
+	else if (aCommand == KCmdLockHeapLC)
+		{
+		DoCmdLockHeapLC(aSection);
+		}
+	else if (aCommand == KCmdPaletteAttributes)
+		{
+		DoCmdPaletteAttributes(aSection);
+		}
+	else if (aCommand == KCmdReset)
+		{
+		DoCmdReset();
+		}
+	else if (aCommand == KCmdResize)
+		{
+		DoCmdResize(aSection);
+		}
+	else if (aCommand == KCmdSave)
+		{
+		DoCmdSave(aSection);
+		}
+	else if (aCommand == KCmdScanLineLength)
+		{
+		DoCmdScanLineLength(aSection);
+		}
+	else if (aCommand == KCmdSetDisplayMode)
+		{
+		DoCmdSetDisplayMode(aSection);
+		}
+	else if (aCommand == KCmdSetPalette)
+		{
+		DoCmdSetPaletteL(aSection);
+		}
+	else if (aCommand == KCmdSetRomBitmapL)
+		{
+		DoCmdSetRomBitmapL(aSection);
+		}
+	else if (aCommand == KCmdSetScanLine)
+		{
+		DoCmdSetScanLineL(aSection);
+		}
+	else if (aCommand == KCmdSetSizeInTwips)
+		{
+		DoCmdSetSizeInTwipsL(aSection);
+		}
+	else if (aCommand == KCmdSizeInPixels)
+		{
+		DoCmdSizeInPixels(aSection);
+		}
+	else if (aCommand == KCmdSizeInTwips)
+		{
+		DoCmdSizeInTwips(aSection);
+		}
+	else if (aCommand == KCmdStoreL)
+		{
+		DoCmdStoreL(aSection);
+		}
+	else if (aCommand == KCmdSwapWidthAndHeight)
+		{
+		DoCmdSwapWidthAndHeight();
+		}
+	else if (aCommand == KCmdUnlockHeap)
+		{
+		DoCmdUnlockHeapL(aSection);
+		}
+	else if (aCommand == KCmdVerticalPixelsToTwips)
+		{
+		DoCmdVerticalPixelsToTwips(aSection);
+		}
+	else if (aCommand == KCmdVerticalTwipsToPixels)
+		{
+		DoCmdVerticalTwipsToPixels(aSection);
+		}
+	else if (aCommand == KCmdDisown)
+   {
+   DisownObjectL();
+   }
+	else
+		{
+		retVal=EFalse;
+		}
+
+	return retVal;
+	}
+
+
+/** Creates new CFbsBitmap class instance */
+void CT_DataFbsBitmap::DoCmdNewL()
+	{
+	INFO_PRINTF1(_L("Creates new CFbsBitmap class instance"));
+
+	// cleanup if already created
+    DestroyData();
+	iFbsBitmap=new (ELeave) CFbsBitmap();
+	}
+
+/** Calls static CFbsBitmap destructor */
+void CT_DataFbsBitmap::DoCmdDestructor()
+	{
+	DestroyData();
+	}
+
+/** Calls CFbsBitmap::Compress() */
+void CT_DataFbsBitmap::DoCmdCompress(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::Compress()"));
+
+	TInt							err=KErrNone;
+	TBitmapfileCompressionScheme	compressionScheme;
+	if ( CT_GraphicsUtil::ReadBitmapfileCompressionScheme(*this, aSection, KBitmapfileCompressionScheme(), compressionScheme) )
+		{
+		err=GetFbsBitmap()->Compress(compressionScheme);
+		}
+	else
+		{
+		// call Compress()
+		err=GetFbsBitmap()->Compress();
+		}
+	// check error code
+	if ( err!=KErrNone )
+		{
+		ERR_PRINTF2(_L("Compress error: %d"), err);
+		SetError(err);
+		iCompressFailed = ETrue;
+		}
+	else
+	    {
+	    iCompressFailed = EFalse;
+	    };
+	}
+
+/** Calls CFbsBitmap::CompressInBackground() */
+void CT_DataFbsBitmap::DoCmdCompressInBackground(const TDesC& aSection, const TInt aAsyncErrorIndex)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::CompressInBackground()"));
+
+	// get a flag if to use requset status from parameters
+	TBool	useRequestStatus = EFalse;
+	GetBoolFromConfig(aSection, KUseRequestStatus(), useRequestStatus);
+
+	TBitmapfileCompressionScheme	compressionScheme;
+	TBool							hasCompressionScheme=CT_GraphicsUtil::ReadBitmapfileCompressionScheme(*this, aSection, KBitmapfileCompressionScheme(), compressionScheme);
+
+	// call CompressInBackground()
+	if ( useRequestStatus )
+		{
+		if ( hasCompressionScheme )
+			{
+			GetFbsBitmap()->CompressInBackground(iActiveCompressInBackground->iStatus, compressionScheme);
+			}
+		else
+			{
+			GetFbsBitmap()->CompressInBackground(iActiveCompressInBackground->iStatus);
+			}
+		iActiveCompressInBackground->Activate(aAsyncErrorIndex);
+		IncOutstanding();
+		}
+	else
+		{
+		TInt	err = KErrNone;
+
+		if ( hasCompressionScheme )
+			{
+			err=GetFbsBitmap()->CompressInBackground(compressionScheme);
+			}
+		else
+			{
+			err=GetFbsBitmap()->CompressInBackground();
+			}
+
+		// check error code
+		if ( err != KErrNone )
+			{
+			ERR_PRINTF2(_L("Compress in background error: %d"), err);
+			SetError(err);
+			iCompressFailed = ETrue;
+			}
+		else
+		    {
+		    iCompressFailed = EFalse;
+		    }
+		}
+	}
+
+/** Calls CFbsBitmap::Create() */
+void CT_DataFbsBitmap::DoCmdCreate(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::Create()"));
+
+	// get size height from parameters
+	TInt	height;
+	if(!GetIntFromConfig(aSection, KHeight(), height))
+		{
+		ERR_PRINTF2(_L("No %S"), &KHeight());
+		SetBlockResult(EFail);
+		}
+
+	// get size width from parameters
+	TInt	width;
+	if(!GetIntFromConfig(aSection, KWidth(), width))
+		{
+		ERR_PRINTF2(_L("No %S"), &KWidth());
+		SetBlockResult(EFail);
+		}
+
+	// get display mode from parameters
+
+	TDisplayMode	displayMode;
+	if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+		{
+		ERR_PRINTF1(_L("No display mode"));
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		// call Create()
+		TInt	err = GetFbsBitmap()->Create(TSize(width, height), displayMode);
+
+		// check error code
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Creation error: %d"), err);
+			SetError(err);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::CreateHardwareBitmap() */
+void CT_DataFbsBitmap::DoCmdCreateHardwareBitmap(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::CreateHardwareBitmap()"));
+
+	// get size height from parameters
+	TInt	height;
+	if(!GetIntFromConfig(aSection, KHeight(), height))
+		{
+		ERR_PRINTF2(_L("No %S"), &KHeight());
+		SetBlockResult(EFail);
+		}
+
+	// get size width from parameters
+	TInt	width;
+	if(!GetIntFromConfig(aSection, KWidth(), width))
+		{
+		ERR_PRINTF2(_L("No %S"), &KWidth());
+		SetBlockResult(EFail);
+		}
+
+	// get display mode from parameters
+	TDisplayMode	displayMode;
+	if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+		{
+		ERR_PRINTF1(_L("No display mode"));
+		SetBlockResult(EFail);
+		}
+
+	// get application uid from parameters
+	TInt	uidInt;
+	if(!GetIntFromConfig(aSection, KUid(), uidInt))
+		{
+		ERR_PRINTF2(_L("No %S"), &KUid());
+		SetBlockResult(EFail);
+		}
+
+	// call Create()
+	TInt	err = GetFbsBitmap()->CreateHardwareBitmap(TSize(width, height), displayMode, TUid::Uid(uidInt));
+
+	// check error code
+	if ( err != KErrNone )
+		{
+		ERR_PRINTF2(_L("Hardware bitmap creation error: %d"), err);
+		SetError(err);
+		}
+	}
+
+/** Calls CFbsBitmap::DataAddress() locking and unlocking heap by defined in parameters means */
+void CT_DataFbsBitmap::DoCmdDataAddress(const TDesC& aSection)
+	{
+	// call DataAddress()
+	TUint32*	address=GetFbsBitmap()->DataAddress();
+	INFO_PRINTF2(_L("DataAddress %d"), address);
+
+	// validate returned value if needed
+	TInt	expectedValue;
+	if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+		{
+		if (expectedValue != (TInt)address)
+			{
+			ERR_PRINTF1(_L("The returned value is not as expected"));
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::DataStride() */
+void CT_DataFbsBitmap::DoCmdDataStride(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::DataStride()"));
+	
+	// call DataStride()
+	TInt value = GetFbsBitmap()->DataStride();
+	INFO_PRINTF2(_L("Data stride: %d"), value);
+
+	// validate returned value if needed
+	TInt expectedValue;
+	if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+		{
+		if (expectedValue != value)
+			{
+			ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+			SetBlockResult(EFail);
+			}
+		}
+
+	// check the value is not NULL
+	if (value <= 0)
+		{
+		ERR_PRINTF2(_L("The data stride is not expected zero or less, value: %d"), value);
+		SetBlockResult(EFail);
+		}
+	}
+
+/** Checks CFbsBitmap::DisplayMode() value */
+void CT_DataFbsBitmap::DoCmdDisplayMode(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Checks CFbsBitmap::DisplayMode() value"));
+
+	// call DisplayMode()
+	iDisplayMode=GetFbsBitmap()->DisplayMode();
+	INFO_PRINTF2(_L("Display Mode %d"), iDisplayMode);
+
+	// get display mode from parameters
+	TDisplayMode	expectedValue;
+	if ( CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), expectedValue) )
+		{
+		// check value against NULL
+		if ( iDisplayMode!=expectedValue )
+			{
+			ERR_PRINTF3(_L("The value is not as expected! expected: %d, actual: %d"), expectedValue, iDisplayMode);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::Duplicate() */
+void CT_DataFbsBitmap::DoCmdDuplicateL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::Duplicate()"));
+	TInt	handle=GetHandle();
+	TPtrC	objectName;
+	if ( GetStringFromConfig(aSection, KFbsBitmapName(), objectName) )
+		{
+		CDataWrapperBase*	wrapper=static_cast<CDataWrapperBase*>(GetDataWrapperL(objectName));
+		handle=wrapper->GetHandle();
+		}
+	else
+		{
+		GetIntFromConfig(aSection, KHandle(), handle);
+		}
+
+	// call Duplicate()
+	TInt	err = GetFbsBitmap()->Duplicate(handle);
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Duplicate error: %d"), err);
+		SetError(err);
+		}
+	}
+
+/** Calls CFbsBitmap::ExternalizeL() */
+void CT_DataFbsBitmap::DoCmdExternalizeL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::ExternalizeL()"));
+	ExternalizeImplL(aSection, TRect(), EFalse);
+	}
+
+/** Calls CFbsBitmap::ExternalizeRectangleL() */
+void CT_DataFbsBitmap::DoCmdExternalizeRectangleL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::ExternalizeRectangleL()"));
+
+	// get rectangle top left x-coordinate from parameters
+	TInt	tlx;
+	if(!GetIntFromConfig(aSection, KRectTlX(), tlx))
+		{
+		ERR_PRINTF2(_L("No %S"), &KRectTlX());
+		SetBlockResult(EFail);
+		}
+
+	// get rectangle top left x-coordinate from parameters
+	TInt	tly;
+	if(!GetIntFromConfig(aSection, KRectTlY(), tly))
+		{
+		ERR_PRINTF2(_L("No %S"), &KRectTlY());
+		SetBlockResult(EFail);
+		}
+
+	// get rectangle top left x-coordinate from parameters
+	TInt	brx;
+	if(!GetIntFromConfig(aSection, KRectBrX(), brx))
+		{
+		ERR_PRINTF2(_L("No %S"), &KRectBrX());
+		SetBlockResult(EFail);
+		}
+
+	// get rectangle top left x-coordinate from parameters
+	TInt	bry;
+	if(!GetIntFromConfig(aSection, KRectBrY(), bry))
+		{
+		ERR_PRINTF2(_L("No %S"), &KRectBrY());
+		SetBlockResult(EFail);
+		}
+
+	ExternalizeImplL(aSection, TRect(tlx, tly, brx, bry), ETrue);
+	}
+
+/** Calls CFbsBitmap::GetPalette() */
+void CT_DataFbsBitmap::DoCmdGetPaletteL(const TDesC& aSection)
+	{
+	// call GetPalette()
+	CPalette*	palette = NULL;
+	TInt		err = GetFbsBitmap()->GetPalette(palette);
+	INFO_PRINTF2(_L("Calls CFbsBitmap::GetPalette() %d"), palette);
+
+	// check error code
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("GetPalette error: %d"), err);
+		SetError(err);
+		}
+	else
+		{
+		//	Verify palette
+		CPalette*	expectedPalette = NULL;
+
+		if ( CT_GraphicsUtil::GetPaletteL(*this, aSection, KPalette(), expectedPalette) )
+			{
+			if ( palette != expectedPalette )
+				{
+				ERR_PRINTF3(_L("GetPalette palette %d not the expected palette %d"), palette, expectedPalette);
+				SetBlockResult(EFail);
+				}
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::GetPixel() */
+void CT_DataFbsBitmap::DoCmdGetPixel(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::GetPixel()"));
+
+	// get point x-coordinate from parameters
+	TInt	pointX;
+	if(!GetIntFromConfig(aSection, KPointX(), pointX))
+		{
+		ERR_PRINTF2(_L("No %S"), &KPointX());
+		SetBlockResult(EFail);
+		}
+
+	// get point y-coordinate from parameters
+	TInt	pointY;
+	if(!GetIntFromConfig(aSection, KPointY(), pointY))
+		{
+		ERR_PRINTF2(_L("No %S"), &KPointY());
+		SetBlockResult(EFail);
+		}
+
+	// call GetPixel()
+	TRgb	color;
+	GetFbsBitmap()->GetPixel(color, TPoint(pointX, pointY));
+
+	INFO_PRINTF2(_L("Red    %d"), color.Red());
+	INFO_PRINTF2(_L("Green  %d"), color.Green());
+	INFO_PRINTF2(_L("Blue   %d"), color.Blue());
+
+	TInt	actual;
+	TInt	expected;
+
+	if(GetIntFromConfig(aSection, KRed(), expected))
+		{
+		actual=color.Red();
+		if ( expected != actual )
+			{
+			ERR_PRINTF3(_L("Expected Red %d does not match actual %d"), expected, actual);
+			SetBlockResult(EFail);
+			}
+		}
+
+	if(GetIntFromConfig(aSection, KGreen(), expected))
+		{
+		actual=color.Green();
+		if ( expected != actual )
+			{
+			ERR_PRINTF3(_L("Expected Green %d does not match actual %d"), expected, actual);
+			SetBlockResult(EFail);
+			}
+		}
+	
+	if(GetIntFromConfig(aSection, KBlue(), expected))
+		{
+		actual=color.Blue();
+		if ( expected != actual )
+			{
+			ERR_PRINTF3(_L("Expected Blue %d does not match actual %d"), expected, actual);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::GetScanLine() */
+void CT_DataFbsBitmap::DoCmdGetScanLineL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::GetScanLine()"));
+	TBool								dataOk=ETrue;
+
+	// get point x coordinate from parameters
+	TInt	pointX = 0;
+	if(!GetIntFromConfig(aSection, KPointX(), pointX))
+		{
+		ERR_PRINTF2(_L("No %S"), &KPointX());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	// get point y coordinate from parameters
+	TInt	pointY = 0;
+	if(!GetIntFromConfig(aSection, KPointY(), pointY))
+		{
+		ERR_PRINTF2(_L("No %S"), &KPointY());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	// get length from parameters
+	TInt	length = 0;
+	if(!GetIntFromConfig(aSection, KLength(), length))
+		{
+		ERR_PRINTF2(_L("No %S"), &KLength());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	// get buffer length from parameters
+	TInt	buffLength = 0;
+	if(!GetIntFromConfig(aSection, KBuffLength(), buffLength))
+		{
+		ERR_PRINTF2(_L("No %S"), &KBuffLength());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	// get display mode from parameters
+	TDisplayMode	displayMode;
+	if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+		{
+		ERR_PRINTF1(_L("No display mode"));
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	if ( dataOk )
+		{
+		// call GetScanLine()
+		TUint8*	buffer = new (ELeave) TUint8[buffLength];
+		TPtr8	scanline(buffer, buffLength, buffLength);
+
+		GetFbsBitmap()->GetScanLine(scanline, TPoint(pointX, pointY), length, displayMode);
+
+		delete [] buffer;
+		}
+	}
+
+/** Calls CFbsBitmap::GetVerticalScanLine() */
+void CT_DataFbsBitmap::DoCmdGetVerticalScanLineL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::GetVerticalScanLine()"));
+	TBool								dataOk=ETrue;
+
+	// get point x coordinate from parameters
+	TInt	pointX = 0;
+	if(!GetIntFromConfig(aSection, KPointX(), pointX))
+		{
+		ERR_PRINTF2(_L("No %S"), &KPointX());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	// get if to use dither offset flag from parameters
+	TBool	useDitherOffset = EFalse;
+	if(!GetBoolFromConfig(aSection, KUseDitherOffset(), useDitherOffset))
+		{
+		ERR_PRINTF2(_L("No %S"), &KUseDitherOffset());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	// get dither offset x coordinate from parameters
+	TInt	ditherOffsetX = 0;
+	if(useDitherOffset && !GetIntFromConfig(aSection, KDitherOffsetX(), ditherOffsetX))
+		{
+		ERR_PRINTF2(_L("No %S"), &KDitherOffsetX());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	// get dither offset y coordinate from parameters
+	TInt	ditherOffsetY = 0;
+	if(useDitherOffset && !GetIntFromConfig(aSection, KDitherOffsetY(), ditherOffsetY))
+		{
+		ERR_PRINTF2(_L("No %S"), &KDitherOffsetY());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	// get buffer length from parameters
+	TInt	buffLength = 0;
+	if(!GetIntFromConfig(aSection, KBuffLength(), buffLength))
+		{
+		ERR_PRINTF2(_L("No %S"), &KBuffLength());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	// get display mode from parameters
+	TDisplayMode	displayMode;
+	if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+		{
+		ERR_PRINTF1(_L("No display mode"));
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	if ( dataOk )
+		{
+		// call GetVerticalScanLine()
+		TUint8*	buffer = new (ELeave) TUint8[buffLength];
+		TPtr8 	scanline(buffer, buffLength, buffLength);
+
+		if (useDitherOffset)
+			{
+			GetFbsBitmap()->GetVerticalScanLine(scanline, pointX, displayMode);
+			}
+		else
+			{
+			GetFbsBitmap()->GetVerticalScanLine(scanline, pointX, TPoint(ditherOffsetX, ditherOffsetY), displayMode);
+			}
+
+		delete [] buffer;
+		}
+	}
+
+/** Calls CFbsBitmap::Handle() */
+void CT_DataFbsBitmap::DoCmdHandle(const TDesC& aSection)
+	{
+	
+	// call Handle()
+	TInt	handle=GetFbsBitmap()->Handle();
+	INFO_PRINTF2(_L("Calls CFbsBitmap::Handle() %d"), handle);
+	SetHandle(handle);
+
+	// validate returned value if needed
+	TInt	expectedValue;
+	if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+		{
+		if (expectedValue != handle)
+			{
+			ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, handle);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Checks CFbsBitmap::HardwareBitmapHandle() */
+void CT_DataFbsBitmap::DoCmdHardwareBitmapHandle(const TDesC& aSection)
+	{
+	// call HardwareBitmapHandle()
+	TInt	handle=GetFbsBitmap()->HardwareBitmapHandle();
+	INFO_PRINTF2(_L("CFbsBitmap::HardwareBitmapHandle() %d"), handle);
+	SetHandle(handle);
+
+	// get if null expected flag from parameters
+	TBool	nullExpected = EFalse;
+	if ( GetBoolFromConfig(aSection, KNullExpected(), nullExpected) )
+		{
+		// check value againts NULL
+		if ( (handle == NULL) != nullExpected )
+			{
+			ERR_PRINTF2(_L("The value is not as expected! value: %d"), handle);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::Header() */
+void CT_DataFbsBitmap::DoCmdHeader()
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::Header()"));
+
+	// call Header()
+	SEpocBitmapHeader	header=GetFbsBitmap()->Header();
+	INFO_PRINTF2(_L("Header iBitmapSize     &d"), header.iBitmapSize);
+	INFO_PRINTF2(_L("Header iBitsPerPixel   &d"), header.iBitsPerPixel);
+	INFO_PRINTF2(_L("Header iColor          &d"), header.iColor);
+	INFO_PRINTF2(_L("Header iCompression    &d"), header.iCompression);
+	INFO_PRINTF2(_L("Header iPaletteEntries &d"), header.iPaletteEntries);
+	INFO_PRINTF3(_L("Header iSizeInPixels   &d %d"), header.iSizeInPixels.iWidth, header.iSizeInPixels.iHeight);
+	INFO_PRINTF3(_L("Header iSizeInTwips    &d %d"), header.iSizeInTwips.iWidth, header.iSizeInTwips.iHeight);
+	INFO_PRINTF2(_L("Header iStructSize     &d"), header.iStructSize);
+	}
+
+/** Calls CFbsBitmap::HorizontalPixelsToTwips() */
+void CT_DataFbsBitmap::DoCmdHorizontalPixelsToTwips(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::HorizontalPixelsToTwips()"));
+
+	// get pixels from parameters
+	TInt	pixels;
+	if(!GetIntFromConfig(aSection, KPixels(), pixels))
+		{
+		ERR_PRINTF2(_L("No %S"), &KPixels());
+		SetBlockResult(EFail);
+		}
+
+	// call HorizontalPixelsToTwips()
+	TInt	value = GetFbsBitmap()->HorizontalPixelsToTwips(pixels);
+	INFO_PRINTF2(_L("Twips: %d"), value);
+
+	// validate returned value if needed
+	TInt	expectedValue;
+	if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+		{
+		if (expectedValue != value)
+			{
+			ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::HorizontalTwipsToPixels() */
+void CT_DataFbsBitmap::DoCmdHorizontalTwipsToPixels(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::HorizontalTwipsToPixels()"));
+
+	// get twips from parameters
+	TInt	twips;
+	if(!GetIntFromConfig(aSection, KTwips(), twips))
+		{
+		ERR_PRINTF2(_L("No %S"), &KTwips());
+		SetBlockResult(EFail);
+		}
+
+	// call HorizontalTwipsToPixels()
+	TInt	value = GetFbsBitmap()->HorizontalTwipsToPixels(twips);
+	INFO_PRINTF2(_L("Pixels: %d"), value);
+
+	// validate returned value if needed
+	TInt	expectedValue;
+	if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+		{
+		if (expectedValue != value)
+			{
+			ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Checks CFbsBitmap::InitialDisplayMode() value */
+void CT_DataFbsBitmap::DoCmdInitialDisplayMode(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Checks CFbsBitmap::InitialDisplayMode() value"));
+
+	// call InitialDisplayMode()
+	TInt	actualValue = GetFbsBitmap()->InitialDisplayMode();
+	INFO_PRINTF2(_L("Initial Display Mode %d"), actualValue);
+
+	// get display mode from parameters
+	TDisplayMode	expectedValue;
+	if ( CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), expectedValue) )
+		{
+		// check value againts NULL
+		if (actualValue != expectedValue)
+			{
+			ERR_PRINTF3(_L("The value is not as expected! expecyed: %d, actual: %d"), expectedValue, actualValue);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::InternalizeL() */
+void CT_DataFbsBitmap::DoCmdInternalizeL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::InternalizeL()"));
+
+	// get file name from parameters
+	TPtrC	fileName;
+	if (!GetStringFromConfig(aSection, KFileName(), fileName))
+		{
+		ERR_PRINTF2(_L("No %S"), &KFileName());
+		SetBlockResult(EFail);
+		}
+
+	// get a flag if to use closed stream from parameters
+	TBool	useClosedStream = EFalse;
+	if(!GetBoolFromConfig(aSection, KUseClosedStream(), useClosedStream))
+		{
+		ERR_PRINTF2(_L("No %S"), &KUseClosedStream());
+		SetBlockResult(EFail);
+		}
+
+	// ReadStore creation
+	CDirectFileStore*	readstore = CDirectFileStore::OpenL(FileServer(), fileName, EFileStream | EFileRead);
+	CleanupStack::PushL(readstore);
+	TInt				popCount=1;
+	TStreamId			headerid = readstore->Root();
+	RStoreReadStream	readstrm;
+
+	// close stream if defined by parameters
+	if (!useClosedStream)
+		{
+		readstrm.OpenL(*readstore, headerid);
+		CleanupClosePushL(readstrm);
+		popCount=2;
+		}
+
+	// call InternalizeL()
+	TRAPD(err, GetFbsBitmap()->InternalizeL(readstrm));
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Internalize error: %d"), err);
+		SetError(err);
+		}
+
+	// cleanup
+	CleanupStack::PopAndDestroy(popCount, readstore);
+	}
+
+/** Calls CFbsBitmap::IsCompressedInRAM() to check againt expected value */
+void CT_DataFbsBitmap::DoCmdIsCompressedInRAM(const TDesC& aSection)
+	{
+	// call IsCompressedInRAM() to get actual value
+	TBool	actualValue = GetFbsBitmap()->IsCompressedInRAM();
+	INFO_PRINTF2(_L("CFbsBitmap::IsCompressedInRAM() %d"), actualValue);
+
+	// get expected value from parameters
+	TBool	expectedValue = EFalse;
+	if ( GetBoolFromConfig(aSection, KExpectedBool(), expectedValue) )
+		{
+		if (actualValue != expectedValue)
+			{
+			ERR_PRINTF3(_L("Expected value doesn't match to actual! expected: %d, actual: %d"), expectedValue, actualValue);
+			if (!iCompressFailed)
+			    {
+			    SetBlockResult(EFail);
+			    };
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::IsFileInRom() and check against expectation */
+void CT_DataFbsBitmap::DoCmdIsFileInRom(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::IsFileInRom() and check against expectation"));
+
+	// get file name from parameters
+
+	TPtrC	fileName;
+	if ( !GetStringFromConfig(aSection, KFileName(), fileName) )
+		{
+		ERR_PRINTF2(_L("No %S"), &KFileName());
+		SetBlockResult(EFail);
+		}
+
+	// get flag if use RFile instance in Save() call from parameters
+	TBool	useRFile = EFalse;
+	GetBoolFromConfig(aSection, KUseRFile(), useRFile);
+
+	TInt		err = KErrNone;
+	TBool		isFileInRom = EFalse;
+	TUint32*	addressInRom = NULL;
+	if (useRFile)
+		{
+		// open rfile
+		RFile file;
+		err = file.Open(FileServer(), fileName, EFileShareReadersOnly);
+
+		// check if failed to open file
+		if ( err != KErrNone )
+			{
+			ERR_PRINTF2(_L("File open error: %d"), err);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			// call IsFileInRom()
+			isFileInRom = CFbsBitmap::IsFileInRom(file, addressInRom);
+
+			// close rfile
+			file.Close();
+			}
+		}
+	else
+		{
+		isFileInRom = CFbsBitmap::IsFileInRom(fileName, addressInRom);
+		}
+
+	// get expected value if is in ROM from parameters
+	TBool	expectedIsFileInRom = EFalse;
+	if ( GetBoolFromConfig(aSection, KExpectedBool(), expectedIsFileInRom) )
+		{
+		// check the expectation
+		if (expectedIsFileInRom != isFileInRom)
+			{
+			ERR_PRINTF3(_L("The value is not as expected! expected: %d, actual: %d"), expectedIsFileInRom, isFileInRom);
+			SetBlockResult(EFail);
+			}
+		}
+
+	// check that address is not null if in rom
+	if ( isFileInRom && addressInRom == NULL )
+		{
+		ERR_PRINTF1(_L("The file is in ROM but returned address is NULL"));
+		SetBlockResult(EFail);
+		}
+	}
+
+/** Calls CFbsBitmap::IsLargeBitmap() */
+void CT_DataFbsBitmap::DoCmdIsLargeBitmap(const TDesC& aSection)
+	{
+	// call IsLargeBitmap()
+	TBool	value = GetFbsBitmap()->IsLargeBitmap();
+	INFO_PRINTF2(_L("Is large bitmap: %d"), value);
+	
+	// validate returned value if needed
+	TBool	expectedBool;
+	if(GetIntFromConfig(aSection, KExpectedBool(), expectedBool))
+		{
+		if (expectedBool != value)
+			{
+			ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedBool, value);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::IsMonochrome() */
+void CT_DataFbsBitmap::DoCmdIsMonochrome(const TDesC& aSection)
+	{
+
+	// call IsMonochrome()
+	TBool	value = GetFbsBitmap()->IsMonochrome();
+	INFO_PRINTF2(_L("Is monochrome: %d"), value);
+
+	// validate returned value if needed
+	TBool	expectedBool;
+	if(GetIntFromConfig(aSection, KExpectedBool(), expectedBool))
+		{
+		if (expectedBool != value)
+			{
+			ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedBool, value);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::IsRomBitmap() and check against expectation */
+void CT_DataFbsBitmap::DoCmdIsRomBitmap(const TDesC& aSection)
+	{
+	// call IsRomBitmap()
+	TBool	actualValue = GetFbsBitmap()->IsRomBitmap();
+	INFO_PRINTF2(_L("CFbsBitmap::IsRomBitmap() %d"), actualValue);
+
+	// get expected value if is in ROM from parameters
+	TBool	expectedIsRomBitmap = EFalse;
+	if ( GetBoolFromConfig(aSection, KExpectedBool(), expectedIsRomBitmap) )
+		{
+		// check the expectation
+		if (expectedIsRomBitmap != actualValue)
+			{
+			ERR_PRINTF3(_L("The value is not as expected! expected: %d, actual: %d"), expectedIsRomBitmap, actualValue);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** CFbsBitmap::Load() Call */
+void CT_DataFbsBitmap::DoCmdLoadL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("CFbsBitmap::Load() Call"));
+	LoadOrLoadAndCompressL(aSection, EFalse);
+	}
+
+/** CFbsBitmap::LoadAndCompress() Call */
+void CT_DataFbsBitmap::DoCmdLoadAndCompressL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("CFbsBitmap::LoadAndCompress() Call"));
+	LoadOrLoadAndCompressL(aSection, ETrue);
+	}
+
+/** Calls static CFbsBitmap destructor */
+void CT_DataFbsBitmap::DoCmdLockHeap(const TDesC& aSection)
+	{
+	TBool	always=EFalse;
+	GetBoolFromConfig(aSection, KAlways(), always);
+	GetFbsBitmap()->LockHeap(always);
+	}
+
+/** Calls static CFbsBitmap destructor */
+void CT_DataFbsBitmap::DoCmdLockHeapLC(const TDesC& aSection)
+	{
+	TBool	always=EFalse;
+	GetBoolFromConfig(aSection, KAlways(), always);
+
+	GetFbsBitmap()->LockHeapLC(always);
+	iPopWhenUnlocking=ETrue;
+	}
+
+/** Calls CFbsBitmap::PaletteAttributes() */
+void CT_DataFbsBitmap::DoCmdPaletteAttributes(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::PaletteAttributes()"));
+
+	// call PaletteAttributes()
+	TBool	modifiable;
+	TInt	entries;
+	GetFbsBitmap()->PaletteAttributes(modifiable, entries);
+
+	INFO_PRINTF3(_L("Modifiable: %d, Number of entries: %d"), modifiable, entries);
+
+	// validate returned value if needed
+	TBool	expectedModifiable;
+	if(GetBoolFromConfig(aSection, KModifiable(), expectedModifiable))
+		{
+		if (expectedModifiable != modifiable)
+			{
+			ERR_PRINTF3(_L("The returned modifaiable value is not as expected, expected: %d, actual: %d"), expectedModifiable, modifiable);
+			SetBlockResult(EFail);
+			}
+		}
+
+	// validate returned value if needed
+	TBool	expectedEntries;
+	if(GetIntFromConfig(aSection, KEntries(), expectedEntries))
+		{
+		if (expectedEntries != entries)
+			{
+			ERR_PRINTF3(_L("The returned modifaiable value is not as expected, expected: %d, actual: %d"), expectedEntries, entries);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::Reset() */
+void CT_DataFbsBitmap::DoCmdReset()
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::Reset()"));
+
+	// call Reset()
+	GetFbsBitmap()->Reset();
+	}
+
+/** Calls CFbsBitmap::Resize() */
+void CT_DataFbsBitmap::DoCmdResize(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::Resize()"));
+
+	// get size height from parameters
+	TInt	height;
+	if(!GetIntFromConfig(aSection, KHeight(), height))
+		{
+		ERR_PRINTF2(_L("No %S"), &KHeight());
+		SetBlockResult(EFail);
+		}
+
+	// get size width from parameters
+	TInt	width;
+	if(!GetIntFromConfig(aSection, KWidth(), width))
+		{
+		ERR_PRINTF2(_L("No %S"), &KWidth());
+		SetBlockResult(EFail);
+		}
+
+	// call Resize()
+	TInt	err = GetFbsBitmap()->Resize(TSize(width, height));
+
+	// check error code
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Resize error: %d"), err);
+		SetError(err);
+		}
+	}
+
+/** Calls CFbsBitmap::Save() */
+void CT_DataFbsBitmap::DoCmdSave(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::Save()"));
+
+	// get file name from parameters
+	TPtrC	fileName;
+	if (!GetStringFromConfig(aSection, KFileName(), fileName))
+		{
+		ERR_PRINTF2(_L("No %S"), &KFileName());
+		SetBlockResult(EFail);
+		}
+
+	// get flag if use RFile instance in Save() call from parameters
+	TBool	useRFile = EFalse;
+	if(!GetBoolFromConfig(aSection, KUseRFile(), useRFile))
+		{
+		ERR_PRINTF2(_L("No %S"), &KUseRFile());
+		SetBlockResult(EFail);
+		}
+
+	// get flag if use RFile instance in Load() call from parameters
+	TBool	useClosedRFile = EFalse;
+	if(GetBoolFromConfig(aSection, KUseClosedRFile(), useClosedRFile))
+		{
+		if (useClosedRFile && !useRFile)
+			{
+			ERR_PRINTF3(_L("Cannot use %S parameter if %S is not set to TRUE"), &KUseClosedRFile(), &KUseRFile());
+			SetBlockResult(EFail);
+			}
+		}
+
+	TInt	err = KErrNone;
+	if (useRFile)
+		{
+		// required to allow file handle to be adopted by another process
+		FileServer().ShareProtected();
+
+		// open or create rfile
+		RFile	file;
+
+		if (!useClosedRFile)
+			{
+			err = file.Open(FileServer(), fileName, EFileWrite);
+
+			if (err == KErrNotFound)
+				{
+				err = file.Create(FileServer(), fileName, EFileWrite);
+
+				// check if failed to create file
+				if (err != KErrNone)
+					{
+					ERR_PRINTF2(_L("File create error: %d"), err);
+					SetBlockResult(EFail);
+					}
+				}
+			else if (err != KErrNone)
+				{
+				// if failed to open file
+				ERR_PRINTF2(_L("File open error: %d"), err);
+				SetBlockResult(EFail);
+				}
+			}
+
+		// call Save()
+		err = GetFbsBitmap()->Save(file);
+
+		// close rfile
+		file.Close();
+		}
+	else
+		{
+		err = GetFbsBitmap()->Save(fileName);
+		}
+
+	// check error code
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Save error: %d"), err);
+		SetError(err);
+		}
+	}
+
+/** Calls CFbsBitmap::ScanLineLength() */
+void CT_DataFbsBitmap::DoCmdScanLineLength(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::ScanLineLength()"));
+
+	// get length from parameters
+	TInt length = 0;
+	if(!GetIntFromConfig(aSection, KLength(), length))
+		{
+		ERR_PRINTF2(_L("No %S"), &KLength());
+		SetBlockResult(EFail);
+		}
+
+	// get display mode from parameters
+	TDisplayMode	displayMode;
+	if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+		{
+		ERR_PRINTF1(_L("No display mode"));
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		TInt actualValue = CFbsBitmap::ScanLineLength(length, displayMode);
+		INFO_PRINTF2(_L("CFbsBitmap::ScanLineLength() %d"), actualValue);
+	
+		TInt expectedValue = 0;
+		if ( GetIntFromConfig(aSection, KExpectedInt(), expectedValue) )
+			{
+			if (actualValue != expectedValue)
+				{
+				ERR_PRINTF3(_L("Expected value doesn't match to actual! expected: %d, actual: %d"), expectedValue, actualValue);
+				SetBlockResult(EFail);
+				}
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::SetDisplayMode() */
+void CT_DataFbsBitmap::DoCmdSetDisplayMode(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::SetDisplayMode()"));
+
+	// get display mode from parameters
+	TDisplayMode	displayMode;
+	if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KDisplayMode(), displayMode) )
+		{
+		ERR_PRINTF1(_L("No display mode"));
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		// call SetDisplayMode()
+		TInt	err = GetFbsBitmap()->SetDisplayMode(displayMode);
+
+		// check error code
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Set display mode error: %d"), err);
+			SetError(err);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::SetPalette() by previously created palette */
+void CT_DataFbsBitmap::DoCmdSetPaletteL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::SetPalette() by previously created palette"));
+
+	// get CPalette object passed as a parameter
+	CPalette*	palette = NULL;
+
+	CT_GraphicsUtil::GetPaletteL(*this, aSection, KPalette(), palette);
+
+	// call SetPalette()
+	GetFbsBitmap()->SetPalette(palette);
+	}
+
+/** Calls CFbsBitmap::SetRomBitmapL() by another bitmap */
+void CT_DataFbsBitmap::DoCmdSetRomBitmapL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::SetRomBitmapL() by another bitmap"));
+
+	// get fbsBitmap passed as a parameter
+	CFbsBitmap*		otherFbsBitmap=NULL;
+
+	CT_GraphicsUtil::GetFbsBitmapL(*this, aSection, KFbsBitmapName(), otherFbsBitmap);
+
+	// get romPointer. If the bitmap is ROM bitmap then Handle() returns ROM pointer
+	CBitwiseBitmap*	bitmapRomAddress=NULL;
+	if ( otherFbsBitmap!=NULL )
+		{
+		bitmapRomAddress=REINTERPRET_CAST(CBitwiseBitmap*, otherFbsBitmap->Handle());
+		}
+
+	// call SetRomBitmapL()
+	TInt	bitmapSizeInBytes=0;
+	TRAPD(err, GetFbsBitmap()->SetRomBitmapL(bitmapRomAddress, bitmapSizeInBytes));
+
+	// check error code
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Set ROM bitmap error: %d"), err);
+		SetError(err);
+		}
+	}
+
+/** Calls CFbsBitmap::SetScanLine() */
+void CT_DataFbsBitmap::DoCmdSetScanLineL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::SetScanLine()"));
+
+	// get scanline coordinate from parameters
+	TInt	coordinate = 0;
+	if(!GetIntFromConfig(aSection, KScanLineCoord(), coordinate))
+		{
+		ERR_PRINTF2(_L("No %S"), &KScanLineCoord());
+		SetBlockResult(EFail);
+		}
+
+	// get file name from parameters
+	TPtrC	fileName;
+	if (!GetStringFromConfig(aSection, KFileName(), fileName))
+		{
+		ERR_PRINTF2(_L("No %S"), &KFileName());
+		SetBlockResult(EFail);
+		}
+
+	// open file
+	RFile	file;
+	User::LeaveIfError(file.Open(FileServer(), fileName, EFileRead | EFileShareAny));
+	CleanupClosePushL(file);
+
+	// get size
+	TInt	size = 0;
+	User::LeaveIfError(file.Size(size));
+
+	// read file
+    HBufC8*	fileDataBuff = HBufC8::NewLC(size);
+    TPtr8	fileData = fileDataBuff->Des();
+
+	User::LeaveIfError(file.Read(fileData));
+
+	GetFbsBitmap()->SetScanLine(fileData, coordinate);
+
+    CleanupStack::PopAndDestroy(2, &file);  // fileDataBuff, file
+	}
+
+/** Calls CFbsBitmap::SetSizeInTwips() by size parameter */
+void CT_DataFbsBitmap::DoCmdSetSizeInTwipsL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::SetSizeInTwips()"));
+
+	// get if to NULL device pointer flag from parameters
+	TPtrC	device;
+	if ( GetStringFromConfig(aSection, KDevice(), device) )
+		{
+		CFbsBitmapDevice*	bitmapDevice=static_cast<CFbsBitmapDevice*>(GetDataObjectL(device));
+		GetFbsBitmap()->SetSizeInTwips(bitmapDevice);
+		}
+	else
+		{
+		// get size height from parameters
+		TInt	height;
+		if(!GetIntFromConfig(aSection, KHeight(), height))
+			{
+			ERR_PRINTF2(_L("No %S"), &KHeight());
+			SetBlockResult(EFail);
+			}
+
+		// get size width from parameters
+		TInt	width;
+		if(!GetIntFromConfig(aSection, KWidth(), width))
+			{
+			ERR_PRINTF2(_L("No %S"), &KWidth());
+			SetBlockResult(EFail);
+			}
+
+		// call SetSizeInTwips()
+		GetFbsBitmap()->SetSizeInTwips(TSize(width, height));
+		}
+	}
+
+/** Calls CFbsBitmap::SizeInPixels() and checks the size */
+void CT_DataFbsBitmap::DoCmdSizeInPixels(const TDesC& aSection)
+	{
+	// call SizeInTwips()
+	TSize	actualSize = GetFbsBitmap()->SizeInPixels();
+	INFO_PRINTF3(_L("CFbsBitmap::SizeInPixels() height %d, width %d"), actualSize.iHeight, actualSize.iWidth);
+
+	// get size height from parameters
+	TInt	height;
+	if ( GetIntFromConfig(aSection, KHeight(), height) )
+		{
+		if ( actualSize.iHeight != height )
+			{
+			ERR_PRINTF3(_L("Height mismatch expected: %d, actual: %d"), height, actualSize.iHeight);
+			SetBlockResult(EFail);
+			}
+		}
+
+	// get size width from parameters
+	TInt	width;
+	if ( GetIntFromConfig(aSection, KWidth(), width) )
+		{
+		// check that value is as expected
+		if ( actualSize.iWidth != width )
+			{
+			ERR_PRINTF3(_L("Width mismatch expected: %d, actual: %d"), width, actualSize.iWidth);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::SizeInTwips() and compares the result with expected */
+void CT_DataFbsBitmap::DoCmdSizeInTwips(const TDesC& aSection)
+	{
+	// call SizeInTwips()
+	TSize	actualSize = GetFbsBitmap()->SizeInTwips();
+	INFO_PRINTF3(_L("CFbsBitmap::SizeInTwips() height %d, width %d"), actualSize.iHeight, actualSize.iWidth);
+
+	// get size height from parameters
+	TInt	height;
+	if ( GetIntFromConfig(aSection, KHeight(), height) )
+		{
+		if ( actualSize.iHeight != height )
+			{
+			ERR_PRINTF3(_L("Height mismatch expected: %d, actual: %d"), height, actualSize.iHeight);
+			SetBlockResult(EFail);
+			}
+		}
+
+	// get size width from parameters
+	TInt	width;
+	if ( GetIntFromConfig(aSection, KWidth(), width) )
+		{
+		// check that value is as expected
+		if ( actualSize.iWidth != width )
+			{
+			ERR_PRINTF3(_L("Width mismatch expected: %d, actual: %d"), width, actualSize.iWidth);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::StoreL() */
+void CT_DataFbsBitmap::DoCmdStoreL(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::StoreL()"));
+
+	TInt	numberOfFiles = 0;
+	TInt	numberOfBitmapIds = 0;
+	TPtrC	sourceFileName1;
+	TPtrC	sourceFileName2;
+	TInt	sourceBitmapId0 = -1;
+	TInt	sourceBitmapId1 = -1;
+	TInt	sourceBitmapId2 = -1;
+
+	// get file name from parameters
+	TPtrC	fileName;
+	if (!GetStringFromConfig(aSection, KFileName(), fileName))
+		{
+		ERR_PRINTF2(_L("No %S"), &KFileName());
+		SetBlockResult(EFail);
+		}
+
+	// get flag if use RFile instance in Save() call from parameters
+	TBool	useRFile = EFalse;
+	if(!GetBoolFromConfig(aSection, KUseRFile(), useRFile))
+		{
+		ERR_PRINTF2(_L("No %S"), &KUseRFile());
+		SetBlockResult(EFail);
+		}
+
+	// get flag if use RFile instance in Load() call from parameters
+	TBool	useClosedRFile = EFalse;
+	if(GetBoolFromConfig(aSection, KUseClosedRFile(), useClosedRFile))
+		{
+		if (useClosedRFile && !useRFile)
+			{
+			ERR_PRINTF3(_L("Cannot use %S parameter if %S is not set to TRUE"), &KUseClosedRFile(), &KUseRFile());
+			SetBlockResult(EFail);
+			}
+		}
+
+	// get up to 3 source file names from parameters
+	TPtrC	sourceFileName0;
+	if (GetStringFromConfig(aSection, KSourceFileName0(), sourceFileName0))
+		{
+		numberOfFiles++;
+		if (GetStringFromConfig(aSection, KSourceFileName1(), sourceFileName1))
+			{
+			numberOfFiles++;
+			if (GetStringFromConfig(aSection, KSourceFileName2(), sourceFileName2))
+				{
+				numberOfFiles++;
+				}
+			}
+		}
+
+	// get up to 3 source bitmap ids from parameters
+	if (GetIntFromConfig(aSection, KSourceBitmapId0(), sourceBitmapId0))
+		{
+		numberOfBitmapIds++;
+		if (GetIntFromConfig(aSection, KSourceBitmapId1(), sourceBitmapId1))
+			{
+			numberOfBitmapIds++;
+			if (GetIntFromConfig(aSection, KSourceBitmapId2(), sourceBitmapId2))
+				{
+				numberOfBitmapIds++;
+				}
+			}
+		}
+
+	// get number of sources argument from parameters
+	TInt	numberOfSources;
+	if(!GetIntFromConfig(aSection, KNumberOfSources(), numberOfSources))
+		{
+		ERR_PRINTF2(_L("No %S"), &KNumberOfSources());
+		SetBlockResult(EFail);
+		}
+
+	// create array of file names
+ 	TFileName** sourceFiles = new (ELeave) TFileName*[numberOfFiles];
+ 	CleanupStack::PushL(sourceFiles);
+	if (numberOfFiles > 0) sourceFiles[0] = new (ELeave) TFileName(sourceFileName0);
+	if (numberOfFiles > 1) sourceFiles[1] = new (ELeave) TFileName(sourceFileName1);
+	if (numberOfFiles > 2) sourceFiles[2] = new (ELeave) TFileName(sourceFileName2);
+
+	// create array of bitmap ids
+	TInt32* bitmapIds = new (ELeave) TInt32[numberOfBitmapIds];
+	CleanupStack::PushL(bitmapIds);
+
+	if (numberOfBitmapIds > 0) bitmapIds[0] = sourceBitmapId0;
+	if (numberOfBitmapIds > 1) bitmapIds[1] = sourceBitmapId1;
+	if (numberOfBitmapIds > 2) bitmapIds[2] = sourceBitmapId2;
+
+	TInt err = KErrNone;
+	if (useRFile)
+		{
+		// required to allow file handle to be adopted by another process
+		FileServer().ShareProtected();
+
+		// open rfile
+		TBool	openSuccess = EFalse;
+
+		RFile file;
+		err = file.Open(FileServer(), fileName, EFileWrite);
+
+		// check if ok, if not fount => try to create new file
+		if (err == KErrNone)
+			{
+			openSuccess = ETrue;
+			}
+		else if (err == KErrNotFound)
+			{
+			INFO_PRINTF1(_L("File doesn't exist, trying to create it."));
+
+			err = file.Create(FileServer(), fileName, EFileWrite);
+
+			// check if failed to create file
+			if (err == KErrNone)
+				{
+				openSuccess = ETrue;
+				}
+			else
+				{
+				ERR_PRINTF2(_L("File create error: %d"), err);
+				SetBlockResult(EFail);
+				}
+			}
+		else
+			{
+			ERR_PRINTF2(_L("File open error: %d"), err);
+			SetBlockResult(EFail);
+			}
+
+		// if ok => do store
+		if (openSuccess)
+			{
+			// if we use invalid RFile handle in our test
+			if (useClosedRFile)
+				{
+				file.Close();
+				}
+
+			// call StoreL()
+			TRAP(err, CFbsBitmap::StoreL(file, numberOfSources, (const TDesC**) sourceFiles, bitmapIds));
+
+			// check error code
+			if (err != KErrNone)
+				{
+				ERR_PRINTF2(_L("Store error: %d"), err);
+				SetError(err);
+				}
+
+			// close rfile
+			file.Close();
+			}
+		}
+	else
+		{
+		// call StoreL()
+		TRAP(err, CFbsBitmap::StoreL(fileName, numberOfSources, (const TDesC**) sourceFiles, bitmapIds));
+
+		// check error code
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Store error: %d"), err);
+			SetError(err);
+			}
+		}
+
+ 	// Iterate over the file name pointer array and cleanup
+ 	for (TInt i = 0; i < numberOfFiles; ++i)
+ 		{
+		delete sourceFiles[i];
+   		}
+
+ 	// Cleanup the arrays allocated on the heap
+ 	CleanupStack::PopAndDestroy(2, sourceFiles);
+	}
+
+/** Calls CFbsBitmap::SwapWidthAndHeight() */
+void CT_DataFbsBitmap::DoCmdSwapWidthAndHeight()
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::SwapWidthAndHeight()"));
+
+	// call SwapWidthAndHeight()
+	TInt	err = GetFbsBitmap()->SwapWidthAndHeight();
+
+	// check error code
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Swap width and height error: %d"), err);
+		SetError(err);
+		}
+	}
+
+/** Calls static CFbsBitmap destructor */
+void CT_DataFbsBitmap::DoCmdUnlockHeapL(const TDesC& aSection)
+	{
+
+	CFbsBitmap*	bitmap=NULL;
+	if ( CT_GraphicsUtil::GetFbsBitmapL(*this, aSection, KFbsBitmapName(), bitmap) )
+		{
+		CFbsBitmap::UnlockHeap(bitmap);
+		}
+	else
+		{
+		TBool	always=EFalse;
+		GetBoolFromConfig(aSection, KAlways(), always);
+
+		GetFbsBitmap()->UnlockHeap(always);
+		}
+
+	if ( iPopWhenUnlocking )
+		{
+		iPopWhenUnlocking=EFalse;
+		CleanupStack::Pop();
+		}
+	}
+
+/** Calls CFbsBitmap::VerticalPixelsToTwips() */
+void CT_DataFbsBitmap::DoCmdVerticalPixelsToTwips(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::VerticalPixelsToTwips()"));
+
+	// get pixels from parameters
+	TInt	pixels;
+	if(!GetIntFromConfig(aSection, KPixels(), pixels))
+		{
+		ERR_PRINTF2(_L("No %S"), &KPixels());
+		SetBlockResult(EFail);
+		}
+
+	// call VerticalPixelsToTwips()
+	TInt	value = GetFbsBitmap()->VerticalPixelsToTwips(pixels);
+	INFO_PRINTF2(_L("Twips: %d"), value);
+
+	// validate returned value if needed
+	TInt	expectedValue;
+	if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+		{
+		if (expectedValue != value)
+			{
+			ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::VerticalTwipsToPixels() */
+void CT_DataFbsBitmap::DoCmdVerticalTwipsToPixels(const TDesC& aSection)
+	{
+	INFO_PRINTF1(_L("Calls CFbsBitmap::VerticalTwipsToPixels()"));
+
+	// get twips from parameters
+	TInt	twips;
+	if(!GetIntFromConfig(aSection, KTwips(), twips))
+		{
+		ERR_PRINTF2(_L("No %S"), &KTwips());
+		SetBlockResult(EFail);
+		}
+
+	// call VerticalTwipsToPixels()
+	TInt	value = GetFbsBitmap()->VerticalTwipsToPixels(twips);
+	INFO_PRINTF2(_L("Pixels: %d"), value);
+
+	// validate returned value if needed
+	TInt expectedValue;
+	if(GetIntFromConfig(aSection, KExpectedInt(), expectedValue))
+		{
+		if (expectedValue != value)
+			{
+			ERR_PRINTF3(_L("The returned value is not as expected, expected: %d, actual: %d"), expectedValue, value);
+			SetBlockResult(EFail);
+			}
+		}
+	}
+
+/** Calls CFbsBitmap::ExternalizeL() or CFbsBitmap::ExternalizeRectangleL(). Used by DoCmdExternalize() and DoCmdExternalizeRectangle() methods */
+void CT_DataFbsBitmap::ExternalizeImplL(const TDesC& aSection, const TRect& aRect, TBool aUseRect)
+	{
+	// get file name from parameters
+	TPtrC	fileName;
+	if (!GetStringFromConfig(aSection, KFileName(), fileName))
+		{
+		ERR_PRINTF2(_L("No %S"), &KFileName());
+		SetBlockResult(EFail);
+		}
+
+	// get a flag if to use closed stream from parameters
+	TBool	useClosedStream = EFalse;
+	if(!GetBoolFromConfig(aSection, KUseClosedStream(), useClosedStream))
+		{
+		ERR_PRINTF2(_L("No %S"), &KUseClosedStream());
+		SetBlockResult(EFail);
+		}
+
+	// create write store
+	CDirectFileStore*	writestore = CDirectFileStore::ReplaceL(FileServer(), fileName, EFileStream | EFileWrite);
+	CleanupStack::PushL(writestore);
+	TInt				popCount=1;
+	TUidType 			uidtype(KDirectFileStoreLayoutUid, KMultiBitmapFileImageUid);
+
+	writestore->SetTypeL(uidtype);
+
+	// create write stream
+	RStoreWriteStream	writestrm;
+
+	// close stream set by parameters
+	if (!useClosedStream)
+		{
+		TStreamId	headerid=writestrm.CreateL(*writestore);
+		CleanupClosePushL(writestrm);
+
+		++popCount;
+		writestore->SetRootL(headerid);
+		}
+
+	if (aUseRect)
+		{
+		// call ExternalizeRectangleL()
+		TRAPD(err, GetFbsBitmap()->ExternalizeRectangleL(writestrm, aRect));
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Externalize rectangle error: %d"), err);
+			SetError(err);
+			}
+		}
+	else
+		{
+		// call ExternalizaL()
+		TRAPD(err, GetFbsBitmap()->ExternalizeL(writestrm));
+		if (err != KErrNone)
+			{
+			ERR_PRINTF2(_L("Externalize error: %d"), err);
+			SetError(err);
+			}
+		}
+
+	// cleanup
+	CleanupStack::PopAndDestroy(popCount, writestore);
+	}
+
+/** Calls CFbsBitmap::Load() or CFbsBitmap::LoadAndCompress(). Used by DoCmdLoad() and DoCmdLoadAndCompress() methods */
+void CT_DataFbsBitmap::LoadOrLoadAndCompressL(const TDesC& aSection, TBool aCompress)
+	{
+
+	// get bitmap id from parameters
+	TInt	bitmapId;
+	if(!GetIntFromConfig(aSection, KBitmapId(), bitmapId))
+		{
+		ERR_PRINTF2(_L("No %S"), &KBitmapId());
+		SetBlockResult(EFail);
+		}
+
+	// get file name from parameters
+	TPtrC	fileName;
+	if (!GetStringFromConfig(aSection, KFileName(), fileName))
+		{
+		ERR_PRINTF2(_L("No %S"), &KFileName());
+		SetBlockResult(EFail);
+		}
+
+	// get file offset from parameters
+	TInt	fileOffset;
+	TBool	useOffset = GetIntFromConfig(aSection, KFileOffset(), fileOffset);
+
+	// get share if loaded from parameters
+	TBool	shareIfLoaded = EFalse;
+	GetBoolFromConfig(aSection, KShareIfLoaded(), shareIfLoaded);
+
+	// get flag if use RFile instance in Load() call from parameters
+	TBool	useRFile = EFalse;
+	GetBoolFromConfig(aSection, KUseRFile(), useRFile);
+
+	// get flag if use RFile instance in Load() call from parameters
+	TBool	useClosedRFile = EFalse;
+	GetBoolFromConfig(aSection, KUseClosedRFile(), useClosedRFile);
+
+	if (useClosedRFile && !useRFile)
+		{
+		ERR_PRINTF3(_L("Cannot use %S parameter if %S is not set to TRUE"), &KUseClosedRFile(), &KUseRFile());
+		SetBlockResult(EFail);
+		}
+
+	// load bitmap
+	TInt	err = KErrNone;
+	if (useRFile)
+		{
+		// required to allow file handle to be adopted by another process
+		FileServer().ShareProtected();
+
+		// open rfile
+		RFile	file;
+
+		// if we use invalid RFile handle in our test
+		if (!useClosedRFile)
+			{
+			User::LeaveIfError(file.Open(FileServer(), fileName, EFileShareReadersOnly));
+			CleanupClosePushL(file);
+			}
+
+		// do load
+		if (aCompress)
+			{
+			if (useOffset)
+				{
+				err = GetFbsBitmap()->LoadAndCompress(file, bitmapId, shareIfLoaded, fileOffset);
+				}
+			else
+				{
+				err = GetFbsBitmap()->LoadAndCompress(file, bitmapId, shareIfLoaded);
+				}
+			}
+		else
+			{
+			if (useOffset)
+				{
+				err = GetFbsBitmap()->Load(file, bitmapId, shareIfLoaded, fileOffset);
+				}
+			else
+				{
+				err = GetFbsBitmap()->Load(file, bitmapId, shareIfLoaded);
+				}
+			}
+
+		if (!useClosedRFile)
+			{
+			CleanupStack::PopAndDestroy(&file);
+			}
+		}
+	else
+		{
+		if (aCompress)
+			{
+			if (useOffset)
+				{
+				err = GetFbsBitmap()->LoadAndCompress(fileName, bitmapId, shareIfLoaded, fileOffset);
+				}
+			else
+				{
+				err = GetFbsBitmap()->LoadAndCompress(fileName, bitmapId, shareIfLoaded);
+				}
+			}
+		else
+			{
+			if (useOffset)
+				{
+				err = GetFbsBitmap()->Load(fileName, bitmapId, shareIfLoaded, fileOffset);
+				}
+			else
+				{
+				err = GetFbsBitmap()->Load(fileName, bitmapId, shareIfLoaded);
+				}
+			}
+		}
+
+	// check error code
+	if (err != KErrNone)
+		{
+		ERR_PRINTF2(_L("Load error: %d"), err);
+		SetError(err);
+		}
+	}
+
+/**
+ Virtual RunL - Called on completion of an asynchronous command
+ @see MTPActiveCallback
+ @param aActive Active Object that RunL has been called on
+ @pre N/A
+ @post N/A
+ @leave system wide error code
+*/
+void CT_DataFbsBitmap::RunL(CActive* aActive, const TInt aIndex)
+	{
+	if ( aActive==iActiveCompressInBackground )
+		{
+		RunCompressInBackground(aIndex);
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Stray signal"));
+		SetBlockResult(EFail);
+		}
+	DecOutstanding();
+	}
+
+/**
+ Virtual DoCancel - Request to cancel the asynchronous command
+ @see - MTPActiveCallback
+ @param aActive Active Object that DoCancel has been called on
+ @pre - N/A
+ @post - N/A
+ @leave system wide error code
+*/
+void CT_DataFbsBitmap::DoCancel(CActive* aActive, const TInt aIndex)
+	{
+	if ( aActive==iActiveCompressInBackground )
+		{
+		DoCancelCompressInBackground(aIndex);
+		}
+	else
+		{
+		ERR_PRINTF1(_L("Stray signal"));
+		SetBlockResult(EFail);
+		}
+	DecOutstanding();
+	}
+
+void CT_DataFbsBitmap::RunCompressInBackground(const TInt aIndex)
+	{
+	TInt	err=iActiveCompressInBackground->iStatus.Int();
+	INFO_PRINTF2(_L("RunCompressInBackground %d"), err);
+	if ( err!=KErrNone )
+		{
+		ERR_PRINTF2(_L("RunL Error %d"), err);
+		SetAsyncError(aIndex, err);
+		}
+	}
+
+void CT_DataFbsBitmap::DoCancelCompressInBackground(const TInt /*aIndex*/)
+	{
+	}