windowing/windowserver/tauto/TKEY.CPP
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tauto/TKEY.CPP	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,1119 @@
+// Copyright (c) 1996-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:
+// Testing key event, capturing keys and hot keys
+// 
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+
+#include "TKEY.H"
+
+#define LOGGING 1	//Uncomment this when there is a fail so that you get more logging
+
+GLDEF_D ClientToKill *SecondClient=NULL;
+
+GLDEF_C CTClient *CreateClientToKillL()
+	{
+	return(SecondClient=new(ELeave) ClientToKill());
+	}
+
+GLDEF_C TInt ProcToKill(TAny *aScreenNumber)
+	{
+	TInt ret=KErrNone;
+	ret=TestLibStartUp(CreateClientToKillL,(TInt)aScreenNumber);
+	return(ret);
+	}
+
+CVisibleGroup::CVisibleGroup(TInt aScreenNo): iScreenNo(aScreenNo)
+	{}
+
+void CVisibleGroup::ConstructL()
+	{
+	User::LeaveIfError(iWs.Connect());
+	iScr=new(ELeave) CWsScreenDevice(iWs);
+	User::LeaveIfError(iScr->Construct(iScreenNo));
+	iScr->SetAppScreenMode(iMode);
+	iGroup=RWindowGroup(iWs);
+	User::LeaveIfError(iGroup.Construct(NULL,ETrue));
+	TInt id=TheClient->iGroup->GroupWin()->Identifier();
+	iGroup.SetOwningWindowGroup(id);
+#if defined(LOGGING)
+	TLogMessageText buf;
+	_LIT(KIds,"Window Group Id: Main=%d, 2nd Client=%d");
+	buf.Format(KIds,id,iGroup.Identifier());
+	iWs.LogMessage(buf);
+#endif
+	iWs.Flush();
+	}
+
+CVisibleGroup::~CVisibleGroup()
+	{
+	iGroup.Close();
+	delete iScr;
+	iWs.Close();
+	}
+
+void CVisibleGroup::SetMode(TInt aMode)
+	{
+	iMode=aMode;
+	iScr->SetAppScreenMode(iMode);
+	iWs.Flush();
+	}
+
+ClientToKill::ClientToKill()
+	{}
+
+void ClientToKill::ConstructL()
+	{
+	CTClient::ConstructL();
+	RSemaphore sem;
+	sem.OpenGlobal(KSemaphoreName);
+
+	iGroup=new(ELeave) TestWindowGroup(this);
+	iGroup->ConstructL();
+
+	iScreen->SetScreenMode(0);
+	TSize screenSize=iScreen->SizeInPixels();
+
+	TInt winWidth=3*screenSize.iWidth/4;
+	TInt winHeight=3*screenSize.iHeight/4;
+	iTestWin=new(ELeave) TestWindow();
+	iTestWin->SetUpL(TPoint((screenSize.iWidth+4)/8,(screenSize.iHeight+4)/8),TSize(winWidth,winHeight),iGroup,*iGc);
+
+#if defined(LOGGING)
+	TLogMessageText buf;
+	_LIT(KId,"Window Group Id in 2nd Process=%d");
+	buf.Format(KId,iGroup->GroupWin()->Identifier());
+	LogMessage(buf);
+#endif
+	sem.Signal();	// Signal thread fully initialised
+	sem.Close();
+	}
+
+ClientToKill::~ClientToKill()
+	{
+	delete iTestWin;
+	}
+
+
+// CTKey
+
+CTKey::CTKey(CTestStep* aStep) : CTWsGraphicsBase(aStep)
+	{
+	}
+
+
+
+void CTKey::ConstructL()
+	{
+	iSem.CreateGlobal(KSemaphoreName,0,KOwnerType);
+	iVisibleGroup=new(ELeave) CVisibleGroup(iTest->iScreenNumber);
+	iVisibleGroup->ConstructL();
+	}
+
+CTKey::~CTKey()
+	{
+	delete iVisibleGroup;
+	iSem.Close();
+	// Set focus back to this screen as it went to primary screen when iVisibleGroup was destroyed
+	// Wserv focus handling made focus screen switch to another screen if there is no
+	// focusable window group on that particular screen.
+	TheClient->iWs.SetFocusScreen(iTest->iScreenNumber);
+	}
+
+void CTKey::SendKey(TInt aScanCode)
+	{
+	TKeyEvent keyEvent;
+	keyEvent.iCode=aScanCode;
+	keyEvent.iScanCode=aScanCode;
+	keyEvent.iModifiers=0;
+	keyEvent.iRepeats=0;
+	TheClient->iWs.SimulateKeyEvent(keyEvent);
+	TheClient->iWs.Flush();
+	}
+
+void CTKey::SendUpDown(TInt aScanCode)
+	{
+	TRawEvent rawEvent;
+	rawEvent.Set(TRawEvent::EKeyDown,aScanCode);
+	TheClient->iWs.SimulateRawEvent(rawEvent);
+	rawEvent.Set(TRawEvent::EKeyUp,aScanCode);
+	TheClient->iWs.SimulateRawEvent(rawEvent);
+	}
+
+void CTKey::SendCtrlAltShift(TRawEvent::TType aType)
+	{
+	TRawEvent rawEvent;
+	rawEvent.Set(aType,EStdKeyLeftFunc);
+	TheClient->iWs.SimulateRawEvent(rawEvent);
+	rawEvent.Set(aType,EStdKeyLeftCtrl);
+	TheClient->iWs.SimulateRawEvent(rawEvent);
+	rawEvent.Set(aType,EStdKeyLeftShift);
+	TheClient->iWs.SimulateRawEvent(rawEvent);
+	}
+
+void CTKey::SendCtrlAltShift(TInt aScanCode)
+	{
+	SendCtrlAltShift(TRawEvent::EKeyDown);
+	SendUpDown(aScanCode);
+	SendCtrlAltShift(TRawEvent::EKeyUp);
+	TheClient->iWs.Flush();
+	}
+
+void CTKey::LogWindowGroupIds()
+	{
+	CArrayFixFlat<TInt>* idList=new(ELeave) CArrayFixFlat<TInt>(5);
+	if (!idList)
+		return;
+	TheClient->iWs.WindowGroupList(0,idList);
+	TLogMessageText buf;
+	_LIT(KWinGp,"Window Group Id's: %d");
+	_LIT(KId,", %d");
+	TInt ii=0;
+	buf.Format(KWinGp,(*idList)[ii]);
+	while (++ii<idList->Count())
+		buf.AppendFormat(KId,(*idList)[ii]);
+	LOG_MESSAGE(buf);
+	delete idList;
+	}
+
+void CTKey::SetHotKey(THotKey aType, TUint aKeyCode)
+	{
+	TheClient->iWs.SetHotKey(aType,aKeyCode-'A'+1,EFuncCtrlShift,EFuncCtrlShift);
+	}
+
+void CTKey::KeyOfOrientation()
+	{	
+	TInt numScreenModes = TheClient->iScreen->NumScreenModes();
+	TInt originalScreenMode = TheClient->iScreen->CurrentScreenMode();
+	if(numScreenModes >= 2)
+		{
+		//1 possible rotation of 180deg found in wsini.ini screenmode 8
+		iVisibleGroup->SetMode(numScreenModes-1);
+		TheClient->iScreen->SetScreenMode(numScreenModes-1);
+		SendCtrlAltShift('O');
+		TheClient->iWs.Flush();
+		//1 possible rotation of 90deg found in wsini.ini screenmode 7
+		iVisibleGroup->SetMode(numScreenModes-2);
+		TheClient->iScreen->SetScreenMode(numScreenModes-2);
+		SendCtrlAltShift('O');
+		TheClient->iWs.Flush();
+		//reset to original screenmode
+		iVisibleGroup->SetMode(originalScreenMode);
+		TheClient->iScreen->SetScreenMode(originalScreenMode);
+		}	
+	else
+		{
+		TEST(numScreenModes>2);
+		INFO_PRINTF2(_L("numScreenModes - Expected: >2, Actual: %d"), numScreenModes);
+		}
+	TPixelsAndRotation originalSizeAndRotation;
+	TheClient->iScreen->GetScreenModeSizeAndRotation(TheClient->iScreen->CurrentScreenMode(),originalSizeAndRotation);
+	SendCtrlAltShift('O');
+	TheClient->iWs.Flush();
+	TPixelsAndRotation sizeAndRotation;
+	TheClient->iScreen->GetScreenModeSizeAndRotation(TheClient->iScreen->CurrentScreenMode(),sizeAndRotation);
+	TEST(sizeAndRotation.iRotation!=originalSizeAndRotation.iRotation);
+	if (sizeAndRotation.iRotation==originalSizeAndRotation.iRotation)
+		INFO_PRINTF3(_L("iRotation - Not Expected: %d, Actual: %d"), originalSizeAndRotation.iRotation, sizeAndRotation.iRotation);
+	SendCtrlAltShift('O');
+	TheClient->iWs.Flush();
+	}
+
+void CTKey::CycleDisplaySize()
+	{
+	// The test does nothing if there is only one possible screen mode -> return
+	TInt numScreenModes = TheClient->iScreen->NumScreenModes();
+	if (numScreenModes<2)
+		{
+		TEST(numScreenModes>2);
+		INFO_PRINTF2(_L("numScreenModes - Expected: >2, Actual: %d"), numScreenModes);
+		return;
+		}
+	//Get original screen mode and size values
+	TInt originalScreenMode = TheClient->iScreen->CurrentScreenMode();	
+	TPixelsAndRotation sizeAndRotation;
+	TheClient->iScreen->GetScreenModeSizeAndRotation(TheClient->iScreen->CurrentScreenMode(),sizeAndRotation);
+	TSize originalScreenSize = sizeAndRotation.iPixelSize;
+	
+	SendCtrlAltShift('U');
+	TheClient->iWs.Flush();
+	TheClient->iScreen->GetScreenModeSizeAndRotation(TheClient->iScreen->CurrentScreenMode(),sizeAndRotation);
+	TEST(sizeAndRotation.iPixelSize.iHeight!=originalScreenSize.iHeight && sizeAndRotation.iPixelSize.iWidth!=originalScreenSize.iWidth);
+	if (sizeAndRotation.iPixelSize.iHeight==originalScreenSize.iHeight || sizeAndRotation.iPixelSize.iWidth==originalScreenSize.iWidth)
+		INFO_PRINTF5(_L("iPixelSize - Expected: !%d !%d, Actual: %d %d"), originalScreenSize.iHeight, originalScreenSize.iWidth, sizeAndRotation.iPixelSize.iHeight, sizeAndRotation.iPixelSize.iWidth);
+	TheClient->iScreen->SetScreenMode(originalScreenMode);
+	TheClient->iWs.Flush();
+	}
+
+void CTKey::KeyOfDeathL()
+	{
+	//Key of Death
+#if defined(LOGGING)
+	TLogMessageText buf;
+	_LIT(KNum1,"Priority Zero Window Groups=%d Total=%d (Before Process Creation)");
+	buf.Format(KNum1,TheClient->iWs.NumWindowGroups(0),TheClient->iWs.NumWindowGroups());
+	LOG_MESSAGE(buf);
+	LogWindowGroupIds();
+#endif
+	CProcess* process = CProcess::NewL(CProcess::eProcessKeyTest,iTest->iScreenNumber);
+	RWindowGroup group(TheClient->iWs);
+	group.Construct(1234);
+	TheClient->Flush();		//Make sure the window group above is created before the one in the other process
+	TInt id=TheClient->iGroup->GroupWin()->Identifier();
+	group.SetOwningWindowGroup(id);
+	group.DefaultOwningWindow();
+
+	iSem.Wait();
+	User::After(TTimeIntervalMicroSeconds32(100000));		//0.1 secs
+	TInt numGroups=TheClient->iWs.NumWindowGroups();
+	TInt numGroups0=TheClient->iWs.NumWindowGroups(0);
+
+#if defined(LOGGING)
+	_LIT(KNum2,"NewWinGpId=%d Priority Zero Window Groups=%d Total=%d (After Process Creation)");
+	buf.Format(KNum2,id,numGroups0,numGroups);
+	LOG_MESSAGE(buf);
+	_LIT(KLog1,"Sending Key Of Death");
+	buf.Copy(KLog1);
+	LOG_MESSAGE(buf);
+	LogWindowGroupIds();
+#endif
+	group.SetOrdinalPosition(1);		//Make sure that the window group we have just created is behind the one created by the other process (belt and braces)
+	SendCtrlAltShift('K');
+	TheClient->iWs.Flush();
+#if defined(LOGGING)
+	_LIT(KLog2,"Sent Key Of Death");
+	buf.Copy(KLog2);
+	LOG_MESSAGE(buf);
+#endif
+	TInt numGroups2;
+	TInt numGroups0b;
+	TInt tries=3;
+	FOREVER		//On multi-core platforms need to wait for the Key of Death procedure to complete
+		{
+		numGroups2=TheClient->iWs.NumWindowGroups();
+		numGroups0b=TheClient->iWs.NumWindowGroups(0);
+		if (--tries==0)
+			break;
+		if (numGroups!=numGroups2 || numGroups0!=numGroups0b)
+			{
+			tries=1;
+			continue;
+			}
+		User::After(100000);		//0.1secs
+		}
+	TEST(numGroups==numGroups2+1);
+	_LIT(KLog,"KeyOfDeath Num WinGps Before=%d After=%d (should be one less)");
+	if (numGroups!=numGroups2+1)
+		LOG_MESSAGE3(KLog,numGroups,numGroups2);
+	TEST(numGroups0==numGroups0b+1);
+	if (numGroups0!=numGroups0b+1)
+		LOG_MESSAGE3(KLog,numGroups0,numGroups0b);
+	group.Close();
+
+	TBool processDead=!process->StillAlive();
+	TEST(processDead);
+	if (!processDead)
+		{
+		_LIT(KLog,"Other Thread Still Alive");
+		LOG_MESSAGE(KLog);
+		}
+	delete process;
+
+#if defined(LOGGING)
+	_LIT(KLog3,"Finished KeyOfDeath Test");
+	buf.Copy(KLog3);
+	LOG_MESSAGE(buf);
+	LogWindowGroupIds();
+#endif
+	}
+
+#define CONTRAST_UP 'A'		//'a'-'a'+1
+#define CONTRAST_DOWN 'B'		//'b'-'a'+1
+
+void CTKey::TestContrastL(TBool aChange)
+	{
+	TInt contrast=0;
+	TInt newContrast=0;
+	TInt maxContrast=0;
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrastMax,maxContrast));
+	TInt diff=aChange ? 1:0;
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,contrast));
+
+	SendCtrlAltShift(CONTRAST_UP);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,newContrast));
+	if ((contrast==maxContrast) && aChange)
+		{
+		TEST(newContrast==0);
+		if (newContrast!=0)
+			INFO_PRINTF3(_L("newContrast==0 - Expected: %d, Actual: %d"), 0, newContrast);		
+		}
+	else
+		{
+		TEST(contrast+diff==newContrast);
+		if (contrast+diff!=newContrast)
+			INFO_PRINTF3(_L("contrast+diff==newContrast - Expected: %d, Actual: %d"), contrast+diff, newContrast);
+		}
+
+	SendCtrlAltShift(CONTRAST_DOWN);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,newContrast));
+	TEST(contrast==newContrast);
+	if (contrast!=newContrast)
+			INFO_PRINTF3(_L("contrast==newContrast - Expected: %d, Actual: %d"), contrast, newContrast);
+
+	SendCtrlAltShift(CONTRAST_DOWN);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,newContrast));
+	if (contrast==0)
+		{
+		TEST(maxContrast==newContrast);
+		if (maxContrast!=newContrast)
+			INFO_PRINTF3(_L("maxContrast==newContrast - Expected: %d, Actual: %d"), maxContrast, newContrast);
+
+		}
+	else
+		{
+		TEST(contrast-diff==newContrast);
+		if (contrast-diff!=newContrast)
+			INFO_PRINTF3(_L("contrast-diff==newContrast - Expected: %d, Actual: %d"), contrast-diff, newContrast);
+
+		}
+
+	SendCtrlAltShift(CONTRAST_UP);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,newContrast));
+	TEST(contrast==newContrast);
+	if (contrast!=newContrast)
+		INFO_PRINTF3(_L("contrast==newContrast - Expected: %d, Actual: %d"), contrast, newContrast);
+
+	}
+
+void CTKey::TestDefaultContrastL(TBool aChange)
+	{
+	TInt contrast=0;
+	TInt newContrast=0;
+	TInt maxContrast=0;
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrastMax,maxContrast));
+	TInt diff=aChange ? 1:0;
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,contrast));
+
+	SendKey(EKeyIncContrast);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,newContrast));
+	if ((contrast==maxContrast) && aChange)
+		{
+		TEST(newContrast==0);
+		if (0!=newContrast)
+			INFO_PRINTF3(_L("newContrast==0 - Expected: %d, Actual: %d"), 0, newContrast);
+		}
+	else
+		{
+		TEST(contrast+diff==newContrast);
+		if (contrast+diff!=newContrast)
+			INFO_PRINTF3(_L("newContrast==contrast+diff - Expected: %d, Actual: %d"), contrast+diff, newContrast);
+		}
+
+	SendKey(EKeyDecContrast);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,newContrast));
+	TEST(contrast==newContrast);
+	if (contrast!=newContrast)
+			INFO_PRINTF3(_L("contrast==newContrast - Expected: %d, Actual: %d"), contrast, newContrast);
+
+	SendKey(EKeyDecContrast);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,newContrast));
+	if (contrast==0)
+		{
+		TEST(maxContrast==newContrast);
+		if (maxContrast!=newContrast)
+			INFO_PRINTF3(_L("maxContrast==newContrast - Expected: %d, Actual: %d"), maxContrast, newContrast);
+		}
+	else
+		{
+		TEST(contrast-diff==newContrast);
+		if (contrast-diff!=newContrast)
+			INFO_PRINTF3(_L("contrast-diff==newContrast - Expected: %d, Actual: %d"), contrast-diff, newContrast);
+		}
+
+	SendKey(EKeyIncContrast);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,newContrast));
+	TEST(contrast==newContrast);
+	if (contrast!=newContrast)
+		INFO_PRINTF3(_L("contrast==newContrast - Expected: %d, Actual: %d"), contrast, newContrast);
+
+	}
+
+void CTKey::ContrastKeysL()
+	{
+	TInt maxContrast=0;
+	TInt contrast=0;
+	TInt err=HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrastMax,maxContrast);
+	if (err==KErrNotSupported)
+		return;
+	else if (err==KErrNone)
+		err=HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,contrast);
+	if (err==KErrNotSupported)
+		return;
+	TEST(err==KErrNone);
+	if (err!=KErrNone)
+		INFO_PRINTF3(_L("HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,contrast)=KErrNone - Expected: %d, Actual: %d"), KErrNone, err);
+
+	if (contrast==0)
+		err=HAL::Set(iTest->iScreenNumber,HALData::EDisplayContrast,++contrast);
+	else if (contrast==maxContrast)
+		err=HAL::Set(iTest->iScreenNumber,HALData::EDisplayContrast,--contrast);
+	if (err==KErrNotSupported)
+		return;
+	TEST(err==KErrNone);
+	if (err!=KErrNone)
+		INFO_PRINTF3(_L("HAL::Get(iTest->iScreenNumber,HALData::EDisplayContrast,contrast)=KErrNone - Expected: %d, Actual: %d"), KErrNone, err);
+	TestDefaultContrastL(ETrue);
+
+	SetHotKey(EHotKeyIncContrast,CONTRAST_UP);
+	SetHotKey(EHotKeyDecContrast,CONTRAST_DOWN);
+	TestContrastL(ETrue);
+	TestDefaultContrastL(ETrue);
+
+	TheClient->iWs.ClearHotKeys(EHotKeyIncContrast);
+	TheClient->iWs.ClearHotKeys(EHotKeyDecContrast);
+	TestContrastL(EFalse);
+	TestDefaultContrastL(EFalse);
+
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyIncContrast);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyDecContrast);
+	TestContrastL(EFalse);
+	TestDefaultContrastL(ETrue);
+
+	SetHotKey(EHotKeyIncContrast,CONTRAST_UP);
+	SetHotKey(EHotKeyDecContrast,CONTRAST_DOWN);
+	TestContrastL(ETrue);
+	TestDefaultContrastL(ETrue);
+
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyIncContrast);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyDecContrast);
+	TestContrastL(EFalse);
+	TestDefaultContrastL(ETrue);
+	}
+
+#define BACKLIGHT_ON 'A'	//'o'-'a'+1
+#define BACKLIGHT_OFF 'B'	//'p'-'a'+1
+#define BACKLIGHT_TOGGLE 'C'	//'q'-'a'+1
+/** Test for reaction against backlight ON/OFF/TOGGLE buttons defined above.
+  If aChange is false button presses must not affect the state of backlight.
+*/
+void CTKey::TestBackLightL(TBool aChange)
+	{
+	TBool state;
+	SendCtrlAltShift(BACKLIGHT_ON);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==aChange);
+	if (state!=aChange)
+		INFO_PRINTF3(_L("state==aChange - Expected: %d, Actual: %d"), aChange, state);
+
+	SendCtrlAltShift(BACKLIGHT_TOGGLE);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==EFalse);
+	if (state!=EFalse)
+		INFO_PRINTF3(_L("state==EFalse - Expected: %d, Actual: %d"), EFalse, state);
+
+	SendCtrlAltShift(BACKLIGHT_TOGGLE);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==aChange);
+	if (state!=aChange)
+		INFO_PRINTF3(_L("state==aChange - Expected: %d, Actual: %d"), aChange, state);
+
+	SendCtrlAltShift(BACKLIGHT_OFF);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==EFalse);
+	if (state!=EFalse)
+		INFO_PRINTF3(_L("state==EFalse - Expected: %d, Actual: %d"), EFalse, state);
+
+	SendCtrlAltShift(BACKLIGHT_TOGGLE);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==aChange);
+		if (state!=aChange)
+		INFO_PRINTF3(_L("state==aChange - Expected: %d, Actual: %d"), aChange, state);
+
+	SendCtrlAltShift(BACKLIGHT_TOGGLE);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==EFalse);
+	if (state!=EFalse)
+		INFO_PRINTF3(_L("state==EFalse - Expected: %d, Actual: %d"), EFalse, state);
+
+	}
+
+/** Test for reaction against default backlight ON/OFF/TOGGLE buttons.
+  If aChange is false button presses must not affect the state of backlight.
+*/
+void CTKey::TestDefaultBackLightL(TBool aChange)
+	{
+	TBool state;
+	SendKey(EKeyBacklightOn);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==aChange);
+	if (state!=aChange)
+		INFO_PRINTF3(_L("state==aChange - Expected: %d, Actual: %d"), aChange, state);
+
+	SendKey(EKeyBacklightToggle);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==EFalse);
+	if (state!=EFalse)
+		INFO_PRINTF3(_L("state==EFalse - Expected: %d, Actual: %d"), EFalse, state);
+
+	SendKey(EKeyBacklightToggle);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==aChange);
+	if (state!=aChange)
+		INFO_PRINTF3(_L("state==aChange - Expected: %d, Actual: %d"), aChange, state);
+
+	SendKey(EKeyBacklightOff);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==EFalse);
+	if (state!=EFalse)
+		INFO_PRINTF3(_L("state==EFalse - Expected: %d, Actual: %d"), EFalse, state);
+
+	SendKey(EKeyBacklightToggle);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==aChange);
+	if (state!=aChange)
+		INFO_PRINTF3(_L("state==aChange - Expected: %d, Actual: %d"), aChange, state);
+
+	SendKey(EKeyBacklightToggle);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,state));
+	TEST(state==EFalse);
+	if (state!=EFalse)
+		INFO_PRINTF3(_L("state==EFalse - Expected: %d, Actual: %d"), EFalse, state);
+
+	}
+
+void CTKey::BackLightKeysL()
+	{
+	// Turns backlight off
+	TBool prevState;
+	TInt err=HAL::Get(iTest->iScreenNumber,HALData::EBacklightState,prevState);
+	if (err==KErrNotSupported)
+		{
+		_LIT(KLog,"Cannot test BackLight Key presses as cannot read its state on screen %d");
+		LOG_MESSAGE2(KLog,iTest->iScreenNumber);
+		return;
+		}
+	else if (err==KErrNone)
+		err=HAL::Set(iTest->iScreenNumber,HALData::EBacklightState,EFalse);
+	if (err==KErrNotSupported)
+		{
+		_LIT(KLog,"Cannot test BackLight Key presses as cannot set its state on screen %d");
+		LOG_MESSAGE2(KLog,iTest->iScreenNumber);
+		return;
+		}
+	TEST(err==KErrNone);
+	if (err!=KErrNone)
+		{
+		_LIT(KLog,"Reading or Setting BackLight state gave error %d on screen %d");
+		LOG_MESSAGE3(KLog,err,iTest->iScreenNumber);
+		}
+
+	// Tests that default backlight ON/OFF/TOGGLE buttons work
+	TestDefaultBackLightL(ETrue);
+
+	// Sets user defined backlight buttons and tests that both default and user defined buttons work
+	SetHotKey(EHotKeyBacklightOn,BACKLIGHT_ON);
+	SetHotKey(EHotKeyBacklightOff,BACKLIGHT_OFF);
+	SetHotKey(EHotKeyBacklightToggle,BACKLIGHT_TOGGLE);
+	TestBackLightL(ETrue);
+	TestDefaultBackLightL(ETrue);
+
+	// Calls RWsSession::ClearHotKeys and tests that both default and user defined buttons don't work
+	TheClient->iWs.ClearHotKeys(EHotKeyBacklightOn);
+	TheClient->iWs.ClearHotKeys(EHotKeyBacklightOff);
+	TheClient->iWs.ClearHotKeys(EHotKeyBacklightToggle);
+	TestBackLightL(EFalse);
+	TestDefaultBackLightL(EFalse);
+
+	// Calls RWsSession::RestoreDefaultHotKey and tests that only default buttons work
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyBacklightOn);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyBacklightOff);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyBacklightToggle);
+	TestBackLightL(EFalse);
+	TestDefaultBackLightL(ETrue);
+
+	// Sets user defined backlight buttons and tests that both default and user defined buttons work
+	SetHotKey(EHotKeyBacklightOn,BACKLIGHT_ON);
+	SetHotKey(EHotKeyBacklightOff,BACKLIGHT_OFF);
+	SetHotKey(EHotKeyBacklightToggle,BACKLIGHT_TOGGLE);
+	TestBackLightL(ETrue);
+	TestDefaultBackLightL(ETrue);
+
+	// Calls RWsSession::RestoreDefaultHotKey and tests that only default buttons work
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyBacklightOn);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyBacklightOff);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyBacklightToggle);
+	TestBackLightL(EFalse);
+	TestDefaultBackLightL(ETrue);
+
+	//Restores previous backlight state
+	//err=UserHal::SetBacklightOn(prevState);
+	err=HAL::Set(iTest->iScreenNumber,HALData::EBacklightState,prevState);
+	TEST(err==KErrNone);
+	if (err!=KErrNone)
+		{
+		_LIT(KLog,"Failed to set BackLight state back to previous state: %d on screen %d, error code: %d");
+		LOG_MESSAGE4(KLog,prevState,iTest->iScreenNumber,err);
+		}
+	}
+
+#define BRIGHTNESS_UP 'N'
+#define BRIGHTNESS_DOWN 'J'
+/** If aChange is true, checks that programmicaly defined brightness buttons increase and decrease brightness properly.
+ If aChange is false, checks that programmicaly defined brightness buttons don't affect brightness.
+*/
+void CTKey::TestBrightnessL(TBool aChange)
+	{
+	TInt brightness;
+	TInt newBrightness;
+	TInt diff=aChange ? 1:0;
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,brightness));
+
+	SendCtrlAltShift(BRIGHTNESS_UP);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,newBrightness));
+	TEST(brightness+diff==newBrightness);
+	if (brightness+diff!=newBrightness)
+		INFO_PRINTF3(_L("brightness+diff==newBrightness - Expected: %d, Actual: %d"), newBrightness, brightness+diff);
+
+	SendCtrlAltShift(BRIGHTNESS_DOWN);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,newBrightness));
+	TEST(brightness==newBrightness);
+	if (brightness!=newBrightness)
+		INFO_PRINTF3(_L("brightness==newBrightness - Expected: %d, Actual: %d"), newBrightness, brightness);
+
+	SendCtrlAltShift(BRIGHTNESS_DOWN);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,newBrightness));
+	TEST(brightness-diff==newBrightness);
+	if (brightness-diff!=newBrightness)
+		INFO_PRINTF3(_L("brightness-diff==newBrightness - Expected: %d, Actual: %d"), newBrightness, brightness-diff);
+
+	SendCtrlAltShift(BRIGHTNESS_UP);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,newBrightness));
+	TEST(brightness==newBrightness);
+	if (brightness!=newBrightness)
+		INFO_PRINTF3(_L("brightness==newBrightness - Expected: %d, Actual: %d"), newBrightness, brightness);
+	}
+
+/** If aChange is true, checks that default brightness buttons increase and decrease brightness properly (increase/decrease by 1).
+  If aChange is false, checks that default brightness buttons don't affect brightness.
+*/
+void CTKey::TestDefaultBrightnessL(TBool aChange)
+	{
+	TInt brightness;
+	TInt newBrightness;
+	TInt diff=aChange ? 1:0;
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,brightness));
+
+	SendKey(EKeyIncBrightness);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,newBrightness));
+	TEST(brightness+diff==newBrightness);
+	if (brightness+diff!=newBrightness)
+		INFO_PRINTF3(_L("brightness+diff==newBrightness - Expected: %d, Actual: %d"), newBrightness, brightness+diff);
+
+	SendKey(EKeyDecBrightness);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,newBrightness));
+	TEST(brightness==newBrightness);
+	if (brightness!=newBrightness)
+		INFO_PRINTF3(_L("brightness==newBrightness - Expected: %d, Actual: %d"), newBrightness, brightness);
+
+	SendKey(EKeyDecBrightness);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,newBrightness));
+	TEST(brightness-diff==newBrightness);
+	if (brightness-diff!=newBrightness)
+		INFO_PRINTF3(_L("brightness-diff==newBrightness - Expected: %d, Actual: %d"), newBrightness, brightness-diff);
+
+	SendKey(EKeyIncBrightness);
+	User::LeaveIfError(HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,newBrightness));
+	TEST(brightness==newBrightness);
+	if (brightness!=newBrightness)
+		INFO_PRINTF3(_L("brightness==newBrightness - Expected: %d, Actual: %d"), newBrightness, brightness);
+	}
+
+void CTKey::BrightnessKeysL()
+	{
+	INFO_PRINTF1(_L("AUTO  Brightness Key Test "));
+	TInt maxBrightness;
+	TInt brightness=0;		//To stop warning
+	// get maximum brightness and current
+	TInt err=HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightnessMax,maxBrightness);
+	if (err==KErrNotSupported)
+		return;
+	else if (err==KErrNone)
+		err=HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,brightness);
+	if (err==KErrNotSupported)
+		return;
+	INFO_PRINTF1(_L(" Supported"));
+	TEST(err==KErrNone);
+	if (err!=KErrNone)
+		INFO_PRINTF3(_L("HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,brightness) return value - Expected: %d, Actual: %d"), KErrNone, err);
+
+	// sets brightness to be neither maximal nor minimal
+	if (brightness==0)
+		err=HAL::Set(iTest->iScreenNumber,HALData::EDisplayBrightness,++brightness);
+	else if (brightness==maxBrightness)
+		err=HAL::Set(iTest->iScreenNumber,HALData::EDisplayBrightness,--brightness);
+	if (err==KErrNotSupported)
+		return;
+	INFO_PRINTF1(_L(" Changeable"));
+	TEST(err==KErrNone);
+	if (err!=KErrNone)
+		INFO_PRINTF3(_L("HAL::Get(iTest->iScreenNumber,HALData::EDisplayBrightness,brightness) return value - Expected: %d, Actual: %d"), KErrNone, err);
+
+	// Test default brightness buttons increase/decrease brightness by 1
+	TestDefaultBrightnessL(ETrue);
+
+	// Add new inc/dec buttons, test that default and program defined brightness buttons increase/decrease brightness by 1
+	INFO_PRINTF1(_L(" First Test"));
+	SetHotKey(EHotKeyIncBrightness,BRIGHTNESS_UP);
+	SetHotKey(EHotKeyDecBrightness,BRIGHTNESS_DOWN);
+	TestBrightnessL(ETrue);
+	TestDefaultBrightnessL(ETrue);
+
+	// Clear brightness buttons, test that default and program defined brightness buttons doesn't affect brightness
+	INFO_PRINTF1(_L(" Second Test"));
+	TheClient->iWs.ClearHotKeys(EHotKeyIncBrightness);
+	TheClient->iWs.ClearHotKeys(EHotKeyDecBrightness);
+	TestBrightnessL(EFalse);
+	TestDefaultBrightnessL(EFalse);
+
+	// Restore default brightness buttons, test that only default brightness buttons increase/decrease brightness by 1
+	INFO_PRINTF1(_L(" Third Test"));
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyIncBrightness);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyDecBrightness);
+	TestBrightnessL(EFalse);
+	TestDefaultBrightnessL(ETrue);
+
+	// Add new inc/dec buttons, test that default and program defined brightness buttons increase/decrease brightness by 1
+	INFO_PRINTF1(_L(" Fourth Test"));
+	SetHotKey(EHotKeyIncBrightness,BRIGHTNESS_UP);
+	SetHotKey(EHotKeyDecBrightness,BRIGHTNESS_DOWN);
+	TestBrightnessL(ETrue);
+	TestDefaultBrightnessL(ETrue);
+
+	// Restore default brightness buttons, test that only default brightness buttons increase/decrease brightness by 1
+	INFO_PRINTF1(_L(" Fifth Test"));
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyIncBrightness);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyDecBrightness);
+	TestBrightnessL(EFalse);
+	TestDefaultBrightnessL(ETrue);
+	}
+
+void CTKey::TestDefaultScreenSizeModeL(TInt aKeys,TBool aChange)
+	{
+	TInt screenMode=TheClient->iScreen->CurrentScreenMode();
+	TInt key;
+	TInt retVal;
+	for (key=0;key<aKeys;++key)
+		{
+		iVisibleGroup->SetMode(key);
+		SendKey(EKeyScreenDimension0+key);
+		if (aChange)
+			{
+			retVal = TheClient->iScreen->CurrentScreenMode();
+			TEST(retVal==key);
+			if (retVal!=key)
+				INFO_PRINTF3(_L("TheClient->iScreen->CurrentScreenMode() return value - Expected: %d, Actual: %d"), key, retVal);
+			}
+		else
+			{
+			retVal = TheClient->iScreen->CurrentScreenMode();
+			TEST(retVal==screenMode);
+			if (retVal!=screenMode)
+				INFO_PRINTF3(_L("TheClient->iScreen->CurrentScreenMode() return value - Expected: %d, Actual: %d"), screenMode, retVal);
+			}
+		}
+	}
+
+#define DIMENSION0 'P'
+#define DIMENSION1 'Q'
+#define DIMENSION2 'R'
+#define DIMENSION3 'N'
+void CTKey::TestScreenSizeModeL(TInt aKeys,TBool aChange)
+	{
+	TInt screenMode=TheClient->iScreen->CurrentScreenMode();
+	TInt key;
+	TInt retVal;
+	for (key=0;key<aKeys;++key)
+		{
+		iVisibleGroup->SetMode(key);
+		switch (key)
+		{
+		case 0:
+			SendCtrlAltShift(DIMENSION0);
+			break;
+		case 1:
+			SendCtrlAltShift(DIMENSION1);
+			break;
+		case 2:
+			SendCtrlAltShift(DIMENSION2);
+			break;
+		case 3:
+			SendCtrlAltShift(DIMENSION3);
+			break;
+		default:
+			INFO_PRINTF2(_L("Error Invalid Key: %d"),key);
+			TEST(EFalse);
+			break;
+		}
+			
+		
+		if (aChange)
+			{
+			retVal = TheClient->iScreen->CurrentScreenMode();
+			TEST(retVal==key);
+			if (retVal!=key)
+				INFO_PRINTF3(_L("TheClient->iScreen->CurrentScreenMode() return value - Expected: %d, Actual: %d"), key, retVal);
+	
+			}
+		else
+			{
+			retVal = TheClient->iScreen->CurrentScreenMode();
+			TEST(retVal==screenMode);
+			if (retVal!=screenMode)
+				INFO_PRINTF3(_L("TheClient->iScreen->CurrentScreenMode() return value - Expected: %d, Actual: %d"), screenMode, retVal);
+	
+			}
+		}
+	}
+
+void CTKey::ScreenSizeModeKeysL()
+	{
+	// The test does nothing if there is only one possible screen mode -> return
+	TInt numScreenModes=TheClient->iScreen->NumScreenModes();
+	if (numScreenModes<2)
+		return;
+
+	// Use at most 4 different modes for the test
+	if (numScreenModes>4) {numScreenModes=4;}
+
+	// Set screen mode 3
+	TInt screenMode=TheClient->iScreen->CurrentScreenMode();
+	iVisibleGroup->SetMode(numScreenModes-1);
+	TheClient->iScreen->SetScreenMode(numScreenModes-1);
+
+	// Test default screen mode switch buttons
+	TestDefaultScreenSizeModeL(numScreenModes,ETrue);
+
+	// Add new screen mode switch buttons. Test that default and program defined screen mode switch buttons switch modes.
+	SetHotKey(EHotKeyScreenDimension0,DIMENSION0);
+	SetHotKey(EHotKeyScreenDimension1,DIMENSION1);
+	SetHotKey(EHotKeyScreenDimension2,DIMENSION2);
+	SetHotKey(EHotKeyScreenDimension3,DIMENSION3);
+	TestDefaultScreenSizeModeL(numScreenModes,ETrue);
+	TestScreenSizeModeL(numScreenModes,ETrue);
+
+	// Clear all screen mode switch buttons. Test that default and program defined screen mode switch buttons don't affect screen modes
+	TheClient->iWs.ClearHotKeys(EHotKeyScreenDimension0);
+	TheClient->iWs.ClearHotKeys(EHotKeyScreenDimension1);
+	TheClient->iWs.ClearHotKeys(EHotKeyScreenDimension2);
+	TheClient->iWs.ClearHotKeys(EHotKeyScreenDimension3);
+	TestDefaultScreenSizeModeL(numScreenModes,EFalse);
+	TestScreenSizeModeL(numScreenModes,EFalse);
+
+	// Restore default screen mode switch buttons. Test that only default screen mode switch buttons switch screen modes
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyScreenDimension0);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyScreenDimension1);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyScreenDimension2);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyScreenDimension3);
+	TestDefaultScreenSizeModeL(numScreenModes,ETrue);
+	TestScreenSizeModeL(numScreenModes,EFalse);
+
+	// Add new screen mode switch buttons. Test that default and program defined screen mode switch buttons switch modes.
+	SetHotKey(EHotKeyScreenDimension0,DIMENSION0);
+	SetHotKey(EHotKeyScreenDimension1,DIMENSION1);
+	SetHotKey(EHotKeyScreenDimension2,DIMENSION2);
+	SetHotKey(EHotKeyScreenDimension3,DIMENSION3);
+	TestDefaultScreenSizeModeL(numScreenModes,ETrue);
+	TestScreenSizeModeL(numScreenModes,ETrue);
+
+	// Restore default screen mode switch buttons. Test that only default screen mode switch buttons switch screen modes
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyScreenDimension0);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyScreenDimension1);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyScreenDimension2);
+	TheClient->iWs.RestoreDefaultHotKey(EHotKeyScreenDimension3);
+	TestDefaultScreenSizeModeL(numScreenModes,ETrue);
+	TestScreenSizeModeL(numScreenModes,EFalse);
+
+	// Restore initial screen mode
+	iVisibleGroup->SetMode(screenMode);
+	TheClient->iScreen->SetScreenMode(screenMode);
+	}
+
+void CTKey::RunTestCaseL(TInt /*aCurTestCase*/)
+	{
+	_LIT(KTest0,"KeyOfDeath");
+	_LIT(KTest1,"Contrast");
+	_LIT(KTest2,"BackLight");
+	_LIT(KTest3,"Brightness");
+	_LIT(KTest4,"Screen Size Mode");
+	((CTKeyStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+#ifdef _DEBUG
+	_LIT(KTest5,"Orientation");
+	_LIT(KTest6,"CycleDisplaySize");
+#endif
+	switch(++iTest->iState)
+		{
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0106
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Key of Death test
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Creates a new client process and runs it.
+					Waits until the process is started and simulates Ctrl-Alt-Shift-K press.
+					When starts the process assumes that TAutoServer.exe exists in z:\sys\bin directory.
+					Otherwise the test will not exit a wait-state and will be aborted.
+
+@SYMTestExpectedResults Checks that the process is dead after the Ctrl-Alt-Shift-K press.
+					Check also that the difference between amounts of window groups efore
+					death-key press and after death-key press is 1.
+*/
+		case 1:
+			((CTKeyStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0106"));
+			iTest->LogSubTest(KTest0);
+			KeyOfDeathL();
+			break;
+		case 2:
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0539
+*/
+			((CTKeyStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0539"));
+			iTest->LogSubTest(KTest1);
+			ContrastKeysL();
+			break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0107
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test backlight
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Does nothing if hardware attributes are not supported.
+					1. Turns backlight off.
+					2. Tests that default backlight ON/OFF/TOGGLE buttons work.
+					3. Sets user defined backlight buttons and tests that both default and user defined buttons work.
+					4. Calls RWsSession::ClearHotKeys and tests that both default and user defined buttons don't work.
+					5. Calls RWsSession::RestoreDefaultHotKey and tests that only default buttons work.
+					6. Sets user defined backlight buttons and tests that both default and user defined buttons work.
+					7. Calls RWsSession::RestoreDefaultHotKey and tests that only default buttons work.
+					8. Restores previous backlight state.
+
+@SYMTestExpectedResults Expects that actions described above give positive result.
+						The test also checks that programmatic turn off/on doesn't fail.
+*/
+		case 3:
+			((CTKeyStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0107"));
+			iTest->LogSubTest(KTest2);
+			BackLightKeysL();
+			break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0108
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test brightness
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Does nothing if hardware attributes are not supported.
+					1. Get maximum brightness and current, test that those operations don't fail
+					2. Sets brightness to be neither maximal nor minimal, test that those operations don't fail
+					3. Test default brightness buttons increase/decrease brightness by 1
+					4. Add new inc/dec buttons, test that default and program defined brightness buttons increase/decrease brightness by 1
+					5. Clear brightness buttons, test that default and program defined brightness buttons doesn't affect brightness
+					6. Restore default brightness buttons, test that only default brightness buttons increase/decrease brightness by 1
+					7. Add new inc/dec buttons, test that default and program defined brightness buttons increase/decrease brightness by 1
+					8. Restore default brightness buttons, test that only default brightness buttons increase/decrease brightness by 1
+
+@SYMTestExpectedResults Expects that actions described above give positive result.
+						The test also checks that programmatic brightness increase and decrease doesn't fail.
+*/
+		case 4:
+			((CTKeyStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0108"));
+			iTest->LogSubTest(KTest3);
+			BrightnessKeysL();
+			break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0109
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test screen mode switching
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     The test does nothing if there is only one possible screen mode. It uses at most 4 different modes for the test.
+					1. Test default screen mode switch buttons
+					2. Add new screen mode switch buttons. Test that default and program defined screen mode switch buttons switch modes.
+					3. Clear all screen mode switch buttons. Test that default and program defined screen mode switch buttons don't affect screen modes
+					4. Restore default screen mode switch buttons. Test that only default screen mode switch buttons switch screen modes
+					5. Add new screen mode switch buttons. Test that default and program defined screen mode switch buttons switch modes.
+					6. Restore default screen mode switch buttons. Test that only default screen mode switch buttons switch screen modes
+					7. Restore initial screen mode
+
+
+
+@SYMTestExpectedResults Expects that actions described above give positive result.
+*/
+		case 5:
+			((CTKeyStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0109"));
+			iTest->LogSubTest(KTest4);
+			ScreenSizeModeKeysL();
+			break;
+#ifdef _DEBUG			
+		case 6:
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0540
+*/
+			((CTKeyStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0540"));
+			iTest->LogSubTest(KTest5);
+			KeyOfOrientation();
+			break;
+		case 7:
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0541
+*/
+			((CTKeyStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0541"));
+			iTest->LogSubTest(KTest6);
+			CycleDisplaySize();
+			break;
+#endif		
+		default:
+			((CTKeyStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+			((CTKeyStep*)iStep)->CloseTMSGraphicsStep();
+			TestComplete();
+		}
+	((CTKeyStep*)iStep)->RecordTestResultL();
+	}
+
+
+__WS_CONSTRUCT_STEP__(Key)