lafagnosticuifoundation/cone/tef/TConeErrorMsgStep.cpp
changeset 0 2f259fa3e83a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/lafagnosticuifoundation/cone/tef/TConeErrorMsgStep.cpp	Tue Feb 02 01:00:49 2010 +0200
@@ -0,0 +1,796 @@
+// Copyright (c) 2006-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:
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code 
+*/
+
+#include <coemain.h>
+#include <bautils.h>
+#include <apacmdln.h> 
+#include <fbs.h>
+#include <imageconversion.h>
+#include <bitmaptransforms.h>
+#include "TConeErrorMsgStep.h"
+
+/**
+  Single Argument Constructor for CConeErrorMsgTestAppUi class.\n
+*/
+CConeErrorMsgTestAppUi::CConeErrorMsgTestAppUi(CTmsTestStep* aStep) :
+CTestCoeAppUi(aStep)
+{}
+/**
+  Destructor for CConeErrorMsgTestAppUi class.\n
+*/
+CConeErrorMsgTestAppUi::~CConeErrorMsgTestAppUi()
+{}
+
+/**
+  Second phase Constructor for CConeErrorMsgTestAppUi class.\n
+  Invokes the base class CTestCoeAppUi second phase constructor.\n
+  Executes the test cases asynchronously using Autotest Manager.\n
+*/
+void CConeErrorMsgTestAppUi::ConstructL()
+	{
+	CTestCoeAppUi::ConstructL();
+	
+	AutoTestManager().StartAutoTest();
+	}
+
+void CConeErrorMsgTestAppUi::TestLeaveWithErrorTextL(const TDesC& aErrorText, const TDesC* aContextErrorText, const TBool& aExceedMaxDesc)
+	{
+	RBuf testMsg;
+	testMsg.CreateL(aErrorText);
+	testMsg.CleanupClosePushL();
+	
+	TInt err=KErrNone;
+	
+	if (aContextErrorText)
+		{
+		RBuf testConMsg;
+		testConMsg.CreateL(*aContextErrorText);
+		testConMsg.CleanupClosePushL();
+		TRAP(err,iCoeEnv->LeaveWithErrorText(testMsg, &testConMsg));
+	
+		TDes& errConRxText = static_cast<CTestCoeEnv*>(iCoeEnv)->TestErrorContextText();
+		RBuf errConMsg;
+		errConMsg.CreateL(errConRxText);
+		errConMsg.CleanupClosePushL();
+		INFO_PRINTF3(_L("Err Cntxt Msg Tx: %S, Err Cntxt Msg Rx: %S"), &testConMsg, &errConMsg);
+		if (aExceedMaxDesc)
+			{
+			TEST(testConMsg!=errConMsg);
+			TEST(errConMsg.Length()==80); // KErrorContextTextLength
+			TEST(errConMsg[79]==KBaflCharTruncation);
+			testConMsg.Delete(80, 1); // remove the last char
+			testConMsg[79]=KBaflCharTruncation; // set the last char to the truncation char
+			TEST(testConMsg==errConMsg);
+			}
+		else
+			{
+			TEST(testConMsg==errConMsg);
+			}
+		
+		CleanupStack::PopAndDestroy(2);
+		}
+	else
+		{
+		TRAP(err,iCoeEnv->LeaveWithErrorText(testMsg));
+		
+		TDes& errConText = static_cast<CTestCoeEnv*>(iCoeEnv)->TestErrorContextText();
+		INFO_PRINTF3(_L("Actual Context Length: %d, Expected Context Length: %d"), errConText.Length(), 0);			
+		TEST(errConText.Length()==0);
+		}
+
+	INFO_PRINTF3(_L("Actual Leave Code: %d, Expected Leave Code: %d"), err, KErrExtendedWithText);
+	TEST(err==KErrExtendedWithText);
+	
+	TDes& errRxText = ((CTestCoeEnv *)iCoeEnv)->TestErrorText();
+	RBuf errMsg;
+	errMsg.CreateL(errRxText);
+	errMsg.CleanupClosePushL();
+	INFO_PRINTF3(_L("Err Msg Tx: %S, Err Msg Rx: %S"), &testMsg, &errMsg);
+	if (aExceedMaxDesc)
+		{
+		TEST(testMsg!=errMsg);
+		TEST(errMsg.Length()==80); // KErrorTextLength
+		TEST(errMsg[79]==KBaflCharTruncation);
+		testMsg.Delete(80, 1); // remove the last char
+		testMsg[79]=KBaflCharTruncation; // set the last char to the truncation char
+		TEST(testMsg==errMsg);
+		}
+	else
+		{
+		TEST(testMsg==errMsg);
+		}
+
+	CleanupStack::PopAndDestroy(2);
+	}
+
+/**
+ Utility to close the dialogs once the screen has been compared
+ with a previous capture of an expected display.
+ */	
+void CConeErrorMsgTestAppUi::CloseDialogsL()
+	{	
+	User::LeaveIfError(iWs.Connect());
+	TInt wgFocus = iWs.GetFocusWindowGroup();
+
+	const TUint32 ENullWsHandle = 0xFFFFFFFF;	// Events delivered to this handle are thrown away
+	RWindowGroup wg = RWindowGroup(iWs);
+
+	wg.Construct(ENullWsHandle);
+	TInt wgId = wg.Identifier();
+
+	TWsEvent event;
+	event.SetType(EEventKey);
+	TKeyEvent *keyEvent = event.Key();
+	keyEvent->iCode = EKeyEscape;
+	keyEvent->iScanCode = EStdKeyEscape;
+	keyEvent->iModifiers = 0;
+
+	TInt limit = 0;
+	for(limit = 0; wgFocus != wgId && (limit < 50); limit++)
+		{
+		iWs.SendEventToAllWindowGroups(event);
+		wgFocus = iWs.GetFocusWindowGroup();
+		RDebug::Print(_L("CloseAllPanicWindowsL() - EKeyEscape sent to Windows Group"));
+		}
+
+	wg.Close();
+	iWs.Close();
+	}
+
+/**
+ Utility for creating a easily readable bmp from a CFbsBitmap
+ */
+
+void CConeErrorMsgTestAppUi::ConvertToBmpL(const CFbsBitmap* aBitmap, const TDesC* aFileName)
+	{
+	CImageEncoder * imageEncoder = CImageEncoder::FileNewL(iFs,*aFileName,CImageEncoder::EOptionAlwaysThread ,KImageTypeBMPUid);
+	CleanupStack::PushL(imageEncoder);
+	TRequestStatus status;
+	imageEncoder->Convert(&status,*aBitmap);
+	User::WaitForRequest(status);
+	CleanupStack::PopAndDestroy(imageEncoder);
+	}
+
+/**
+   @SYMTestCaseID		    UIF-CONE-0008
+
+   @SYMTestCaseDesc 	    Check use of CCoeEnv::LeaveWithErrorText() to set error text to 'Test Error Message'
+  
+   @SYMTestPriority   	    Critical
+   
+   @SYMTestType				Component Integration Test
+  
+   @SYMTestStatus 	  	    Implemented
+    
+   @SYMTestActions  	    Call CCoeEnv::LeaveWithErrorText() to set error text to 'Test Error Message'
+   
+   @SYMTestExpectedResults  CCoeEnv::iErrorText is set to 'Test Error Message'
+   							CCoeEnv::iErrorContextText is zero'd
+   							Function leaves with KErrExtendedWithText
+ */
+void CConeErrorMsgTestAppUi::TestCase01L()
+	{
+	INFO_PRINTF1(_L("UIF-CONE-0008 - test case start"));
+	_LIT(KTestErrMsg, "Test Error Message");
+	TBuf<20> errText(KTestErrMsg);
+	TestLeaveWithErrorTextL(errText);
+	INFO_PRINTF1(_L("UIF-CONE-0008 - test case end"));
+	}
+
+/**
+   @SYMTestCaseID		    UIF-CONE-0009
+
+   @SYMTestCaseDesc 	    Check use of CCoeEnv::LeaveWithErrorText() to set error text to 'Test Error Message'
+   							and error context text to 'Test Context Error Message'
+  
+   @SYMTestPriority   	    Critical
+   
+   @SYMTestType				Component Integration Test
+  
+   @SYMTestStatus 	  	    Implemented
+    
+   @SYMTestActions  	    Call CCoeEnv::LeaveWithErrorText() to set error text to 'Test Error Message'
+   							and error context text to 'Test Context Error Message'
+   
+   @SYMTestExpectedResults  CCoeEnv::iErrorText is set to 'Test Error Message'
+   							CCoeEnv::iErrorContextText is set to 'Test Context Error Message'
+   							Function leaves with KErrExtendedWithText
+ */
+void CConeErrorMsgTestAppUi::TestCase02L()
+	{
+	INFO_PRINTF1(_L("UIF-CONE-0009 - test case start"));
+	_LIT(KTestErrMsg, "Test Error Message");
+	TBuf<20> errText(KTestErrMsg);
+	_LIT(KTestErrConMsg, "Test Context Error Message");
+	TBuf<40> errConText(KTestErrConMsg);
+	TestLeaveWithErrorTextL(errText, &errConText);
+	INFO_PRINTF1(_L("UIF-CONE-0009 - test case end"));
+	}
+
+/**
+   @SYMTestCaseID		    UIF-CONE-0010
+
+   @SYMTestCaseDesc 	    Check use of CCoeEnv::LeaveWithErrorText() to set error text to ''
+  
+   @SYMTestPriority   	    Critical
+   
+   @SYMTestType				Component Integration Test
+  
+   @SYMTestStatus 	  	    Implemented
+    
+   @SYMTestActions  	    Call CCoeEnv::LeaveWithErrorText() to set error text to ''
+   
+   @SYMTestExpectedResults  CCoeEnv::iErrorText is set to ''
+   							CCoeEnv::iErrorContextText is zero'd
+   							Function leaves with KErrExtendedWithText
+ */
+void CConeErrorMsgTestAppUi::TestCase03L()
+	{
+	INFO_PRINTF1(_L("UIF-CONE-0010 - test case start"));
+	_LIT(KTestErrMsg, "");
+	TBuf<20> errText(KTestErrMsg);
+	TestLeaveWithErrorTextL(errText);
+	INFO_PRINTF1(_L("UIF-CONE-0010 - test case end"));
+	}
+
+/**
+   @SYMTestCaseID		    UIF-CONE-0011
+
+   @SYMTestCaseDesc 	    Check use of CCoeEnv::LeaveWithErrorText() to set error text to ''
+   							and error context text to ''
+  
+   @SYMTestPriority   	    Critical
+   
+   @SYMTestType				Component Integration Test
+  
+   @SYMTestStatus 	  	    Implemented
+    
+   @SYMTestActions  	    Call CCoeEnv::LeaveWithErrorText() to set error text to ''
+   							and error context text to ''
+   
+   @SYMTestExpectedResults  CCoeEnv::iErrorText is set to ''
+   							CCoeEnv::iErrorContextText is set to ''
+   							Function leaves with KErrExtendedWithText
+ */
+void CConeErrorMsgTestAppUi::TestCase04L()
+	{
+	INFO_PRINTF1(_L("UIF-CONE-0011 - test case start"));
+	_LIT(KTestErrMsg, "");
+	TBuf<20> errText(KTestErrMsg);
+	_LIT(KTestErrConMsg, "");
+	TBuf<40> errConText(KTestErrConMsg);
+	TestLeaveWithErrorTextL(errText, &errConText);
+	INFO_PRINTF1(_L("UIF-CONE-0011 - test case end"));
+	}
+
+/**
+   @SYMTestCaseID		    UIF-CONE-0012
+
+   @SYMTestCaseDesc 	    Check use of CCoeEnv::LeaveWithErrorText() to set error text to 'Test Max Error Message'
+   							plus, filled to max length of 80 chars.
+   							and error context text to 'Test Max Error Message' 
+   							plus, filled to max length of 80 chars.
+  
+   @SYMTestPriority   	    Critical
+   
+   @SYMTestType				Component Integration Test
+  
+   @SYMTestStatus 	  	    Implemented
+    
+   @SYMTestActions  	    Call CCoeEnv::LeaveWithErrorText() to set error text to 'Test Max Error Message'
+   							plus, filled to max length of 80 chars.
+   							and error context text to 'Test Max Error Message'
+   							plus, filled to max length of 80 chars.
+   
+   @SYMTestExpectedResults  CCoeEnv::iErrorText is set to 'Test Max Error Message34567890...'
+   							CCoeEnv::iErrorContextText is set to 'Test Max Error Message34567...'
+   							Function leaves with KErrExtendedWithText
+ */
+void CConeErrorMsgTestAppUi::TestCase05L()
+	{
+	INFO_PRINTF1(_L("UIF-CONE-0012 - test case start"));
+	_LIT(KTestErrMsg, "Test Max Error Message3456789012345678901234567890123456789012345678901234567890"); // 80 chars
+	TBuf<80> errText(KTestErrMsg);
+	_LIT(KTestErrConMsg, "Test Max Error Message3456789012345678901234567890123456789012345678901234567890"); // 80 chars
+	TBuf<80> errConText(KTestErrConMsg);
+	TestLeaveWithErrorTextL(errText, &errConText);
+	INFO_PRINTF1(_L("UIF-CONE-0012 - test case end"));
+	}
+
+/**
+   @SYMTestCaseID		    UIF-CONE-0013
+
+   @SYMTestCaseDesc 	    Check use of CCoeEnv::LeaveWithErrorText() to set error text to 'Test Max Error Message'
+   							plus, filled to exceed max length of 80 chars, i.e. 81 chars
+   							and error context text to 'Test Max Error Message' 
+   							plus, filled to exceed max length of 80 chars, i.e. 81 chars
+  
+   @SYMTestPriority   	    Critical
+   
+   @SYMTestType				Component Integration Test
+  
+   @SYMTestStatus 	  	    Implemented
+    
+   @SYMTestActions  	    Call CCoeEnv::LeaveWithErrorText() to set error text to 'Test Max Error Message'
+   							plus, filled to exceed max length of 80 chars, i.e. 81 chars
+   							and error context text to 'Test Max Error Message'
+   							plus, filled to exceed max length of 80 chars, i.e. 81 chars
+   
+   @SYMTestExpectedResults  CCoeEnv::iErrorText is set to 'Test Max Error Message34567890...' 
+   							and terminated by KBaflCharTruncation at the 80th char
+   							CCoeEnv::iErrorContextText is set to 'Test Max Error Message34567...' 
+   							and terminated by KBaflCharTruncation at the 80th char
+   							Function leaves with KErrExtendedWithText
+ */
+void CConeErrorMsgTestAppUi::TestCase06L()
+	{
+	INFO_PRINTF1(_L("UIF-CONE-0013 - test case start"));
+	_LIT(KTestErrMsg, "Test Max Error Message34567890123456789012345678901234567890123456789012345678901"); // 81 chars
+	TBuf<81> errText(KTestErrMsg);
+	_LIT(KTestErrConMsg, "Test Max Error Message34567890123456789012345678901234567890123456789012345678901"); // 81 chars
+	TBuf<81> errConText(KTestErrConMsg);
+	TestLeaveWithErrorTextL(errText, &errConText, ETrue);
+	INFO_PRINTF1(_L("UIF-CONE-0013 - test case end"));
+	}
+
+
+TSize CConeErrorMsgTestAppUi::CalculateScreenSize()
+	{
+	User::LeaveIfError(iWs.Connect());
+	CWsScreenDevice *screen;
+	screen=new(ELeave) CWsScreenDevice(iWs);
+	CleanupStack::PushL(screen);
+	User::LeaveIfError(screen->Construct(0));
+	TSize screenSize=screen->SizeInPixels();
+	CleanupStack::PopAndDestroy(screen);
+	iWs.Close();
+    return screenSize;
+	}
+
+
+/**
+   @SYMTestCaseID		    UIF-CONE-0014
+
+   @SYMTestCaseDesc 	    Check use of CCoeEnv::LeaveWithErrorText() to display a dialog with error text of 
+   							'Test Error Message' and error context text of 'Test Context Error Message' 
+  
+   @SYMTestPriority   	    Critical
+   
+   @SYMTestType				Component Integration Test
+  
+   @SYMTestStatus 	  	    Implemented
+    
+   @SYMTestActions  	    Start the TErrMsgApp, which takes the TailEnd set to "TestCase07", that
+   							then sets up the Error Text and Context Error Text before calling
+   							CCoeEnv::LeaveWithErrorText() to result in the display of the dialog.
+   
+   @SYMTestExpectedResults  Dialog with 'Test Context Error Message' and 'Test Error Message' displayed.
+   							NOTE: Context error message is on line 1, with Test Error Message below.
+   							
+   @SYMTestCaseDependencies TErrMsgApp.exe (see TErrMsgApp.cpp)
+ */
+void CConeErrorMsgTestAppUi::TestCase07()
+	{
+	INFO_PRINTF1(_L("UIF-CONE-0014 - test case start"));
+	INFO_PRINTF1(_L("ErrAndConMsg Dialog"));
+	_LIT8(KTestCaseName,"UIF-CONE-0014 ErrAndConMsg");
+	_LIT(KDbgBmp,          "c:\\test\\appfwk\\cone\\errandconmsg.bmp");
+	_LIT(KDbgConvBmp,      "c:\\test\\appfwk\\cone\\errandconmsg_conv_act.bmp");
+	_LIT(KDbgConvCompBmp,  "c:\\test\\appfwk\\cone\\errandconmsg_conv_exp.bmp");
+	_LIT(KDbgMbm,          "c:\\test\\appfwk\\cone\\errandconmsg.mbm");
+	_LIT(KTestCompareMbm,  "z:\\conetest\\errandconmsg.mbm");
+	_LIT(KTestCompareMbmh6,  "z:\\conetest\\errandconmsgh6.mbm");
+	_LIT(KTestCompareMbmh6vga,  "z:\\conetest\\errandconmsgh6vga.mbm");
+	_LIT(KTestCompareMbmNavi,  "z:\\conetest\\errandconmsgnavi.mbm");
+	
+	TSize screenSize = CalculateScreenSize();
+	TInt err;
+	
+	//test on h4 or emulator
+	if((screenSize.iHeight == 240 && screenSize.iWidth == 320) || (screenSize.iHeight == 240 && screenSize.iWidth == 640))
+		{
+		TRAP(err,TestErrorDialogL(	KTestCaseName, 
+									KTestCompareMbm,
+									&KDbgBmp, 
+									&KDbgConvBmp, 
+									&KDbgConvCompBmp,
+									&KDbgMbm));
+		}
+	//test on h6 QVGA
+	else if(screenSize.iHeight == 320 && screenSize.iWidth == 240)
+		{
+		TRAP(err,TestErrorDialogL(	KTestCaseName, 
+									KTestCompareMbmh6,
+									&KDbgBmp, 
+									&KDbgConvBmp, 
+									&KDbgConvCompBmp,
+									&KDbgMbm));
+		}
+	//test on h6 VGA
+	else if(screenSize.iHeight == 640 && screenSize.iWidth == 480)
+	    {
+        TRAP(err,TestErrorDialogL(  KTestCaseName, 
+                                    KTestCompareMbmh6vga,
+                                    &KDbgBmp, 
+                                    &KDbgConvBmp, 
+                                    &KDbgConvCompBmp,
+                                    &KDbgMbm));
+        }   
+	//test on NaviEngine
+	else if(screenSize.iHeight == 480 && screenSize.iWidth == 640)
+		{
+		
+		TRAP(err,TestErrorDialogL(	KTestCaseName, 
+									KTestCompareMbmNavi,
+									&KDbgBmp, 
+									&KDbgConvBmp, 
+									&KDbgConvCompBmp,
+									&KDbgMbm));
+		
+		}
+	//It might be a new platform or unknown hardware
+	else
+		{
+		err = KErrNotFound;
+		ERR_PRINTF1(_L("UIF-CONE-0014 - Test case ERROR - Unknown Screen size"));
+		}
+	TEST(err==KErrNone);	
+	INFO_PRINTF1(_L("UIF-CONE-0014 - test case end"));
+	}
+
+/**
+   @SYMTestCaseID		    UIF-CONE-0015
+
+   @SYMTestCaseDesc 	    Check use of CCoeEnv::LeaveWithErrorText() to display a dialog with error text of 
+   							'Test Error Message' 
+  
+   @SYMTestPriority   	    Critical
+   
+   @SYMTestType				Component Integration Test
+  
+   @SYMTestStatus 	  	    Implemented
+    
+   @SYMTestActions  	    Start the TErrMsgApp, which takes the TailEnd set to "TestCase08", that
+   							then sets up the Error Text before calling
+   							CCoeEnv::LeaveWithErrorText() to result in the display of the dialog.
+   
+   @SYMTestExpectedResults  Dialog with 'Test Error Message' displayed.
+   							NOTE: No Context error message
+   							
+   @SYMTestCaseDependencies TErrMsgApp.exe (see TErrMsgApp.cpp)
+ */
+void CConeErrorMsgTestAppUi::TestCase08()
+	{
+	INFO_PRINTF1(_L("UIF-CONE-0015 - test case start"));
+	INFO_PRINTF1(_L("ErrMsg Dialog"));
+	_LIT8(KTestCaseName,   "UIF-CONE-0015 ErrMsg");
+	_LIT(KDbgBmp,          "c:\\test\\appfwk\\cone\\errmsg.bmp");
+	_LIT(KDbgConvBmp,      "c:\\test\\appfwk\\cone\\errmsg_conv_act.bmp");
+	_LIT(KDbgConvCompBmp,  "c:\\test\\appfwk\\cone\\errmsg_conv_exp.bmp");
+	_LIT(KDbgMbm,          "c:\\test\\appfwk\\cone\\errmsg.mbm");
+	_LIT(KTestCompareMbm,  "z:\\conetest\\errmsg.mbm");
+	_LIT(KTestCompareMbmh6,  "z:\\conetest\\errmsgh6.mbm");
+	_LIT(KTestCompareMbmh6vga,  "z:\\conetest\\errmsgh6vga.mbm");
+	_LIT(KTestCompareMbmNavi, "z:\\conetest\\errmsgnavi.mbm");
+	
+	TSize screenSize = CalculateScreenSize();
+	TInt err;
+	//test on h4 or emulator
+	if((screenSize.iHeight == 240 && screenSize.iWidth == 320) || (screenSize.iHeight == 240 && screenSize.iWidth ==640))
+		{
+		TRAP(err,TestErrorDialogL(	KTestCaseName, 
+									KTestCompareMbm,
+									&KDbgBmp, 
+									&KDbgConvBmp, 
+									&KDbgConvCompBmp,
+									&KDbgMbm));
+		}
+	//test on h6 QVGA
+	else if(screenSize.iHeight == 320 && screenSize.iWidth == 240)
+		{
+		TRAP(err,TestErrorDialogL(	KTestCaseName, 
+									KTestCompareMbmh6,
+									&KDbgBmp, 
+									&KDbgConvBmp, 
+									&KDbgConvCompBmp,
+									&KDbgMbm));	
+		}
+	//test on h6 VGA
+    else if(screenSize.iHeight == 640 && screenSize.iWidth == 480)
+        {
+        TRAP(err,TestErrorDialogL(  KTestCaseName, 
+                                    KTestCompareMbmh6vga,
+                                    &KDbgBmp,
+                                    &KDbgConvBmp, 
+                                    &KDbgConvCompBmp,
+                                    &KDbgMbm));
+        }
+	//test on NaviEngine
+	else if(screenSize.iHeight == 480 && screenSize.iWidth == 640)
+		{
+				
+		TRAP(err,TestErrorDialogL(	KTestCaseName, 
+									KTestCompareMbmNavi,
+									&KDbgBmp, 
+									&KDbgConvBmp, 
+									&KDbgConvCompBmp,
+									&KDbgMbm));	
+		}
+
+	//It might be a new platform or unknown hardware
+	else
+		{
+		err = KErrNotFound;
+		ERR_PRINTF1(_L("UIF-CONE-0015 - Test case ERROR - Unknown Screen size"));
+		}
+	TEST(err==KErrNone);	
+	INFO_PRINTF1(_L("UIF-CONE-0015 - test case end"));
+	}	
+
+/**
+	Utility function to setup and start TErrMsgApp for the display of the 
+	error dialogs when the App leaves due to a call to CCoeEnv::LeaveWithErrorText()
+ */
+void CConeErrorMsgTestAppUi::TestErrorDialogL(const TDesC8& aTestCaseName,
+			const TDesC& aTestCompareMbm,
+			const TDesC* aDbgBmp,
+			const TDesC* aDbgConvBmp,
+			const TDesC* aDbgConvCompBmp,
+			const TDesC* aDbgMbm)
+	{
+	_LIT(KExeName,"z:\\sys\\bin\\TErrMsgApp.EXE");
+	RProcess process; 
+	TRequestStatus status;
+	TPtrC8 tailEnd;
+	tailEnd.Set(aTestCaseName); 
+	
+	// create and configure command line, with test case name in
+	// the tail end to be used by TErrMsgApp to determine what
+	// information is displayed in the error dialog
+ 	CApaCommandLine* cmdLine=CApaCommandLine::NewLC();
+	User::LeaveIfError(process.Create(KExeName, KNullDesC));
+	CleanupClosePushL(process);
+	cmdLine->SetExecutableNameL(KExeName);
+	cmdLine->SetTailEndL(tailEnd);
+	cmdLine->SetProcessEnvironmentL(process);
+	status =  KRequestPending;
+	process.Logon(status);
+	process.Resume();
+	
+	// allow the host process to start and display a dialog
+	User::After(1000000);
+	
+	// screen capture
+	CFbsBitmap* screenBitmap=new(ELeave) CFbsBitmap();
+	CleanupStack::PushL(screenBitmap);
+	User::LeaveIfError(iWs.Connect());
+	CWsScreenDevice *actualScreen;
+	actualScreen=new(ELeave) CWsScreenDevice(iWs);
+	CleanupStack::PushL(actualScreen);
+	User::LeaveIfError(actualScreen->Construct(0));
+	TSize screenSize=actualScreen->SizeInPixels();
+	TDisplayMode screenDisplayMode = actualScreen->DisplayMode();
+	User::LeaveIfError(screenBitmap->Create(screenSize, screenDisplayMode));
+	User::LeaveIfError(actualScreen->CopyScreenToBitmap(screenBitmap));
+	screenBitmap->Save(_L("c:\\screen.mbm"));
+
+	// load in expected bmp for comparison
+	CFbsBitmap* compareBitmap=new(ELeave) CFbsBitmap();
+	CleanupStack::PushL(compareBitmap);
+	TInt loadErr = compareBitmap->Load(aTestCompareMbm);
+	INFO_PRINTF3(_L("Load Error: %d Expected Error: %d"), loadErr, KErrNone);
+	TEST(loadErr==KErrNone);
+		
+	// compare expected and actual bitmaps
+	TInt lengthInBytes=screenBitmap->ScanLineLength(screenSize.iWidth, screenDisplayMode);
+	HBufC8* lineBufBitmap=HBufC8::NewLC(lengthInBytes);
+	TPtr8 lineBufBitmapPtr(lineBufBitmap->Des());
+	HBufC8* lineBufScreenBitmap=HBufC8::NewLC(lengthInBytes);
+	TPtr8 lineBufScreenBitmapPtr(lineBufScreenBitmap->Des());
+
+	// in the case of the emulator the colour palette used by
+	// windows can differ and therefore causes false failures to
+	// be reported. e.g. although the dialog is displayed it is
+	// subtly different shade of blue (techview), hence for 
+	// emulator test runs we purposely do not run a comparison
+	// of the screen.
+#ifndef __WINS__
+	INFO_PRINTF1(_L("Comparing expected vs actual screen bitmap"));
+	for (TInt index=0; index<screenSize.iHeight; index++)
+		{
+		compareBitmap->GetScanLine(lineBufBitmapPtr, TPoint(0,index), screenSize.iWidth, screenDisplayMode);
+		screenBitmap->GetScanLine(lineBufScreenBitmapPtr, TPoint(0,index), screenSize.iWidth, screenDisplayMode);
+		INFO_PRINTF2(_L("Scanline: %d"),index);
+		TEST(lineBufBitmapPtr.Compare(lineBufScreenBitmapPtr)==0);
+		}
+#endif
+
+	if (aDbgMbm)
+		{
+		// for debug purposes store the screen capture
+		// in c:\appfwk\test\cone\...
+		User::LeaveIfError(iFs.Connect());
+		iFs.MkDirAll(*aDbgBmp);
+		screenBitmap->Save(*aDbgBmp);
+		const TDesC* bmpArray[1];
+		bmpArray[0] = aDbgBmp;
+		TInt32 bmpIds[1];
+		bmpIds[0]=0;
+		CFbsBitmap::StoreL(*aDbgMbm,1,bmpArray,bmpIds);
+		// convert CFbsBitmap of screen capture to standard bmp to ease debug
+		ConvertToBmpL(screenBitmap, aDbgConvBmp);
+		// convert CFbsBitmap of expected bmp to standard bmp to ease debug
+		ConvertToBmpL(compareBitmap, aDbgConvCompBmp);
+		iFs.Close();
+		}
+	
+	// terminate the host process
+	process.Terminate(KErrNone);
+	
+	CleanupStack::PopAndDestroy(7);
+	iWs.Close();
+	
+	// send signal to close a dialog
+	CloseDialogsL();
+	// wait the host process for a termination
+	User::WaitForRequest(status);
+	
+	}
+
+/**
+   Auxiliary Function for all Test Cases.\n
+  
+   The method is an override from CTestCoeAppUi.\n
+   This function is called asynchronously by RunL function of the
+   AutotestManager after previous test case is executed.\n
+   Generates the KeyDown event and KeyUp Events alternatively.\n
+ */
+ 
+void CConeErrorMsgTestAppUi::RunTestStepL(TInt aStepNum)
+	{
+	switch(aStepNum)
+		{
+		case 1:
+			{
+			SetTestStepID(_L("UIF-CONE-0008"));
+			TRAPD(err,TestCase01L());
+			TEST(err==KErrNone);	
+			RecordTestResultL();
+			break;
+			}
+		case 2:
+			{
+			SetTestStepID(_L("UIF-CONE-0009"));
+			TRAPD(err,TestCase02L());
+			TEST(err==KErrNone);	
+			RecordTestResultL();
+			break;
+			}
+		case 3:
+			{
+			SetTestStepID(_L("UIF-CONE-0010"));
+			TRAPD(err,TestCase03L());
+			TEST(err==KErrNone);	
+			RecordTestResultL();
+			break;
+			}
+		case 4:
+			{
+			SetTestStepID(_L("UIF-CONE-0011"));
+			TRAPD(err,TestCase04L());
+			TEST(err==KErrNone);	
+			RecordTestResultL();
+			break;
+			}
+		case 5:
+			{
+			SetTestStepID(_L("UIF-CONE-0012"));
+			TRAPD(err,TestCase05L());
+			TEST(err==KErrNone);	
+			RecordTestResultL();
+			break;
+			}
+		case 6:
+			{
+			SetTestStepID(_L("UIF-CONE-0013"));
+			TRAPD(err,TestCase06L());
+			TEST(err==KErrNone);	
+			RecordTestResultL();
+			break;
+			}
+		case 7:
+			SetTestStepID(_L("UIF-CONE-0014"));
+			TestCase07();
+			RecordTestResultL();
+			break;
+		case 8:
+			SetTestStepID(_L("UIF-CONE-0015"));
+			TestCase08();
+			RecordTestResultL();
+			CloseTMSGraphicsStep();
+			break;
+		default:
+			AutoTestManager().FinishAllTestCases(CAutoTestManager::EPass);
+			break;
+		}
+	}
+
+/**
+  Completes the construction of the Control Environment(CCoeEnv object).\n
+  Instantiates the CConeErrorMsgTestAppUi class which serves as a AppUi class.\n
+  Sets the CConeErrorMsgTestAppUi object as the application's user interface object.\n
+  Invokes the second phase constructor of the application's UI.\n
+*/
+void CTConeErrorMsgStep::ConstructAppL(CCoeEnv* aCoe)
+	{ // runs inside a TRAP harness
+	aCoe->ConstructL();
+	CConeErrorMsgTestAppUi* appUi= new (ELeave) CConeErrorMsgTestAppUi(this);
+	aCoe->SetAppUi(appUi);
+	appUi->ConstructL();
+	}
+/**
+  Constructor for CTConeErrorMsgStep class.\n
+  Sets the test step name.\n
+*/
+CTConeErrorMsgStep::CTConeErrorMsgStep()
+	{
+	SetTestStepName(KTConeErrorMsgStep);
+	}
+/**
+  Destructor for CTConeErrorMsgStep class.\n
+*/
+CTConeErrorMsgStep::~CTConeErrorMsgStep()
+{}
+
+/**
+  Entry function for CTConeErrorMsgStep Test Step.\n
+  Sets up the control environment.\n
+  Constructs and Launches the CTConeErrorMsgStep Test application.\n
+ 
+*/
+TVerdict CTConeErrorMsgStep::doTestStepL() // main function called by E32
+	{
+	INFO_PRINTF1(_L("Test Started"));
+	
+	PreallocateHALBuffer();
+
+	__UHEAP_MARK;
+
+	CCoeEnv* coe=new(ELeave) CCoeEnv;
+	TRAPD(err,ConstructAppL(coe));
+
+	if (!err)
+		coe->ExecuteD();
+	else
+		{
+		SetTestStepResult(EFail);
+		delete coe;
+		}
+
+	REComSession::FinalClose();	
+
+	__UHEAP_MARKEND;
+
+	INFO_PRINTF1(_L("Test Finished"));
+	return TestStepResult();
+	}
+
+