--- a/windowing/windowserver/tauto/TSCRMODE.CPP Tue Jun 22 15:21:29 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1701 +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:
-// Test screen mode switching
-//
-//
-
-/**
- @file
- @test
- @internalComponent - Internal Symbian test code
-*/
-
-#include "TSCRMODE.H"
-
-const TInt KBlankWinPosX=10;
-const TInt KBlankWinPosY=20;
-const TInt KBlankWinSizeX=30;
-const TInt KBlankWinSizeY=25;
-
-const TInt KScreenMode0=0;
-const TInt KScreenMode1=1;
-_LIT(KScreenModeDisplayMode,"GetScreenModeDisplayMode");
-
-
-CTScrMode::CTScrMode(CTestStep* aStep) : CTWsGraphicsBase(aStep)
- {
- }
-
-//
-// Static func to check windows
-//
-
-LOCAL_C TInt DoPanicTest(TInt aInt, TAny *aScreenNumber)
- {
- RWsSession ws;
- CWsScreenDevice *screen=NULL;
- if (ws.Connect()==KErrNone)
- {
- screen = new (ELeave) CWsScreenDevice(ws);
- if (screen && screen->Construct((TInt)aScreenNumber)==KErrNone)
- {
- TPixelsTwipsAndRotation sar;
- CFbsBitGc::TGraphicsOrientation rot=CFbsBitGc::EGraphicsOrientationNormal;
- TInt mode=0;
- switch(aInt)
- {
- case 0:
- case 1:
- screen->SetScreenMode(aInt==0?1000:-1);
- break;
- case 2:
- case 3:
- screen->GetScreenModeSizeAndRotation(aInt==2?screen->NumScreenModes():-100000, sar);
- break;
- case 4:
- case 5:
- screen->GetScreenModeSizeAndRotation(aInt==4?screen->NumScreenModes()+100:-10, sar);
- break;
- case 6:
- mode=screen->NumScreenModes();
- goto SetRot;
- case 7:
- mode=-55;
- goto SetRot;
- case 8:
- mode=234;
- goto SetRot;
- case 9:
- mode=screen->NumScreenModes()+2;
- rot=CFbsBitGc::EGraphicsOrientationRotated270;
- SetRot:
- screen->SetCurrentRotations(mode,rot);
- break;
- case 10:
- case 11:
- ws.SetPointerCursorArea(aInt==10?1000:-1,TRect());
- break;
- case 12:
- case 13:
- ws.PointerCursorArea(aInt==12?1003:-2);
- break;
- case 14:
- case 15:
- {
- CArrayFixFlat<TInt> *rotations=new(ELeave) CArrayFixFlat<TInt>(1);
- screen->GetRotationsList(aInt==12?1003:-2,rotations);
- }
- break;
- case 100:
- rot=CFbsBitGc::EGraphicsOrientationRotated90;
- goto SetRot;
- case 101:
- rot=CFbsBitGc::EGraphicsOrientationRotated270;
- goto SetRot;
- case 102:
- mode=1;
- rot=CFbsBitGc::EGraphicsOrientationRotated270;
- goto SetRot;
- case 103:
- mode=1;
- #if defined(__EPOC32__)
- rot=CFbsBitGc::EGraphicsOrientationRotated180;
- #else
- rot=CFbsBitGc::EGraphicsOrientationNormal;
- #endif
- goto SetRot;
- }
- ws.Flush();
- }
- }
-
- return(EWsExitReasonBad);
- }
-
-void SetupTestRWindowLC(RWindow& aWindow, const TPoint& aPos, const TSize& aSize, TDisplayMode aDisplayMode)
- {
- CleanupClosePushL(aWindow);
- User::LeaveIfError(aWindow.Construct(*TheClient->iGroup->GroupWin(), (TUint)&aWindow));
- aWindow.SetExtent(aPos, aSize);
- User::LeaveIfError(aWindow.SetRequiredDisplayMode(aDisplayMode));
- aWindow.Activate();
- }
-
-void CTScrMode::TestPanicsL()
- {
- TInt ii;
- for (ii=0;ii<16;++ii)
- TEST(iTest->TestWsPanicL(DoPanicTest,EWservPanicScreenModeNumber,ii,(TAny*)iTest->iScreenNumber));
- for (ii=100;ii<104;++ii)
- TEST(iTest->TestWsPanicL(DoPanicTest,EWservPanicRotation,ii,(TAny*)iTest->iScreenNumber));
- iTest->CloseAllPanicWindows();
- }
-
-CTScrMode::~CTScrMode()
- {
- ((CTScrModeStep*)iStep)->CloseTMSGraphicsStep();
- delete iSecondConnection;
- TheClient->iGroup->GroupWin()->DisableScreenChangeEvents();
- SetScreenModeEnforcement(iOldEnfMode);
- }
-
-void CTScrMode::ConstructL()
- {
- //Remove next line when bitmaps are stored correctly
- TestWin->Win()->EnableRedrawStore(EFalse);
- BaseWin->Win()->EnableRedrawStore(EFalse);
-//
- TheClient->iGroup->GroupWin()->EnableScreenChangeEvents();
-//
- //TheClient->iWs.SetAutoFlush(ETrue);
- ValidateWin(BaseWin,TRgb::Gray256(204));
- ValidateWin(TestWin,TRgb::Gray256(204));
-//
- iWinState=0;
- iWinPos=TPoint(2*TheClient->iGroup->Size().iWidth/3,0);
-//
- iSecondConnection=new(ELeave) CSecondConnection;
- iSecondConnection->ConstructL(iTest->iScreenNumber, TRect(KBlankWinPosX,KBlankWinPosY,KBlankWinPosX+KBlankWinSizeX,KBlankWinPosY+KBlankWinSizeY),iTest,iStep);
-//
- iOldEnfMode=TheClient->iScreen->ScreenModeEnforcement();
- if (TheClient->iScreenModes.Count()<2)
- {
- iTest->iState=1000; // Miss all tests
- _LIT(KLog,"Skipping all tests as less that 2 screen size modes");
- LOG_MESSAGE(KLog);
- }
- else
- {
- SetScreenModeEnforcement(ESizeEnforcementNone);
- TheClient->iScreen->SetScreenMode(TheClient->iScreenModes[0]);
- }
- }
-
-void CTScrMode::SetScreenModeEnforcement(TScreenModeEnforcement aMode)
- {
- iCurEnforcement=aMode;
- TheClient->iScreen->SetScreenModeEnforcement(iCurEnforcement);
- }
-
-void CTScrMode::ScaledDrawingL()
- {
- const TInt KLineXPos=10;
- const TInt KLineYPos=30;
- const TInt KLineLength=10;
- const TInt KXScaleFactor=4;
- const TInt KYScaleFactor=3;
-//
- // Draw rectangle onto TestWin
- CWindowGc *gc=TheClient->iGc;
- gc->Activate(*(TestWin->Win()));
- gc->SetBrushColor(KRgbBlack);
- gc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- gc->DrawRect(TRect(TPoint(KLineXPos,KLineYPos),TSize(KLineLength*KXScaleFactor,KYScaleFactor)));
- gc->Deactivate();
-//
- // Draw scaled bitmap onto BaseWin
- TSize bitSize(KLineLength,1);
- TSize bitTwipSize(TheClient->iScreen->HorizontalPixelsToTwips(bitSize.iWidth*KXScaleFactor),
- TheClient->iScreen->VerticalPixelsToTwips(bitSize.iHeight*KYScaleFactor));
- CFbsBitGc *bitGc=NULL;
- CFbsBitmapDevice *device=NULL;
- CFbsBitmap *bitmap=NULL;
- bitmap=new(ELeave) CFbsBitmap();
- CleanupStack::PushL(bitmap);
- User::LeaveIfError(bitmap->Create(bitSize,EGray16));
- bitmap->SetSizeInTwips(bitTwipSize);
- device=CFbsBitmapDevice::NewL(bitmap);
- CleanupStack::PushL(device);
- User::LeaveIfError(device->CreateContext(bitGc));
- bitGc->SetBrushColor(KRgbBlack);
- bitGc->Clear();
- delete bitGc;
-//
- gc->Activate(*(BaseWin->Win()));
- gc->DrawBitmap(TPoint(KLineXPos,KLineYPos),bitmap);
- gc->Deactivate();
-//
- TheClient->iWs.Flush();
-
- CleanupStack::PopAndDestroy(2); // bitmap,device
-
- CompareWindows(_L("CTScrMode::ScaledDrawingL() CompareWindows() failed"));
- }
-
-void CTScrMode::ValidateWin(TestWindow *aWin, TRgb aColor)
- {
- aWin->Win()->Invalidate();
- RedrawWin(*aWin->Win(),aColor);
- }
-
-void CTScrMode::RedrawWin(RWindow &aWin, TRgb aColor)
- {
- aWin.BeginRedraw();
- TheClient->iGc->Activate(aWin);
- TheClient->iGc->SetBrushColor(aColor);
- TheClient->iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- TheClient->iGc->SetPenStyle(CGraphicsContext::ENullPen);
- TheClient->iGc->Clear();
- TheClient->iGc->Deactivate();
- aWin.EndRedraw();
- }
-
-void CTScrMode::CheckWindows(TBool aWinIsVis)
- {
- iSecondConnection->SetWindow2Visibility(aWinIsVis);
- TheClient->WaitForRedrawsToFinish();
- TheClient->iWs.Finish();
- CompareWindows(_L("CTScrMode::CheckWindows() CompareWindows() failed"));
- }
-
-void CTScrMode::ScreenRotationsL()
- {
- CWsScreenDevice *screen=TheClient->iScreen;
- CArrayFixFlat<TInt> *rotations=new(ELeave) CArrayFixFlat<TInt>(1);
- CFbsBitGc::TGraphicsOrientation currentRotation;
- TPixelsAndRotation sizeAndRotation;
- TPixelsTwipsAndRotation sizeAndRotation2;
- TBool found;
- TInt numModes=TheClient->iScreenModes.Count();
- TInt count;
- TInt ii,jj;
- CleanupStack::PushL(rotations);
- for (ii=0;ii<numModes;++ii)
- {
- TInt mode=TheClient->iScreenModes[ii];
- User::LeaveIfError(screen->GetRotationsList(mode,rotations));
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation);
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation2);
- TEST(sizeAndRotation.iPixelSize.iWidth==sizeAndRotation2.iPixelSize.iWidth);
- if (sizeAndRotation.iPixelSize.iWidth!=sizeAndRotation2.iPixelSize.iWidth)
- INFO_PRINTF3(_L("sizeAndRotation.iPixelSize.iWidth==sizeAndRotation2.iPixelSize.iWidth - Expected: %d, Actual: %d"), sizeAndRotation.iPixelSize.iWidth, sizeAndRotation2.iPixelSize.iWidth);
-
- TEST(sizeAndRotation.iPixelSize.iHeight==sizeAndRotation2.iPixelSize.iHeight);
- if (sizeAndRotation.iPixelSize.iHeight!=sizeAndRotation2.iPixelSize.iHeight)
- INFO_PRINTF3(_L("sizeAndRotation.iPixelSize.iHeight==sizeAndRotation2.iPixelSize.iHeight - Expected: %d, Actual: %d"), sizeAndRotation.iPixelSize.iHeight, sizeAndRotation2.iPixelSize.iHeight);
-
- count=rotations->Count();
- TEST(count>=1);
- if (count<1)
- INFO_PRINTF3(_L("rotations->Count() return value - Expected: %d or more, Actual: %d"), 1, count);
-
- TBool retVal;
-
- if (sizeAndRotation.iPixelSize.iWidth!=sizeAndRotation.iPixelSize.iHeight)
- {
- TEST(count<=2);
- if (count>2)
- INFO_PRINTF3(_L("rotations->Count() return value - Expected: %d or less, Actual: %d"), 2, count);
-
- if (count==2)
- {
- retVal = (*rotations)[0]+2==(*rotations)[1];
- TEST(retVal); //Must only have rotations 180 degrees apart
- if (!retVal)
- INFO_PRINTF3(_L("(*rotations)[0]+2==(*rotations)[1] - Expected: %d, Actual: %d"), ETrue, retVal);
- }
- }
- found=EFalse;
- for (jj=0;jj<count;++jj)
- {
- if ((*rotations)[jj]==sizeAndRotation.iRotation)
- {
- retVal = (*rotations)[jj]==sizeAndRotation2.iRotation;
- TEST(retVal);
- if (!retVal)
- INFO_PRINTF3(_L("(*rotations)[jj]==sizeAndRotation2.iRotation - Expected: %d, Actual: %d"), ETrue, retVal);
-
- found=ETrue;
- break;
- }
- }
- TEST(found);
- if (!found)
- INFO_PRINTF3(_L("found - Expected: %d, Actual: %d"), ETrue, found);
-
- if (count>1)
- {
- currentRotation=sizeAndRotation.iRotation;
- for (jj=0;jj<count;++jj)
- {
- screen->SetCurrentRotations(mode,REINTERPRET_CAST(CFbsBitGc::TGraphicsOrientation&,(*rotations)[jj]));
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation);
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation2);
- retVal = (*rotations)[jj]==sizeAndRotation.iRotation;
- TEST(retVal);
- if (!retVal)
- INFO_PRINTF3(_L("(*rotations)[jj]==sizeAndRotation.iRotation - Expected: %d, Actual: %d"), ETrue, retVal);
-
- retVal = (*rotations)[jj]==sizeAndRotation2.iRotation;
- TEST(retVal);
- if (!retVal)
- INFO_PRINTF3(_L("(*rotations)[jj]==sizeAndRotation2.iRotation - Expected: %d, Actual: %d"), ETrue, retVal);
-
- }
- screen->SetCurrentRotations(mode,REINTERPRET_CAST(CFbsBitGc::TGraphicsOrientation&,currentRotation));
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation);
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation2);
-
- retVal = currentRotation==sizeAndRotation.iRotation;
- TEST(retVal);
- if (!retVal)
- INFO_PRINTF3(_L("currentRotation==sizeAndRotation.iRotation - Expected: %d, Actual: %d"), ETrue, retVal);
-
- retVal = currentRotation==sizeAndRotation2.iRotation;
- TEST(retVal);
- if (!retVal)
- INFO_PRINTF3(_L("currentRotation==sizeAndRotation2.iRotation - Expected: %d, Actual: %d"), ETrue, retVal);
- }
- }
- CleanupStack::PopAndDestroy();
- }
-
-void CTScrMode::MoreScreenRotationsL()
- {
- RWindow shield4Gray(TheClient->iWs);
- // The default display mode needs to be updated to EColor64K for Oghma integ
- SetupTestRWindowLC(shield4Gray,TPoint(),TSize(100000,100000),EColor64K);
-//
- CWsScreenDevice *screen=TheClient->iScreen;
- //CFbsBitGc::TGraphicsOrientation currentRotation;
- TPixelsAndRotation sizeAndRotation;
- TInt currentRotation;
- TInt currentMode=FindCurrentMode();
- TInt numModes=TheClient->iScreenModes.Count();
- TInt currentScreenMode;
- TInt count;
- TInt ii,jj;
- CArrayFixFlat<TInt> *currentRotations=new(ELeave) CArrayFixFlat<TInt>(1);
- CleanupStack::PushL(currentRotations);
- currentRotations->ResizeL(numModes);
- CArrayFixFlat<TInt> *originalRotation=new(ELeave) CArrayFixFlat<TInt>(1);
- CleanupStack::PushL(originalRotation);
- originalRotation->ResizeL(numModes);
- CArrayFixFlat<TInt> *rotations=new(ELeave) CArrayFixFlat<TInt>(1);
- CleanupStack::PushL(rotations);
- for (ii=0;ii<numModes;++ii)
- {
- TInt mode=TheClient->iScreenModes[ii];
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation);
- (*currentRotations)[ii]=sizeAndRotation.iRotation;
- (*originalRotation)[ii]=sizeAndRotation.iRotation;
- }
- for (ii=0;ii<numModes;++ii)
- {
- TInt mode=TheClient->iScreenModes[ii];
- screen->SetScreenMode(mode);
- currentScreenMode = screen->CurrentScreenMode();
- TEST(currentScreenMode == mode);
- if (currentScreenMode != mode)
- INFO_PRINTF3(_L("screen->CurrentScreenMode() return value - Expected: %d, Actual: %d"), mode, currentScreenMode);
-
- screen->GetDefaultScreenSizeAndRotation(sizeAndRotation);
- currentRotation=(*currentRotations)[ii];
- TEST(sizeAndRotation.iRotation==currentRotation);
-
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation);
- TEST(sizeAndRotation.iRotation==currentRotation);
-
- User::LeaveIfError(screen->GetRotationsList(mode,rotations));
- count=rotations->Count();
- if (count>1)
- {
- for (jj=0;jj<count;)
- {
- if ((*rotations)[jj++]==currentRotation)
- break;
- }
- if (jj==count)
- jj=0;
- currentRotation=(*rotations)[jj];
- screen->SetCurrentRotations(mode,REINTERPRET_CAST(CFbsBitGc::TGraphicsOrientation&,currentRotation));
- (*currentRotations)[ii]=currentRotation;
- }
- }
- for (ii=0;ii<numModes;++ii)
- {
- TInt mode=TheClient->iScreenModes[ii];
- screen->SetScreenMode(mode);
- currentScreenMode = screen->CurrentScreenMode();
- TEST(currentScreenMode == mode);
- if (currentScreenMode != mode)
- INFO_PRINTF3(_L("(screen->CurrentScreenMode() return value - Expected: %d, Actual: %d"), mode, currentScreenMode);
-
- screen->GetDefaultScreenSizeAndRotation(sizeAndRotation);
- currentRotation=(*currentRotations)[ii];
- TEST(sizeAndRotation.iRotation==currentRotation);
- if (sizeAndRotation.iRotation != currentRotation)
- INFO_PRINTF3(_L("(screen->GetDefaultScreenSizeAndRotation() return value - Expected: %d, Actual: %d"), currentRotation, sizeAndRotation.iRotation);
-
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation);
- TEST(sizeAndRotation.iRotation==currentRotation);
- if (sizeAndRotation.iRotation != currentRotation)
- INFO_PRINTF3(_L("(screen->GetDefaultScreenSizeAndRotation() return value - Expected: %d, Actual: %d"), currentRotation, sizeAndRotation.iRotation);
-
- if (currentRotation!=(*originalRotation)[ii])
- screen->SetCurrentRotations(mode,REINTERPRET_CAST(CFbsBitGc::TGraphicsOrientation&,(*originalRotation)[ii]));
- }
- screen->SetScreenMode(currentMode);
- currentScreenMode = screen->CurrentScreenMode();
- TEST(currentScreenMode == currentMode);
- if (currentScreenMode != currentMode)
- INFO_PRINTF3(_L("(screen->CurrentScreenMode() return value - Expected: %d, Actual: %d"), currentMode, currentScreenMode);
-
- CleanupStack::PopAndDestroy(4,&shield4Gray);
- }
-
-TInt CTScrMode::FindCurrentMode()
- {
- CWsScreenDevice *screen=TheClient->iScreen;
- TPixelsTwipsAndRotation sizeAndRotation;
- TPixelsTwipsAndRotation sizeAndRotation2;
- TInt numModes=TheClient->iScreenModes.Count();
- TInt ii;
- screen->GetDefaultScreenSizeAndRotation(sizeAndRotation);
- for (ii=0;ii<numModes;++ii)
- {
- TInt mode=TheClient->iScreenModes[ii];
- screen->GetScreenModeSizeAndRotation(mode,sizeAndRotation2);
- if (Equal(sizeAndRotation,sizeAndRotation2))
- return mode;
- }
- TEST(EFalse);
- return -1;
- }
-
-TBool CTScrMode::Equal(const TPixelsTwipsAndRotation& aLeft,const TPixelsTwipsAndRotation& aRight)
- {
- if (aLeft.iPixelSize!=aRight.iPixelSize)
- return EFalse;
- if (aLeft.iRotation!=aRight.iRotation)
- return EFalse;
- if (aLeft.iTwipsSize!=aRight.iTwipsSize)
- return EFalse;
- return ETrue;
- }
-
-TBool CTScrMode::RectClearBugL()
- {
- CWsScreenDevice *screen=TheClient->iScreen;
- TPixelsTwipsAndRotation sizeAndRotation1;
- TPixelsTwipsAndRotation sizeAndRotation2;
- TInt screenMode=FindCurrentMode();
- TInt largeMode=0;
- TInt smallMode=1;
- INFO_PRINTF1(_L("Rotation 1"));
- screen->GetScreenModeSizeAndRotation(0,sizeAndRotation1);
- INFO_PRINTF1(_L("Rotation 2"));
- screen->GetScreenModeSizeAndRotation(1,sizeAndRotation2);
- TSize winSize=TSize(Max(sizeAndRotation1.iPixelSize.iWidth,sizeAndRotation2.iPixelSize.iWidth)
- ,Max(sizeAndRotation1.iPixelSize.iHeight,sizeAndRotation2.iPixelSize.iHeight));
- if (sizeAndRotation1.iPixelSize.iWidth<=sizeAndRotation2.iPixelSize.iWidth
- && sizeAndRotation1.iPixelSize.iHeight<=sizeAndRotation2.iPixelSize.iHeight)
- {
- largeMode=1;
- smallMode=0;
- }
- if (screenMode!=largeMode)
- {
- INFO_PRINTF2(_L("Large Mode %d\r\n"),largeMode);
- screen->SetScreenMode(largeMode);
- }
- CBlankWindow *blankWin=new(ELeave) CBlankWindow(TRgb::Gray256(204));
- CleanupStack::PushL(blankWin);
- blankWin->SetUpL(TPoint(),winSize,TheClient->iGroup,*TheClient->iGc);
- TheClient->iGc->Activate(*blankWin->Win()); //blankWin->Win()->Invalidate();
- blankWin->Draw();
- TheClient->iWs.Flush();
- blankWin->Win()->SetRequiredDisplayMode(EGray4);
- INFO_PRINTF2(_L("Small Mode %d\r\n"),smallMode);
- screen->SetScreenMode(smallMode);
- TheClient->iWs.Flush();
- TheClient->iGc->Deactivate();
- CleanupStack::PopAndDestroy();
- if (screenMode!=smallMode)
- {
- INFO_PRINTF2(_L("Screen Mode %d\r\n"),screenMode);
- screen->SetScreenMode(screenMode);
- }
-
- return ETrue;
- }
-
-void CTScrMode::ScreenModeChange1L()
- {
- CTWin* color64win;
- color64win=new(ELeave) CTWin();
- CleanupStack::PushL(color64win);
- color64win->ConstructL(*TheClient->iGroup);
- color64win->BaseWin()->SetRequiredDisplayMode(EColor64K);
- //color64win->SetBackgroundColor(TRgb(0,0,255));
- color64win->Win()->SetBackgroundColor();
- color64win->Activate();
- TheClient->Flush();
- CTWin* color4win;
- color4win=new(ELeave) CTWin();
- CleanupStack::PushL(color4win);
- color4win->ConstructL(*TheClient->iGroup);
- color4win->BaseWin()->SetRequiredDisplayMode(EColor4K);
- //color4win->SetBackgroundColor(TRgb(255,0,0));
- color4win->Win()->SetBackgroundColor();
- color4win->SetSize(TSize(600,200));
- color4win->Activate();
- TheClient->Flush();
- color4win->SetSize(TSize(640,240));
- TheClient->Flush();
- color64win->SetSize(TSize(20,20));
- color64win->WinTreeNode()->SetOrdinalPosition(0);
- TheClient->Flush();
- CleanupStack::Pop(2,color64win);
- delete color64win;
- TheClient->Flush();
- delete color4win;
- //CleanupStack::PopAndDestroy(2,color64win);
- }
-
-void CTScrMode::ScreenModeChange2L()
- {
- CTBlankWindow* color64win;
- color64win=new(ELeave) CTBlankWindow();
- CleanupStack::PushL(color64win);
- color64win->ConstructL(*TheClient->iGroup);
- color64win->BaseWin()->SetRequiredDisplayMode(EColor64K);
- color64win->SetColor(TRgb(0,0,255));
- //color64win->SetColor();
- color64win->Activate();
- TheClient->Flush();
- CTBlankWindow* color4win;
- color4win=new(ELeave) CTBlankWindow();
- CleanupStack::PushL(color4win);
- color4win->ConstructL(*TheClient->iGroup);
- color4win->BaseWin()->SetRequiredDisplayMode(EColor4K);
- color4win->SetColor(TRgb(255,0,0));
- //color4win->SetColor();
- color4win->SetSize(TSize(600,200));
- color4win->Activate();
- TheClient->Flush();
- color4win->SetSize(TSize(640,240));
- TheClient->Flush();
- color64win->SetSize(TSize(20,20));
- color64win->WinTreeNode()->SetOrdinalPosition(0);
- TheClient->Flush();
- CleanupStack::Pop(2,color64win);
- delete color64win;
- TheClient->Flush();
- delete color4win;
- //CleanupStack::PopAndDestroy(2,color64win);
- }
-
-LOCAL_C void ResetAndDestroyWindows(TAny* aPointerArray)
- {
- static_cast<RPointerArray<CBlankWindow>*>(aPointerArray)->ResetAndDestroy();
- }
-
-LOCAL_C TBool WalkThroughTree(RPointerArray<CBlankWindow> aListOfWindows)
- {
- TBool ret=ETrue;
- TInt count = aListOfWindows.Count();
- while (--count>=0 && ret)
- {
- RRegion region;
- ((aListOfWindows)[count])->Win()->GetInvalidRegion(region);
- ret=region.IsEmpty();
- }
- return ret;
- }
-
-void CTScrMode::InvisibleWndAndInfiniteRedrawBugL()
- {
- // Current Test client state
- CTClient* clientA=TheClient;
- CWsScreenDevice* screenClientA=clientA->iScreen;
- const TScreenModeEnforcement screenModeEnforcement = screenClientA->ScreenModeEnforcement();
- const TInt currentScreenMode=FindCurrentMode();
- TPixelsTwipsAndRotation sizeAndRotation;
- screenClientA->GetScreenModeSizeAndRotation(currentScreenMode,sizeAndRotation);
-
-
- SecondClientConnection* clientB = new(ELeave) SecondClientConnection();
- CleanupStack::PushL(clientB);
- clientB->SetScreenNumber(iTest->iScreenNumber);
- clientB->ConstructL(currentScreenMode, sizeAndRotation);
-
-// Start test
- CWindowGc& gc=*clientB->iGc;
- RWsSession ws=clientB->iWs;
- CTWindowGroup* group=clientB->iGroup;
-
- const TInt shrinkFactor = 5;
- TRect parentRect(0,0, sizeAndRotation.iPixelSize.iWidth, sizeAndRotation.iPixelSize.iHeight);
- RPointerArray<CBlankWindow> windows;
- CleanupStack::PushL(TCleanupItem(ResetAndDestroyWindows, &windows));
- // create several children
- const TInt count = (iTest->iTestLevel==iTest->ELevelQuick ? 5 : 7);
- CBlankWindow* blankWin=NULL;
- CTWinBase* parent=group;
- for (TInt childNum=0; childNum<count; ++childNum)
- {
- blankWin=new(ELeave) CBlankWindow();
- CleanupStack::PushL(blankWin);
- User::LeaveIfError(windows.Append(blankWin));
- CleanupStack::Pop(blankWin);
- blankWin->SetUpL(parentRect.iTl, parentRect.Size(), parent, gc);
- // make it visible and draw it
- blankWin->Win()->Invalidate();
- gc.Activate(*blankWin->Win());
- blankWin->Draw();
- ws.Flush();
- gc.Deactivate();
- // prepare for next window
- parent=blankWin;
- parentRect.Shrink(shrinkFactor, shrinkFactor);
- }
-
- // change screen mode and check visibility of all windows
-
- const TInt newScreenMode = (currentScreenMode==KScreenMode0?KScreenMode1:KScreenMode0);
- TPixelsTwipsAndRotation sizeAndRotationForDifferentScreenMode;
- screenClientA->GetScreenModeSizeAndRotation(newScreenMode, sizeAndRotationForDifferentScreenMode);
- screenClientA->SetScreenSizeAndRotation(sizeAndRotationForDifferentScreenMode);
- screenClientA->SetScreenMode(newScreenMode);
-
- TheClient->WaitForRedrawsToFinish();
- TBool retVal = WalkThroughTree(windows);
- TEST(retVal);
- if (!retVal)
- INFO_PRINTF3(_L("WalkThroughTree(windows) return value - Expected: %d, Actual: %d"), ETrue, retVal);
-
-
- screenClientA->SetScreenModeEnforcement(screenModeEnforcement);
- screenClientA->SetScreenMode(currentScreenMode);
- screenClientA->SetScreenSizeAndRotation(sizeAndRotation);
-
- // destroy all windows
- CleanupStack::PopAndDestroy(2, clientB); // ResetAndDestroyWindows and client
- // Needed to get system back into a good state as this test can leave the shell in front of the test app
- TheClient->iGroup->GroupWin()->SetOrdinalPosition(0);
- }
-
-//To test the APIs GetScreenModeDisplayMode() & GetDefModeMaxNumColors()
-void CTScrMode::GetScreenDisplayMode()
- {
- TInt color,gray;
- CWsScreenDevice *screen=TheClient->iScreen;
- TInt currentScreenMode=screen->CurrentScreenMode(); //finding the current screen mode
- screen->SetScreenMode(KScreenMode1); //changing the current screen mode to 1
-
- //testing the display mode of Screen Mode using the API GetScreenModeDisplayMode()
- TDisplayMode displayMode=screen->GetScreenModeDisplayMode(KScreenMode1);
-
- TEST(displayMode!=ENone);
- TEST(displayMode!=ERgb);
- //testing the default mode of Screen Mode using the API GetDefModeMaxNumColors()
- TDisplayMode defaultMode=TheClient->iWs.GetDefModeMaxNumColors(color,gray);
- TDisplayMode defaultModeForScreen=TheClient->iWs.GetDefModeMaxNumColors(screen->GetScreenNumber(),color,gray);
- TEST(defaultMode==defaultModeForScreen);
- TEST(defaultMode!=ENone);
- TEST(defaultMode!=ERgb);
- TEST(color == 16777216 || color == 0 || color == 16 || color == 256 || color == 4096 || color == 65536);
- TEST(gray == 0 || gray == 2 || gray == 4 || gray == 16 || gray == 256);
- screen->SetScreenMode(currentScreenMode);
-
- CArrayFixFlat<TInt>* modeList=new CArrayFixFlat<TInt>(15);
- TEST(modeList != NULL);
- if(!modeList)
- {
- return;
- }
- TInt res = TheClient->iWs.GetColorModeList(modeList);
- TEST(res == KErrNone);
- TDisplayMode modeMax = ENone;
- for(TInt index = 0; index < modeList->Count(); index++)
- {
- TDisplayMode mode = (TDisplayMode) ((*modeList)[index]);
- if(mode > modeMax)
- {
- modeMax = mode;
- }
- }
- modeList->Reset();
- delete modeList;
- TInt realColor = 0;
- TInt realGray = 0;
- switch(modeMax)
- {
- case EGray2:
- realColor = 2;
- realGray = 2;
- break;
- case EGray4:
- realColor = 4;
- realGray = 4;
- break;
- case EGray16:
- realColor = 16;
- realGray = 16;
- break;
- case EGray256:
- realColor = 256;
- realGray = 256;
- break;
- case EColor16:
- realColor = 16;
- break;
- case EColor256:
- realColor = 256;
- break;
- case EColor4K:
- realColor = 4096;
- break;
- case EColor64K:
- realColor = 65536;
- break;
- case EColor16M:
- case EColor16MU:
- case EColor16MA:
- case EColor16MAP:
- realColor = 16777216;
- break;
- default:
- break;
- }
-
- if (realColor > 0)
- TEST(realColor == color);
- if (realGray > 0)
- TEST(gray == realGray);
- }
-
-void CTScrMode::SetScreenModeAfterScreenDeviceDeletedL()
- {
- // A separate session is needed, because this test will delete the primary screen device
- RWsSession ws;
- User::LeaveIfError(ws.Connect());
-
- // Push the secondary screen device first onto the cleanup stack
- // so that we can pop and destroy the primary screen device first
- CWsScreenDevice* secondaryScreenDevice = new (ELeave) CWsScreenDevice(ws);
- CleanupStack::PushL(secondaryScreenDevice);
-
- CWsScreenDevice* primaryScreenDevice = new (ELeave) CWsScreenDevice(ws);
- CleanupStack::PushL(primaryScreenDevice);
-
- // Construct the primary screen device first to ensure that it is
- // used by the group window
- User::LeaveIfError(primaryScreenDevice->Construct(iTest->iScreenNumber));
- User::LeaveIfError(secondaryScreenDevice->Construct(iTest->iScreenNumber));
-
- RWindowGroup group(ws);
- User::LeaveIfError(group.Construct(888));
- group.EnableReceiptOfFocus(EFalse); // Stop auto group switching on close
-
- RArray<TInt> screenModes;
- primaryScreenDevice->GetScreenSizeModeList(&screenModes);
- primaryScreenDevice->SetScreenMode(screenModes[0]);
-
- // Prematurely destroy the primary screen device used by the group window
- CleanupStack::PopAndDestroy(primaryScreenDevice);
-
- // Simulate screen rotation - call SetScreenMode()
- // This would trigger the defective behaviour and wserv would panic if broken
- secondaryScreenDevice->SetScreenMode(screenModes[0]);
-
- // Tidy up
- screenModes.Close();
- group.Close();
- CleanupStack::PopAndDestroy(secondaryScreenDevice);
- ws.Flush();
- ws.Close();
- }
-
-void CTScrMode::DrawTestBmpL(CFbsBitmap* aTestBitmap)
- {
- CFbsBitmapDevice* device=CFbsBitmapDevice::NewL(aTestBitmap);
- CleanupStack::PushL(device);
- CGraphicsContext* bmpgc;
- User::LeaveIfError(device->CreateContext(bmpgc));
- CleanupStack::PushL(bmpgc);
- bmpgc->SetPenColor(KRgbDarkRed);
- bmpgc->SetBrushColor(KRgbYellow);
- bmpgc->SetBrushStyle(CGraphicsContext::ESolidBrush);
- bmpgc->SetPenStyle(CGraphicsContext::ESolidPen);
- bmpgc->DrawRect(TRect(aTestBitmap->SizeInPixels()));
- CleanupStack::PopAndDestroy(2,device);
- }
-
-void CTScrMode::TestDrawingToWindows(CWindowGc* aWinGc1, CWindowGc* aWinGc2, RWindow& aWindow1,RWindow& aWindow2,CFbsBitmap* aBitmap64K,CFbsBitmap* aBitmap16M,CFbsFont* aFont, TBool aAllInRedraw, TBool aUseSystemGc, TBool aUseBmp16M)
- {
- CFbsBitmap* bitmap=aUseBmp16M?aBitmap16M:aBitmap64K;
- TInt ascent=aFont->AscentInPixels();
- for(TInt win=0;win<2;win++)
- {
- RWindow* winPtr=(win==0)?&aWindow1:&aWindow2;
- winPtr->Invalidate();
- winPtr->BeginRedraw();
- CWindowGc* winGc;
- if (aUseSystemGc)
- {
- winGc=TheClient->iGc;
- winGc->Activate(*winPtr);
- }
- else
- {
- winGc=(win==0)?aWinGc1:aWinGc2;
- winGc->Reset();
- }
- winGc->SetBrushColor(KRgbBlue);
- winGc->Clear();
- if (!aAllInRedraw)
- winPtr->EndRedraw();
-//
- winGc->BitBlt(TPoint(0,0),bitmap);
- winGc->UseFont(aFont);
- _LIT(KTestText123,"Test text 123");
- winGc->DrawText(KTestText123,TPoint(0,ascent));
- if (aAllInRedraw)
- winPtr->EndRedraw();
- if (aUseSystemGc)
- winGc->Deactivate();
- }
- TBool winCheck=DoCheckRectRWin(aWindow1,aWindow2,TRect(aWindow1.Size()));
- if (!winCheck)
- {
- TBuf<256> errBuf(_L("Rot-mode test failed"));
- if (aAllInRedraw)
- errBuf.Append(_L(", All in Redraw"));
- if (aUseSystemGc)
- errBuf.Append(_L(", System Gc"));
- if (aUseBmp16M)
- errBuf.Append(_L(", 16M bmp"));
- else
- errBuf.Append(_L(", 64K bmp"));
- INFO_PRINTF1(errBuf);
- }
- TEST(winCheck);
- }
-
-void SetWsAndAppScreenModes(TInt aMode)
- {
- TheClient->iScreen->SetScreenMode(aMode);
- TheClient->iScreen->SetAppScreenMode(aMode);
- }
-
-TDisplayMode HighestMatch(CArrayFixFlat<TInt>* aModeList,TInt &aMaxBpp)
- {
- TDisplayMode highMode=ENone;
- TInt highBpp=0;
- for(TInt loop=aModeList->Count()-1;loop>=0;loop--)
- {
- TDisplayMode mode=(TDisplayMode)(*aModeList)[loop];
- TInt bpp;
- switch(mode)
- {
- case EGray2:
- bpp=1;
- break;
- case EGray4:
- bpp=2;
- break;
- case EGray16:
- case EColor16:
- bpp=4;
- break;
- case EColor256:
- case EGray256:
- bpp=8;
- break;
- case EColor64K:
- bpp=16;
- break;
- case EColor4K:
- bpp=12;
- break;
- case EColor16M:
- case EColor16MU:
- case EColor16MA:
- case EColor16MAP:
- bpp=32;
- break;
- default:
- bpp=0;
- break;
- }
- if (bpp>highBpp && bpp<aMaxBpp)
- {
- highBpp=bpp;
- highMode=mode;
- }
- }
- aMaxBpp=highBpp;
- return(highMode);
- }
-
-void CTScrMode::TestRotateAndScreenModeL()
- {
- TheClient->iGroup->GroupWin()->SetOrdinalPosition(0);
-// When switching colour modes Wserv takes into account the full device size, not the clipped size
-// associated with any specific screen mode. Therefore any windows designed to influence the screen
-// mode must use the appropriately rotated device base screen size, not any cutdown screen mode sizes.
- TSize baseScreenSize=TheClient->iScreen->SizeInPixels();
- TSize rotatedBaseSize(baseScreenSize.iHeight,baseScreenSize.iWidth);
- TInt maxScreenDimension=Max(baseScreenSize.iHeight,baseScreenSize.iWidth);
-//
- CArrayFixFlat<TInt>* modeList=new(ELeave) CArrayFixFlat<TInt>(15);
- CleanupStack::PushL(modeList);
- User::LeaveIfError(TheClient->iWs.GetColorModeList(modeList));
- TInt maxBpp=KMaxTInt;
- TDisplayMode testDispModeHigh=HighestMatch(modeList,maxBpp);
- TDisplayMode testDispModeLow=HighestMatch(modeList,maxBpp);
- CleanupStack::PopAndDestroy(modeList);
-// If only one available display mode skip tests
- if (testDispModeLow==ENone)
- return;
-//
- CFbsFont* font;
- TFontSpec fspec;
- fspec.iHeight=240;
- User::LeaveIfError(TheClient->iScreen->GetNearestFontToDesignHeightInTwips((CFont*&)font,fspec));
-// Create a massive 16M window to make sure 16M is the fallback mode when any area of the screen is exposed
- RWindow shield16M(TheClient->iWs);
- SetupTestRWindowLC(shield16M,TPoint(),TSize(100000,100000),testDispModeHigh);
- RedrawWin(shield16M,KRgbBlack);
-//
- TInt numModes=TheClient->iScreenModes.Count();
- for(TInt modeIndex=0;modeIndex<numModes;modeIndex++)
- {
- TInt screenMode=TheClient->iScreenModes[modeIndex];
- TPoint origin=TheClient->iScreen->GetScreenModeScaledOrigin(screenMode);
- if (origin.iX!=0 || origin.iY!=0)
- continue;
- TPixelsTwipsAndRotation sar;
- TheClient->iScreen->GetScreenModeSizeAndRotation(screenMode,sar);
- TSize screenSize=sar.iPixelSize;
- if (screenSize.iWidth>baseScreenSize.iWidth || screenSize.iHeight>baseScreenSize.iHeight)
- continue;
- TSize rotatedScreenDeviceSize(sar.iRotation==CFbsBitGc::EGraphicsOrientationRotated90 || sar.iRotation==CFbsBitGc::EGraphicsOrientationRotated270?
- rotatedBaseSize:baseScreenSize);
-//
- TheClient->iScreen->SetScreenMode(screenMode);
-//
- TSize screenSize1 = screenSize;
- screenSize1.iWidth = Min(screenSize1.iWidth, rotatedScreenDeviceSize.iWidth); //this is to guarantee we won't compare beyond screen size
- TSize testSize(screenSize1.iWidth/2,screenSize1.iHeight);
- TSize testBmpSize(testSize.iWidth,testSize.iHeight/4);
-//
- CFbsBitmap* testBitmap64=new(ELeave) CFbsBitmap;
- CleanupStack::PushL(testBitmap64);
- User::LeaveIfError(testBitmap64->Create(testBmpSize,testDispModeLow));
- DrawTestBmpL(testBitmap64);
-//
- CFbsBitmap* testBitmap16M=new(ELeave) CFbsBitmap;
- CleanupStack::PushL(testBitmap16M);
- User::LeaveIfError(testBitmap16M->Create(testBmpSize,testDispModeHigh));
- DrawTestBmpL(testBitmap16M);
-//
- RWindow window(TheClient->iWs);
- SetupTestRWindowLC(window,TPoint(0,0), testSize,testDispModeHigh);
- RWindow window2(TheClient->iWs);
- SetupTestRWindowLC(window2,TPoint(testSize.iWidth,0),testSize,testDispModeHigh);
-//
- CWindowGc* winGc1=new(ELeave) CWindowGc(TheClient->iScreen);
- CleanupStack::PushL(winGc1);
- User::LeaveIfError(winGc1->Construct());
- winGc1->Activate(window);
- CWindowGc* winGc2=new(ELeave) CWindowGc(TheClient->iScreen);
- CleanupStack::PushL(winGc2);
- User::LeaveIfError(winGc2->Construct());
- winGc2->Activate(window2);
-//
- for(TInt modeIndex2=0;modeIndex2<numModes;modeIndex2++)
- {
- if (modeIndex==modeIndex2)
- continue;
- TInt screenMode2=TheClient->iScreenModes[modeIndex2];
- TPoint origin2=TheClient->iScreen->GetScreenModeScaledOrigin(screenMode2);
- if (origin2.iX!=0 || origin2.iY!=0)
- continue;
- TDisplayMode baseDisplayMode=TheClient->iScreen->DisplayMode();
- INFO_PRINTF5(_L("Testing with screen modes %d/%d, display modes %d/%d"),modeIndex,modeIndex2,testDispModeLow,testDispModeHigh);
- SetWsAndAppScreenModes(screenMode2);
- TDisplayMode dispMode11 = TheClient->iScreen->DisplayMode();
- TPixelsTwipsAndRotation sar1;
- TheClient->iScreen->GetScreenModeSizeAndRotation(screenMode2, sar1);
- if(sar1.iRotation == sar.iRotation)
- {
- continue;
- }
-//
- RWindow window64K(TheClient->iWs);
- SetupTestRWindowLC(window64K,TPoint(),TSize(maxScreenDimension,maxScreenDimension),testDispModeLow);
- RedrawWin(window64K,KRgbGreen);
- // Should now have switched Wserv to 64K mode
- TEST(TheClient->iScreen->DisplayMode()==testDispModeLow);
-//
- RWindow window16M(TheClient->iWs);
- SetupTestRWindowLC(window16M,TPoint(),TSize(maxScreenDimension/2,maxScreenDimension/2),testDispModeHigh);
- RedrawWin(window16M,KRgbCyan);
- // Should switch Wserv back to 16M mode
- TEST(TheClient->iScreen->DisplayMode()==testDispModeHigh);
-//
- window64K.SetOrdinalPosition(-1);
- window16M.SetOrdinalPosition(-1);
- SetWsAndAppScreenModes(screenMode);
- TEST(TheClient->iScreen->DisplayMode()==baseDisplayMode);
-//
- const TInt KNumTestFlags=3;
- const TInt KMaxTestFlags=1<<KNumTestFlags;
- for(TUint testFlags=0;testFlags<KMaxTestFlags;testFlags++)
- {
- TestDrawingToWindows(winGc1,winGc2,window,window2,testBitmap64,testBitmap16M,font,testFlags&0x1,testFlags&0x2,testFlags&0x4);
- }
-// Test various functions change the display mode appropriately
- window64K.SetOrdinalPosition(0);
- TEST(TheClient->iScreen->DisplayMode()==testDispModeLow);
- window64K.SetVisible(EFalse);
- TEST(TheClient->iScreen->DisplayMode()==baseDisplayMode);
- window64K.SetVisible(ETrue);
- TEST(TheClient->iScreen->DisplayMode()==testDispModeLow);
- window64K.SetSize(rotatedScreenDeviceSize);
- TEST(TheClient->iScreen->DisplayMode()==testDispModeLow);
- // Changing screen mode now should expose the 16M window
- SetWsAndAppScreenModes(screenMode2);
- TEST(TheClient->iScreen->DisplayMode()==testDispModeHigh);
- SetWsAndAppScreenModes(screenMode);
- // And back to the 64K win covering the screen
- TEST(TheClient->iScreen->DisplayMode()==testDispModeLow);
-// Create a new group with a 16M window and switching ordinal pos to back and back to front
- RWindowGroup testGroup(TheClient->iWs);
- CleanupClosePushL(testGroup);
- User::LeaveIfError(testGroup.Construct(111,EFalse));
- RWindow testGroupWin(TheClient->iWs);
- CleanupClosePushL(testGroupWin);
- User::LeaveIfError(testGroupWin.Construct(testGroup, 112));
- testGroupWin.SetExtent(TPoint(), TSize(1,1)); // Just enough to change mode
- testGroupWin.SetRequiredDisplayMode(testDispModeHigh);
- testGroupWin.Activate();
- TEST(TheClient->iScreen->DisplayMode()==testDispModeHigh);
- TInt oldPos=testGroup.OrdinalPosition();
- testGroup.SetOrdinalPosition(oldPos+1);
- TEST(TheClient->iScreen->DisplayMode()==testDispModeLow);
- testGroup.SetOrdinalPosition(oldPos);
- TEST(TheClient->iScreen->DisplayMode()==testDispModeHigh);
- CleanupStack::PopAndDestroy(2,&testGroup);
- TEST(TheClient->iScreen->DisplayMode()==testDispModeLow);
-//
- CleanupStack::PopAndDestroy(2,&window64K);
- }
- CleanupStack::PopAndDestroy(2,winGc1);
- CleanupStack::PopAndDestroy(2,&window);
- CleanupStack::PopAndDestroy(2,testBitmap64);
- }
- CleanupStack::PopAndDestroy(&shield16M);
- TheClient->iScreen->ReleaseFont(font);
- SetWsAndAppScreenModes(TheClient->iScreenModes[0]);
- }
-
-void CTScrMode::RunTestCaseL(TInt /*aCurTestCase*/)
- {
- TBuf<32> buf;
- TBool checkWindowParam=EFalse;
- TInt count=0;
- TInt mode=0;
- TBool enable=EFalse;
- TBool disable=EFalse;
- TInt retVal;
-
- ((CTScrModeStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
- switch(++iTest->iState)
- {
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0296
-
- @SYMDEF DEF081259
-
- @SYMTestCaseDesc Test screen modes can be set while the screen is rotated
- through 180 degrees.
-
- @SYMTestPriority High
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Rotate the screen through 180 degrees while setting each
- of the screen modes available
-
- @SYMTestExpectedResults The screen is rotated and screen modes set correctly
-
-*/
- case 1:
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0296"));
- iTest->LogSubTest(_L("Orientation1"));
- ScreenRotationsL();
- break;
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0297
-
- @SYMDEF DEF081259
-
- @SYMTestCaseDesc Change the screen orientation then test screen modes can
- be set while the screen is rotated through 180 degrees.
-
- @SYMTestPriority High
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Rotate the screen through 180 degrees while setting each
- of the screen modes available
-
- @SYMTestExpectedResults The screen is rotated and screen modes set correctly
-
-*/
- case 2:
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0297"));
- iTest->LogSubTest(_L("Orientation2"));
- MoreScreenRotationsL();
- iSubState=0;
- break;
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0298
-
- @SYMDEF DEF081259
-
- @SYMTestCaseDesc Test for the rect clear defect while setting screen mode
-
- @SYMTestPriority High
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Change the screen mode and check the rect clear defect is
- not present
-
- @SYMTestExpectedResults The defect is not present
-
-*/
- case 3:
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0298"));
- iTest->LogSubTest(_L("Rect Clear Defect"));
- RectClearBugL();
- break;
- case 4:
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0299
-
- @SYMDEF DEF081259
-
- @SYMTestCaseDesc Test display mode can be set for test windows and
- that the windows then function correctly
-
- @SYMTestPriority High
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Set the display mode in two test windows and then call
- methods on the windows
-
- @SYMTestExpectedResults The windows function correctly
-
-*/
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0299"));
-
- iTest->LogSubTest(_L("ScreenModeChange"));
- ScreenModeChange1L();
- ScreenModeChange2L();
- break;
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0300
-
- @SYMDEF DEF081259
-
- @SYMTestCaseDesc Test display mode can be set and retrieved
-
- @SYMTestPriority High
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Set the display mode in a window and the retrieve it
-
- @SYMTestExpectedResults The display mode retrieved is the same as the
- one set.
-
-*/
- case 5:
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0300"));
- iTest->LogSubTest(KScreenModeDisplayMode);
- GetScreenDisplayMode();
- break;
-
-
-#if defined(SCREEN_MODE_TESTING)
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0301
-
- @SYMDEF DEF081259
-
- @SYMTestCaseDesc Case 101 to 105 tests that the screen is drawn correctly
- as different screen modes and screen orientation are
- set for the screen
-
- @SYMTestPriority High
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Set different screen modes and orientations for the screen and
- redraw the screen
-
- @SYMTestExpectedResults The screen is drawn correctly for each setting
-
-*/
- case 101:
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0301"));
- iSubState = 0;
- buf.Format(TRefByValue<const TDesC>(_L("Screen mode %d:%d")),101,iSubState);
- INFO_PRINTF1(buf);
- checkWindowParam=ETrue;
- mode=1;
- if (iCurEnforcement==ESizeEnforcementPixelsAndRotation)
- count+=3;
- else if (iCurEnforcement==ESizeEnforcementPixelsTwipsAndRotation)
- count+=6;
- if (iSecondConnection->DeviceMessageCount()!=count)
- {
- TLogMessageText buf;
- _LIT(KFailCount,"Event Mismatch, Exp=%d, Act=%d");
- buf.Format(KFailCount,count,iSecondConnection->DeviceMessageCount());
- TheClient->iWs.LogMessage(buf);
- TheClient->iWs.Flush();
- }
- retVal = iSecondConnection->DeviceMessageCount();
- TEST(retVal==count);
- if (retVal!=count)
- INFO_PRINTF3(_L("(iSecondConnection->DeviceMessageCount() return value - Expected: %d, Actual: %d"),count ,retVal);
-
- CheckWindows(iCurEnforcement==ESizeEnforcementNone?ETrue:checkWindowParam);
- if (enable)
- iSecondConnection->EnableMessages();
- if (disable)
- iSecondConnection->DisableMessages();
- TheClient->iScreen->SetScreenMode(mode);
- TheClient->iWs.Flush();
- iSubState++;
- break;
- case 102:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0521
-*/
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0521"));
- buf.Format(TRefByValue<const TDesC>(_L("Screen mode %d:%d")),101,iSubState);
- INFO_PRINTF1(buf);
- checkWindowParam=EFalse;
- enable=ETrue;
- if (iCurEnforcement==ESizeEnforcementPixelsAndRotation)
- count+=3;
- else if (iCurEnforcement==ESizeEnforcementPixelsTwipsAndRotation)
- count+=6;
- if (iSecondConnection->DeviceMessageCount()!=count)
- {
- TLogMessageText buf;
- _LIT(KFailCount,"Event Mismatch, Exp=%d, Act=%d");
- buf.Format(KFailCount,count,iSecondConnection->DeviceMessageCount());
- TheClient->iWs.LogMessage(buf);
- TheClient->iWs.Flush();
- }
- retVal = iSecondConnection->DeviceMessageCount();
- TEST(retVal==count);
- if (retVal!=count)
- INFO_PRINTF3(_L("(iSecondConnection->DeviceMessageCount() return value - Expected: %d, Actual: %d"),count ,retVal);
-
- if (enable)
- iSecondConnection->EnableMessages();
- if (disable)
- iSecondConnection->DisableMessages();
- TheClient->iScreen->SetScreenMode(mode);
- TheClient->iWs.Flush();
- iSubState++;
- break;
- case 103:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0522
-*/
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0522"));
- buf.Format(TRefByValue<const TDesC>(_L("Screen mode %d:%d")),101,iSubState);
- INFO_PRINTF1(buf);
- count=1;
- mode=1;
- checkWindowParam=ETrue;
- if (iCurEnforcement==ESizeEnforcementPixelsAndRotation)
- count+=3;
- else if (iCurEnforcement==ESizeEnforcementPixelsTwipsAndRotation)
- count+=6;
- if (iSecondConnection->DeviceMessageCount()!=count)
- {
- TLogMessageText buf;
- _LIT(KFailCount,"Event Mismatch, Exp=%d, Act=%d");
- buf.Format(KFailCount,count,iSecondConnection->DeviceMessageCount());
- TheClient->iWs.LogMessage(buf);
- TheClient->iWs.Flush();
- }
- retVal = iSecondConnection->DeviceMessageCount();
- TEST(retVal==count);
- if (retVal!=count)
- INFO_PRINTF3(_L("(iSecondConnection->DeviceMessageCount() return value - Expected: %d, Actual: %d"),count ,retVal);
-
- CheckWindows(iCurEnforcement==ESizeEnforcementNone?ETrue:checkWindowParam);
- if (enable)
- iSecondConnection->EnableMessages();
- if (disable)
- iSecondConnection->DisableMessages();
- TheClient->iScreen->SetScreenMode(mode);
- TheClient->iWs.Flush();
- iSubState++;
- break;
- case 104:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0523
-*/
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0523"));
- buf.Format(TRefByValue<const TDesC>(_L("Screen mode %d:%d")),101,iSubState);
- INFO_PRINTF1(buf);
- checkWindowParam=ETrue;
- count=2;
- disable=ETrue;
- if (iCurEnforcement==ESizeEnforcementPixelsAndRotation)
- count+=3;
- else if (iCurEnforcement==ESizeEnforcementPixelsTwipsAndRotation)
- count+=6;
- if (iSecondConnection->DeviceMessageCount()!=count)
- {
- TLogMessageText buf;
- _LIT(KFailCount,"Event Mismatch, Exp=%d, Act=%d");
- buf.Format(KFailCount,count,iSecondConnection->DeviceMessageCount());
- TheClient->iWs.LogMessage(buf);
- TheClient->iWs.Flush();
- }
- retVal = iSecondConnection->DeviceMessageCount();
- TEST(retVal==count);
- if (retVal!=count)
- INFO_PRINTF3(_L("(iSecondConnection->DeviceMessageCount() return value - Expected: %d, Actual: %d"),count ,retVal);
-
- if (enable)
- iSecondConnection->EnableMessages();
- if (disable)
- iSecondConnection->DisableMessages();
- TheClient->iScreen->SetScreenMode(mode);
- TheClient->iWs.Flush();
- iSubState++;
- break;
- case 105:
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0524
-*/
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0524"));
- buf.Format(TRefByValue<const TDesC>(_L("Screen mode %d:%d")),101,iSubState);
- INFO_PRINTF1(buf);
- checkWindowParam=EFalse;
- count=2;
- enable=ETrue;
- if (iCurEnforcement==ESizeEnforcementPixelsAndRotation)
- count+=3;
- else if (iCurEnforcement==ESizeEnforcementPixelsTwipsAndRotation)
- count+=6;
- if (iSecondConnection->DeviceMessageCount()!=count)
- {
- TLogMessageText buf;
- _LIT(KFailCount,"Event Mismatch, Exp=%d, Act=%d");
- buf.Format(KFailCount,count,iSecondConnection->DeviceMessageCount());
- TheClient->iWs.LogMessage(buf);
- TheClient->iWs.Flush();
- }
- retVal = iSecondConnection->DeviceMessageCount();
- TEST(retVal==count);
- if (retVal!=count)
- INFO_PRINTF3(_L("(iSecondConnection->DeviceMessageCount() return value - Expected: %d, Actual: %d"),count ,retVal);
-
- CheckWindows(iCurEnforcement==ESizeEnforcementNone?ETrue:checkWindowParam);
- if (enable)
- iSecondConnection->EnableMessages();
- if (disable)
- iSecondConnection->DisableMessages();
- TheClient->iScreen->SetScreenMode(mode);
- TheClient->iWs.Flush();
-
-
- iSecondConnection->DisableMessages();
- if (iCurEnforcement==ESizeEnforcementNone)
- { // Do it again with different enforcement mode
- SetScreenModeEnforcement(ESizeEnforcementPixelsAndRotation);
- ResetCounter(100);
- }
- else if (iCurEnforcement==ESizeEnforcementPixelsAndRotation)
- { // Do it again with different enforcement mode
- SetScreenModeEnforcement(ESizeEnforcementPixelsTwipsAndRotation);
- ResetCounter(100);
- }
- else
- {
- SetScreenModeEnforcement(ESizeEnforcementNone);
- delete iSecondConnection;
- iSecondConnection=NULL;
- }
- TheClient->iWs.Flush();
- break;
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0302
-
- @SYMDEF DEF099638
-
- @SYMTestCaseDesc Test that a drawing can be scaled while different screen
- modes are set
-
- @SYMTestPriority High
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Set different screen modes and scale a drawing
-
- @SYMTestExpectedResults The drawing is redrawn to scale
-
-*/
- case 110:
- {
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0302"));
- // Ensure that the TestWin and BaseWin will be drawn properly in all screen modes
- SetScreenModeEnforcement(ESizeEnforcementPixelsAndRotation);
- TheClient->SetTestClientScreenMode(0);
- INFO_PRINTF1(_L("Scaled drawing - screen mode 0"));
- ScaledDrawingL();
- TheClient->SetTestClientScreenMode(1);
- INFO_PRINTF1(_L("Scaled drawing - screen mode 1"));
- ScaledDrawingL();
- // Restore screen mode and enforcement mode
- TheClient->SetTestClientScreenMode(0);
- SetScreenModeEnforcement(iOldEnfMode);
- break;
- }
-
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0303
-
- @SYMDEF DEF081259
-
- @SYMTestCaseDesc Test screen mode and rotation panic messages
-
- @SYMTestPriority High
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Test the panics fro screen mode and rotation respond as
- expected
-
- @SYMTestExpectedResults Panics respond as expected
-
-*/
- case 111:
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0303"));
- INFO_PRINTF1(_L("Panic"));
- TestPanicsL();
- break;
-#endif
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0304
-
- @SYMDEF DEF081259
-
- @SYMTestCaseDesc Test that if there are invisible windows and then the
- screen mode is changed, the windows are redrawn correctly
-
- @SYMTestPriority High
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Create some windows, make some invisible, change the screen
- mode and redraw the windows
-
- @SYMTestExpectedResults The windows are redrawn without error
-
-*/
- case 112:
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0304"));
- INFO_PRINTF1(_L("Invisible Wnds And Infinite Redraw Bugs")); // two defects one problem
- InvisibleWndAndInfiniteRedrawBugL();
- break;
-/**
-
- @SYMTestCaseID GRAPHICS-WSERV-0358
-
- @SYMDEF PDEF096151
-
- @SYMTestCaseDesc Ensure that wserv does not panic when calling CWsScreenDevice::SetScreenMode()
- after a client has deleted a screen device used by an active group window
-
- @SYMTestPriority Critical
-
- @SYMTestStatus Implemented
-
- @SYMTestActions Creates a RWsSession
- Creates a primary screen device
- Creates another screen device
- Creates a group window
- Gets all the valid screen modes
- Deletes the primary screen device
- Calls SetScreenMode on the second screen device
- (this step triggered the defect - panicking wserv)
- Cleans up the above
-
- @SYMTestExpectedResults The call to SetScreenMode should not cause wserv to panic
-
-*/
- case 113:
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0358"));
- INFO_PRINTF1(_L("Set screen mode after a client has deleted the screen device"));
- SetScreenModeAfterScreenDeviceDeletedL();
- break;
- case 114:
- INFO_PRINTF1(_L("Rotate/screen mode test"));
-/**
- @SYMTestCaseID GRAPHICS-WSERV-0525
-*/
- ((CTScrModeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0525"));
- TestRotateAndScreenModeL();
- break;
- default:
- ((CTScrModeStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
- if (iTest->iState==115 || iTest->iState>1000)
- TestComplete();
- break;
- }
- ((CTScrModeStep*)iStep)->RecordTestResultL();
- }
-
-//
-// CSecondConnection
-//
-
-CSecondConnection::~CSecondConnection()
- {
- delete iWindow;
- delete iWindow2;
- iGroup->GroupWin()->EnableReceiptOfFocus(EFalse); // Stop auto group switching on close
- delete iGroup;
- delete iClient;
- }
-
-void CSecondConnection::ConstructL(TInt aScreenNumber,const TRect &aWinRect, CTestBase *aTest, CTestStep* aTestStep)
- {
- iClient=new(ELeave) CTClient;
- iClient->SetScreenNumber(aScreenNumber);
- iClient->ConstructL();
- iGroup=new(ELeave) CSecondConnectionGroup(iClient,this,aTest,aTestStep);
- iGroup->ConstructL();
-//
- iWindow=new(ELeave) CTBlankWindow;
- iWindow->ConstructL(*iGroup);
- iWindow->BaseWin()->SetShadowDisabled(ETrue);
- iWindow->SetColor(TRgb::Gray4(1));
- TPoint offset=BaseWin->BaseWin()->InquireOffset((*iGroup->GroupWin()));
- iWindow->SetExtL(offset+aWinRect.iTl,aWinRect.Size());
- iWindow->Activate();
-//
- iWindow2=new(ELeave) CTBlankWindow;
- iWindow2->ConstructL(*iGroup);
- iWindow2->BaseWin()->SetShadowDisabled(ETrue);
- iWindow2->SetColor(TRgb::Gray4(1));
- TPoint offset2=TestWin->BaseWin()->InquireOffset((*iGroup->GroupWin()));
- iWindow2->SetExtL(offset2+aWinRect.iTl,aWinRect.Size());
- iWindow2->BaseWin()->SetVisible(EFalse);
- iWindow2->Activate();
- }
-
-void CSecondConnection::SetWindow2Visibility(TBool aVisible)
- {
- iWindow2->BaseWin()->SetVisible(aVisible);
- iClient->iWs.Flush();
- iClient->iWs.Finish();
- }
-
-void CSecondConnection::EnableMessages()
- {
- iGroup->GroupWin()->EnableScreenChangeEvents();
- iClient->iWs.Flush();
- }
-
-void CSecondConnection::DisableMessages()
- {
- iGroup->GroupWin()->DisableScreenChangeEvents();
- iClient->iWs.Flush();
- }
-
-TInt CSecondConnection::DeviceMessageCount() const
- {
- return(iMessageCount);
- }
-
-void CSecondConnection::ScreenDeviceChanged()
- {
- iMessageCount++;
- }
-
-//
-// CSecondConnectionGroup
-//
-
-CSecondConnectionGroup::CSecondConnectionGroup(CTClient *aClient, CSecondConnection *aSecondConnection, CTestBase *aTest, CTestStep* aTestStep) : CTWindowGroup(aClient), iTest(aTest), iSecondConnection(aSecondConnection), iTestStep(aTestStep)
- {}
-
-void CSecondConnectionGroup::ScreenDeviceChanged()
- {
- iSecondConnection->ScreenDeviceChanged();
- TPixelsTwipsAndRotation sar;
- Client()->iScreen->GetDefaultScreenSizeAndRotation(sar);
- Client()->iScreen->SetScreenSizeAndRotation(sar);
-//
- iTestStep->TEST(Client()->iScreen->SizeInPixels()==sar.iPixelSize);
- iTestStep->TEST(Client()->iScreen->SizeInTwips()==sar.iTwipsSize);
- TSize pixelConv;
- pixelConv.iWidth=Client()->iScreen->HorizontalTwipsToPixels(sar.iTwipsSize.iWidth);
- pixelConv.iHeight=Client()->iScreen->VerticalTwipsToPixels(sar.iTwipsSize.iHeight);
- iTestStep->TEST(pixelConv==sar.iPixelSize);
- }
-
-
-//
-// SecondClientConnection
-//
-
-SecondClientConnection::SecondClientConnection()
- {
- }
-
-SecondClientConnection::~SecondClientConnection()
- {
- }
-
-void SecondClientConnection::ConstructL(TInt aScreenMode, const TPixelsTwipsAndRotation& aSizeAndRotation)
- {
- CTClient::ConstructL();
- iGroup=new(ELeave) TestWindowGroup(this);
- iGroup->ConstructL();
- iScreen->SetScreenModeEnforcement(ESizeEnforcementPixelsAndRotation);
- iScreen->SetScreenSizeAndRotation(aSizeAndRotation);
- iScreen->SetScreenMode(aScreenMode);
- }
-
-__WS_CONSTRUCT_STEP__(ScrMode)