windowing/windowserver/twsgraphic/TWsGraphicShareTest.CPP
changeset 0 5d03bc08d59c
--- /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);
+	}