windowing/windowserver/tdynamicres/inc/t_wsdynamicreswinbase.h
changeset 0 5d03bc08d59c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tdynamicres/inc/t_wsdynamicreswinbase.h	Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,169 @@
+// Copyright (c) 2008-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:
+// twsgcetestwinbase.h
+// 
+//
+
+#ifndef TWSDYNAMICRESWINBASE_H_
+#define TWSDYNAMICRESWINBASE_H_
+
+#include <gdi.h>
+#include <test/tefunit.h>
+#include <w32std.h>
+#include <w32debug.h>
+#include "wsgcedebugsession.h"
+struct TWsDebugWindowId;
+
+/**
+ * Base class sets up the tryptich of test windows.
+ * 
+ * 
+ **/
+class CWsDynamicResWinBase : public CTestFixture
+{
+public:
+	CWsDynamicResWinBase();
+	virtual ~CWsDynamicResWinBase();
+	virtual void SetupL();
+	virtual void SetupL(TBool aUseOtherScreenForInfo);
+	
+	virtual void TearDownL();
+	virtual void TearDownFromDeleteL();
+	
+	static TBool	ActivateWithWipe(CWindowGc* aGc,RWindow& aWin,TRgb aColor=TRgb(0,0));
+	
+	/* Note that each derived test class needs to declare a static function to register tests.
+	 * This should match the following prototype:
+	static CTestSuite* CreateSuiteL( const TDesC& aName );
+	*/ 
+	
+protected:
+	static void Pause(TInt aMilliseconds=200);
+
+	TBool GCEIsSupported() const;
+	static TBool GCEIsSupportedStatic();
+
+	TBool DisplayHasAlpha() const;
+	TBool SelectChromaCompositionMode();
+	TBool SelectAlphaCompositionMode(TDisplayMode aMode = EColor16MA);
+	TRgb  GceHoleColor(RWindowBase& aWin)const;
+	void DrawUIContent(RWindow& aWindow);
+	void DrawPlainUI(RWindow& aWindow,TBool aInvalidate,TRgb aWipeColor=TRgb(0,0));
+	void DrawCross(RWindow& aWindow, TRgb aColor, TInt aThickness=1);
+	void TestPixelL(TPoint aPt, TRgb aColor, TBool aMatch);
+	TBool TestRectL(TRect aRect,TRgb aInnerColor,TInt aOtherInnerColors,TRgb aOuterColor,TInt aOtherOuterColors,TInt aCornerSize);
+	void MakeTitleAndCompareWindowsL(TRefByValue<const TDesC16> aTitle,TRefByValue<const TDesC16> aDetail=_L(""));
+	void LargerCompareWindow(TBool aGoLarger=ETrue);
+	void UpdateTitleWindowL(TRefByValue<const TDesC16> aDetail,TInt aIndex=0);
+	void RepaintTitleWindowL();
+	void TefUnitFailLeaveL();
+	CWindowGc*	GcForWindow(RWindow& aWin);
+	TBool		InvalidateRegion(const TRegion& aRegion,RWindow& aWin);
+	CWindowGc*	BeginActivateWithWipe(TBool aInvalidate,RWindow& aWin,TRgb aColor=TRgb(0,0));
+	CWindowGc*	BeginActivateWithWipe(TBool aInvalidate,TRect aRect,RWindow& aWin,TRgb aColor=TRgb(0,0));
+	CWindowGc*	BeginActivateWithWipe(const TRegion& aRegion,RWindow& aWin,TRgb aColor);
+	/** Helper method to find a named screen region
+	 *	start/end letter should be 'a' to 'y' (yes that includes 'i')
+	 **/
+	static TRect PentCellRect(const TRect& aFullRect,char aStartLetter,char aEndLetter=0);
+	void CheckAndConnectScreen();
+
+protected:
+	static const TInt KSurfaceWidth = 50;
+	static const TInt KSurfaceHeight = 50;
+	TBool	iDoTearDown;
+	RWsDebugSession iSession;
+	RWindowGroup iGroup;
+	RWindowGroup iInfoGroupInstance;
+	RWindowGroup* iInfoGroup;
+	CWsScreenDevice* iScreenDevice;
+	CWsScreenDevice* iInfoScreenDevice;
+	CWindowGc* iGc;
+	CWindowGc* iInfoGc;
+	TInt iWindowHandle;
+	static TBool	iTransparencyEnabled;
+	TRgb iRed, iGreen, iBlue, iCyan, iMagenta, iYellow, iWhite;
+	TRgb TITLE_BACKGROUND;
+	TRgb COMPARE_BACKGROUND;
+	RBlankWindow iBackground;
+	RWindow iCompare;
+	RWindow iTitle;
+	TRect 	iTestPos;
+	TRect   iCenteredFrontWinRect;
+	TPoint	iTestPointCentre;
+	TDisplayMode iDisplayMode;
+	static const TInt KMaxTestName = 80;
+	typedef TBuf<KMaxTestName> TTestName;
+	mutable TRgb	iLastGceHoleColor;
+	TTestName iTestName;
+	static const TInt KMaxInfoLines=5;
+	TTestName iTestInfo[KMaxInfoLines];
+	static CActiveScheduler	iScheduler;
+};
+
+// This little helper class checks that the given bytes contain the expected pattern.
+namespace Pattern
+	{
+		void Fill(void* aTrg,TInt aOffset,TInt aLength);
+		TBool Check(void* aTrg,TInt aOffset,TInt aLength);
+		TBool CheckVal(void* aTrg,TInt aOffset,TInt aLength,char val=0);
+	}
+
+//This wrapper for the configuration class allows stress testing of the configuration object
+
+template <class TXxxConfiguration,TInt aExtraSize,TInt aFalseSize> 
+class TestExtend:	public TXxxConfiguration
+	{
+public:
+	char iExtraData[aExtraSize];
+	TestExtend():
+		TXxxConfiguration(aFalseSize)
+		{
+		TXxxConfiguration::iSize=aFalseSize;
+		Pattern::Fill(this,aFalseSize,sizeof(*this)-aFalseSize);
+		}
+	void* operator new(unsigned int,TestExtend* inplace)
+	{	//Use this inplace operator new to pre-initialise the memory
+	return inplace;
+	}
+	void operator delete(void*,TestExtend*)
+	{	//Stops the warning!
+	}
+	TestExtend(const TXxxConfiguration&i):
+		TXxxConfiguration(i)
+		{
+		Pattern::Check(this,sizeof(TXxxConfiguration),aExtraSize);
+		}
+	TBool WasExtraOverwritten()
+		{
+		return Pattern::Check(this,sizeof(TXxxConfiguration),aExtraSize);
+		}
+	TBool WasFalseSizeOverwritten()
+		{
+		return Pattern::Check(this,aFalseSize,sizeof(*this)-aFalseSize);
+		}
+	TBool WasFalseSizeZero()
+		{
+		return Pattern::CheckVal(this,aFalseSize,sizeof(TXxxConfiguration)-aFalseSize);
+		}
+	void	StompValue(TInt aOffsetInLongs,TInt aNewValue)
+		{
+		*((TInt*)this+aOffsetInLongs)=aNewValue;
+		}
+	TInt	ReadValue(TInt aOffsetInLongs)
+		{
+		return *((TInt*)this+aOffsetInLongs);
+		}
+	};
+#endif /*TWSDYNAMICRESWINBASE_H_*/