os/graphics/windowing/windowserver/test/tauto/TMULSCREENS.CPP
author sl@SLION-WIN7.fritz.box
Fri, 15 Jun 2012 03:10:57 +0200
changeset 0 bde4ae8d615e
permissions -rw-r--r--
First public contribution.
     1 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies).
     2 // All rights reserved.
     3 // This component and the accompanying materials are made available
     4 // under the terms of "Eclipse Public License v1.0"
     5 // which accompanies this distribution, and is available
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
     7 //
     8 // Initial Contributors:
     9 // Nokia Corporation - initial contribution.
    10 //
    11 // Contributors:
    12 //
    13 // Description:
    14 // Enable Multiple Displays
    15 // 
    16 //
    17 
    18 /**
    19  @file
    20  @test
    21  @internalComponent - Internal Symbian test code
    22 */
    23 
    24 #include "TMULSCREENS.h"
    25 
    26 const TInt KFstScreenNo = 0;
    27 const TInt KSndScreenNo = 1;
    28 
    29 CTMulScreens::CTMulScreens(CTestStep* aStep):
    30 	CTWsGraphicsBase(aStep)
    31 	{
    32 	}
    33 
    34 void CTMulScreens::ConstructL()
    35 	{
    36 	User::LeaveIfError(iRws.Connect());
    37 	iFstScreenDevice =new(ELeave) CWsScreenDevice(iRws);
    38 	TInt err = iFstScreenDevice->Construct(KFstScreenNo);
    39 	iTest->LogLeave(err);
    40 	User::LeaveIfError(err);
    41 	iNumScreens = iRws.NumberOfScreens();
    42 	if(KSndScreenNo<iNumScreens)
    43 		{
    44 		iSndScreenDevice =new(ELeave) CWsScreenDevice(iRws);
    45 		err = iSndScreenDevice->Construct(KSndScreenNo);
    46 		iTest->LogLeave(err);
    47 		User::LeaveIfError(err);
    48 		}
    49 	INFO_PRINTF2(_L("The number of screens supported on this device is %d"),iNumScreens);
    50 	}
    51 
    52 CTMulScreens::~CTMulScreens()
    53 	{
    54 	iFstWinGp.Close();
    55 	if(KSndScreenNo<iNumScreens)
    56 		{
    57 		iSndWinGp.Close();
    58 		delete iSndScreenDevice;
    59 		}
    60 	delete iFstScreenDevice;
    61 	iRws.Close();
    62 	}
    63 
    64 /**
    65    @SYMTestCaseID          GRAPHICS-WSERV-0383
    66 
    67    @SYMPREQ					PREQ1227
    68 
    69    @SYMREQ					REQ5541
    70 
    71    @SYMTestCaseDesc			Create Window Group(s) on each screen.
    72 
    73    @SYMTestPriority			High
    74 
    75    @SYMTestStatus			Implemented
    76 
    77    @SYMTestActions			Call RWsSession::NumWindowGroups() to get the number of window groups of a given window group priority running on a specified screen.
    78    							Test the number of Window Groups on each screen.
    79    							Test the size of the list of window group on each screen.
    80    							Test the Window Group which has the keyboard focus on the second screen.
    81 							API Calls:\n
    82 							TInt RWsSession::NumWindowGroups(TInt aScreenNumber,TInt aPriority) const
    83 							TInt RWsSession::WindowGroupList(CArrayFixFlat<TInt>* aWindowList,TInt aScreenNumber,TInt aPriority)
    84 							TInt RWindowGroup::Construct(TUint32 aClientHandle,CWsScreenDevice* aScreenDevice)
    85 							TInt RWsSession::GetFocusWindowGroup(TInt aScreenNumber)
    86 
    87    @SYMTestExpectedResults	Provided that a second screen is configured in the epoc.ini and the wsini.ini, this test case will create one window group on the first screen
    88    							and two window groups on the second screen.
    89 							If only one screen is configured, then it will create one group on the primary screen.
    90 							Otherwise this function leaves with a system-wide error.
    91 */
    92 
    93 void CTMulScreens::TestCreateGroupWindowsL()
    94 	{
    95 	const TInt fstNumWinGps = iRws.NumWindowGroups(KFstScreenNo,EAllPriorities);
    96 	CArrayFixFlat<TInt>* fstList = new(ELeave) CArrayFixFlat<TInt>(1);
    97 	CleanupStack::PushL(fstList);
    98 	TInt err = iRws.WindowGroupList(fstList,KFstScreenNo,EAllPriorities);
    99 	TEST(err==KErrNone);
   100 	TEST(fstList->Count()==fstNumWinGps);
   101 	err = iRws.WindowGroupList(fstList); //test existing api
   102 	TEST(err==KErrNone);
   103 	TEST(fstList->Count()==(iRws.NumWindowGroups())); 
   104 	iFstWinGp = RWindowGroup(iRws);
   105 	TRAP(err,iFstWinGp.Construct(ENullWsHandle,iFstScreenDevice));
   106 	TEST(err==KErrNone);
   107 	if(err==KErrNone)
   108 		{
   109 		TEST(iRws.NumWindowGroups(KFstScreenNo,EAllPriorities) == (fstNumWinGps+1));
   110 		}
   111 	CleanupStack::PopAndDestroy(fstList);
   112 
   113 	//Second screen has been configured.
   114 	if(KSndScreenNo<iNumScreens)
   115 		{
   116 		TInt winId = iRws.GetFocusWindowGroup(KSndScreenNo);
   117 		TEST(winId==KErrGeneral);
   118 		iSndWinGp = RWindowGroup(iRws);
   119 		TRAP(err,iSndWinGp.Construct(ENullWsHandle,ETrue,iSndScreenDevice));
   120 		TEST(err==KErrNone);
   121 		if(err==KErrNone)
   122 			{
   123 			winId = iRws.GetFocusWindowGroup(KSndScreenNo);
   124 			TEST(winId==iSndWinGp.Identifier());
   125 			TEST(iRws.NumWindowGroups(KFstScreenNo,EAllPriorities) == (fstNumWinGps+1)); //test that the no. of screens unchanged on first screen
   126 			CArrayFixFlat<TInt>* sndList =new(ELeave) CArrayFixFlat<TInt>(1);
   127 			CleanupStack::PushL(sndList);
   128 			TInt sndNumWinGps = iRws.NumWindowGroups(KSndScreenNo,iSndWinGp.OrdinalPriority());
   129 			err = iRws.WindowGroupList(sndList,KSndScreenNo,iSndWinGp.OrdinalPriority());
   130 			TEST(err==KErrNone);
   131 			TEST(sndList->Count()==sndNumWinGps);
   132 
   133 			iSndWinGp.SetOrdinalPosition(iSndWinGp.OrdinalPosition(),EAllPriorities);
   134 			TInt allPriNumWinGps= iRws.NumWindowGroups(EAllPriorities);
   135 			CArrayFixFlat<TInt>* allPriList =new(ELeave) CArrayFixFlat<TInt>(1);
   136 			CleanupStack::PushL(allPriList);
   137 			err = iRws.WindowGroupList(EAllPriorities,allPriList);
   138 			TEST(err==KErrNone);
   139 			TEST(allPriList->Count()==allPriNumWinGps);
   140 
   141 			CleanupStack::PopAndDestroy(2,sndList);
   142 			}
   143 		RWindowGroup trdWinGp = RWindowGroup(iRws);
   144 		TRAP(err,trdWinGp.Construct(ENullWsHandle,ETrue,iSndScreenDevice));
   145 		TEST(err==KErrNone);
   146 		if(err==KErrNone)
   147 			{
   148 			winId = iRws.GetFocusWindowGroup(KSndScreenNo);
   149 			TEST(winId==trdWinGp.Identifier());
   150 			trdWinGp.Close();
   151 			}
   152 		}
   153 	}
   154 
   155 /**
   156    @SYMTestCaseID          GRAPHICS-WSERV-0384
   157 
   158    @SYMPREQ					PREQ1227
   159 
   160    @SYMREQ					REQ5541
   161 
   162    @SYMTestCaseDependencies	SYMTestCaseID GRAPHICS-WSERV-0383
   163 
   164    @SYMTestCaseDesc			Create a blank window on each screen.
   165 
   166    @SYMTestPriority			High
   167 
   168    @SYMTestStatus			Implemented
   169 
   170    @SYMTestActions			Test that each blank window is created on a different screen.
   171 							API Calls:\n
   172 							TInt RBlankWindow::Construct(const RWindowTreeNode &parent, TUint32 aClientHandle) where parent is
   173 							a Window Group created on each screen.
   174 
   175    @SYMTestExpectedResults	The background colour of the first screen changes to blue and that of the second one changes to green.
   176    							Otherwise this function leaves with a system-wide error.
   177 */
   178 void CTMulScreens::TestCreateBlankWindowsL()
   179 	{
   180 	RBlankWindow fstBlankWin(iRws);
   181 	CleanupClosePushL(fstBlankWin);
   182 	TRAPD(err,fstBlankWin.Construct(iFstWinGp,ENullWsHandle));
   183 	TEST(err==KErrNone);
   184 	if(err==KErrNone)
   185 		{
   186 		fstBlankWin.SetRequiredDisplayMode(EColor256);
   187 		fstBlankWin.SetColor(TRgb(0,0,255)); // paint the screen blue
   188 		fstBlankWin.Activate();
   189 		iRws.Flush();
   190 		TheClient->WaitForRedrawsToFinish();
   191 		User::After(6000000);
   192 		}
   193 	CleanupStack::PopAndDestroy();//fstBlankWin	
   194 	
   195 	// Second screen
   196 	if(KSndScreenNo<iNumScreens)
   197 		{
   198 		RBlankWindow sndBlankWin(iRws);
   199 		CleanupClosePushL(sndBlankWin);
   200 		TRAP(err,sndBlankWin.Construct(iSndWinGp,ENullWsHandle));
   201 		TEST(err==KErrNone);
   202 		if(err==KErrNone)
   203 			{
   204 			sndBlankWin.SetRequiredDisplayMode(EColor256);
   205 			sndBlankWin.SetColor(TRgb(0,255,0));	//paint the screen green
   206 			sndBlankWin.Activate(); //there is a defect in Activate() because there is a delay before the second screen turns green
   207 			iRws.Flush();
   208 			TheClient->WaitForRedrawsToFinish();
   209 			User::After(6000000);
   210 			}
   211 		CleanupStack::PopAndDestroy(); //sndBlankWin
   212 		}
   213 	}
   214 
   215 
   216 /**
   217    @SYMTestCaseID          GRAPHICS-WSERV-0385
   218 
   219    @SYMPREQ					PREQ1227
   220 
   221    @SYMREQ					REQ5541
   222 
   223    @SYMTestCaseDependencies	SYMTestCaseID GRAPHICS-WSERV-0383
   224 
   225    @SYMTestCaseDesc			Test the Window Group that has the keyboard focus for each screen.
   226 
   227    @SYMTestPriority			High
   228 
   229    @SYMTestStatus			Implemented
   230 
   231    @SYMTestActions			Call RWsSession::GetFocusWindowGroup on each screen.
   232 							API Calls:\n
   233 							TInt RWsSession::GetFocusWindowGroup(TInt aScreenNumber)
   234 
   235    @SYMTestExpectedResults	The identifier returned by the API for each screen is tested to see if it is the expected Window Group ID; ie the
   236    							ID of the window group created in the first test case.
   237 */
   238 void CTMulScreens::TestGetFocusWindow()
   239 	{
   240 	TInt winId = iRws.GetFocusWindowGroup(KFstScreenNo);
   241 	TEST(winId==iFstWinGp.Identifier());
   242 	if(KSndScreenNo<iNumScreens)
   243 		{
   244 		winId = iRws.GetFocusWindowGroup(KSndScreenNo);
   245 		TEST(winId==iSndWinGp.Identifier());
   246 		TEST(iRws.GetFocusWindowGroup()==iFstWinGp.Identifier());
   247 		}
   248 	}
   249 
   250 /**
   251    @SYMTestCaseID          GRAPHICS-WSERV-0386
   252 
   253    @SYMPREQ					PREQ1227
   254 
   255    @SYMREQ					REQ5541
   256 
   257    @SYMTestCaseDependencies	SYMTestCaseID GRAPHICS-WSERV-0383
   258 
   259    @SYMTestCaseDesc			Test the default owning window on each screen.
   260 
   261    @SYMTestPriority			High
   262 
   263    @SYMTestStatus			Implemented
   264 
   265    @SYMTestActions			Call RWsSession::GetDefaultOwningWindow() to return the ID of the default owning window.
   266    							Call RWsSession::DefaultOwningWindow() on the second Window Group to set it as the default owning window on the second screen.
   267    							Call new API RWsSession::GetDefaultOwningWindow(TInt aScreenNumber) to get the default owning window on the second screen.
   268    							API Calls:\n
   269 							TInt RWsSession::GetFocusWindowGroup()
   270 							TInt RWsSession::GetFocusWindowGroup(TInt aScreenNumber)
   271 
   272    @SYMTestExpectedResults	The identifier returned by the API for each screen is tested to see that they are not the same.
   273 */
   274 void CTMulScreens::TestGetDefaultOwningWindow()
   275 	{
   276 	if(KSndScreenNo<iNumScreens)
   277 		{
   278 		TInt prevWinId = iRws.GetDefaultOwningWindow();
   279 		iSndWinGp.DefaultOwningWindow();
   280 		TInt winId = iRws.GetDefaultOwningWindow(KSndScreenNo);
   281 		TEST(winId==iSndWinGp.Identifier());
   282 		TEST(prevWinId!=winId);
   283 		}
   284 	}
   285 
   286 /**
   287    @SYMTestCaseID          GRAPHICS-WSERV-0387
   288 
   289    @SYMPREQ					PREQ1227
   290 
   291    @SYMREQ					REQ5541
   292 
   293    @SYMTestCaseDesc			Test the background colour.
   294 
   295    @SYMTestPriority			High
   296 
   297    @SYMTestStatus			Implemented
   298 
   299    @SYMTestActions			Call RWsSession::GetBackgroundColor() to store the default value;Change the background colour by calling RWsSession::SetBackgroundColor();
   300    							Test that the background has changed; Restore the background colour.
   301    							API Calls:\n
   302    							TRgb RWsSession::GetBackgroundColor() const
   303 							void RWsSession::SetBackgroundColor(TRgb colour)
   304 
   305    @SYMTestExpectedResults	 Background color should change when SetBackgroundColor is called.
   306 */
   307 void CTMulScreens::TestSetBackgroundColour()
   308 	{
   309 	TRgb rgb_b4 = iRws.GetBackgroundColor();
   310 	iRws.SetBackgroundColor(KRgbBlack);
   311 	TEST(iRws.GetBackgroundColor()==KRgbBlack);
   312 	iRws.SetBackgroundColor(rgb_b4);
   313 	TEST(iRws.GetBackgroundColor()==rgb_b4);
   314 	}
   315 
   316 /**
   317    @SYMTestCaseID          GRAPHICS-WSERV-0388
   318 
   319    @SYMPREQ					PREQ1227
   320 
   321    @SYMREQ					REQ5541
   322 
   323    @SYMTestCaseDesc			Test the shadow vector.
   324 
   325    @SYMTestPriority			High
   326 
   327    @SYMTestStatus			Implemented
   328 
   329    @SYMTestActions			Call RWsSession::ShadowVector() to store the default value;Call RWsSession::SetShadowVector() to change the shadow vector;
   330    							Test that the shadow vector has changed; Restore the shadow vector.
   331    							API Calls:\n
   332    							TPoint RWsSession::ShadowVector() const
   333 							void RWsSession::SetShadowVector(const TPoint &aVector);
   334 
   335    @SYMTestExpectedResults	 The shadow vector should change when SetShadowVector is called.
   336 */
   337 void CTMulScreens::TestSetShadowVector()
   338 	{
   339 	TPoint point_b4 = iRws.ShadowVector();
   340 	
   341 	iRws.SetShadowVector(TPoint(3,3));
   342 	
   343 	#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
   344 	TEST(iRws.ShadowVector()==TPoint(0,0)); // in NGA SetShadowVector & ShadowVector are deprecated
   345 	#else
   346 	TEST(iRws.ShadowVector()==TPoint(3,3));
   347 	#endif
   348 	
   349 	iRws.SetShadowVector(point_b4);
   350 	
   351 	#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
   352 	TEST(iRws.ShadowVector()==TPoint(0,0)); // in NGA SetShadowVector & ShadowVector are deprecated
   353 	#else
   354 	TEST(iRws.ShadowVector()==point_b4);
   355 	#endif
   356 	}
   357 
   358 /**
   359    @SYMTestCaseID          GRAPHICS-WSERV-0389
   360 
   361    @SYMPREQ					PREQ1227
   362 
   363    @SYMREQ					REQ5541
   364 
   365    @SYMTestCaseDesc			Negative tests for the APIs listed below.
   366 
   367    @SYMTestPriority			High
   368 
   369    @SYMTestStatus			Implemented
   370 
   371    @SYMTestActions			Launch a thread to call TestInvalidScreenNumber. Pass an invalid screen number to the APIs listed below.
   372    							API Calls:\n
   373    							TInt RWsSession::NumWindowGroups(TInt aScreenNumber,TInt aPriority) const
   374 							TInt RWsSession::WindowGroupList(CArrayFixFlat<TInt>* aWindowList,TInt aScreenNumber,TInt aPriority)
   375 							TInt RWsSession::GetFocusWindowGroup(TInt aScreenNumber)
   376 							TInt GetDefaultOwningWindow(TInt aScreenNumber)
   377 							TDisplayMode GetDefModeMaxNumColors(TInt aScreenNumber,TInt& aColor,TInt& aGray) const
   378    							TInt GetColorModeList(TInt aScreenNumber,CArrayFixFlat<TInt>* aModeList) const
   379 
   380    @SYMTestExpectedResults	 The thread panics and exits with reason EWservPanicScreenNumber.
   381 */
   382 void CTMulScreens::TestPanicsL()
   383 	{
   384 	TInt firstTest = 1;
   385 	TInt lastTest = 6;
   386 	const TInt KInvalidScreenNumber = 2;
   387 	for (TInt option=firstTest;option<=lastTest;option++)
   388 		{
   389 		TEST(iTest->TestWsPanicL(&TestInvalidScreenNumberL,EWservPanicScreenNumber,option,(TAny*)KInvalidScreenNumber));
   390 		}
   391 	}
   392 
   393 TInt CTMulScreens::TestInvalidScreenNumberL(TInt aOption, TAny *aScreenNumber)
   394 	{
   395 	RWsSession wsSession;
   396 	wsSession.Connect();
   397 	switch((TInt)aOption)
   398 		{
   399 		case 1:
   400 			wsSession.NumWindowGroups((TInt)aScreenNumber,EAllPriorities);
   401 			break;
   402 		case 2:
   403 			{
   404 			CArrayFixFlat<TInt>* list = new(ELeave) CArrayFixFlat<TInt>(1);
   405 			wsSession.WindowGroupList(list,(TInt)aScreenNumber,EAllPriorities);
   406 			}
   407 			break;
   408 		case 3:
   409 			wsSession.GetFocusWindowGroup((TInt)aScreenNumber);
   410 			break;
   411 		case 4:
   412 			wsSession.GetDefaultOwningWindow((TInt)aScreenNumber);
   413 			break;
   414 		case 5:
   415 			{
   416 			CArrayFixFlat<TInt>* list = new(ELeave) CArrayFixFlat<TInt>(1);
   417 			wsSession.GetColorModeList((TInt)aScreenNumber,list);
   418 			}
   419 			break;
   420 		case 6:
   421 			{
   422 			TInt color,gray;
   423 			wsSession.GetDefModeMaxNumColors((TInt)aScreenNumber,color,gray);
   424 			}
   425 			break;
   426 		default:
   427 			User::Panic(_L("Default panic"),KErrGeneral);
   428 			break;
   429 		}
   430 	return KErrNone;
   431 	}
   432 
   433 
   434 /**
   435    @SYMTestCaseID          GRAPHICS-WSERV-0390
   436 
   437    @SYMPREQ					PREQ1227
   438 
   439    @SYMREQ					REQ5541
   440 
   441    @SYMTestCaseDependencies	SYMTestCaseID GRAPHICS-WSERV-0383
   442 
   443    @SYMTestCaseDesc			Test that CWindowGc updates its screendevice each time it is activated on a window.
   444 
   445    @SYMTestPriority			High
   446 
   447    @SYMTestStatus			Implemented
   448 
   449    @SYMTestActions			Activate the gc on both RWindows.CWindowGc::Device() is called after each activation has taken place.
   450    							API Calls:\n
   451    							void CWindowGc::Activate(RDrawableWindow &aDevice);
   452    							void CWindowGc::Deactivate();
   453    							CGraphicsDevice* CWindowGc::Device() const
   454    							TInt RWindow::Construct(const RWindowTreeNode &parent,TUint32 aHandle);
   455 
   456    @SYMTestExpectedResults	CWindowGc::Device() returns the screendevice on which the gc was last activated.
   457 */
   458 void CTMulScreens::TestDeviceL()
   459 	{
   460 	RWindow fstWin(iRws);
   461 	User::LeaveIfError(fstWin.Construct(iFstWinGp,ENullWsHandle));
   462 	CleanupClosePushL(fstWin);
   463 	fstWin.Activate();
   464 
   465 	CWindowGc* gc=new (ELeave) CWindowGc(iFstScreenDevice);
   466 	User::LeaveIfError(gc->Construct());
   467 	CleanupStack::PushL(gc);
   468 	gc->Activate(fstWin);
   469 
   470 	TEST((CWsScreenDevice*)gc->Device()==iFstScreenDevice);
   471 	gc->Deactivate();
   472 
   473 	if(KSndScreenNo<iNumScreens)
   474 		{
   475 		RWindow sndWin(iRws);
   476 		User::LeaveIfError(sndWin.Construct(iSndWinGp,ENullWsHandle));
   477 		CleanupClosePushL(sndWin);
   478 		sndWin.Activate();
   479 
   480 		gc->Activate(sndWin);
   481 		TEST((CWsScreenDevice*)gc->Device()==iSndScreenDevice);
   482 		gc->Deactivate();
   483 		CleanupStack::PopAndDestroy();
   484 		}
   485 
   486 	CleanupStack::PopAndDestroy(2,&fstWin);
   487 	}
   488 
   489 /**
   490    @SYMTestCaseID          GRAPHICS-WSERV-0034
   491 
   492    @SYMPREQ					PREQ1227
   493 
   494    @SYMREQ					REQ5541
   495 
   496    @SYMTestCaseDesc			Test that the order of creating a screen device and window group does not matter.
   497 
   498    @SYMTestPriority			High
   499 
   500    @SYMTestStatus			Implemented
   501 
   502    @SYMTestActions			Create a window group before creating the screen device. Create a graphics context and call activate on it.
   503    							API Calls:\n
   504    							TInt RWindowGroup::Construct(TUint32 aClientHandle)
   505    							TInt CWsScreenDevice::Construct()
   506     						void CWindowGc::Activate(RDrawableWindow &aDevice);
   507    							void CWindowGc::Deactivate();
   508    							TInt RWindow::Construct(const RWindowTreeNode &parent,TUint32 aHandle);
   509 
   510    @SYMTestExpectedResults	 The test code does not panic with EWservPanicGroupWinScreenDeviceDeleted
   511 */
   512 void CTMulScreens::TestInitaliseScreenDeviceL()
   513 	{
   514 	RWsSession rws1;
   515 	User::LeaveIfError(rws1.Connect());
   516 	CleanupClosePushL(rws1);
   517 
   518 	RWindowGroup gw1(rws1);
   519 	User::LeaveIfError(gw1.Construct(ENullWsHandle));
   520 	CleanupClosePushL(gw1);
   521 
   522 	CWsScreenDevice* screen1 = new (ELeave) CWsScreenDevice(rws1);
   523 	User::LeaveIfError(screen1->Construct());
   524 	CleanupStack::PushL(screen1);
   525 
   526 	RWindow win1(rws1);
   527 	User::LeaveIfError(win1.Construct(gw1,ETrue));
   528 	CleanupClosePushL(win1);
   529 	win1.Activate();
   530 
   531 	CWindowGc* gc=new (ELeave) CWindowGc(screen1);
   532 	User::LeaveIfError(gc->Construct());
   533 	CleanupStack::PushL(gc);
   534 	gc->Activate(win1);
   535 
   536 	CleanupStack::PopAndDestroy(5,&rws1);
   537 	}
   538 
   539 /**
   540 @SYMTestCaseID		GRAPHICS-WSERV-0492
   541 
   542 @SYMDEF             PDEF126432
   543 
   544 @SYMTestCaseDesc    Test the screen number that a window is located on
   545 
   546 @SYMTestPriority    Medium
   547 
   548 @SYMTestStatus      Implemented
   549 
   550 @SYMTestActions     Create two windows on two screens respectively 
   551 					and check the screen number that each window is located on
   552 
   553 @SYMTestExpectedResults The screen numbers should match the expected ones
   554 */
   555 void CTMulScreens::TestScreenNumbersOfWindowsL()
   556 	{
   557 	// First screen
   558 	RWindow fstWin(iRws);
   559 	CleanupClosePushL(fstWin);
   560 	TRAPD(err,fstWin.Construct(iFstWinGp,ENullWsHandle));
   561 	TEST(err==KErrNone);
   562 	if(err==KErrNone)
   563 		{
   564 		fstWin.Activate();
   565 		iRws.Flush();
   566 		}
   567 	TEST(fstWin.ScreenNumber()==KFstScreenNo);
   568 	CleanupStack::PopAndDestroy();//fstWin	
   569 	
   570 	// Second screen
   571 	if(KSndScreenNo<iNumScreens)
   572 		{
   573 		RWindow sndWin(iRws);
   574 		CleanupClosePushL(sndWin);
   575 		TRAP(err,sndWin.Construct(iSndWinGp,ENullWsHandle));
   576 		TEST(err==KErrNone);
   577 		if(err==KErrNone)
   578 			{
   579 			sndWin.Activate(); 
   580 			iRws.Flush();
   581 			}
   582 		TEST(sndWin.ScreenNumber()==KSndScreenNo);
   583 		CleanupStack::PopAndDestroy(); //sndWin
   584 		}
   585 	}	
   586 	
   587 void CTMulScreens::RunTestCaseL(TInt aCurTestCase)
   588 	{
   589 	_LIT(KTest0,"Create a window group on each screen");
   590 	_LIT(KTest1,"Create a blank window on each screen");
   591 	_LIT(KTest2,"Get focus window");
   592 	_LIT(KTest3,"Get default owning window");
   593 	_LIT(KTest4,"Change background colour");
   594 	_LIT(KTest5,"Change shadow vector");
   595 	_LIT(KTest6,"Panic Tests");
   596 	_LIT(KTest7,"Test device pointer returned by GC");
   597 	_LIT(KTest8,"Initialise ScreenDevice");
   598 	_LIT(KTest9,"Test screen numbers that windows are located on");
   599 	((CTMulScreensStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
   600 
   601 	switch(aCurTestCase)
   602 		{
   603 		case 1:
   604 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0383"));
   605 			INFO_PRINTF1(KTest0);
   606 			TestCreateGroupWindowsL();
   607 			break;
   608 		case 2:
   609 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0384"));
   610 			INFO_PRINTF1(KTest1);
   611 			TestCreateBlankWindowsL();
   612 			break;
   613 		case 3:
   614 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0385"));
   615 			INFO_PRINTF1(KTest2);
   616 			TestGetFocusWindow();
   617 		case 4:
   618 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0386"));
   619 			INFO_PRINTF1(KTest3);
   620 			TestGetDefaultOwningWindow();
   621 			break;
   622 		case 5:
   623 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0387"));
   624 			INFO_PRINTF1(KTest4);
   625 			TestSetBackgroundColour();
   626 			break;
   627 		case 6:
   628 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0388"));
   629 			INFO_PRINTF1(KTest5);
   630 			TestSetShadowVector();
   631 			break;
   632 		case 7:
   633 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0389"));
   634 			INFO_PRINTF1(KTest6);
   635 			TestPanicsL();
   636 			break;
   637 		case 8:
   638 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0390"));
   639 			INFO_PRINTF1(KTest7);
   640 			TestDeviceL();
   641 			break;
   642 		case 9:
   643 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0034"));
   644 			INFO_PRINTF1(KTest8);
   645 			TestInitaliseScreenDeviceL();
   646 			break;
   647 		case 10:
   648 			((CTMulScreensStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0492"));
   649 			INFO_PRINTF1(KTest9);
   650 			TestScreenNumbersOfWindowsL();
   651 		case 11:
   652 			((CTMulScreensStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
   653 			((CTMulScreensStep*)iStep)->CloseTMSGraphicsStep();
   654 			INFO_PRINTF1(_L("All tests completed.\n"));
   655 			TestComplete();
   656 			break;
   657 		default:
   658 			((CTMulScreensStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
   659 			((CTMulScreensStep*)iStep)->CloseTMSGraphicsStep();
   660 			INFO_PRINTF1(_L("CTMulScreens::RunTestCaseL default case\n"));
   661 			break;
   662 		}
   663 	((CTMulScreensStep*)iStep)->RecordTestResultL();
   664 	}
   665 
   666 __WS_CONSTRUCT_STEP__(MulScreens)