author | Gareth Stockwell <gareth.stockwell@accenture.com> |
Fri, 22 Oct 2010 11:38:29 +0100 | |
branch | bug235_bringup_0 |
changeset 206 | c170e304623f |
parent 0 | 5d03bc08d59c |
permissions | -rw-r--r-- |
// Copyright (c) 1995-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 <w32stdgraphic.h> // bitmap to load for comparison #define MY_TEST_BITMAP _L("Z:\\WSTEST\\MYTEST.MBM") const TUint32 ENullWsHandle=0xFFFFFFFF; const TInt KErrTestExeFailure = -666; // class to check if a shared CWsGraphic can be drawn correctly class CWsGraphicShareBase : public CBase { public: CWsGraphicShareBase(); ~CWsGraphicShareBase(); void ConstructL(); void DoTestDrawGraphicCompareL(TPtrC aShare); private : void Test(TInt aCondition); private : TInt iScreenNumber; CWindowGc *iGc; RWsSession iWs; RWindowGroup *iGroupWin; CWsScreenDevice *iScreen; RWindow *iWin; }; CWsGraphicShareBase::CWsGraphicShareBase() { iScreenNumber = 0; } CWsGraphicShareBase::~CWsGraphicShareBase() { iWin->Close(); delete iWin; delete iScreen; delete iGc; delete iGroupWin; iWs.Close(); } void CWsGraphicShareBase::ConstructL() { User::LeaveIfError(iWs.Connect()); iScreen=new(ELeave) CWsScreenDevice(iWs); User::LeaveIfError(iScreen->Construct(iScreenNumber)); iGc=new(ELeave) CWindowGc(iScreen); User::LeaveIfError(iGc->Construct()); iGroupWin=new(ELeave) RWindowGroup(iWs); iGroupWin->Construct(1); iWin=new(ELeave) RWindow(iWs); iWin->Construct(*iGroupWin,ENullWsHandle); iWin->SetRequiredDisplayMode(EColor256); iWin->SetExtent(TPoint(0,0),iScreen->SizeInPixels()); iWin->Activate(); iWin->BeginRedraw(); iWin->EndRedraw(); iWs.Flush(); } // Checks that the shared graphic is drawn or not. This is done by creating a new graphic in this process // which looks the same as the shared graphic. The new graphic is then drawn to the screen followed by an // attempt to draw the shared graphic. The two graphics are then compared. In cases where the shared graphic // should be drawn the two graphics should compare exactly. In cases where the shared graphic should not be // drawn the comparison will fail. void CWsGraphicShareBase::DoTestDrawGraphicCompareL(TPtrC aShare) { // UID of the shared graphic TUid uid1 = {0x12000021}; TWsGraphicId twsGraphicId1(uid1); _LIT8(KTestData,"HelloWorld"); CFbsBitmap bitmap1; CFbsBitmap mask1; TSize screenSize = iScreen->SizeInPixels(); User::LeaveIfError(bitmap1.Load(MY_TEST_BITMAP,0)); mask1.Create(bitmap1.SizeInPixels(),iScreen->DisplayMode()); CWsGraphicBitmap* bTest = CWsGraphicBitmap::NewL(&bitmap1,&mask1); // divide the screen into two equal rectangles TRect position1(0,0,screenSize.iWidth/2,screenSize.iHeight); TRect position2(screenSize.iWidth/2,0,screenSize.iWidth,screenSize.iHeight); // draw the new graphic and attempt to draw the shared graphic iGc->Activate(*iWin); iWin->Invalidate(); iWin->BeginRedraw(); iGc->Clear(position1); iGc->Clear(position2); iGc->DrawWsGraphic(bTest->Id(),position1,KTestData); iGc->DrawWsGraphic(twsGraphicId1.Uid(),position2,KTestData); iGc->Deactivate(); iWin->EndRedraw(); iWs.Flush(); iWs.Finish(); // compare the graphic in both positions if (aShare==_L("false")) Test(!iScreen->RectCompare(position1,position2)); else Test(iScreen->RectCompare(position1,position2)); delete bTest; } // Failures are written to WSERV.log void CWsGraphicShareBase::Test(TInt aCondition) { if(!aCondition) { TLogMessageText buf; _LIT(Fail,"AUTO Failed in WsGraphics Test : DrawSharedGraphic"); buf.Format(Fail); iWs.LogMessage(buf); iWs.Flush(); RProcess().Terminate(KErrTestExeFailure); // terminate this process immediately. Expect TWsGraph test step (TAutoServer.exe) to capture this } } void MainL() { // read the argument from the command line of whether the graphic should be shared or not TBuf<256> commandLine; User::CommandLine(commandLine); TLex lex(commandLine); TPtrC toShare = lex.NextToken(); CActiveScheduler* activeScheduler=new(ELeave) CActiveScheduler; CActiveScheduler::Install(activeScheduler); CleanupStack::PushL(activeScheduler); CWsGraphicShareBase testBase; testBase.ConstructL(); testBase.DoTestDrawGraphicCompareL(toShare); CleanupStack::PopAndDestroy(activeScheduler); } GLDEF_C TInt E32Main() { CTrapCleanup* cleanUpStack=CTrapCleanup::New(); if(cleanUpStack==NULL) { return KErrNoMemory; } TRAP_IGNORE(MainL()) delete cleanUpStack; return(KErrNone); }