--- 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)
-