diff -r 000000000000 -r bde4ae8d615e os/graphics/windowing/windowserver/test/tauto/TGETPIXEL.CPP --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/os/graphics/windowing/windowserver/test/tauto/TGETPIXEL.CPP Fri Jun 15 03:10:57 2012 +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;indexiWs; + 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 (erriScreen->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;yposSetTestStepID(_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)