common/tools/ats/smoketest/graphics/gdi/src/T_DataBitmapDevice.cpp
changeset 833 6ffc235847d0
child 872 17498133d9ad
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/common/tools/ats/smoketest/graphics/gdi/src/T_DataBitmapDevice.cpp	Fri Dec 18 14:46:04 2009 +0000
@@ -0,0 +1,641 @@
+/*
+* 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
+
+This contains CT_DataGraphicsDevice
+*/
+
+#include "T_DataBitmapDevice.h"
+#include "T_GraphicsUtil.h"
+
+/*@{*/
+///	Commands
+_LIT(KCmdAddFile,									"AddFile");
+_LIT(KCmdCreateBitmapContext,						"CreateBitmapContext");
+_LIT(KCmdFontHeightInPixels,						"FontHeightInPixels");
+_LIT(KCmdGetNearestFontInPixels,					"GetNearestFontInPixels");
+_LIT(KCmdGetNearestFontToDesignHeightInPixels,		"GetNearestFontToDesignHeightInPixels");
+_LIT(KCmdGetNearestFontToMaxHeightInPixels,			"GetNearestFontToMaxHeightInPixels");
+_LIT(KCmdGetPixel,									"GetPixel");
+_LIT(KCmdGetScanLine,								"GetScanLine");
+_LIT(KCmdRemoveFile,								"RemoveFile");
+
+///	Fields
+_LIT(KFldBitmapContext,								"bitmap_context");
+_LIT(KFldBuffLength,								"buff_length");
+_LIT(KFldCheckScanLine,								"checkScanLine");
+_LIT(KFldScanLineBufferLength,						"scanLineBufferLength");
+_LIT(KFldDisplayMode,								"displaymode");
+_LIT(KFldExpected,									"expected");
+_LIT(KFldFile,										"file");
+_LIT(KFldFont,										"font");
+_LIT(KFldHeightIndex,								"height_index");
+_LIT(KFldId,										"id");
+_LIT(KFldLength,									"length");
+_LIT(KFldMaxHeight,									"maxheight");
+_LIT(KFldPoint,										"point");
+_LIT(KFldSize,										"size");
+_LIT(KFldTypefaceIndex,								"typeface_index");
+_LIT(KFldPointNum,									"checkPointNum");
+_LIT(KFldPointXN,									"point%d_x");
+_LIT(KFldPointRGBN,									"expected_point%d");
+_LIT(KFldScanlineY,									"scanline_y");
+
+///	Logging
+_LIT(KLogColor,										"Color Red=%d Green=%d Blue=%d Alpha=%d");
+_LIT(KLogError,										"Error=%d");
+_LIT(KLogHeight,									"Height=%d");
+_LIT(KLogMissingFilename,							"File '%S' not found in array");
+_LIT(KLogMissingParameter,							"Missing parameter '%S'");
+_LIT(KLogMissingWrapper,							"Missing wrapper for '%S'");
+_LIT(KLogNotExpectedValue,							"Not expected value");
+_LIT(KLogDoNotCheckScanLine,						"Will not check scanline.");
+_LIT(KLogDoCheckScanLine,							"Will check scanline is correct.");
+_LIT(KLogCheckScanLineResult,						"ScanLine checked, expected length is %d, actual length is %d.");
+_LIT(KLogColorExpected,								"Expected Color Red=%d Green=%d Blue=%d Alpha=%d");
+_LIT(KLogColorActual,								"Actual Color Red=%d Green=%d Blue=%d Alpha=%d");
+_LIT(KLogPoint,										"Point X=%d Y=%d");
+/*@}*/
+
+
+/**
+* Constructor. First phase construction
+*/
+CT_DataBitmapDevice::CT_DataBitmapDevice()
+:	CT_DataGraphicsDevice()
+	{
+	}
+
+CT_DataBitmapDevice::~CT_DataBitmapDevice()
+	{
+	iFile.Reset();
+	iFile.Close();
+	iId.Reset();
+	iId.Close();
+	}
+
+/**
+* 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_DataBitmapDevice::DoCommandL(const TTEFFunction& aCommand, const TTEFSectionName& aSection, const TInt aAsyncErrorIndex)
+	{
+	TBool	ret=ETrue;
+	if ( aCommand==KCmdAddFile )
+		{
+		DoCmdAddFileL(aSection);
+		}
+	else if ( aCommand==KCmdCreateBitmapContext )
+		{
+		DoCmdCreateBitmapContextL(aSection);
+		}
+	else if ( aCommand==KCmdFontHeightInPixels )
+		{
+		DoCmdFontHeightInPixels(aSection);
+		}
+	else if ( aCommand==KCmdGetNearestFontInPixels )
+		{
+		DoCmdGetNearestFontInPixelsL(aSection);
+		}
+	else if ( aCommand==KCmdGetNearestFontToDesignHeightInPixels )
+		{
+		DoCmdGetNearestFontToDesignHeightInPixelsL(aSection);
+		}
+	else if ( aCommand==KCmdGetNearestFontToMaxHeightInPixels )
+		{
+		DoCmdGetNearestFontToMaxHeightInPixelsL(aSection);
+		}
+	else if ( aCommand==KCmdGetPixel )
+		{
+		DoCmdGetPixel(aSection);
+		}
+	else if ( aCommand==KCmdGetScanLine )
+		{
+		DoCmdGetScanLineL(aSection);
+		}
+	else if ( aCommand==KCmdRemoveFile )
+		{
+		DoCmdRemoveFile(aSection);
+		}
+	else
+		{
+		ret=CT_DataGraphicsDevice::DoCommandL(aCommand, aSection, aAsyncErrorIndex);
+		}
+
+	/* Another work package will implement this */
+	return ret;
+	}
+
+void CT_DataBitmapDevice::DoCmdAddFileL(const TDesC& aSection)
+	{
+	// get typeface index from parameters
+	TPtrC	file;
+	if ( !GetStringFromConfig(aSection, KFldFile(), file) )
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KFldFile());
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		TInt	id;
+		INFO_PRINTF1(_L("execute AddFile(const TDesC&, TInt&)"));
+		TInt	err=GetBitmapDevice()->AddFile(file, id);
+		if ( err!=KErrNone )
+			{
+			ERR_PRINTF2(KLogError, err);
+			SetError(err);
+			}
+		else
+			{
+			// Append filename and id
+			iFile.AppendL(file);
+			iId.AppendL(id);
+			}
+		}
+	}
+
+void CT_DataBitmapDevice::DoCmdCreateBitmapContextL(const TDesC& aSection)
+	{
+	TPtrC	wrapperName;
+	if ( !GetStringFromConfig(aSection, KFldBitmapContext, wrapperName) )
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KFldBitmapContext());
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		CDataWrapper*	wrapper=GetDataWrapperL(wrapperName);
+		if ( wrapper==NULL )
+			{
+			ERR_PRINTF2(KLogMissingWrapper, &wrapperName);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			CBitmapContext*	bitmapContext=NULL;
+			INFO_PRINTF1(_L("execute CreateBitmapContext(CBitmapContext*&)"));
+			TInt	err=GetBitmapDevice()->CreateBitmapContext(bitmapContext);
+			if ( err!=KErrNone )
+				{
+				ERR_PRINTF2(KLogError, err);
+				SetError(err);
+				}
+			else
+				{
+				wrapper->SetObjectL(bitmapContext);
+				}
+			}
+		}
+	}
+
+void CT_DataBitmapDevice::DoCmdFontHeightInPixels(const TDesC& aSection)
+	{
+	TBool	dataOk=ETrue;
+
+	// get typeface index from parameters
+	TInt	typefaceIndex;
+	if ( !GetIntFromConfig(aSection, KFldTypefaceIndex(), typefaceIndex) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldTypefaceIndex());
+		SetBlockResult(EFail);
+		}
+
+	// get height index from parameters
+	TInt	heightIndex;
+	if ( !GetIntFromConfig(aSection, KFldHeightIndex(), heightIndex) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldHeightIndex());
+		SetBlockResult(EFail);
+		}
+
+	if ( dataOk )
+		{
+		INFO_PRINTF1(_L("execute FontHeightInPixels(TInt, TInt)"));
+		TInt	height=GetBitmapDevice()->FontHeightInPixels(typefaceIndex, heightIndex);
+		INFO_PRINTF2(KLogHeight, height);
+	
+		TInt	expected;
+		if ( GetIntFromConfig(aSection, KFldExpected, expected) )
+			{
+			if ( expected!=height )
+				{
+				ERR_PRINTF1(KLogNotExpectedValue);
+				SetBlockResult(EFail);
+				}
+			}
+		}
+	}
+
+void CT_DataBitmapDevice::DoCmdGetNearestFontInPixelsL(const TDesC& aSection)
+	{
+	TBool	dataOk=ETrue;
+
+	TFontSpec	fontSpec;
+	if ( !GetFontSpecFromConfig(aSection, KFldFont, fontSpec) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldFont());
+		SetBlockResult(EFail);
+		}
+
+	TPtrC	wrapperName;
+	if ( !GetStringFromConfig(aSection, KFldFont, wrapperName) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldFont());
+		SetBlockResult(EFail);
+		}
+
+	if ( dataOk )
+		{
+		CDataWrapper*	wrapper=GetDataWrapperL(wrapperName);
+		if ( wrapper==NULL )
+			{
+			ERR_PRINTF2(KLogMissingWrapper, &wrapperName);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			CFont*	font=NULL;
+			INFO_PRINTF1(_L("execute GetNearestFontInPixels(CFont*&, TFontSpec)"));
+			TInt	err=GetBitmapDevice()->GetNearestFontInPixels(font, fontSpec);
+			if ( err!=KErrNone )
+				{
+				ERR_PRINTF2(KLogError, err);
+				SetError(err);
+				}
+			else
+				{
+				wrapper->SetObjectL(font);
+				}
+			}
+		}
+	}
+
+void CT_DataBitmapDevice::DoCmdGetNearestFontToDesignHeightInPixelsL(const TDesC& aSection)
+	{
+	TBool	dataOk=ETrue;
+
+	TFontSpec	fontSpec;
+	if ( !GetFontSpecFromConfig(aSection, KFldFont, fontSpec) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldFont());
+		SetBlockResult(EFail);
+		}
+
+	TPtrC		wrapperName;
+	// get BitmapUtilData object from parameters
+	if ( !GetStringFromConfig(aSection, KFldFont, wrapperName) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldFont());
+		SetBlockResult(EFail);
+		}
+
+	if ( dataOk )
+		{
+		CDataWrapper*	wrapper=GetDataWrapperL(wrapperName);
+		if ( wrapper==NULL )
+			{
+			ERR_PRINTF2(KLogMissingWrapper, &wrapperName);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			CFont*	font=NULL;
+			INFO_PRINTF1(_L("execute GetNearestFontToDesignHeightInPixels(CFont*&, TFontSpec)"));
+			TInt	err=GetBitmapDevice()->GetNearestFontToDesignHeightInPixels(font, fontSpec);
+			if ( err!=KErrNone )
+				{
+				ERR_PRINTF2(KLogError, err);
+				SetError(err);
+				}
+			else
+				{
+				wrapper->SetObjectL(font);
+				}
+			}
+		}
+	}
+
+void CT_DataBitmapDevice::DoCmdGetNearestFontToMaxHeightInPixelsL(const TDesC& aSection)
+	{
+	TBool	dataOk=ETrue;
+
+	TFontSpec	fontSpec;
+	if ( !GetFontSpecFromConfig(aSection, KFldFont, fontSpec) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldFont());
+		SetBlockResult(EFail);
+		}
+
+	TInt	maxHeight;
+	if ( !GetIntFromConfig(aSection, KFldMaxHeight, maxHeight) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldMaxHeight());
+		SetBlockResult(EFail);
+		}
+
+	TPtrC		wrapperName;
+	// get BitmapUtilData object from parameters
+	if ( !GetStringFromConfig(aSection, KFldFont, wrapperName) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldFont());
+		SetBlockResult(EFail);
+		}
+
+	if ( dataOk )
+		{
+		CDataWrapper*	wrapper=GetDataWrapperL(wrapperName);
+		if ( wrapper==NULL )
+			{
+			ERR_PRINTF2(KLogMissingWrapper, &wrapperName);
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			CFont*	font=NULL;
+			INFO_PRINTF1(_L("execute GetNearestFontToMaxHeightInPixels(CFont*&, TFontSpec, TInt)"));
+			TInt	err=GetBitmapDevice()->GetNearestFontToMaxHeightInPixels(font, fontSpec, maxHeight);
+			if ( err!=KErrNone )
+				{
+				ERR_PRINTF2(KLogError, err);
+				SetError(err);
+				}
+			else
+				{
+				wrapper->SetObjectL(font);
+				}
+			}
+		}
+	}
+
+void CT_DataBitmapDevice::DoCmdGetPixel(const TDesC& aSection)
+	{
+	// get typeface index from parameters
+	TPoint	point;
+	if ( !GetPointFromConfig(aSection, KFldPoint(), point) )
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KFldPoint());
+		SetBlockResult(EFail);
+		}
+	else
+		{
+		TRgb	color;
+		INFO_PRINTF1(_L("execute GetPixel(TRgb&, const TPoint&)"));
+		GetBitmapDevice()->GetPixel(color, point);
+		INFO_PRINTF5(KLogColor, color.Red(), color.Green(), color.Blue(), color.Alpha());
+
+		TRgb	expected;
+		if ( GetRgbFromConfig(aSection, KFldExpected, expected) )
+			{
+			if ( expected!=color )
+				{
+				ERR_PRINTF1(KLogNotExpectedValue);
+				SetBlockResult(EFail);
+				}
+			}
+		}
+	}
+
+void CT_DataBitmapDevice::DoCmdGetScanLineL(const TDesC& aSection)
+	{
+	TBool	dataOk=ETrue;
+
+	// get point x coordinate from parameters
+	TPoint	point;
+	if ( !GetPointFromConfig(aSection, KFldPoint(), point) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldPoint());
+		SetBlockResult(EFail);
+		}
+
+	// get length from parameters
+	TInt	length = 0;
+	if ( !GetIntFromConfig(aSection, KFldLength(), length) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldLength());
+		SetBlockResult(EFail);
+		}
+
+	// get buffer length from parameters
+	TInt	buffLength = 0;
+	if ( !GetIntFromConfig(aSection, KFldBuffLength(), buffLength) )
+		{
+		dataOk=EFalse;
+		ERR_PRINTF2(KLogMissingParameter, &KFldBuffLength());
+		SetBlockResult(EFail);
+		}
+
+	// get display mode from parameters
+	TDisplayMode	displayMode;
+	if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KFldDisplayMode(), displayMode) )
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KFldDisplayMode());
+		SetBlockResult(EFail);
+		dataOk=EFalse;
+		}
+
+	if ( dataOk )
+		{
+		// call GetScanLine()
+		TUint8*	buffer = new (ELeave) TUint8[buffLength];
+		TPtr8	scanline(buffer, buffLength, buffLength);
+
+		INFO_PRINTF1(_L("execute GetScanLine(TDes8&, const TPoint&, TInt, TDisplayMode)"));
+		GetBitmapDevice()->GetScanLine(scanline, point, length, displayMode);
+		
+		// Check ScanLine.
+		TBool checkScanLine = EFalse;
+		if ( !GetBoolFromConfig(aSection, KFldCheckScanLine(), checkScanLine)  )
+			{
+			INFO_PRINTF1(KLogDoNotCheckScanLine);	
+			}
+		else 
+			{
+			if(!checkScanLine)
+				{
+				INFO_PRINTF1(KLogDoNotCheckScanLine);
+				}
+			else
+				{
+				INFO_PRINTF1(KLogDoCheckScanLine);				
+				
+				// get length of returned scanline
+				TInt	expectedscanLineBufferLength = 0;
+				if ( GetIntFromConfig(aSection, KFldScanLineBufferLength, expectedscanLineBufferLength) )
+					{		
+					TInt scanlineLen = scanline.Length();
+					INFO_PRINTF3(KLogCheckScanLineResult,expectedscanLineBufferLength,scanlineLen);
+					if(expectedscanLineBufferLength != scanlineLen)				
+						{
+							ERR_PRINTF3(KLogCheckScanLineResult,expectedscanLineBufferLength,scanlineLen);
+							SetBlockResult(EFail);
+						}						
+					}
+				else
+					{
+					//check the scanline got correctlly.
+					CheckScanLine(aSection,scanline);
+					}
+				
+				}
+			}
+		delete [] buffer;
+		}
+	}
+
+void CT_DataBitmapDevice::DoCmdRemoveFile(const TDesC& aSection)
+	{
+	TBool	dataOk = ETrue;
+	TInt	id;
+	if ( !GetIntFromConfig(aSection, KFldId(), id) )
+		{
+		TPtrC	file;
+		if ( !GetStringFromConfig(aSection, KFldFile(), file) )
+			{
+			dataOk=EFalse;
+			ERR_PRINTF2(KLogMissingParameter, &KFldId());
+			ERR_PRINTF2(KLogMissingParameter, &KFldFile());
+			SetBlockResult(EFail);
+			}
+		else
+			{
+			TBool	found=EFalse;	//	Filename found in array
+			for ( TInt index=iFile.Count(); (index>0) && (!found);  )
+				{
+				if ( iFile[--index]==file )
+					{
+					id=iId[index];
+					iFile.Remove(index);
+					iId.Remove(index);
+					found=ETrue;
+					}
+				}
+			if ( !found )
+				{
+				dataOk=EFalse;
+				ERR_PRINTF2(KLogMissingFilename, &file);
+				SetBlockResult(EFail);
+				}
+			}
+		}
+
+	if ( dataOk )
+		{
+		INFO_PRINTF1(_L("execute RemoveFile(TInt)"));
+		GetBitmapDevice()->RemoveFile(id);
+		}
+	}
+
+void CT_DataBitmapDevice::CheckScanLine(const TDesC& aSection,TDes8 &aBuf)
+	{
+	INFO_PRINTF1(KLogDoCheckScanLine);	
+	
+	TBool appendCheckDataOK = ETrue;
+	TSize	bitmapSize;
+	if ( !GetSizeFromConfig(aSection, KFldSize, bitmapSize) )
+		{
+		ERR_PRINTF2(KLogMissingParameter, &KFldSize);
+		SetBlockResult(EFail);
+		appendCheckDataOK = EFalse;
+		}
+	
+	TDisplayMode displayMode;
+	if ( !CT_GraphicsUtil::ReadDisplayMode(*this, aSection, KFldDisplayMode(), displayMode) )
+		{
+		ERR_PRINTF1(_L("No display mode"));
+		SetBlockResult(EFail);
+		appendCheckDataOK = EFalse;
+		}
+	
+	TInt pointNum;
+	if ( !GetIntFromConfig(aSection, KFldPointNum(), pointNum) )
+		{
+		ERR_PRINTF1(_L("No check point num"));
+		SetBlockResult(EFail);
+		appendCheckDataOK = EFalse;
+		}
+	
+	TInt scanlineY;
+	if ( !GetIntFromConfig(aSection, KFldScanlineY, scanlineY) )
+		{
+		ERR_PRINTF1(_L("No check scan line Y"));
+		SetBlockResult(EFail);
+		appendCheckDataOK = EFalse;
+		}
+	
+	if (appendCheckDataOK)
+		{
+		CFbsBitmap* fbsbitmap = new(ELeave) CFbsBitmap();
+		fbsbitmap->Create(bitmapSize,displayMode); 
+		fbsbitmap->SetScanLine(aBuf,scanlineY);
+		
+		TBuf<KMaxTestExecuteCommandLength>	tempStore;		
+		
+		for (TInt i=1;i<=pointNum;i++)
+			{
+			TInt x;			
+			tempStore.Format(KFldPointXN, i);
+			if ( !GetIntFromConfig(aSection, tempStore, x) )
+				{
+				ERR_PRINTF2(KLogMissingParameter, &tempStore);
+				SetBlockResult(EFail);
+				appendCheckDataOK=EFalse;
+				}	
+			TRgb expected;
+			tempStore.Format(KFldPointRGBN, i);
+			if ( !GetRgbFromConfig(aSection, tempStore, expected) )
+				{
+				ERR_PRINTF2(KLogMissingParameter, &KFldExpected());
+				SetBlockResult(EFail);
+				appendCheckDataOK=EFalse;
+				}
+			if(appendCheckDataOK)
+				{
+				TRgb actual;
+				TPoint pixelPoint(x,scanlineY);
+				fbsbitmap->GetPixel(actual,pixelPoint);
+				if(actual != expected)
+					{
+					ERR_PRINTF3(KLogPoint, x,scanlineY);
+					ERR_PRINTF5(KLogColorActual, actual.Red(), actual.Green(), actual.Blue(), actual.Alpha());
+					ERR_PRINTF5(KLogColorExpected, expected.Red(), expected.Green(), expected.Blue(), expected.Alpha());
+					SetBlockResult(EFail);
+					}
+				}
+			}
+
+		delete fbsbitmap;
+		}
+	}