windowing/windowserver/tauto/TMDISPLAY.CPP
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tauto/TMDISPLAY.CPP	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,232 @@
+// 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:
+// Multiple display test
+// 
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+
+
+#include "TMDISPLAY.H"
+#include <hal.h>
+//
+//
+CTClient* CreateClientL()
+	{
+	return (TheClient=new(ELeave) TestClient());
+	}
+	
+TInt ProcMultiDisplay(TAny* aScreenNo)
+	{
+	return TestLibStartUp(CreateClientL,(TInt)aScreenNo);
+	}
+
+
+//
+//
+
+CTMultiDisplay::CTMultiDisplay(CTestStep* aStep) : CTWsGraphicsBase(aStep)
+	{
+	INFO_PRINTF1(_L("Testing Mutli display functions"));
+	}
+
+void CTMultiDisplay::ConstructL()
+	{
+	}
+	
+CTMultiDisplay::~CTMultiDisplay()
+	{
+	}
+
+TInt DoSetFocusScreenL(TInt aFocusScreen,TAny* /*aArg*/)
+	{
+	RWsSession ws;
+	User::LeaveIfError(ws.Connect());
+	ws.SetFocusScreen(aFocusScreen);
+	ws.Close();
+	return EWsExitReasonBad;
+	}
+
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0051
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test focusing on the two different screens
+					available
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Test the response to different calls to focus
+					on the two screens available
+
+@SYMTestExpectedResults Foucisng on the different screens is correct
+*/	
+void CTMultiDisplay::DoFocusScreenTestL()
+	{
+	_LIT(KSubTitle,"FocusScreen API");
+	INFO_PRINTF1(KSubTitle);
+	
+	TInt numberOfScreens;
+	HAL::Get(HALData::EDisplayNumberOfScreens, numberOfScreens);
+	TInt oldFocus=TheClient->iWs.GetFocusScreen();
+		
+	// test case #1: out of bounds screen number
+	// expected result: client panic and focus stays on current screen
+	TEST(iTest->TestWsPanicL(&DoSetFocusScreenL,EWservPanicScreenNumber,-1,NULL));
+	TEST(TheClient->iWs.GetFocusScreen()==oldFocus);
+	if (TheClient->iWs.GetFocusScreen()!=oldFocus)
+		INFO_PRINTF3(_L("TheClient->iWs.GetFocusScreen() return value - Expected: %d, Actual: %d"), oldFocus, TheClient->iWs.GetFocusScreen());		
+
+	TEST(iTest->TestWsPanicL(&DoSetFocusScreenL,EWservPanicScreenNumber,numberOfScreens,NULL));
+	TEST(TheClient->iWs.GetFocusScreen()==oldFocus);
+	if (TheClient->iWs.GetFocusScreen()!=oldFocus)
+		INFO_PRINTF3(_L("TheClient->iWs.GetFocusScreen() return value - Expected: %d, Actual: %d"), oldFocus, TheClient->iWs.GetFocusScreen());		
+
+	
+	// test case #2: new focus equals to current focus
+	// expected result: KErrNone and focus stays on current screen
+	TInt ret = TheClient->iWs.SetFocusScreen(oldFocus);
+	TEST(ret==KErrNone && TheClient->iWs.GetFocusScreen()==oldFocus);
+	if (ret!=KErrNone || TheClient->iWs.GetFocusScreen()!=oldFocus)
+		INFO_PRINTF5(_L("TheClient->iWs.SetFocusScreen(oldFocus)==KErrNone && TheClient->iWs.GetFocusScreen()==oldFocus - Expected: %d and %d, Actual: %d and %d"),KErrNone,  oldFocus, ret, TheClient->iWs.GetFocusScreen());		
+
+	
+	// test case #3: set focus to screen N where screen N is empty (doesn't have any windows)
+	// expected result: KErrNotFound and focus stays on current screen
+	TInt i;
+	for(i=1;i<numberOfScreens;++i)
+		{
+		ret = TheClient->iWs.SetFocusScreen(i);
+		TEST(ret==KErrNotReady && TheClient->iWs.GetFocusScreen()==oldFocus);
+		if (ret!=KErrNotReady || TheClient->iWs.GetFocusScreen()!=oldFocus)
+			INFO_PRINTF5(_L("TheClient->iWs.SetFocusScreen(i)==KErrNotReady && TheClient->iWs.GetFocusScreen()==oldFocus - Expected: %d and %d, Actual: %d and %d"),KErrNotReady,  oldFocus, ret, TheClient->iWs.GetFocusScreen());
+		}
+				
+	// test case #4: set focus to screen N where screen N has focus-able window
+	// expected result: KErrNone and focus is set to screen N
+	CArrayPtrFlat<CMinWin>* wins;
+	wins=new(ELeave) CArrayPtrFlat<CMinWin>(numberOfScreens);
+	CleanupStack::PushL(wins);
+	for(i=0;i<numberOfScreens;++i)
+		{
+		CMinWin* win=new(ELeave) CMinWin(i);
+		CleanupStack::PushL(win);
+		win->ConstructL();
+		wins->AppendL(win);
+		}
+		
+	for(i=1;i<numberOfScreens;++i)
+		{
+		ret = TheClient->iWs.SetFocusScreen(i);
+		TEST(ret==KErrNone && TheClient->iWs.GetFocusScreen()==i);
+		if (ret!=KErrNone || TheClient->iWs.GetFocusScreen()!=i)
+			INFO_PRINTF5(_L("TheClient->iWs.SetFocusScreen(i)==KErrNone && TheClient->iWs.GetFocusScreen()==i - Expected: %d and %d, Actual: %d and %d"),KErrNone,  i, ret, TheClient->iWs.GetFocusScreen());
+
+		}		
+	
+	// test case #5: set focus back from screen N to main screen (screen 0)
+	// expected result: KErrNone and focus is set to screen 0
+	ret = TheClient->iWs.SetFocusScreen(0);
+	TEST(ret==KErrNone && TheClient->iWs.GetFocusScreen()==0);
+	if (ret!=KErrNone || TheClient->iWs.GetFocusScreen()!=0)
+		INFO_PRINTF5(_L("TheClient->iWs.SetFocusScreen(0)==KErrNone && TheClient->iWs.GetFocusScreen()==0 - Expected: %d and %d, Actual: %d and %d"),KErrNone,  0, ret, TheClient->iWs.GetFocusScreen());
+	
+	CleanupStack::PopAndDestroy(numberOfScreens+1,wins);
+	}
+
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0052
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Launch a test from a new process and check
+					that it passes indepenedent of screen focus
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Focus on a screen, launch a test process,
+					switch to focus on the other screen, then
+					then check the test process passed
+
+@SYMTestExpectedResults The test in the process passed
+*/		
+void CTMultiDisplay::DoScreenTestL(TInt aScreenNo)
+	{
+	_LIT(KSubTest,"Screen %d");
+	TBuf<16> subMsg;
+
+	const TInt numScreens=TheClient->iWs.NumberOfScreens();
+	if (numScreens<=aScreenNo)
+		{
+		_LIT(KLog,"WARNING!! Cannot run test for screen %d as the device only has %d screens.");
+		LOG_MESSAGE3(KLog,aScreenNo,numScreens);
+		aScreenNo=numScreens-1;
+		}
+
+	subMsg.AppendFormat(KSubTest,aScreenNo);
+	LOG_MESSAGE(subMsg);
+
+	// Must switch focus screen to relevant screen manually 
+	CMinWin* win=new(ELeave) CMinWin(aScreenNo);
+	CleanupStack::PushL(win);
+	win->ConstructL();
+	TheClient->iWs.SetFocusScreen(aScreenNo);
+
+	CleanupStack::PopAndDestroy(win);
+	TheClient->iWs.SetFocusScreen(0);
+	CTestBase::iScreenNo=aScreenNo;
+
+	//Set CTestBase::iNumberOfGrpWndsOnPrimaryScreenWithZeroPriority with the number of window groups
+	//in default screen with priority zero. This will be used in TGwHandle test case.
+	CTestBase::iNumberOfGrpWndsOnPrimaryScreenWithZeroPriority = TheClient->iWs.NumWindowGroups(0) - 1;
+	}
+
+void CTMultiDisplay::RunTestCaseL(TInt /*aCurTestCase*/)
+	{
+	_LIT(KTest1,"Focus Screen");
+	_LIT(KTest2,"Screen");
+	((CTMultiDisplayStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+
+	switch (++iTest->iState)
+		{
+		case 1:
+			((CTMultiDisplayStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0051"));
+			iTest->LogSubTest(KTest1);
+			DoFocusScreenTestL();
+			break;
+		case 2:
+			((CTMultiDisplayStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0052"));
+			iTest->LogSubTest(KTest2);
+			DoScreenTestL(1);
+			break;
+		default:
+			((CTMultiDisplayStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+			((CTMultiDisplayStep*)iStep)->CloseTMSGraphicsStep();
+			TestComplete();
+			break;	
+		}
+	((CTMultiDisplayStep*)iStep)->RecordTestResultL();
+	}
+
+__WS_CONSTRUCT_STEP__(MultiDisplay)