--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tauto/TGETPIXEL.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,395 @@
+// 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:
+// GETPIXEL.CPP
+// Automatically test GetPixel
+//
+//
+
+/**
+ @file
+ @test
+ @internalComponent - Internal Symbian test code
+*/
+
+#include "TGETPIXEL.H"
+
+CTGetPixel::CTGetPixel(CTestStep* aStep):
+ CTWsGraphicsBase(aStep)
+ {
+ }
+
+CTGetPixel::~CTGetPixel()
+ {
+ iWindow.Close();
+ User::Free(iRgbBuf);
+ }
+
+LOCAL_C TInt DoPanicTest(TInt aFunc, TAny *aScreenNumber)
+ {
+ RWsSession ws;
+ if (ws.Connect()==KErrNone)
+ switch(aFunc)
+ {
+ case 1: // Get pixels into a TPtr 1 pixel too small
+ {
+ CWsScreenDevice *screen = new(ELeave) CWsScreenDevice(ws);
+ User::LeaveIfError(screen->Construct((TInt)aScreenNumber));
+ CFbsBitmap *bitmap=new(ELeave) CFbsBitmap();
+ TInt bitWid=80;
+ TRgb *buf=NULL;
+ if (bitmap->Create(TSize(1,bitWid), EGray16)==KErrNone && (buf=(TRgb *)User::Alloc((bitWid-1)*sizeof(TRgb)))!=NULL)
+ {
+ TPtr8 desc((TUint8 *)buf,(bitWid-1)*sizeof(TRgb));
+ screen->GetScanLine(desc,TPoint(0,0),bitWid, ERgb);
+ }
+ }
+ break;
+ }
+ return(EWsExitReasonBad);
+ }
+
+void CTGetPixel::ClearOutRedraws()
+// This has been added because partial redraw store can be triggered to request a
+// low priority redraw from the window even though in normal circumstances the window
+// would not expect to receive any sort of redraw event.
+ {
+ iWindow.BeginRedraw();
+ iWindow.EndRedraw();
+ }
+
+void CTGetPixel::TestPanicsL()
+ {
+ if (!iTest->IsFullRomL())
+ {
+ TEST(iTest->TestWsPanicL(DoPanicTest,EWservPanicInvalidParameter,1,(TAny*)iTest->iScreenNumber));
+ }
+ }
+
+void CTGetPixel::DrawAndCheckLine(const TPoint &aPos,TInt aLen,TRgb aColor)
+ {
+ TheGc->Activate(iWindow);
+ TheGc->SetPenColor(aColor);
+ iWindow.BeginRedraw(TRect(aPos,TSize(aLen, 1)));
+ TheGc->DrawLine(aPos,aPos+TSize(aLen,0));
+ iWindow.EndRedraw();
+ TheGc->Deactivate();
+ iRgbBuf=(TRgb *)User::ReAlloc(iRgbBuf,aLen*sizeof(TRgb));
+ TPtr8 ptr((TUint8 *)iRgbBuf,aLen*sizeof(TRgb));
+ TheClient->iScreen->GetScanLine(ptr, aPos+iWindow.InquireOffset(*TheClient->iGroup->WinTreeNode()), aLen, EColor16MA);
+ TRgb result(TRgb::Gray16(aColor.Gray16()));
+ if (TheClient->iScreen->DisplayMode()==EColor64K)
+ result=TRgb::Color64K(result.Color64K());
+ for(TInt index=0;index<aLen;index++)
+ {
+ TEST(iRgbBuf[index]==result);
+ }
+ }
+
+void CTGetPixel::ConstructL()
+ {
+ iWindow = TheClient->iWs;
+ TheGc->Activate(*BaseWin->Win());
+ TheGc->Clear();
+ TheGc->SetBrushColor(TRgb::Gray16(0));
+ TheGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+ TheGc->SetPenStyle(CGraphicsContext::ENullPen);
+ TheGc->DrawRect(TRect(iWinSize));
+ TheGc->Deactivate();
+
+ iWindow.Construct(*TheClient->iGroup->GroupWin(),ENullWsHandle);
+ iWinSize=TSize(TheClient->iScreen->SizeInPixels());
+ iWinSize.iWidth/=3;
+ iWinSize.iHeight/=3;
+ iWindow.SetRequiredDisplayMode(EGray16);
+ TheClient->iWs.Flush();
+ iTest->DelayIfFullRomL(); // Need to wait for view server to mess around when display mode changed
+ TheClient->WaitForRedrawsToFinish();// otherwise it will stomp on top of our window invalidating it.
+ iWindow.SetExtent(TPoint(iWinSize.iWidth,iWinSize.iHeight),iWinSize);
+ iWindow.EnableRedrawStore(EFalse); // Otherwise drawing might trigger a redraw when purging redraw store
+
+ iWindow.Activate();
+ iWindow.BeginRedraw();
+ iWindow.EndRedraw();
+
+ }
+
+void CTGetPixel::TestCheckRect()
+ {
+ TSize size(TheClient->iScreen->SizeInPixels());
+ TEST(TheClient->iScreen->RectCompare(TRect(size),TRect(TPoint(iTest->StdTestWindowSize().iWidth>>1,0),iTest->StdTestWindowSize()))==EFalse);
+ }
+
+void CTGetPixel::DrawColorsL()
+ {
+ TPoint point(0,0);
+ TInt color=-1;
+ iWindow.BeginRedraw();
+ FOREVER
+ {
+ TheGc->SetPenColor(TRgb::Color256(++color));
+ TheGc->Plot(point);
+ if (color==255)
+ break;
+ if (++point.iX==iWinSize.iWidth)
+ {
+ point.iX=0;
+ if (++point.iY==iWinSize.iHeight)
+ break;
+ }
+ }
+ iWindow.EndRedraw();
+ }
+
+void CTGetPixel::TestColors(CPalette* aPalette)
+ {
+ TInt numColors=iWinSize.iWidth;
+ TPtr8 ptr(REINTERPRET_CAST(TUint8*,iRgbBuf),numColors*sizeof(TRgb));
+ TPtr8 paletteData(NULL,0);
+ TInt color=0;
+ TPoint point(iWinSize.AsPoint());
+ do {
+ if (color+numColors>256)
+ numColors=256-color;
+ TheClient->iScreen->GetScanLine(ptr,point,numColors,EColor16MA);
+ aPalette->GetDataPtr(color,numColors,paletteData);
+ TEST(ptr==paletteData);
+ color+=numColors;
+ } while (color<256 && ++point.iY<2*iWinSize.iHeight);
+ }
+
+void CTGetPixel::CheckPaletteL(CPalette*& aPalette)
+ {
+ User::LeaveIfError(TheClient->iScreen->SetCustomPalette(aPalette));
+ TestColors(aPalette);
+ delete aPalette;
+ User::LeaveIfError(TheClient->iScreen->GetPalette(aPalette));
+ TestColors(aPalette);
+ }
+
+inline TInt Inc(TInt& aValue)
+ {
+ if (aValue>255-83)
+ aValue-=256-83;
+ else
+ aValue+=83;
+ return aValue;
+ }
+
+inline TInt Inc2(TInt& aValue)
+ {
+ if (aValue>255-41)
+ aValue-=256-41;
+ else
+ aValue+=41;
+ return aValue;
+ }
+
+void CTGetPixel::PaletteTestL()
+ {
+ //INFO_PRINTF1(_L("AUTO PaletteTest "));
+ TInt numEntries;
+ TBool modifiable;
+ TheClient->iScreen->PaletteAttributes(modifiable,numEntries);
+ INFO_PRINTF2(_L("Number of entries in the palette %d"), numEntries);
+ if(numEntries > 65536)
+ {
+ INFO_PRINTF1(_L("These test cases has been skipped, as the screen is set up in true colour display mode, where palette is not applicable"));
+ return;
+ }
+ CPalette* palette=NULL;
+ if (!modifiable)
+ {
+ if (numEntries==4)
+ palette=CPalette::NewDefaultL(EGray4);
+ else if (numEntries==16)
+ palette=CPalette::NewDefaultL(EGray16);
+ else
+ palette=CPalette::NewL(numEntries);
+ //INFO_PRINTF1(_L(" Creating Empty Palette, setting it as palette"));
+ TInt err=TheClient->iScreen->SetCustomPalette(palette);
+ TEST(err==KErrNoMemory || err==KErrNotSupported || (err==KErrNone && numEntries<=16)); //Series5MX palettes are changeable even though they say they aren't
+ //INFO_PRINTF1(_L(" Palette setting test passed OK"));
+ delete palette;
+ }
+ TInt err=iWindow.SetRequiredDisplayMode(EColor256);
+ TheGc->Activate(iWindow);
+ DrawColorsL();
+ //INFO_PRINTF1(_L(" Drawn Colors"));
+ TheClient->iScreen->PaletteAttributes(modifiable,numEntries);
+ iRgbBuf=STATIC_CAST(TRgb*,User::ReAllocL(iRgbBuf,Max(256,iWinSize.iWidth)*sizeof(TRgb)));
+ if (err<KErrNone || modifiable==EFalse)
+ {
+ //INFO_PRINTF1(_L(" Palette Fixed"));
+ TInt err=TheClient->iScreen->GetPalette(palette);
+ if (err==KErrNotSupported)
+ return;
+ User::LeaveIfError(err);
+ TestColors(palette);
+ delete palette;
+ //INFO_PRINTF1(_L(" Tested Palette OK"));
+ return;
+ }
+ //INFO_PRINTF1(_L(" Palette Changeable"));
+ TEST(numEntries==256);
+ CPalette* defPalette=CPalette::NewDefaultL(EColor256);
+ CleanupStack::PushL(defPalette);
+ TestColors(defPalette);
+ User::LeaveIfError(TheClient->iScreen->GetPalette(palette));
+ TestColors(palette);
+ TInt color;
+ TInt index=0;
+ for (color=0;color<256;++color)
+ palette->SetEntry(color,TRgb::Gray256(color));
+ CheckPaletteL(palette);
+ for (color=0;color<256;++color)
+ palette->SetEntry(color,TRgb(Inc(index),Inc(index),Inc(index)));
+ CheckPaletteL(palette);
+ for (color=0;color<256;++color)
+ palette->SetEntry(color,TRgb(Inc2(index),Inc2(index),Inc2(index)));
+ CheckPaletteL(palette);
+ delete palette;
+ User::LeaveIfError(TheClient->iScreen->SetCustomPalette(defPalette));
+ TestColors(defPalette);
+ CleanupStack::PopAndDestroy(defPalette);
+ ClearOutRedraws();
+ }
+
+void CTGetPixel::RunTestCaseL(TInt /*aCurTestCase*/)
+ {
+ ((CTGetPixelStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+ switch(++iTest->iState)
+ {
+/**
+@SYMTestCaseID GRAPHICS-WSERV-0212
+
+@SYMDEF DEF081259
+
+@SYMTestCaseDesc Draw lines and check them by scanning the lines
+
+@SYMTestPriority High
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Draw lines and then scan them to check that they have
+ been drawn correctly
+
+@SYMTestExpectedResults Scanning the lines reveals they have been drawn correctly
+*/
+ case 1:
+ ((CTGetPixelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0212"));
+ TheClient->iWs.SetAutoFlush(ETrue);
+ iTest->LogSubTest(_L("Basic"));
+ DrawAndCheckLine(TPoint(0,2),iWinSize.iWidth-2,TRgb::Gray4(0));
+ DrawAndCheckLine(TPoint(0,iWinSize.iHeight-2),iWinSize.iWidth,TRgb::Gray4(1));
+ DrawAndCheckLine(TPoint(iWinSize.iWidth-1,iWinSize.iHeight-1),1,TRgb::Gray4(2));
+ ClearOutRedraws();
+ TheClient->iWs.SetAutoFlush(EFalse);
+ break;
+/**
+@SYMTestCaseID GRAPHICS-WSERV-0213
+
+@SYMDEF DEF081259
+
+@SYMTestCaseDesc Draw line on every line of a window and
+ check them by scanning the lines
+
+@SYMTestPriority High
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Draw lines on every line of a window and
+ check them by scanning the lines
+
+@SYMTestExpectedResults Scanning the lines reveals they have been drawn correctly
+*/
+
+ case 2:
+ {
+ ((CTGetPixelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0213"));
+ iTest->LogSubTest(_L("Full window"));
+ for(TInt ypos=0;ypos<iWinSize.iHeight;ypos++)
+ DrawAndCheckLine(TPoint(0,ypos),iWinSize.iWidth,TRgb::Gray4(0));
+ ClearOutRedraws();
+ }
+ break;
+/**
+@SYMTestCaseID GRAPHICS-WSERV-0214
+
+@SYMDEF DEF081259
+
+@SYMTestCaseDesc Test the check rect method
+
+@SYMTestPriority High
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Use the check rect method to check the image in a window
+
+@SYMTestExpectedResults The check rect method functions correctly
+*/
+ case 3:
+ ((CTGetPixelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0214"));
+ iTest->LogSubTest(_L("Check Rect"));
+ TestCheckRect();
+ break;
+/**
+@SYMTestCaseID GRAPHICS-WSERV-0215
+
+@SYMDEF DEF081259
+
+@SYMTestCaseDesc Test that the GetScanLine method panics correctly
+
+@SYMTestPriority High
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Cause the GetScanLine method to panic and chekc the response
+
+@SYMTestExpectedResults The panic for the GetScanLine method is correct
+*/
+ case 4:
+ ((CTGetPixelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0215"));
+ iTest->LogSubTest(_L("Panic"));
+ TestPanicsL();
+ break;
+/**
+@SYMTestCaseID GRAPHICS-WSERV-0216
+
+@SYMDEF DEF081259
+
+@SYMTestCaseDesc Test that CPalette class functions correctly
+
+@SYMTestPriority High
+
+@SYMTestStatus Implemented
+
+@SYMTestActions Create a CPalette object and exercise all its methods
+
+@SYMTestExpectedResults The palette functions as exepcted
+*/
+ case 5:
+ ((CTGetPixelStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0216"));
+ iTest->LogSubTest(_L("Palette Test"));
+ PaletteTestL();
+ break;
+ case 6:
+ ((CTGetPixelStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+ ((CTGetPixelStep*)iStep)->CloseTMSGraphicsStep();
+ TestComplete();
+ break;
+ }
+ ((CTGetPixelStep*)iStep)->RecordTestResultL();
+ }
+
+__WS_CONSTRUCT_STEP__(GetPixel)