--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/twsgraphic/TWsGraphicShareTest.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,182 @@
+// 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);
+ }