windowing/windowserver/tauto/TSPRITE.CPP
changeset 116 171fae344dd4
parent 103 2717213c588a
--- a/windowing/windowserver/tauto/TSPRITE.CPP	Tue Jun 22 15:21:29 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,996 +0,0 @@
-// 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:
-//
-
-/**
- @file
- @test
- @internalComponent - Internal Symbian test code
-*/
-
-#include "TSPRITE.H"
-
-CTTSprite::CTTSprite(CTestStep* aStep):
-	CTWsGraphicsBase(aStep)
-	{
-	INFO_PRINTF1(_L("Testing TSprite functions"));
-	}
-
-void CTTSprite::SetUpMember(TSpriteMember &aMember)
-	{
-	aMember.iMaskBitmap=NULL;
-	aMember.iInvertMask=EFalse;
-	aMember.iDrawMode=CGraphicsContext::EDrawModePEN;
-	aMember.iOffset=TPoint();
-	aMember.iInterval=TTimeIntervalMicroSeconds32(0);
-	aMember.iBitmap=&iBitmap;
-	}
-
-void CTTSprite::SetUpPointerCursorL(RWsPointerCursor &aCursor, RWsSession &aSession)
-	{
-	aCursor=RWsPointerCursor(aSession);
-	TSpriteMember member;
-	SetUpMember(member);
-	User::LeaveIfError(aCursor.Construct(0));
-	User::LeaveIfError(aCursor.AppendMember(member));
-	User::LeaveIfError(aCursor.Activate());
-	}
-
-void CTTSprite::SetUpSpriteL(RWsSprite &aSprite, RWsSession &aSession, RWindowTreeNode &aWindow,TInt aFlags/*=0*/)
-	{
-	aSprite=RWsSprite(aSession);
-	User::LeaveIfError(aSprite.Construct(aWindow,TPoint(),aFlags));
-	TSpriteMember member;
-	SetUpMember(member);
-	User::LeaveIfError(aSprite.AppendMember(member));
-	User::LeaveIfError(aSprite.Activate());
-	}
-
-void CTTSprite::ConstructL()
-	{
-  	User::LeaveIfError(iBitmap.Load(TEST_BITMAP_NAME,0));
-	}
-	
-CTTSprite::~CTTSprite()
-	{
-	}
-
-/**
-@SYMTestCaseID		GRAPHICS-WSERV-0018
-
-@SYMDEF  			DEF081259
-
-@SYMTestCaseDesc    General cursor tests involving a sprite
-
-@SYMTestPriority    High
-
-@SYMTestStatus      Implemented
-
-@SYMTestActions     Carries out cursor and window tests before updating
-					a cursor's member with a sprite
-
-@SYMTestExpectedResults When the cursor member is update returns KErrArgument
-*/
-
-void CTTSprite::GeneralTestsL()
-	{
-//
-// Close cursor while still active on a window
-//
-	
-	RWindow win(TheClient->iWs);
-	win.Construct(*TheClient->iGroup->GroupWin(),1);
-	win.Activate();
-	SetUpPointerCursorL(iCursor1,TheClient->iWs);
-	win.SetCustomPointerCursor(iCursor1);
-	iCursor1.Close();
-//
-// Close window while cursor active on it
-//
-	SetUpPointerCursorL(iCursor1,TheClient->iWs);
-	win.SetCustomPointerCursor(iCursor1);
-	win.Close();
-	iCursor1.Close();
-	
-//
-// Close session with:
-// An open cursor active on a window & A closed cursor active on another window
-//
-	RWsSession ws;
-	User::LeaveIfError(ws.Connect());
-	// use correct screen
-	//
-	ws.SetFocusScreen(iTest->iScreenNumber);
-	CWsScreenDevice* screen = new (ELeave) CWsScreenDevice(ws);
-	CleanupStack::PushL(screen);
-	User::LeaveIfError(screen->Construct(0));
-
-	RWindowGroup group(ws);
-	User::LeaveIfError(group.Construct(123));
-	group.EnableReceiptOfFocus(EFalse);	// Stop auto group switching on close
-	RWindow win2(ws);
-	User::LeaveIfError(win2.Construct(group, 1));
-	win2.Activate();
-	RWindow win3(ws);
-	User::LeaveIfError(win3.Construct(group, 2));
-	win3.Activate();
-//
-	SetUpPointerCursorL(iCursor1,ws);
-	SetUpPointerCursorL(iCursor2,ws);
-	win2.SetCustomPointerCursor(iCursor1);
-	win3.SetCustomPointerCursor(iCursor2);
-//
-	TSpriteMember member;
-	member.iBitmap=member.iMaskBitmap=NULL;
-	TInt err = iCursor1.UpdateMember(9999,member);
-	TEST(err==KErrArgument);
-	if (err!=KErrArgument)
-		INFO_PRINTF3(_L("iCursor1.UpdateMember(9999,member) return value  - Expected: %d, Actual: %d"), KErrArgument, err);
-
-	iCursor1.Close();
-
-	CleanupStack::PopAndDestroy(screen);	
-	ws.Close();
-	}
-
-/**
-@SYMTestCaseID		GRAPHICS-WSERV-0019
-
-@SYMDEF  			DEF081259
-
-@SYMTestCaseDesc    Construct a sprite in a group window
-
-@SYMTestPriority    High
-
-@SYMTestStatus      Implemented
-
-@SYMTestActions     Creates a sprite in a group window
-
-@SYMTestExpectedResults The sprite is created without error
-*/
-void CTTSprite::GroupWindowSpritesL()
-	{
-	RWsSprite sprite1;
-	RWsSprite sprite2;
-	SetUpSpriteL(sprite1,TheClient->iWs,*TheClient->iGroup->GroupWin());
-	SetUpSpriteL(sprite2,TheClient->iWs,*TheClient->iGroup->GroupWin());
-	TheClient->iWs.Flush();
-	sprite2.Close();
-	sprite1.Close();
-	}
-
-/**
-@SYMTestCaseID		GRAPHICS-WSERV-0020
-
-@SYMDEF  			DEF081259
-
-@SYMTestCaseDesc    Constructs a number of different sprites in different windows
-
-@SYMTestPriority    High
-
-@SYMTestStatus      Implemented
-
-@SYMTestActions     Creates many sprites in three different windows and the checks
-					the sprites can be manipulated
-
-@SYMTestExpectedResults The sprite are created and manipulated without error
-*/
-#define NUM_SPRITES 8
-void CTTSprite::LotsSpritesL()
-	{
-	CTBlankWindow* win=new(ELeave) CTBlankWindow();
-	CTBlankWindow* win2=new(ELeave) CTBlankWindow();
-	TSize size(100,120);
-	win->ConstructL(*TheClient->iGroup);
-	win2->ConstructL(*win);
-	win2->SetExt(TPoint(100,100),size);
-	win2->SetColor(TRgb::Gray4(2));
-	RWindowBase window=*win->BaseWin();
-	RWindowBase window2=*win2->BaseWin();
-	window.Activate();
-	window2.Activate();
-	RWsSprite sprite[NUM_SPRITES];
-	TInt ii;
-	//TheClient->iWs.SetAutoFlush(ETrue);
-	for (ii=0;ii<NUM_SPRITES;ii++)
-		SetUpSpriteL(sprite[ii],TheClient->iWs,window);
-	sprite[4].Close();
-	sprite[2].SetPosition(TPoint(20,20));
-	sprite[0].Close();
-	win2->SetExt(TPoint(80,100),size);
-	sprite[6].SetPosition(TPoint(60,120));
-	sprite[7].Close();
-	sprite[5].SetPosition(TPoint(100,120));
-	sprite[3].Close();
-	SetUpSpriteL(sprite[7],TheClient->iWs,window);
-	sprite[7].SetPosition(TPoint(80,150));
-	sprite[1].Close();
-	win2->SetExt(TPoint(60,110),size);
-	sprite[5].SetPosition(TPoint(50,40));
-	sprite[7].Close();
-	SetUpSpriteL(sprite[0],TheClient->iWs,window);
-	sprite[0].SetPosition(TPoint(55,65));
-	sprite[6].Close();
-	win2->SetExt(TPoint(40,90),size);
-	sprite[2].SetPosition(TPoint(80,45));
-	sprite[5].Close();
-	sprite[0].SetPosition(TPoint(90,60));
-	sprite[2].Close();
-	SetUpSpriteL(sprite[2],TheClient->iWs,window);
-	sprite[2].SetPosition(TPoint(70,80));
-	sprite[0].Close();
-	win2->SetExt(TPoint(20,80),size);
-	sprite[2].SetPosition(TPoint(600,200));
-	sprite[2].Close();
-	SetUpSpriteL(sprite[0],TheClient->iWs,window2,ESpriteFlash);
-	sprite[0].SetPosition(TPoint(0,25));
-	SetUpSpriteL(sprite[1],TheClient->iWs,window2,ESpriteFlash);
-	SetUpSpriteL(sprite[2],TheClient->iWs,window2,ESpriteFlash);
-	sprite[2].SetPosition(TPoint(25,0));
-	win2->SetExt(TPoint(40,70),size);
-	CTBlankWindow* win3=new(ELeave) CTBlankWindow();
-	win3->ConstructL(*TheClient->iGroup);
-	win3->SetExt(TPoint(30,60),TSize(30,30));
-	win3->SetColor(TRgb::Gray4(1));
-	win3->BaseWin()->SetShadowHeight(10);
-	win3->BaseWin()->Activate();
-	User::After(1000000);		//1 sec so sprites has time to flash
-	delete win2;
-	delete win;
-	delete win3;
-	sprite[0].Close();
-	sprite[1].Close();
-	sprite[2].Close();
-	}
-
-/**
-@SYMTestCaseID		GRAPHICS-WSERV-0021
-
-@SYMDEF  			DEF081259
-
-@SYMTestCaseDesc    General PointerCursor Tests
-
-@SYMTestPriority    High
-
-@SYMTestStatus      Implemented
-
-@SYMTestActions     Exercise the different pointercursor methods of a Window Server Session
-
-@SYMTestExpectedResults The methods are called without error
-*/
-void CTTSprite::GeneralPointerCursor()
-	{
-	if (!TestBase()->ConfigurationSupportsPointerEventTesting())
-	    {
-	    INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing"));
-	    return;
-	    }
-	TInt currentSMode=TheClient->iScreen->CurrentScreenMode();
-	TInt altSMode=-1;
-	if (TheClient->iScreen->NumScreenModes()>1)
-		altSMode=(currentSMode==1?0:1);
-	RWsSession &ws=TheClient->iWs;
-	TRect rect=ws.PointerCursorArea();
-	TRect testRect1(TPoint(rect.iBr.iX/4,rect.iBr.iY/4),TSize(rect.Width()/2,rect.Height()/2));
-	TRect testRect2(TPoint(rect.iBr.iX/3,rect.iBr.iY/3),TSize(2*rect.Width()/3,2*rect.Height()/3));
-	ws.SetPointerCursorArea(testRect1);
-	TEST(ws.PointerCursorArea()==testRect1);
-	TEST(ws.PointerCursorArea(currentSMode)==testRect1);
-	ws.SetPointerCursorArea(currentSMode,testRect2);
-	TEST(ws.PointerCursorArea()==testRect2);
-	TEST(ws.PointerCursorArea(currentSMode)==testRect2);
-	ws.SetPointerCursorArea(rect);
-	TEST(ws.PointerCursorArea()==rect);
-	
-	if (altSMode>=0)
-		{
-		rect=ws.PointerCursorArea(altSMode);
-		testRect1.iTl.iX=rect.iBr.iX/4;
-		testRect1.iTl.iY=rect.iBr.iY/4;
-		testRect1.SetWidth(rect.Width()/2);
-		testRect1.SetHeight(rect.Height()/2);
-		ws.SetPointerCursorArea(altSMode,testRect1);
-		TEST(ws.PointerCursorArea(altSMode)==testRect1);
-		ws.SetPointerCursorArea(altSMode,rect);
-		TEST(ws.PointerCursorArea(altSMode)==rect);
-		}
-	TPointerCursorMode currentMode=ws.PointerCursorMode();
-	TInt ii;
-	TInt err1;
-	for(ii=EPointerCursorFirstMode;ii<=EPointerCursorLastMode;ii++)
-		{	
-		ws.SetPointerCursorMode(STATIC_CAST(TPointerCursorMode,ii));
-		err1 = ws.PointerCursorMode();
-		TEST(ii==err1);
-		if (ii!=err1)
-			INFO_PRINTF3(_L("ws.PointerCursorMode() return value  - Expected: %d, Actual: %d"), ii, err1);		
-		}
-	ws.SetPointerCursorMode(currentMode);
-	TEST(currentMode==ws.PointerCursorMode());
-	TPoint point1(10,12);
-	TPoint point2(24,20);
-	ws.PointerCursorPosition();
-	ws.SetPointerCursorPosition(point1);
-	TEST(ws.PointerCursorPosition()==point1);
-	ws.SetPointerCursorPosition(point2);
-	TEST(ws.PointerCursorPosition()==point2);
-	}
-
-
-/**
-@SYMTestCaseID      GRAPHICS-WSERV-0498
-
-@SYMDEF             PDEF137614 - Propagation to TB92
-
-@SYMTestCaseDesc    Test activating a pointer cursor
-
-@SYMTestPriority    High
-
-@SYMTestStatus      Implemented
-
-@SYMTestActions     Construct and activate a pointer cursor. 
-                    Check it is visible.
-                    Deactivate it
-                    Check it is removed
-                    
-
-@SYMTestExpectedResults 
-                    The pointer cursor bitmp should be visible when activated and removed when deactivated.
-*/
-
-void CTTSprite::PointerCursorVisibleL()
-    {
-    if (!TestBase()->ConfigurationSupportsPointerEventTesting())
-        {
-        INFO_PRINTF1(_L("Test skipped because config does not support pointer event testing"));
-        return;
-        }
-    
-    // The pointer events need time to have an affect on the wserv
-    static const TInt eventPropagationDelay = 100 * 1000; // 100 ms
-    
-    TInt screenNumber = TheClient->iScreen->GetScreenNumber();
-    
-    if(screenNumber != 0) // pointer events only supported on emulator screen 0
-        {
-        LOG_MESSAGE(_L("Pointer Cursor Visible only runs on screen 0"));
-        return;
-        }
-    
-    // set up objects used in test
-    // 50x50 red rectangle colour 24
-    CFbsBitmap bitmap;
-    User::LeaveIfError(bitmap.Load(TEST_BITMAP_NAME, 8));
-    
-    TSize bmSize = bitmap.SizeInPixels();
-    TPoint bmSample = TPoint(bmSize.iWidth / 2, bmSize.iHeight / 2);
-    TRgb bmColour;
-    bitmap.GetPixel(bmColour, bmSample);
-    TEST(bmColour == KRgbRed);
-
-    // single window, size of screen
-    RWindow win(TheClient->iWs);
-    User::LeaveIfError(win.Construct(*TheClient->iGroup->GroupWin(),1));
-    win.Activate();
-
-    // setup cursor mode
-    TheClient->iWs.SetPointerCursorMode(EPointerCursorWindow);
-    
-    // setup cursor to contain single 50x50 red bitmap
-    RWsPointerCursor iCursor1 = RWsPointerCursor(TheClient->iWs);
-    TSpriteMember member;
-    SetUpMember(member);
-    member.iBitmap=&bitmap;
-    User::LeaveIfError(iCursor1.Construct(0));
-    User::LeaveIfError(iCursor1.AppendMember(member));
-    User::LeaveIfError(iCursor1.Activate());
-    win.SetCustomPointerCursor(iCursor1);
-    iCursor1.UpdateMember(0);
-
-    // draw a green rect, size of screen as defined background and wait till it is rendered
-    win.BeginRedraw();
-    TheGc->Activate(win);
-    TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
-    TheGc->SetBrushColor(KRgbGreen);
-    TSize wSize = win.Size();
-    TheGc->DrawRect(TRect(TPoint(0,0), wSize));
-    TheGc->Deactivate();
-    win.EndRedraw();
-    TheClient->iWs.Finish();
-    
-    // #### do test ####
-    // define locations of simulated pointer events and sample positions of where we expect to see the cursor
-    // The cursor will be moved and a check will be made to see if this has actually happened
-    
-    TPoint pos1(wSize.iWidth / 2, wSize.iHeight / 2); // top left of cursor at centre screen
-    TPoint sample1(pos1 + bmSample); // centre of sprite at pos1
-    TPoint pos2 = pos1 - bmSize; // bottom right of cursor at centre screen
-    TPoint sample2 = pos2 + bmSample;  // centre of sprite at pos2
-
-    TRgb pixel;
-    
-    // check initial state of screen at both sample positions
-    TheClient->iScreen->GetPixel(pixel, sample1);
-    TEST(pixel == KRgbGreen);
-
-    TheClient->iScreen->GetPixel(pixel, sample2);
-    TEST(pixel == KRgbGreen);
-    
-    TRawEvent e; // to simulate pointer events
-
-    // simulate button 1 down event at pos1
-    e.Set(TRawEvent::EButton1Down, pos1.iX, pos1.iY);
-    e.SetDeviceNumber(screenNumber);
-    UserSvr::AddEvent(e);
-
-    User::After(eventPropagationDelay);
-    
-    // check red cursor visible on top of background
-    TheClient->iScreen->GetPixel(pixel, sample1);
-    TEST(pixel == KRgbRed);
-    
-    // simulate button 1 up event
-    e.Set(TRawEvent::EButton1Up, pos1.iX, pos1.iY);
-    UserSvr::AddEvent(e);
-    User::After(eventPropagationDelay);
-    
-    // Move cursor away to pos2 
-    e.Set(TRawEvent::EButton1Down, pos2.iX, pos2.iY);
-    e.SetDeviceNumber(screenNumber);
-    UserSvr::AddEvent(e);
-    
-    User::After(eventPropagationDelay);
-    
-    // check cursor has left this position ...
-    TheClient->iScreen->GetPixel(pixel, sample1);
-    TEST(pixel == KRgbGreen);
-    // and arrived at the correct place
-    TheClient->iScreen->GetPixel(pixel, sample2);
-    TEST(pixel == KRgbRed);
-
-    // simulate button 1 up event
-    e.Set(TRawEvent::EButton1Up, pos2.iX, pos2.iY);
-    UserSvr::AddEvent(e);
-    User::After(eventPropagationDelay);
-    
-    // remove the cursor
-    win.ClearPointerCursor();
-    User::After(eventPropagationDelay);
-    
-    // check it has gone
-    TheClient->iScreen->GetPixel(pixel, sample2);
-    TEST(pixel == KRgbGreen);
-    
-    // #### clean up ####
-    iCursor1.Close();
-    win.Close();
-    }
-
-
-/**
-	@SYMTestCaseID GRAPHICS-CODEBASE-WSERV-0053-0001
-  
-	@SYMPREQ PGM027
-  
-	@SYMTestCaseDesc Tests RWsPointerCursor::UpdateMember APIs. 
-   
-	@SYMTestPriority 1 
-  
-	@SYMTestStatus Implemented
-   
-	@SYMTestActions This test calls RWsPointerCursor::UpdateMember
-		
-	@SYMTestExpectedResults Should run properly with out any Panics.
-
-  */
-void CTTSprite::SpriteUpdateMemberTestsL()
-	{
-	RWsPointerCursor iCursor1;
-	
-	CFbsBitmap bitmap;
-	bitmap.Load(TEST_BITMAP_NAME,0);
-		
-	RWindow win(TheClient->iWs);
-	win.Construct(*TheClient->iGroup->GroupWin(),1);
-	win.Activate();
-
-	iCursor1=RWsPointerCursor(TheClient->iWs);
-	TSpriteMember member;
-	SetUpMember(member);
-	member.iBitmap=&bitmap;
-	User::LeaveIfError(iCursor1.Construct(0));
-	User::LeaveIfError(iCursor1.AppendMember(member));
-	User::LeaveIfError(iCursor1.Activate());
-	win.SetCustomPointerCursor(iCursor1);
-	iCursor1.UpdateMember(0);
-	
-	RWsPointerCursor iCursor2;
-	bitmap.Load(TEST_NEW_BITMAP_NAME,0);
-	iCursor2=RWsPointerCursor(TheClient->iWs);
-	User::LeaveIfError(iCursor2.Construct(0));
-	User::LeaveIfError(iCursor2.AppendMember(member));
-	User::LeaveIfError(iCursor2.Activate());
-	win.SetCustomPointerCursor(iCursor2);
-	iCursor2.UpdateMember(1);
-	
-	iCursor1.Close();
-	iCursor2.Close();
-	win.Close();
-	}
-
-/**
-	@SYMTestCaseID GRAPHICS-CODEBASE-WSERV-0054-0001
-  
-	@SYMPREQ PGM027
-  
-	@SYMTestCaseDesc Negative Tests RWsSpriteBase::UpdateMember API. 
-   
-	@SYMTestPriority 1 
-  
-	@SYMTestStatus Implemented
-   
-	@SYMTestActions This test calls RWsPointerCursor::UpdateMember
-		
-	@SYMTestExpectedResults Should run properly with out any Panics.
-
- */
-void CTTSprite::SpriteUpdateMemberNegTestsL()
-	{
-	RWsPointerCursor iCursor1;
-	
-	CFbsBitmap bitmap;
-	bitmap.Load(TEST_BITMAP_NAME,0);
-		
-	RWindow win(TheClient->iWs);
-	win.Construct(*TheClient->iGroup->GroupWin(),1);
-	win.Activate();
-
-	iCursor1=RWsPointerCursor(TheClient->iWs);
-	TSpriteMember member;
-	SetUpMember(member);
-	member.iBitmap=&bitmap;
-	User::LeaveIfError(iCursor1.Construct(0));
-	User::LeaveIfError(iCursor1.AppendMember(member));
-	User::LeaveIfError(iCursor1.Activate());
-	win.SetCustomPointerCursor(iCursor1);
-	iCursor1.UpdateMember(-100);
-	
-	RWsPointerCursor iCursor2;
-	bitmap.Load(TEST_NEW_BITMAP_NAME,0);
-	iCursor2=RWsPointerCursor(TheClient->iWs);
-	User::LeaveIfError(iCursor2.Construct(0));
-	User::LeaveIfError(iCursor2.AppendMember(member));
-	User::LeaveIfError(iCursor2.Activate());
-	win.SetCustomPointerCursor(iCursor2);
-	iCursor2.UpdateMember(10000);
-	
-	iCursor1.Close();
-	iCursor2.Close();
-	win.Close();
-	}
-
-/**
-	@SYMTestCaseID GRAPHICS-CODEBASE-WSERV-0055-0001
-  
-	@SYMPREQ PGM027
-  
-	@SYMTestCaseDesc Tests FindWindowGroupIdentifier API. 
-   
-	@SYMTestPriority 1 
-  
-	@SYMTestStatus Implemented
-   
-	@SYMTestActions Create windows session and call FindWindowGroupIdentifier \n
-	with different thread Id's both with valid thread ids and in valid thread id's.
-	
-	@SYMTestExpectedResults Should run properly.
-
- */	
-void CTTSprite::FindWindowGroupThreadTestsL()	
-	{
-	RThread proc;
-	TInt ident;
-	TUint64 id=proc.Id();
-	RWsSession ws1;
-	User::LeaveIfError(ws1.Connect());
-	CleanupClosePushL(ws1);
-	//Positive test for FindWindowGroupIdentifier
-	ident=ws1.FindWindowGroupIdentifier(0,id);
-	TEST(ws1.SetWindowGroupOrdinalPosition(ident,0)==KErrNone);
-	TEST(ws1.SetWindowGroupOrdinalPosition(ident,1)==KErrNone);
-	//Negative test for FindWindowGroupIdentifier
-    TInt ret=ws1.FindWindowGroupIdentifier(0,id+200);
-	TEST(ret==KErrNotFound);
-	#if defined __WINS__ || defined __WINSCW__
-	ret=ws1.FindWindowGroupIdentifier(0,-200);
-	TEST(ret==KErrNotFound);
-	#endif//defined __WINS__ || defined __WINSCW__
-	CleanupStack::PopAndDestroy(1, &ws1);
-	ws1.Close();
-	}	
-
-/**
-@SYMTestCaseID		GRAPHICS-WSERV-0462
-
-@SYMDEF  			PDEF114190
-
-@SYMTestCaseDesc    Test sprite list cleanup when a window is deleted in low memory conditions
-
-@SYMTestPriority    High
-
-@SYMTestStatus      Implemented
-
-@SYMTestActions     Have a loop which increases the number of allocations in the server thread before failure;
-					Within the loop:
-					1) Create a parent window and a child window of the parent;
-					2) Create a sprite on the child window; 
-					3) Delete the parent window only, but not the child window; 
-					4) Create a testWindow and do redraw on this window; 
-					5) Do redraw on the testWindow. This testWindow's redraw will force checking the sprite list. 
-					This would panic the client thread due to this defect because the sprite on the orphaned 
-					window (which is the previous child window) is still in the sprite list;
-					6) Delete all the windows involved.
-
-@SYMTestExpectedResults The sprite should be disabled when a window is deleted;
-						The client thread should not be panic'd.
-						The test should pass.
-*/
-void CTTSprite::SpriteOnWindowOrphanedTestsL()
-	{
-	TInt handles = 344;
-	TInt loop = 0;
-	TInt allocFailRate = 0;
-	TInt err = KErrNone;
-
-	CFbsBitmap* bitmap = new(ELeave) CFbsBitmap;
-	CleanupStack::PushL(bitmap);
-	User::LeaveIfError(bitmap->Create(TSize(500, 500), EColor16MU));
-	TSpriteMember spritemember;
-	spritemember.iBitmap = bitmap;
-	spritemember.iMaskBitmap = NULL;	
-	
-	RWindowGroup group(TheClient->iWs);
-	RWindow parent1(TheClient->iWs);
-	RWindow child1(TheClient->iWs);
-	RWindow testWindow(TheClient->iWs);
-	RWsSprite sprite(TheClient->iWs);
-	
-	while (loop < 5)
-		{
-		TRect mainRect(TPoint(0,0), TSize(500,500));
-		err = group.Construct(++handles, EFalse);	
-		if (err == KErrNone)
-			{
-			TheClient->iWs.HeapSetFail(RHeap::EDeterministic, allocFailRate);
-
-			//Create parent 1
-			err = parent1.Construct(group,++handles);
-			if (err == KErrNone)
-				{
-				parent1.SetExtent(mainRect.iTl, mainRect.Size());
-				parent1.EnableRedrawStore(ETrue);
-				parent1.Activate();
-				}			
-			}
-		
-		//Create child 1
-		if (err == KErrNone)
-			{
-			TRect childRect(TPoint (10, 10), TSize (200, 150));
-			err = child1.Construct(parent1,++handles);
-			if (err == KErrNone)
-				{
-				child1.SetExtent(childRect.iTl, childRect.Size());
-				child1.SetBackgroundColor(TRgb(128,100,255,20));
-				child1.Activate();
-				}
-			}
-		
-		//Add sprite to child 1
-		if (err == KErrNone) 
-			{
-			err = sprite.Construct(child1,TPoint(10,10), 0);
-			if (err == KErrNone)
-				{
-				err = sprite.AppendMember(spritemember);
-				if (err == KErrNone)
-					err = sprite.Activate();	
-				}
-			}
-
-		//Only delete parent 1, but not child 1	
-		parent1.Close();		
-
-		if (err == KErrNone) 
-			{
-			TRect testRect(TPoint(10, 30), TSize(200, 150));
-			//Create testWindow
-			err = testWindow.Construct(group,++handles);
-			if (err == KErrNone)
-				{
-				testWindow.SetExtent(testRect.iTl, testRect.Size());
-				testWindow.SetBackgroundColor(TRgb(128,100,255,20));
-				testWindow.EnableRedrawStore(ETrue);
-				testWindow.Activate();
-				testWindow.BeginRedraw();
-				testWindow.EndRedraw();	
-				TheClient->Flush();			
-				}
-			}
-		TheClient->iWs.HeapSetFail(RAllocator::ENone, 0);
-
-		sprite.Close();
-		child1.Close();
-		testWindow.Close();
-		group.Close();		
-		++allocFailRate;
-		loop = (err == KErrNone) ? loop + 1 : 0;
-		}
-	CleanupStack::PopAndDestroy(bitmap);
-	}
-void CTTSprite::ResizeMemberL()
-	{
-#ifndef __WINS__
-	CTBlankWindow* win=new(ELeave) CTBlankWindow();
-	CleanupStack::PushL(win);
-	win->ConstructL(*TheClient->iGroup);
-	win->SetExt(TPoint(),TSize(640,240));
-	RWindowBase& window=*win->BaseWin();
-	window.Activate();
-	RWsSprite sprite(TheClient->iWs);
-	CleanupClosePushL(sprite);
-	User::LeaveIfError(sprite.Construct(window,TPoint(),0));
-	TSpriteMember member;
-	member.iMaskBitmap=NULL;
-	member.iInvertMask=EFalse;
-	member.iDrawMode=CGraphicsContext::EDrawModePEN;
-	member.iOffset=TPoint();
-	member.iInterval=TTimeIntervalMicroSeconds32(250000);
-	member.iBitmap=&iBitmap;
-	User::LeaveIfError(sprite.AppendMember(member));
-	User::LeaveIfError(sprite.AppendMember(member));
-	User::LeaveIfError(sprite.Activate());
-	User::After(1000000); // // Interval is 1 sec.
-	User::LeaveIfError(iBitmap.Resize(iBitmap.SizeInPixels() + TSize(100,100)));
-	User::After(1000000);  // Interval is 1 sec.
-	CleanupStack::PopAndDestroy(&sprite);
-	CleanupStack::PopAndDestroy(win);
-#endif // __WINS__
-	}
-
-
-void CTTSprite::SetUpSpriteL(RWsSprite &aSprite, RWindowTreeNode &aWindow,TPoint aPoint, TSpriteMember aMember, TInt aFlags/*=0*/)
-	{
-	User::LeaveIfError(aSprite.Construct(aWindow,aPoint,aFlags));
-	User::LeaveIfError(aSprite.AppendMember(aMember));
-	User::LeaveIfError(aSprite.Activate());
-	}
-/**
-@SYMTestCaseID		GRAPHICS-WSERV-00-0001
-
-@SYMDEF  			PDEF117721
-
-@SYMTestCaseDesc    Test Screenrotation does not cause panic by sprite with NULL bitmap and NULL maskbitmap
-
-@SYMTestPriority    High
-
-@SYMTestStatus      Implemented
-
-@SYMTestActions     Defines two sprites and one with Null iBitmap and Null iMaskBitmap, then rotate the screen to 90 degrees
-
-@SYMTestExpectedResults the screen rotation will not cause wserv a panic
-*/
-void CTTSprite::RotateNullSpriteL()
-	{
-	if (TheClient->iScreen->NumScreenModes() < 2)
-		{
-		LOG_MESSAGE(_L("WARNING: Unable to rotate screen"));
-		return;
-		}
-// Sprite Members		
-	TSpriteMember spriteMember1,spriteMember2;
-	SetUpMember(spriteMember1);
-	SetUpMember(spriteMember2);
-	spriteMember2.iBitmap = NULL;
-	
-// Create windows
-	RWindowGroup group(TheClient->iWs);
-	User::LeaveIfError(group.Construct(ENullWsHandle,EFalse));	//Creates a Group Window
-	CleanupClosePushL(group);
-	RBlankWindow win(TheClient->iWs);
-	User::LeaveIfError(win.Construct(group,ENullWsHandle));	//Creates a Blank Window
-	CleanupClosePushL(win);
-	win.SetVisible(ETrue);
-	win.SetColor(TRgb::Gray4(2));
-	win.Activate();
-	TheClient->Flush();
-	
-// Create Sprites
-	RWsSprite sprite1(TheClient->iWs);
-	CleanupClosePushL(sprite1);
-	SetUpSpriteL(sprite1, win,TPoint(20,70),spriteMember1,0);
-	RWsSprite sprite2(TheClient->iWs);
-	CleanupClosePushL(sprite2);
-	SetUpSpriteL(sprite2, win,TPoint(80,130),spriteMember2,0);
-	RWsSprite sprite3(TheClient->iWs);
-	CleanupClosePushL(sprite3);
-	SetUpSpriteL(sprite3, win,TPoint(2800,2130),spriteMember1,0);
-	TheClient->Flush();
-
-// Get the original screen mode	
-	CWsScreenDevice* device = TheClient->iScreen;
-	TInt originalScreenMode = device->CurrentScreenMode();
-	TPixelsTwipsAndRotation originalModeSettings;
-	device->GetScreenModeSizeAndRotation(originalScreenMode,originalModeSettings);
-
-// Rotate screens	
-	TPixelsAndRotation pixelsAndRotation;
-	device->SetScreenMode( 1 );
-	device->GetDefaultScreenSizeAndRotation(pixelsAndRotation);
-	device->SetCurrentRotations(1,pixelsAndRotation.iRotation);
-	device->SetScreenSizeAndRotation(pixelsAndRotation);
-	User::After(1000000);
-	
-	CleanupStack::PopAndDestroy(5,&group);
-//	Restore the original screen mode	
-	device->SetScreenMode(originalScreenMode);
-	device->SetCurrentRotations(originalScreenMode,originalModeSettings.iRotation);
-	device->SetScreenSizeAndRotation(originalModeSettings);
-	TheClient->Flush();
-	}
-
-/**
-@SYMTestCaseID		GRAPHICS-WSERV-GCE-0700
-
-@SYMDEF  			DEF123129
-
-@SYMTestCaseDesc    Test activating a sprite twice does not cause the system to hang
-
-@SYMTestPriority    High
-
-@SYMTestStatus      Implemented
-
-@SYMTestActions     Construct a sprite and add a member to it. Activate twice.
-
-@SYMTestExpectedResults The test should terminate smoothly and it should not hang the system.
-*/
-void CTTSprite::DoubleActivateL()
-	{
-	RWsSession ws;
-	User::LeaveIfError(ws.Connect());
-	CleanupClosePushL(ws);
-	
-	RWindowGroup group(ws);
-	User::LeaveIfError(group.Construct(890, EFalse));
-	CleanupClosePushL(group);
-	
-	RWsSprite sprite = RWsSprite(ws);
-	User::LeaveIfError(sprite.Construct(group,TPoint(),0));
-	CleanupClosePushL(sprite);
-	CFbsBitmap* bitmap=new(ELeave) CFbsBitmap;
-	CleanupStack::PushL(bitmap);
-	User::LeaveIfError(bitmap->Create(TSize(10,12),EColor256));
-	TSpriteMember member;
-	member.iMaskBitmap=NULL;
-	member.iInvertMask=EFalse;
-	member.iDrawMode=CGraphicsContext::EDrawModePEN;
-	member.iOffset=TPoint();
-	member.iInterval=TTimeIntervalMicroSeconds32(0);
-	member.iBitmap=bitmap;
-	User::LeaveIfError(sprite.AppendMember(member));
-	User::LeaveIfError(sprite.Activate());
-	User::LeaveIfError(sprite.Activate());
-	
-	sprite.Close();
-	CleanupStack::PopAndDestroy(4, &ws);
-	
-	group.Close();
-	ws.Close();
-	}
-
-void CTTSprite::RunTestCaseL(TInt /*aCurTestCase*/)
-	{	
-	_LIT(KTest1, "General Tests");
-	_LIT(KTest2, "Group Window Sprites Tests");
-	_LIT(KTest3, "Lots Sprites Tests");
-	_LIT(KTest4, "General Pointer Cursor Tests");
-    _LIT(KTest5, "Pointer Cursor Visible Tests");
-    _LIT(KTest6, "Update member tests");
-    _LIT(KTest7, "Negative tests for Update member");
-    _LIT(KTest8, "Window Group with Thread");
-    _LIT(KTest9, "Resize Sprite Member Tests");
-    _LIT(KTest10, "Rotate a NULL sprite");
-    _LIT(KTest11, "Sprite On Window Orphaned Tests");
-    _LIT(KTest12, "Sprite Double Activation Test");
-	
-	((CTTSpriteStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
-	switch(++iTest->iState)
-		{
-	case 1:		
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0018"));
-		TheClient->iWs.SetFocusScreen(0);
-		iTest->LogSubTest(KTest1);
-		GeneralTestsL();
-		break;
-	case 2:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0019"));
-		iTest->LogSubTest(KTest2);
-		GroupWindowSpritesL();
-		break;
-	case 3:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0020"));
-		iTest->LogSubTest(KTest3);
-		LotsSpritesL();
-		break;
-	case 4:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0021"));
-		iTest->LogSubTest(KTest4);
-		GeneralPointerCursor();
-		break;
-    case 5:
-        ((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0498"));
-        iTest->LogSubTest(KTest5);
-        TRAPD(err, PointerCursorVisibleL());
-        TEST(err == KErrNone);
-        break;
-	case 6:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-CODEBASE-WSERV-0053-0001"));
-		iTest->LogSubTest(KTest6);
-		TRAP(err, SpriteUpdateMemberTestsL());
-		TEST(err == KErrNone);
-		break;
-	case 7:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-CODEBASE-WSERV-0054-0001"));
-		iTest->LogSubTest(KTest7);
-		TRAP(err, SpriteUpdateMemberNegTestsL());
-		TEST(err == KErrNone);
-		break;
-	case 8:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-CODEBASE-WSERV-0055-0001"));
-		iTest->LogSubTest(KTest8);
-		TRAP(err, FindWindowGroupThreadTestsL());
-		TEST(err == KErrNone);
-		break;
-	case 9:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0526"));
-		iTest->LogSubTest(KTest9);
-		ResizeMemberL();
-		break;
-	case 10:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-00-0001"));
-		iTest->LogSubTest(KTest10);
-		RotateNullSpriteL();
-		break;
-	case 11:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0462"));
-		iTest->LogSubTest(KTest11);
-		SpriteOnWindowOrphanedTestsL();
-		break;
-	case 12:
-		((CTTSpriteStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-GCE-0700"));
-		iTest->LogSubTest(KTest12);
-		DoubleActivateL();
-		break;
-	default:
-		((CTTSpriteStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
-		((CTTSpriteStep*)iStep)->CloseTMSGraphicsStep();
-		TestComplete();
-		break;
-		}
-	((CTTSpriteStep*)iStep)->RecordTestResultL();
-	}
-
-//--------------
-__WS_CONSTRUCT_STEP__(TSprite)
-