windowing/windowserver/test/tauto/TFADE.CPP
changeset 103 2717213c588a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/test/tauto/TFADE.CPP	Tue Jun 22 15:21:29 2010 +0300
@@ -0,0 +1,2126 @@
+// Copyright (c) 1998-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:
+// Test Fading and UnFading of windows
+// 
+//
+
+#include "TFADE.H"
+#define __DISPLAY_MODE_64K_COLOR
+
+//CRedrawWin
+
+CRedrawWin::CRedrawWin(CTFade *aTest) : CTWin(), iTest(aTest)
+	{}
+
+CRedrawWin::~CRedrawWin()
+	{
+	}
+
+void CRedrawWin::ConstructL(TRect aArea)
+	{
+
+	ConstructExtLD(*TheClient->iGroup,aArea.iTl,aArea.Size());
+	AssignGC(*TheClient->iGc);
+	Activate();
+	iWin.BeginRedraw();
+	iWin.EndRedraw();
+	}
+
+void CRedrawWin::Draw()
+	{
+	iTest->Drawing(iTest->Content(),iGc);
+	}
+
+
+//CFadeTest
+
+CTFade::CTFade(CTestStep* aStep) : CTWsGraphicsBase(aStep)
+	{
+#if defined (__MARM_THUMB__)
+	CanFade = false;
+	CanFadeSet = false;
+#endif
+	}
+
+void CTFade::ConstructL()
+	{
+	iDeviceDisplayMode=TheClient->iScreen->DisplayMode();
+	iTestWinSize=StdTestWindowSize();
+	iFadeDrawMode = iDeviceDisplayMode;
+	iTestWinCopy = new (ELeave) CFbsBitmap();
+	iTestWinCopy->Create(iTestWinSize,TheClient->iScreen->DisplayMode());
+	iCheckWinCopy = new (ELeave) CFbsBitmap();
+	iCheckWinCopy->Create(iTestWinSize,TheClient->iScreen->DisplayMode());
+	}
+
+CTFade::~CTFade()
+	{
+	__ASSERT_ALWAYS(!iBlankWin,AutoPanic(EAutoFadeWindow));
+	delete iTestWinCopy;
+	delete iCheckWinCopy;
+	}
+
+TInt CTFade::Content()
+	{
+	return iContent;
+	}
+
+void CTFade::CreateBlankWindowL()
+	{
+	__ASSERT_ALWAYS(!iBlankWin,AutoPanic(EAutoFadeWindow));
+	TSize scrSize(TheClient->iScreen->SizeInPixels());
+	iTestWinSize.SetSize(2*scrSize.iWidth/3-6,scrSize.iHeight-6);
+	iBlankWin=new(ELeave) CTBlankWindow();
+	iWindowRect.SetRect(TPoint(3+scrSize.iWidth/3,3),iTestWinSize);
+	iBlankWin->SetUpL(iWindowRect.iTl,iTestWinSize,TheClient->iGroup,*TheClient->iGc);
+	iBlankWin->BaseWin()->SetRequiredDisplayMode(EGray16);
+	}
+
+void CTFade::DestroyBlankWindow()
+	{
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	delete iBlankWin;
+	iBlankWin=NULL;
+	}
+
+void CTFade::CreateBackupWindowL(TBool aMaintainBackup)
+	{
+	__ASSERT_ALWAYS(!iWin,AutoPanic(EAutoFadeWindow));
+	CTBackedUpWin* backUpWin=new(ELeave) CTBackedUpWin(MODE_LT_64K(iDeviceDisplayMode)?iFadeDrawMode:iDeviceDisplayMode);
+	iWin=backUpWin;
+	iOwnWindow=ETrue;
+	iWindowRect.SetRect(TPoint(2*iTestWinSize.iWidth+35,7),iTestWinSize);
+	backUpWin->ConstructExtLD(*TheClient->iGroup,iWindowRect.iTl,iTestWinSize);
+	if (aMaintainBackup)
+		backUpWin->BackedUpWin()->MaintainBackup();
+	backUpWin->Activate();
+	TheClient->WaitForRedrawsToFinish();		//Without this bitmaps won't draw into the window
+	}
+
+void CTFade::CreateRedrawWindowL()
+	{
+	__ASSERT_ALWAYS(!iWin,AutoPanic(EAutoFadeWindow));
+	iWindowRect.SetRect(TPoint(2*iTestWinSize.iWidth+35,7),iTestWinSize);
+	CRedrawWin* redrawWin=new(ELeave) CRedrawWin(this);
+	redrawWin->ConstructL(iWindowRect);
+	redrawWin->Win()->EnableRedrawStore(EFalse);
+	iWin=redrawWin;
+	iOwnWindow=ETrue;
+	iWin->BaseWin()->SetRequiredDisplayMode(iFadeDrawMode);
+	}
+
+void CTFade::DestroyDrawableWindow()
+	{
+	__ASSERT_ALWAYS(iWin,AutoPanic(EAutoFadeWindow));
+	if (iOwnWindow)
+		delete iWin;
+	iWin=NULL;
+	}
+
+void CTFade::CreateBitmapsL()
+	{
+	iTestWinSize=BaseWin->Size();
+	iBaseRect.SetRect(BaseWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),iTestWinSize);
+	iNormalBitmap.Create(iTestWinSize,MODE_LT_64K(iDeviceDisplayMode)?iFadeDrawMode:iDeviceDisplayMode);
+	iFadedBitmap.Create(iTestWinSize,MODE_LT_64K(iDeviceDisplayMode)?iFadeDrawMode:iDeviceDisplayMode);
+	iNormalBitmapDevice=CFbsBitmapDevice::NewL(&iNormalBitmap);
+	iFadedBitmapDevice=CFbsBitmapDevice::NewL(&iFadedBitmap);
+	User::LeaveIfError(iNormalBitmapDevice->CreateContext(iNormalBitGc));
+	User::LeaveIfError(iFadedBitmapDevice->CreateContext(iFadedBitGc));
+	iFadedBitGc->SetFadeMode(ETrue);
+	iBaseWinMode=BaseWin->BaseWin()->DisplayMode();
+	BaseWin->BaseWin()->SetRequiredDisplayMode(iFadeDrawMode);
+	}
+
+void CTFade::DestroyBitmaps()
+	{
+	delete iNormalBitGc;
+	delete iFadedBitGc;
+	delete iNormalBitmapDevice;
+	delete iFadedBitmapDevice;
+	BaseWin->BaseWin()->SetRequiredDisplayMode(iBaseWinMode);
+	}
+
+void CTFade::Drawing(TInt aDrawFunc, CBitmapContext *gc)
+	{
+	TRgb grey=TRgb::Gray4(2);
+	TInt ii;
+	gc->Reset();
+	switch (aDrawFunc)
+		{
+	case 1:
+	case 2:
+		Draw(0,&grey,gc);
+		gc->Reset();
+		Draw(1,NULL,gc);
+		if (aDrawFunc==1)
+			break;
+		gc->Reset();
+		Draw(3,NULL,gc);
+		break;
+	case 3:
+		Draw(0,&grey,gc);
+		gc->Reset();
+		Draw(3,NULL,gc);
+		break;
+	case 4:
+		grey=TRgb::Gray4(1);
+		gc->Reset();
+		Draw(0,&grey,gc);
+		gc->Reset();
+		for (ii=1;ii<37;ii+=7)
+			Draw(2,&ii,gc);
+		break;
+	case 5:
+		Draw(0,&grey,gc);
+		gc->Reset();
+		Draw(1,NULL,gc);
+		gc->Reset();
+		for (ii=2;ii<60;ii+=11)
+			Draw(2,&ii,gc);
+		break;
+	case 6:
+	case 7:
+		Draw(0,&grey,gc);
+		gc->Reset();
+		Draw(3,NULL,gc);
+		gc->Reset();
+		for (ii=3;ii<70;ii+=13)
+			Draw(2,&ii,gc);
+		if (aDrawFunc==6)
+			break;
+		gc->Reset();
+		Draw(1,NULL,gc);
+		break;
+	default:;
+		}
+	}
+
+void CTFade::Draw(TInt aDrawFunc, TAny *aParam, TBool aAlternativeFade/*=EFalse*/, TBool aFade/*=EFalse*/)
+	{
+	CWindowGc *gc=TheClient->iGc;
+	gc->Activate(*iWin->DrawableWin());
+	gc->Reset();
+	if (aFade)
+		gc->SetFaded(ETrue);
+	iNormalBitGc->Reset();
+	iFadedBitGc->Reset();
+	iFadedBitGc->SetFadeMode(ETrue);
+	if (aAlternativeFade)
+		iFadedBitGc->SetFadingParameters(BLACK_ALTERNATE,WHITE_ALTERNATE);
+	Draw(aDrawFunc,aParam,gc);
+	Draw(aDrawFunc,aParam,iNormalBitGc);
+	Draw(aDrawFunc,aParam,iFadedBitGc);
+	gc->Deactivate();
+	if (aAlternativeFade)
+		iFadedBitGc->SetFadingParameters(BLACK_NORMAL,WHITE_NORMAL);
+	}
+
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA // CWindowGc fading is deprecated in NGA
+void CTFade::GCDraw(TInt aDrawFunc, TAny *aParam, TBool aAlternativeFade)
+	{
+	CWindowGc *gc=TheClient->iGc;
+	gc->Activate(*iWin->DrawableWin());
+	gc->Reset();
+	Draw(aDrawFunc,aParam,gc);
+	gc->Deactivate();
+	gc->Activate(*BaseWin->DrawableWin());
+	gc->Reset();
+	gc->SetFaded(ETrue);
+	if (aAlternativeFade)
+		gc->SetFadingParameters(BLACK_ALTERNATE,WHITE_ALTERNATE);
+	Draw(aDrawFunc,aParam,gc);
+	gc->Deactivate();
+	}
+#endif // TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+
+void CTFade::Draw(TInt aDrawFunc, TAny *aParam, CBitmapContext *aGc)
+	{
+	switch(aDrawFunc)
+		{
+		case 0:
+			aGc->SetBrushColor(*((TRgb *)aParam));
+			aGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
+			aGc->SetPenStyle(CGraphicsContext::ENullPen);
+			aGc->DrawRect(TRect(iTestWinSize));
+			break;
+		case 1:
+			{
+			TSize half(iTestWinSize.iWidth/2,iTestWinSize.iHeight/2);
+			TRect rect(half);
+			aGc->DrawEllipse(rect);
+			aGc->DrawEllipse(TRect(TPoint(0,half.iHeight),half));
+			aGc->SetOrigin(TPoint(half.iWidth,0));
+			aGc->SetClippingRect(rect);
+			aGc->DrawEllipse(rect);
+			aGc->SetOrigin(TPoint(half.iWidth,half.iHeight));
+			aGc->SetClippingRect(rect);
+			aGc->DrawEllipse(rect);
+			aGc->SetOrigin(TPoint());
+			aGc->CancelClippingRect();
+			}
+			break;
+		case 2:
+			{
+			TInt param= *((TInt *)aParam);
+			if (param&0x1)
+				aGc->DrawLine(TPoint(param+(param*27)%iTestWinSize.iWidth,0),
+							 TPoint(iTestWinSize.iWidth-((param<<1)+(param*19)%iTestWinSize.iWidth),iTestWinSize.iHeight));
+			else
+				aGc->DrawLine(TPoint(0, (param<<1)+(param*7)%iTestWinSize.iHeight),
+							 TPoint(iTestWinSize.iWidth,param+(param*13)%iTestWinSize.iHeight));
+			}
+			break;
+		case 3:
+			{
+			TPoint pos;
+			for(;pos.iX<iTestWinSize.iWidth;pos.iX+=10)
+				aGc->DrawLine(pos,pos+TSize(0,iTestWinSize.iHeight));
+			for(pos.iX=0;pos.iY<iTestWinSize.iHeight;pos.iY+=10)
+				aGc->DrawLine(pos,pos+TSize(iTestWinSize.iWidth,0));
+			}
+			break;
+		}
+	}
+
+void CTFade::CompareWithBitmap(TBool aFade)
+	{
+	TBool match;
+	CWindowGc& gc=*TheClient->iGc;
+	CFbsBitmap* bitmap;
+	TheClient->iWs.Flush();
+	if (aFade)
+		bitmap=&iFadedBitmap;
+	else
+		bitmap=&iNormalBitmap;
+	gc.Activate(*BaseWin->DrawableWin());
+	gc.Reset();
+	gc.BitBlt(TPoint(),bitmap);
+	gc.Deactivate();
+	TheClient->iWs.Flush();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+	match=TheClient->iScreen->RectCompare(iBaseRect,iWindowRect);
+#else // In NGA comparison has to be lossy because fading can be implemented on hardware
+	match=LossyCompareWindow(*TheClient->iScreen, *iTestWinCopy, *iCheckWinCopy, iWindowRect);
+#endif
+	TEST(match);
+	if (!match)
+			{
+			_LIT(KLog,"Windows content don't match when they should");
+			LOG_MESSAGE(KLog);
+			}
+	}
+
+void CTFade::CompareWindows(TBool aAlternativeFade/*=EFalse*/)
+	{
+	if (aAlternativeFade)
+		iWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly,BLACK_ALTERNATE,WHITE_ALTERNATE);
+	else
+		iWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+	TheClient->iWs.Flush();
+	TBool retVal = TheClient->iScreen->RectCompare(iBaseRect,iWindowRect);
+	TEST(retVal);
+	if (!retVal)
+		INFO_PRINTF3(_L("TheClient->iScreen->RectCompare(iBaseRect,iWindowRect) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+
+	iWin->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+	TheClient->iWs.Flush();
+	TheClient->WaitForRedrawsToFinish();
+	}
+
+#define FADE(n,col) n/2+col/2
+TInt CTFade::Fade4(TInt aGray4)
+	{
+#if defined(__WINS__)
+	return FADE(4,aGray4);
+#elif defined (__MARM_THUMB__)
+	return (CanFade ? FADE(4,aGray4):aGray4);
+#elif defined (__MARM__)
+	return FADE(4,aGray4);
+#else
+	return aGray4;
+#endif
+	}
+
+TInt CTFade::Fade16(TInt aGray16)
+	{
+#if defined(__WINS__)
+	return FADE(16,aGray16);
+#elif defined (__MARM_THUMB__)
+	return (CanFade ? FADE(16,aGray16):aGray16);
+#elif defined (__MARM__)
+	return FADE(16,aGray16);
+#else
+	return aGray16;
+#endif
+	}
+
+TRgb CTFade::FadeRgb(TRgb aColor)
+	{
+	switch (iFadeDrawMode)
+		{
+	case EColor16M:
+	case EColor16MU:		
+	case EColor16MA:
+	case EColor16MAP:
+		break; 
+	default:
+		aColor=TRgb::Color64K(aColor.Color64K());
+		break; 
+		}
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA // Color fading calculation differs in NGA
+	TInt fadeMapFactor=WHITE_NORMAL-BLACK_NORMAL+1;
+#else
+	TInt fadeMapFactor=WHITE_NORMAL-BLACK_NORMAL;
+#endif
+	TInt fadeMapOffset=BLACK_NORMAL;
+	TInt value = aColor.Internal();
+
+	TInt b = (((value & 0x000000ff) * fadeMapFactor) >> 8) + fadeMapOffset;
+	TInt g = (((value & 0x0000ff00) * fadeMapFactor) >> 16) + fadeMapOffset;
+	TInt r = (((value & 0x00ff0000) * fadeMapFactor) >> 24) + fadeMapOffset;
+	return TRgb(r,g,b);
+	}
+
+TRgb CTFade::FadeRgb(TRgb aColor, TInt aFadeMapFactor, TInt aFadeMapOffset)
+	{
+	switch (iFadeDrawMode)
+		{
+	case EColor16M:
+	case EColor16MU:
+	case EColor16MA:
+	case EColor16MAP:
+		break; 
+	default:
+		aColor=TRgb::Color64K(aColor.Color64K());
+		break; 
+		}
+	TInt value = aColor.Internal();
+
+	TInt b = (((value & 0x000000ff) * aFadeMapFactor) >> 8) + aFadeMapOffset;
+	TInt g = (((value & 0x0000ff00) * aFadeMapFactor) >> 16) + aFadeMapOffset;
+	TInt r = (((value & 0x00ff0000) * aFadeMapFactor) >> 24) + aFadeMapOffset;
+	return TRgb(r,g,b);
+	}
+
+inline void CTFade::ViewDelay()
+	//
+	//This routine can provide a delay which will allow the user to see the colors changing
+	//
+	{
+	TheClient->iWs.Finish();
+	/*TheClient->iWs.Flush();
+	User::After(1000000);*/		// 1 sec
+	}
+
+void CTFade::ColorTest()
+	{
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	TBool retVal;
+	TSize size(iTestWinSize);
+#if defined(SMALL_RECTS)
+	size.iWidth=Min(SIZE_X,size.iWidth);
+	size.iHeight=Min(SIZE_Y,size.iHeight);
+#endif
+	TRect windowRect(iBlankWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),size);
+	TInt ii;
+	iBlankWin->BaseWin()->SetRequiredDisplayMode(EGray4);
+	TheClient->WaitForRedrawsToFinish();		//Force the screen into 4 gray mode
+	TRgb fadedColor;
+	for (ii=1;ii<4;ii+=2)		//0 and 3 now give dithered colors when fading so causing this test to fail
+		{
+		iBlankWin->SetColor(TRgb::Gray4(ii));
+		ViewDelay();
+		INFO_PRINTF1(_L(" Testing Normal Color"));
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+		retVal = CheckBlankWindow(windowRect,TRgb::Gray4(ii),TheClient->iScreen);
+#else
+		TheClient->iScreen->CopyScreenToBitmap(iTestWinCopy, windowRect);
+		retVal = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray4(ii));
+#endif
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray4(ii),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+		iBlankWin->BaseWin()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+		ViewDelay();
+		fadedColor=MODE_LT_64K(iDeviceDisplayMode)?TRgb::Gray4(Fade4(ii)):FadeRgb(TRgb::Gray4(ii));
+#if defined (__MARM_THUMB__)
+		if (ii==1)
+			{
+			CanFade=!CheckBlankWindow(windowRect,fadedColor,TheClient->iScreen);
+			CanFadeSet=ETrue;
+			fadedColor=MODE_LT_64K(iDeviceDisplayMode)?TRgb::Gray4(Fade4(ii)):FadeRgb(TRgb::Gray4(ii));
+			}
+#endif
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+		retVal = CheckBlankWindow(windowRect,fadedColor,TheClient->iScreen);
+#else
+		retVal = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, fadedColor);
+#endif
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("CheckBlankWindow(windowRect,fadedColor,TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+	
+		iBlankWin->BaseWin()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+		ViewDelay();
+		INFO_PRINTF1(_L(" Testing Unfaded Color"));
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+		retVal = CheckBlankWindow(windowRect,TRgb::Gray4(ii),TheClient->iScreen);
+#else
+		retVal = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray4(ii));
+#endif
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray4(ii),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+		}
+	iBlankWin->BaseWin()->SetRequiredDisplayMode(EGray16);
+
+	if (MaxGrays()==0 && MaxColors()<256)
+		return;
+
+	INFO_PRINTF1(_L(" Doing 16 Gray Colors"));
+	for (ii=0;ii<16;++ii)
+		{
+		iBlankWin->SetColor(TRgb::Gray16(ii));
+		ViewDelay();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+		retVal = CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen);
+#else
+		retVal = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray16(ii));
+#endif
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+
+		iBlankWin->BaseWin()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+		ViewDelay();
+		fadedColor=MODE_LT_64K(iDeviceDisplayMode)?TRgb::Gray16(Fade16(ii)):FadeRgb(TRgb::Gray16(ii));
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+		retVal = CheckBlankWindow(windowRect,fadedColor,TheClient->iScreen);
+#else
+		retVal = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, fadedColor);
+#endif
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("CheckBlankWindow(windowRect,fadedColor,TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+
+		iBlankWin->BaseWin()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+		ViewDelay();
+	
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+		retVal = CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen);
+#else
+		retVal = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray16(ii));
+#endif
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+		}
+	}
+
+void CTFade::BlankWindowL()
+	{
+	TBool retVal;
+	if (MaxGrays()==0 && MaxColors()<256)
+		return;
+
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	CTBlankWindow* blankWin=new(ELeave) CTBlankWindow();
+	TRect testArea(iWindowRect);
+	TRect windowRect(testArea);
+#if defined(SMALL_RECTS)
+	TSize size(testArea.Size());
+	size.iWidth=Min(2*SIZE_X,size.iWidth);
+	size.iHeight=Min(2*SIZE_Y,size.iHeight);
+	testArea.SetHeight(size.iHeight);
+	testArea.iTl.iX=testArea.iBr.iX-size.iWidth;
+	windowRect=testArea;
+	windowRect.Shrink(size.iWidth/4,size.iHeight/4);
+#else
+	windowRect.Shrink(30,30);
+#endif
+	blankWin->SetUpL(windowRect.iTl,windowRect.Size(),TheClient->iGroup,*TheClient->iGc);
+	for (TInt col=2;col<16;col+=6)
+		{
+		iBlankWin->SetColor(TRgb::Gray16(col));
+		TheClient->iScreen->CopyScreenToBitmap(iTestWinCopy, windowRect);
+		iBlankWin->BaseWin()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+		blankWin->SetVisible(EFalse);
+		TheClient->iWs.Finish();
+		TRgb fadedColor=MODE_LT_64K(iDeviceDisplayMode)?TRgb::Gray16(Fade16(col)):FadeRgb(TRgb::Gray16(col));
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+ 		retVal = CheckBlankWindow(testArea,fadedColor,TheClient->iScreen);
+#else
+		retVal = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, fadedColor);
+#endif
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, fadedColor) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+
+ 		blankWin->SetVisible(ETrue);
+		iBlankWin->BaseWin()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+		blankWin->SetVisible(EFalse);
+		TheClient->iWs.Finish();
+		retVal = CheckBlankWindow(testArea,TRgb::Gray16(col),TheClient->iScreen);
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("CheckBlankWindow(testArea,TRgb::Gray16(col),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+
+ 		blankWin->SetVisible(ETrue);
+		iBlankWin->SetPos(iWindowRect.iTl+TPoint(15,-15));
+		iBlankWin->BaseWin()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+		blankWin->SetVisible(EFalse);
+		iBlankWin->SetPos(iWindowRect.iTl);
+		fadedColor=MODE_LT_64K(iDeviceDisplayMode)?TRgb::Gray16(Fade16(col)):FadeRgb(TRgb::Gray16(col));
+		TheClient->iWs.Finish();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+		retVal = CheckBlankWindow(testArea,fadedColor,TheClient->iScreen);
+#else
+		retVal = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, fadedColor);
+#endif
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, fadedColor) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+
+ 		blankWin->SetVisible(ETrue);
+		iBlankWin->SetPos(iWindowRect.iTl+TPoint(15,-15));
+		iBlankWin->BaseWin()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+		blankWin->SetVisible(EFalse);
+		iBlankWin->SetPos(iWindowRect.iTl);
+		TheClient->iWs.Finish();
+ 		retVal = CheckBlankWindow(testArea,TRgb::Gray16(col),TheClient->iScreen);
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("CheckBlankWindow(testArea,TRgb::Gray16(col),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+
+		blankWin->SetVisible(ETrue);
+		}
+	delete blankWin;
+	}
+
+void CTFade::TestStrips(TRect aRect,TInt aHeight,TInt aNumNotFaded,TBool aInvert/*=EFalse*/)
+	{
+	TBool isFaded;
+	TInt ii;
+	TRgb col;
+	for (ii=0;ii<16;++ii)
+		{
+		isFaded=((!aInvert)==(!(ii<aNumNotFaded)));
+		if (isFaded)
+			col=MODE_LT_64K(iDeviceDisplayMode)?TRgb::Gray16(Fade16(ii)):FadeRgb(TRgb::Gray16(ii));
+		else
+			col=TRgb::Gray16(ii);
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+		TBool retVal = CheckBlankWindow(aRect,col,TheClient->iScreen);
+#else
+		TBool retVal = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, aRect, col);
+#endif
+		TEST(retVal);
+		if (!retVal)
+			INFO_PRINTF3(_L("CheckBlankWindow(aRect,col,TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retVal);		
+
+		aRect.Move(0,aHeight);
+		}
+	}
+
+void CTFade::FadeChildrenL()
+	{
+	if (MaxGrays()==0 && MaxColors()<256)
+		return;
+	
+	TInt retVal;
+	TBool retBool;
+
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	iBlankWin->BaseWin()->SetRequiredDisplayMode(EGray16);
+	iBlankWin->SetColor(TRgb::Gray16(0));
+	CTBlankWindow* win[16];
+	win[0]=iBlankWin;
+	TRect rect(iTestWinSize);
+	TInt height=iTestWinSize.iHeight/16;
+	rect.iTl.iY=height;
+	TInt ii;
+	for (ii=1;ii<16;++ii)		//Causes memory leakage under OOM
+		{
+		win[ii]=new(ELeave) CTBlankWindow();
+		win[ii]->SetUpL(rect.iTl,rect.Size(),win[ii-1],*TheClient->iGc);
+		win[ii]->BaseWin()->SetRequiredDisplayMode(EGray16);
+		win[ii]->SetColor(TRgb::Gray16(ii));
+		rect.iBr.iY-=height;
+		}
+	rect=iWindowRect;
+	rect.SetHeight(height);
+#if defined(SMALL_RECTS)
+	TSize size(rect.Size());
+	size.iWidth=Min(SIZE_X,size.iWidth);
+	size.iHeight=Min(SIZE_Y,size.iHeight);
+	rect.SetSize(size);
+#endif
+	for (ii=0;ii<15;++ii)
+		{
+		win[ii]->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeIncludeChildren);
+		retVal = win[ii]->BaseWin()->IsFaded();
+		TEST(retVal==1);
+		if (retVal!=1)
+			INFO_PRINTF3(_L("win[ii]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), 1, retVal);		
+
+		TestStrips(rect,height,ii);
+		win[ii]->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeIncludeChildren);
+		retBool = !win[ii]->BaseWin()->IsFaded();
+		TEST(retBool);
+		if (!retBool)
+			INFO_PRINTF3(_L("!win[ii]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), ETrue, retBool);		
+
+		TestStrips(rect,height,16);
+		}
+	TheClient->iGroup->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(rect,height,0);
+	TheClient->iGroup->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(rect,height,16);
+	for (ii=0;ii<16;++ii)
+		{
+		win[ii]->BaseWin()->FadeBehind(ETrue);
+		retBool = !win[ii]->BaseWin()->IsFaded();
+		TEST(retBool);
+		if (!retBool)
+			INFO_PRINTF3(_L("!win[ii]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), ETrue, retBool);		
+
+		retVal = win[0]->BaseWin()->IsFaded();
+		TEST(retVal==(ii>0));
+		if (retVal!=(ii>0))
+			INFO_PRINTF3(_L("win[0]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), (ii>0), retVal);		
+
+		TestStrips(rect,height,ii,ETrue);
+		win[ii]->BaseWin()->FadeBehind(EFalse);
+		TestStrips(rect,height,16);
+		}
+	iBlankWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(rect,height,0);
+	iBlankWin->WinTreeNode()->SetNonFading(ETrue);
+	TestStrips(rect,height,16);
+	win[8]->WinTreeNode()->SetNonFading(EFalse);
+	TestStrips(rect,height,8);
+	iBlankWin->WinTreeNode()->SetNonFading(EFalse);
+	TestStrips(rect,height,0);
+	iBlankWin->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(rect,height,16);
+	win[8]->WinTreeNode()->SetNonFading(ETrue);
+	TestStrips(rect,height,16);
+	iBlankWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(rect,height,8,ETrue);
+	win[8]->WinTreeNode()->SetNonFading(EFalse);
+	TestStrips(rect,height,0);
+	iBlankWin->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(rect,height,16);
+	for (ii=15;ii>0;--ii)
+		delete win[ii];
+	}
+
+static void ResetAndDestroyWindows(TAny* aPtr)
+	{
+	RPointerArray<CTBlankWindow>& win = *(static_cast<RPointerArray<CTBlankWindow>*>(aPtr));
+	win.Remove(0);
+	win.ResetAndDestroy();
+	win.Close();
+	}
+
+void CTFade::FadeChildrenAfterNewChildIsCreatedL()
+	{
+	if (MaxGrays()==0 && MaxColors()<256)
+		return;
+	
+	TBool retBool;
+	TInt retVal;
+
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	iBlankWin->BaseWin()->SetRequiredDisplayMode(iFadeDrawMode);
+	iBlankWin->SetColor(TRgb::Gray16(0));
+	RPointerArray<CTBlankWindow> win;
+	CleanupStack::PushL(TCleanupItem(ResetAndDestroyWindows, &win));
+	TInt height=iTestWinSize.iHeight/NUMBER_OF_WINDOWS;
+	CTBlankWindow* window=NULL;
+	TInt ii;
+	for (TInt firstLoop=0;firstLoop<NUMBER_OF_WINDOWS-1;)
+		{
+		win.ResetAndDestroy();
+		TheClient->iGroup->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeIncludeChildren);
+		TRect rect(iTestWinSize);
+		rect.iTl.iY=height;
+		CTBlankWindow* parent=iBlankWin;
+		for (TInt secondLoop=0;secondLoop<=firstLoop;)
+			{
+			window=new(ELeave) CTBlankWindow();
+			CleanupStack::PushL(window);
+			User::LeaveIfError(win.Append(window));
+			CleanupStack::Pop(window);
+			window->SetUpL(rect.iTl,rect.Size(),parent,*TheClient->iGc);
+			window->BaseWin()->SetRequiredDisplayMode(iFadeDrawMode);
+			window->SetColor(TRgb::Gray16(++secondLoop));
+			rect.iBr.iY-=height;
+			parent=window;
+			retBool = window->BaseWin()->IsFaded();
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("window->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), ETrue, retBool);		
+
+			}
+		++firstLoop;
+		TheClient->iGroup->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeIncludeChildren);
+		const TInt count=win.Count();
+		for(TInt index=0;index<count;++index)
+			{
+			retBool = win[index]->BaseWin()->IsFaded();
+			TEST(!retBool);
+			if (retBool)
+				INFO_PRINTF3(_L("win[index]->BaseWin()->IsFaded return value - Expected: %d, Actual: %d"), EFalse, retBool);		
+
+			}
+		}
+	User::LeaveIfError(win.Insert(iBlankWin,0));
+	TRect testRect=iWindowRect;
+	testRect.SetHeight(height);
+#if defined(SMALL_RECTS)
+	TSize size(testRect.Size());
+	size.iWidth=Min(SIZE_X,size.iWidth);
+	size.iHeight=Min(SIZE_Y,size.iHeight);
+	testRect.SetSize(size);
+#endif
+	for (ii=0;ii<NUMBER_OF_WINDOWS;++ii)
+		{
+		win[ii]->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeIncludeChildren);
+		retVal = win[ii]->BaseWin()->IsFaded();
+		TEST(retVal==1);
+		if (retVal!=1)
+			INFO_PRINTF3(_L("win[index]->BaseWin()->IsFaded return value - Expected: %d, Actual: %d"), 1, retVal);		
+
+		TestStrips(testRect,height,ii);
+		win[ii]->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeIncludeChildren);
+		retBool = !win[ii]->BaseWin()->IsFaded();
+		TEST(retBool);
+		if (!retBool)
+			INFO_PRINTF3(_L("!win[ii]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), EFalse, retBool);		
+
+		TestStrips(testRect,height,NUMBER_OF_WINDOWS);
+		}
+	TheClient->iGroup->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(testRect,height,0);
+	TheClient->iGroup->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(testRect,height,16);
+	for (ii=0;ii<NUMBER_OF_WINDOWS;++ii)
+		{
+		win[ii]->BaseWin()->FadeBehind(ETrue);
+		retBool = !win[ii]->BaseWin()->IsFaded();
+		TEST(retBool);
+		if (!retBool)
+			INFO_PRINTF3(_L("!win[ii]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), EFalse, retBool);		
+		
+		retVal = win[0]->BaseWin()->IsFaded();
+		TEST(retVal==(ii>0));
+		if (retVal!=(ii>0))
+			INFO_PRINTF3(_L("win[index]->BaseWin()->IsFaded return value - Expected: %d, Actual: %d"), (ii>0), retVal);		
+
+		TestStrips(testRect,height,ii,ETrue);
+		win[ii]->BaseWin()->FadeBehind(EFalse);
+		TestStrips(testRect,height,NUMBER_OF_WINDOWS);
+		}
+	iBlankWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(testRect,height,0);
+	iBlankWin->WinTreeNode()->SetNonFading(ETrue);
+	TestStrips(testRect,height,NUMBER_OF_WINDOWS);
+	win[8]->WinTreeNode()->SetNonFading(EFalse);
+	TestStrips(testRect,height,NUMBER_OF_WINDOWS/2);
+	iBlankWin->WinTreeNode()->SetNonFading(EFalse);
+	TestStrips(testRect,height,0);
+	iBlankWin->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(testRect,height,NUMBER_OF_WINDOWS);
+	win[8]->WinTreeNode()->SetNonFading(ETrue);
+	TestStrips(testRect,height,NUMBER_OF_WINDOWS);
+	iBlankWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(testRect,height,NUMBER_OF_WINDOWS/2,ETrue);
+	win[8]->WinTreeNode()->SetNonFading(EFalse);
+	TestStrips(testRect,height,0);
+	iBlankWin->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeIncludeChildren);
+	TestStrips(testRect,height,NUMBER_OF_WINDOWS);
+
+	CleanupStack::PopAndDestroy(&win);
+	}
+
+void CTFade::TestBlocks(TRect aRect,TSize aSize,TInt aNumNotFaded,TBool aInvert/*=EFalse*/)
+	{
+	TInt count=0;
+	TInt ii,jj;
+	TRgb col;
+	for (ii=0;ii<4;++ii)
+		{
+		for (jj=0;jj<4;++jj)
+			{
+			if ((!aInvert)!=(!(count<aNumNotFaded)))
+				col=TRgb::Gray16(count);
+			else
+				{
+				col = TRgb::Gray16(count);
+				col = MODE_LT_64K(iDeviceDisplayMode)?TRgb::Gray16(Fade16(count)):FadeRgb(col);
+				}
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			TBool retBool = CheckBlankWindow(aRect,col,TheClient->iScreen);
+#else
+			TBool retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, aRect, col);
+#endif
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("CheckBlankWindow(aRect,col,TheClient->iScreen) return value - Expected: %d, Actual: %d"), EFalse, retBool);		
+	
+			aRect.Move(0,aSize.iHeight);
+			count++;
+			}
+		aRect.Move(aSize.iWidth,-jj*aSize.iHeight);
+		}
+	}
+
+void CTFade::FadeBehindL()
+	{
+	if (MaxGrays()==0 && MaxColors()<256)
+		return;
+	
+	TBool retBool;
+	TInt retVal;
+
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	iBlankWin->BaseWin()->SetRequiredDisplayMode(EGray16);
+	iBlankWin->SetColor(TRgb::Gray16(0));
+	CTBlankWindow* win[4][4];
+	win[0][0]=iBlankWin;
+	TSize size=iTestWinSize;
+	TInt height=iTestWinSize.iHeight/4;
+	TInt width=iTestWinSize.iWidth/4;
+	TRect rect(iWindowRect.iTl,TSize(width,height));
+	TSize rectSize(rect.Size());
+	TPoint offset(0,height);
+	TPoint topLeft;
+	TInt ii,jj;
+	CTWinBase* parent;
+#if defined(SMALL_RECTS)
+	TSize rSize(rectSize);
+	rSize.iWidth=Min(SIZE_X,rSize.iWidth);
+	rSize.iHeight=Min(SIZE_Y,rSize.iHeight);
+	rect.SetSize(rSize);
+#endif
+	for (ii=0;ii<4;++ii)		//Causes memory leakage under OOM
+		{
+		parent=TheClient->iGroup;
+		topLeft=iWindowRect.iTl+TPoint(ii*width,0);
+		size.iHeight=iTestWinSize.iHeight;
+		for (jj=0;jj<4;++jj)
+			{
+			if (ii+jj>0)
+				{
+				win[ii][jj]=new(ELeave) CTBlankWindow();
+				win[ii][jj]->SetUpL(topLeft,size,parent,*TheClient->iGc);
+				win[ii][jj]->BaseWin()->SetRequiredDisplayMode(EGray16);
+				win[ii][jj]->SetColor(TRgb::Gray16(4*ii+jj));
+				}
+			size.iHeight-=height;
+			topLeft=offset;
+			parent=win[ii][jj];
+			}
+		size.iWidth-=width;
+		}
+	for (ii=0;ii<4;++ii)
+		{
+		for (jj=0;jj<4;++jj)
+			{
+			win[ii][jj]->BaseWin()->FadeBehind(ETrue);
+			retVal = win[0][0]->BaseWin()->IsFaded();
+			TEST(retVal==(ii>0||jj>0));
+			if (retVal!=(ii>0||jj>0))
+				INFO_PRINTF3(_L("win[0][0]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), (ii>0||jj>0), retVal);		
+
+			retBool = !win[ii][jj]->BaseWin()->IsFaded();
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("!win[ii][jj]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), ETrue, retBool);		
+
+			TestBlocks(rect,rectSize,4*ii+jj,ETrue);
+			win[ii][jj]->BaseWin()->FadeBehind(EFalse);
+			TestBlocks(rect,rectSize,16);
+			}
+		}
+   	for (ii=0;ii<4;++ii)
+		{
+		for (jj=0;jj<4;++jj)
+			{
+			win[ii][jj]->BaseWin()->FadeBehind(ETrue);
+			TestBlocks(rect,rectSize,4*ii+jj,ETrue);
+			}
+		retVal = win[ii][0]->BaseWin()->IsFaded();
+		TEST(retVal==3);
+		if (retVal!=3)
+			INFO_PRINTF3(_L("win[ii][0]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), 3, retVal);		
+		}
+   	for (ii=3;ii>=0;--ii)
+		{
+		retVal = win[ii][0]->BaseWin()->IsFaded();
+		TEST(retVal==3);
+		if (retVal!=3)
+			INFO_PRINTF3(_L("win[ii][0]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), 3, retVal);		
+
+		for (jj=3;jj>=0;--jj)
+			{
+			TestBlocks(rect,rectSize,4*ii+jj,ETrue);
+			win[ii][jj]->BaseWin()->FadeBehind(EFalse);
+			}
+		}
+ 	TestBlocks(rect,rectSize,0,ETrue);
+   	for (ii=0;ii<4;++ii)
+		{
+		for (jj=0;jj<4;++jj)
+			{
+			win[ii][jj]->BaseWin()->FadeBehind(ETrue);
+			}
+		}
+	TInt fadeCount;
+   	for (ii=0;ii<4;++ii)
+		{
+		for (jj=0;jj<4;++jj)
+			{
+			fadeCount=15-(4*ii+jj);
+			retVal = win[0][0]->BaseWin()->IsFaded();
+			TEST(retVal==Min(15,fadeCount+1));
+			if (retVal!=Min(15,fadeCount+1))
+				INFO_PRINTF3(_L("win[0][0]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), Min(15,fadeCount+1), retVal);		
+
+			retVal = win[ii][jj]->BaseWin()->IsFaded();
+			TEST(retVal==Max(0,fadeCount));
+			if (retVal!=Max(0,fadeCount))
+				INFO_PRINTF3(_L("win[ii][jj]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), Max(0,fadeCount), retVal);		
+
+			TestBlocks(rect,rectSize,15,ETrue);
+			win[ii][jj]->BaseWin()->FadeBehind(EFalse);
+			retVal = win[ii][jj]->BaseWin()->IsFaded();
+			TEST(retVal==Max(0,fadeCount));
+			if (retVal!=Max(0,fadeCount))
+				INFO_PRINTF3(_L("win[ii][jj]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), Max(0,fadeCount), retVal);		
+
+			}
+		}
+ 	TestBlocks(rect,rectSize,0,ETrue);
+	if (Fade16(15)==15)			
+		{
+		win[3][3]->BaseWin()->FadeBehind(ETrue);		//All faded as the only unfaded one is white
+		for (ii=3;ii>=0;--ii)
+			{
+			retVal = win[ii][0]->BaseWin()->IsFaded();
+			TEST(retVal==1);
+			if (retVal!=1)
+				INFO_PRINTF3(_L("win[ii][0]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), 1, retVal);		
+
+			retBool = !win[ii][1]->BaseWin()->IsNonFading();
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("!win[ii][1]->BaseWin()->IsNonFading() return value - Expected: %d, Actual: %d"), ETrue, retBool);		
+
+			win[ii][0]->WinTreeNode()->SetNonFading(ETrue);
+			retBool = win[ii][1]->BaseWin()->IsNonFading();
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("win[ii][1]->BaseWin()->IsNonFading() return value - Expected: %d, Actual: %d"), ETrue, retBool);		
+
+			TestBlocks(rect,rectSize,4*ii,ETrue);
+			}
+		for (ii=3;ii>=0;--ii)
+			{
+			retVal = win[ii][0]->BaseWin()->IsFaded();
+			TEST(retVal==1);
+			if (retVal!=1)
+				INFO_PRINTF3(_L("win[ii][0]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), 1, retVal);		
+			
+			retBool = win[ii][1]->BaseWin()->IsNonFading();
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("win[ii][1]->BaseWin()->IsNonFading() return value - Expected: %d, Actual: %d"), ETrue, retBool);		
+
+			win[ii][0]->WinTreeNode()->SetNonFading(EFalse);
+			retBool = !win[ii][1]->BaseWin()->IsNonFading();
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("win[ii][1]->BaseWin()->IsNonFading() return value - Expected: %d, Actual: %d"), ETrue, retBool);		
+
+			TestBlocks(rect,rectSize,4*ii);
+			}
+		win[3][3]->BaseWin()->FadeBehind(EFalse);
+		}
+	for (ii=3;ii>=0;--ii)
+		{
+		for (jj=3;jj>=0;--jj)
+			{
+			if (ii+jj>0)
+				delete win[ii][jj];
+			}
+		}
+	}
+
+void CTFade::ColorTest2()
+	{
+#if defined(__MARM__)
+	return;
+#else
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	TSize size=iTestWinSize;
+#if defined(SMALL_RECTS)
+	size.iWidth=Min(SIZE_X,size.iWidth);
+	size.iHeight=Min(SIZE_Y,size.iHeight);
+#endif
+	if (MaxGrays()==0 && MaxColors()<256)
+		return;
+	TRect windowRect(iBlankWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),size);
+	TUint8 bm;
+	TUint8 wm;
+	TInt test=0;
+	TInt ii;
+	FOREVER
+		{
+		TInt fadeMapFactor = 0;
+		TInt fadeMapOffset = 0;
+
+		switch (test)
+			{
+		case 0:			//Nothing
+			bm=0;
+			wm=15;
+			break;
+		case 1:			//Shadowing or Quartz fading
+			bm=0;
+			wm=7;
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			TheClient->iWs.SetDefaultFadingParameters(0,127);
+			fadeMapFactor = 128;
+#else
+			TheClient->iWs.SetDefaultFadingParameters(STATIC_CAST(TUint8,bm*17),127);
+			fadeMapFactor = 127-STATIC_CAST(TUint8,bm*17);
+#endif
+			break;
+		default:
+			TheClient->iWs.SetDefaultFadingParameters(BLACK_NORMAL,WHITE_NORMAL);
+			return;
+			}
+		if (wm!=7)
+			{
+			fadeMapOffset = STATIC_CAST(TUint8,bm*17);
+			fadeMapFactor = STATIC_CAST(TUint8,wm*17) - fadeMapOffset;
+			TheClient->iWs.SetDefaultFadingParameters(STATIC_CAST(TUint8,bm*17),STATIC_CAST(TUint8,wm*17));
+			}
+
+		for (ii=0;ii<16;ii+=5)
+			{
+			iBlankWin->SetColor(TRgb::Gray16(ii));
+			ViewDelay();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			TBool retBool=CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen);
+#else
+			TBool retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray16(ii));
+#endif
+			TEST(retBool);
+			if (!retBool)
+				{
+				_LIT(KLog,"Setting color on blank window failed  mappings=%d  color=%d");
+				LOG_MESSAGE3(KLog,test,ii);
+				}
+			iBlankWin->BaseWin()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+			ViewDelay();
+		
+			TRgb col1 = FadeRgb(TRgb::Gray16(ii), fadeMapFactor, fadeMapOffset);
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			retBool=CheckBlankWindow(windowRect,col1,TheClient->iScreen);
+#else
+			retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, col1);
+#endif
+			TEST(retBool);
+			if (!retBool)
+				{
+				_LIT(KLog,"Fading the window gave wrong color  mappings=%d  color=%d");
+				LOG_MESSAGE3(KLog,test,ii);
+				}
+			iBlankWin->BaseWin()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+			ViewDelay();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			retBool=CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen);
+#else
+			retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray16(ii));
+#endif
+			TEST(retBool);
+			if (!retBool)
+				{
+				_LIT(KLog,"Unfading the window gave wrong color  mappings=%d  color=%d");
+				LOG_MESSAGE3(KLog,test,ii);
+				}
+			}
+		++test;
+		}
+#endif	//__MARM__
+	}
+
+void CTFade::FadeTest()
+	{
+#if defined(__MARM__)
+	return;
+#else
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	TSize size=iTestWinSize;
+#if defined(SMALL_RECTS)
+	size.iWidth=Min(SIZE_X,size.iWidth);
+	size.iHeight=Min(SIZE_Y,size.iHeight);
+#endif
+	if (MaxGrays()==0 && MaxColors()<256)
+		return;
+	TRect windowRect(iBlankWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),size);
+	TUint8 bm;
+	TUint8 wm;
+	TUint8 fb;
+	TUint8 fw;
+	TInt test=0;
+	TInt ii;
+	FOREVER
+		{
+		TInt fadeMapFactor = 0;
+		TInt fadeMapOffset = 0;
+		fw=0;
+		switch (test)
+			{
+			case 0:			//Nothing
+				bm=0;
+				wm=15;
+				break;
+			case 1:			//Shadowing or Quartz fading
+
+			bm=0;
+			wm=7;
+			fw=127;
+			break;
+		default:
+			return;
+			}
+		fb=STATIC_CAST(TUint8,17*bm);
+		if (!fw)
+			fw=STATIC_CAST(TUint8,17*wm);
+		fadeMapFactor = fw - fb;
+		fadeMapOffset = fb;
+		for (ii=0;ii<16;ii+=5)
+			{
+			iBlankWin->SetColor(TRgb::Gray16(ii));
+			ViewDelay();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			TBool retBool = CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen);
+#else
+			TBool retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray16(ii));
+#endif
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retBool);
+	
+			TRgb col3 = TRgb::Gray16(ii).Internal();
+			TRgb col1 = FadeRgb(col3, fadeMapFactor, fadeMapOffset);
+			iBlankWin->BaseWin()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly,fb,fw);
+			ViewDelay();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			retBool = CheckBlankWindow(windowRect,col1,TheClient->iScreen);
+#else
+			retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, col1);
+#endif
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray16((ii*wb+add)/15),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retBool);
+	
+			iBlankWin->BaseWin()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+			ViewDelay();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA			
+			retBool = CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen);
+#else
+			retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray16(ii));
+#endif
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retBool);
+
+			}
+		++test;
+		}
+#endif	//__MARM__
+	}
+
+void CTFade::Draw(TBool aAlternativeFade/*=EFalse*/)
+	{
+	__ASSERT_ALWAYS(iWin,AutoPanic(EAutoFadeWindow));
+	TRgb grey=TRgb::Gray4(2);
+	Draw(0,&grey,aAlternativeFade);
+	Draw(1,NULL,aAlternativeFade);
+	iContent=1;
+	CompareWithBitmap(EFalse);
+	if (aAlternativeFade)
+		iWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly,BLACK_ALTERNATE,WHITE_ALTERNATE);
+	else
+		iWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+	CompareWithBitmap(ETrue);
+	Draw(3,NULL,aAlternativeFade);
+	iContent=2;
+	CompareWithBitmap(ETrue);
+	iWin->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+	CompareWithBitmap(EFalse);
+	}
+
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+void CTFade::GCDraw()
+	{
+	__ASSERT_ALWAYS(iWin,AutoPanic(EAutoFadeWindow));
+	TRgb grey=TRgb::Gray4(2);
+	TInt ii;
+	GCDraw(0,&grey);
+	GCDraw(3,NULL);
+	for (ii=3;ii<70;ii+=13)
+		GCDraw(2,&ii);
+	iContent=6;
+	CompareWindows();
+	GCDraw(0,&grey,ETrue);
+	GCDraw(3,NULL,ETrue);
+	for (ii=3;ii<70;ii+=13)
+		GCDraw(2,&ii,ETrue);
+	GCDraw(1,NULL,ETrue);
+	iContent=7;
+	CompareWindows(ETrue);
+	}
+#endif // TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+
+void CTFade::ObscuredL()
+	{
+	CTBlankWindow* blankWin=new(ELeave) CTBlankWindow();
+	TRect windowRect(iWindowRect);
+	windowRect.Shrink(30,30);
+	blankWin->SetUpL(windowRect.iTl,windowRect.Size(),TheClient->iGroup,*TheClient->iGc);
+
+	__ASSERT_ALWAYS(iWin,AutoPanic(EAutoFadeWindow));
+	TRgb grey=TRgb::Gray4(2);
+	Draw(0,&grey);
+	Draw(3,NULL);
+	iContent=3;
+ 	iWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+	blankWin->SetVisible(EFalse);
+	CompareWithBitmap(ETrue);
+	blankWin->SetVisible(ETrue);
+	grey=TRgb::Gray4(1);
+	Draw(0,&grey);
+	for (TInt ii=1;ii<37;ii+=7)
+		Draw(2,&ii);
+	iContent=4;
+	blankWin->SetVisible(EFalse);
+	CompareWithBitmap(ETrue);
+	blankWin->SetVisible(ETrue);
+ 	iWin->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+ 	blankWin->SetVisible(EFalse);
+	CompareWithBitmap(EFalse);
+
+	delete blankWin;
+	}
+
+void CTFade::MovingL()
+	{
+	CTBlankWindow* blankWin=new(ELeave) CTBlankWindow();
+	TRect windowRect(iWindowRect);
+	windowRect.Shrink(40,40);
+	blankWin->SetUpL(windowRect.iTl,windowRect.Size(),TheClient->iGroup,*TheClient->iGc);
+
+	__ASSERT_ALWAYS(iWin,AutoPanic(EAutoFadeWindow));
+	TRgb grey=TRgb::Gray4(2);
+	Draw(0,&grey);
+	Draw(1,NULL);
+	for (TInt ii=2;ii<60;ii+=11)
+		Draw(2,&ii);
+	iContent=5;
+	blankWin->SetPos(windowRect.iTl+TPoint(25,-25));
+ 	iWin->WinTreeNode()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+ 	blankWin->SetPos(windowRect.iTl+TPoint(10,25));
+	blankWin->SetVisible(EFalse);
+	CompareWithBitmap(ETrue);
+	blankWin->SetVisible(ETrue);
+	blankWin->SetPos(windowRect.iTl+TPoint(25,-25));
+ 	iWin->WinTreeNode()->SetFaded(EFalse,RWindowTreeNode::EFadeWindowOnly);
+	blankWin->SetPos(windowRect.iTl+TPoint(-5,10));
+ 	blankWin->SetVisible(EFalse);
+	CompareWithBitmap(EFalse);
+
+	delete blankWin;
+	}
+
+void CTFade::SystemFadeL()
+	{
+	if (MaxGrays()==0 && MaxColors()<256)
+		return;
+
+	CTBlankWindow* win[16];
+	TInt height=iTestWinSize.iHeight/16;
+	TRect rect(iWindowRect);
+	rect.SetHeight(height);
+	TInt ii;
+	for (ii=0;ii<16;++ii)		//Causes memory leakage under OOM
+		{
+		win[ii]=new(ELeave) CTBlankWindow();
+		win[ii]->SetUpL(rect.iTl,rect.Size(),TheClient->iGroup,*TheClient->iGc);
+		win[ii]->BaseWin()->SetRequiredDisplayMode(EGray16);
+		win[ii]->SetColor(TRgb::Gray16(ii));
+		rect.Move(0,height);
+		}
+	rect=iWindowRect;
+	rect.SetHeight(height);
+#if defined(SMALL_RECTS)
+	TSize size(rect.Size());
+	size.iWidth=Min(SIZE_X,size.iWidth);
+	size.iHeight=Min(SIZE_Y,size.iHeight);
+	rect.SetSize(size);
+#endif
+
+	TBool retBool;
+
+	// system fade on
+	TheClient->iWs.SetSystemFaded(ETrue);
+	for (ii=0;ii<16;++ii)
+		{
+		retBool = win[ii]->BaseWin()->IsFaded();
+		TEST(retBool);
+		if (!retBool)
+			INFO_PRINTF3(_L("win[ii]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), ETrue, retBool);
+		}
+	TestStrips(rect,height,0);
+
+	// system fade off
+	TheClient->iWs.SetSystemFaded(EFalse);
+	for (ii=0;ii<16;++ii)
+		{
+		retBool = !win[ii]->BaseWin()->IsFaded();
+		TEST(retBool);
+		if (!retBool)
+			INFO_PRINTF3(_L("!win[ii]->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), ETrue, retBool);
+		}
+	TestStrips(rect,height,16);
+
+	// Now with half non fading
+	for (ii=8;ii<16;++ii)
+		win[ii]->WinTreeNode()->SetNonFading(ETrue);
+
+	// system fade on
+	TheClient->iWs.SetSystemFaded(ETrue);
+	TestStrips(rect,height,8,ETrue);
+
+	// system fade off
+	TheClient->iWs.SetSystemFaded(EFalse);
+	TestStrips(rect,height,16);
+
+	for (ii=0;ii<16;++ii)
+		delete win[ii];
+	}
+
+void CTFade::SystemAlternateFadeL()
+	{
+#if defined(__MARM__)
+	return;
+#else
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	TSize size=iTestWinSize;
+#if defined(SMALL_RECTS)
+	size.iWidth=Min(SIZE_X,size.iWidth);
+	size.iHeight=Min(SIZE_Y,size.iHeight);
+#endif
+	if (MaxGrays()==0 && MaxColors()<256)
+		return;
+	TRect windowRect(iBlankWin->BaseWin()->InquireOffset(*TheClient->iGroup->WinTreeNode()),size);
+	TUint8 bm;
+	TUint8 wm;
+	TUint8 fb;
+	TUint8 fw;
+	TInt wb;
+	TInt add;
+	TInt test=0;
+	TInt ii;
+	TBool retBool;
+	FOREVER
+		{
+		TInt fadeMapFactor = 0;
+		TInt fadeMapOffset = 0;
+		fw=0;
+		switch (test)
+			{
+			case 0:			//Nothing
+				bm=0;
+				wm=15;
+				break;
+			case 1:			//Shadowing or Quartz fading
+			bm=0;
+			wm=7;
+			fw=127;
+			break;
+		default:
+			return;
+			}
+		wb=wm-bm;
+		add=15*bm+7;
+		fb=STATIC_CAST(TUint8,17*bm);
+		if (!fw)
+			fw=STATIC_CAST(TUint8,17*wm);
+		fadeMapFactor = fw - fb;
+		fadeMapOffset = fb;
+		for (ii=0;ii<16;ii+=5)
+			{
+			iBlankWin->SetColor(TRgb::Gray16(ii));
+			ViewDelay();
+			TheClient->iWs.Finish();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			retBool = CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen);
+#else
+			retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray16(ii));
+#endif
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retBool);
+
+			TheClient->iWs.SetSystemFaded(ETrue,fb,fw);
+			ViewDelay();
+
+			TRgb col3 = TRgb::Gray16(ii).Internal();
+			TRgb col1 = FadeRgb(col3, fadeMapFactor, fadeMapOffset);
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			retBool = CheckBlankWindow(windowRect,col1,TheClient->iScreen);
+#else
+			retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, col1);
+#endif
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray16((ii*wb+add)/15),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retBool);
+
+			TheClient->iWs.SetSystemFaded(EFalse);
+			ViewDelay();
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+			retBool = CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen);
+#else
+			retBool = LossyCheckBlankWindow(*TheClient->iScreen, *iTestWinCopy, windowRect, TRgb::Gray16(ii));
+#endif
+			TEST(retBool);
+			if (!retBool)
+				INFO_PRINTF3(_L("CheckBlankWindow(windowRect,TRgb::Gray16(ii),TheClient->iScreen) return value - Expected: %d, Actual: %d"), ETrue, retBool);
+			}
+		++test;
+		}
+#endif	//__MARM__
+	}
+
+void CTFade::FadeBehindWhenMovedL()
+	{
+	__ASSERT_ALWAYS(iBlankWin,AutoPanic(EAutoFadeWindow));
+	TDisplayMode displayMode=iBlankWin->BaseWin()->DisplayMode();
+	iBlankWin->BaseWin()->SetRequiredDisplayMode(EGray16);
+	iBlankWin->SetColor(TRgb::Gray16(1));
+	TSize size(iTestWinSize.iHeight/4,iTestWinSize.iWidth/4);
+	CTBlankWindow* blankWinTemp=new(ELeave) CTBlankWindow();
+	CleanupStack::PushL(blankWinTemp);
+	blankWinTemp->SetUpL(TPoint(5,5),size,iBlankWin,*TheClient->iGc);
+	blankWinTemp->BaseWin()->SetRequiredDisplayMode(EGray16);
+	blankWinTemp->SetColor(TRgb::Gray16(15));
+	blankWinTemp->BaseWin()->FadeBehind(ETrue);
+	TheClient->Flush();
+	blankWinTemp->SetPos(TPoint(5,120));
+	//Check whether the back window is faded or not
+	TBool retBool = iBlankWin->BaseWin()->IsFaded();
+	TEST(retBool);
+	if (!retBool)
+		INFO_PRINTF3(_L("iBlankWin->BaseWin()->IsFaded() return value - Expected: %d, Actual: %d"), ETrue, retBool);
+
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+	CheckRect(iWindowRect.iTl+TPoint(5,5),iWindowRect.iTl+TPoint(75,5),size,_L("CTFade::FadeBehindWhenMovedL()"));
+#else
+	TInt res = LossyCompareWindow(*TheClient->iScreen, *iTestWinCopy, *iCheckWinCopy, TRect(iWindowRect.iTl+TPoint(75,5),size));
+	TEST(res);
+#endif
+	
+	//Check whether the area behind the moved window and any other area on same window are identical
+	blankWinTemp->BaseWin()->FadeBehind(EFalse);
+	iBlankWin->BaseWin()->SetRequiredDisplayMode(displayMode);
+	CleanupStack::PopAndDestroy(blankWinTemp);
+	}
+
+void CTFade::FadeBehindTransparentWindowL()
+	{
+	const TInt KNumberOfWindows = 3;
+	CRedrawWin* win[KNumberOfWindows];
+	TRect rect(iWindowRect);
+	rect.Resize(-iWindowRect.Width()/3,-iWindowRect.Height()/3);
+	rect.Move(iWindowRect.Width()/10,iWindowRect.Height()/5);
+	TRect rectWin[KNumberOfWindows];
+	
+	for (TInt ii=0; ii<KNumberOfWindows; ++ii)		//Causes memory leakage under OOM
+		{
+		rectWin[ii] = rect;
+		win[ii]=new(ELeave) CRedrawWin(this);
+		win[ii]->ConstructExtLD(*TheClient->iGroup,rectWin[ii].iTl,rectWin[ii].Size());
+		win[ii]->AssignGC(*TheClient->iGc);
+		win[ii]->Win()->EnableRedrawStore(EFalse);
+		win[ii]->BaseWin()->SetRequiredDisplayMode(EColor16MA);
+		if (ii==0)
+			{
+			win[ii]->Win()->SetBackgroundColor(TRgb(200,0,0,255));
+			}
+		else
+			{
+			TEST(KErrNone == win[ii]->Win()->SetTransparencyAlphaChannel());
+			if (iStep->TestStepResult() != EPass)
+				{
+				INFO_PRINTF1(_L("Transparency Alpha channel failed to be enabled"));
+				}
+			win[ii]->Win()->SetBackgroundColor(TRgb(40,100,0,0)); //RGB colour is of minor importance, as the window is fully transparent (Alpha=0)
+			}
+		win[ii]->Activate();
+
+		//Make sure each window is drawn to the screen now when the new background 
+		//colour have been set but before the call to SetFaded
+		win[ii]->Win()->BeginRedraw();
+		win[ii]->Win()->EndRedraw();
+		
+		rect.Resize(0,-iWindowRect.Height()/10);
+		rect.Move(iWindowRect.Width()/10,iWindowRect.Height()/20);
+		}
+	TheClient->iWs.Flush();
+	TheClient->iWs.Finish();
+	
+	win[0]->Win()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+	win[1]->Win()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+	win[2]->Win()->SetFaded(ETrue,RWindowTreeNode::EFadeWindowOnly);
+	
+	TheClient->iWs.Flush();
+	TheClient->iWs.Finish();
+	
+	// As the windows ovelap on their left side, compare the top left corners of the faded windows in order to verify that 
+	// for the opaque window the directly on top faded area and the faded area under the transparent window (the area that 
+	// overlaps with the transparent windows) have the same colour.
+	TRgb rgbWin[KNumberOfWindows];
+	TheClient->iScreen->GetPixel(rgbWin[0], rectWin[0].iTl);
+	TheClient->iScreen->GetPixel(rgbWin[1], rectWin[1].iTl);
+	TheClient->iScreen->GetPixel(rgbWin[2], rectWin[2].iTl);
+	
+	TEST( ETrue == (rgbWin[0].Red()==rgbWin[1].Red())&&(rgbWin[0].Green()==rgbWin[1].Green())&&(rgbWin[0].Blue()==rgbWin[1].Blue()) );
+	TEST( ETrue == (rgbWin[0].Red()==rgbWin[2].Red())&&(rgbWin[0].Green()==rgbWin[2].Green())&&(rgbWin[0].Blue()==rgbWin[2].Blue()) );
+	
+	for (TInt ii=0; ii<KNumberOfWindows; ++ii)
+		{
+		delete win[ii];
+		}
+	}
+
+#define BACKUPWIN 11
+#define REDRAWWIN 20
+void CTFade::RunTestCaseL(TInt /*aCurTestCase*/)
+	{
+	((CTFadeStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
+	switch(++iTest->iState)
+		{
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0218
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading colours in windows
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Fade the colours in windows and check they fade correctly
+
+@SYMTestExpectedResults Colour fade correctly
+*/
+	case 1:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0218"));
+		iTest->LogSubTest(_L("Color Check"));
+		CreateBlankWindowL();
+		ColorTest();
+		//iTest->iState=5;
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0219
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading in a blank window
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Fade in a blank window and check the fading occurs correctly
+
+@SYMTestExpectedResults Fading in a blank window occurs correctly
+*/
+	case 2:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0219"));
+		iTest->LogSubTest(_L("Blank Window"));
+		BlankWindowL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0220
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading in child windows
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Fade in child windows and check the fading occurs correctly
+
+@SYMTestExpectedResults Fading in the child windows occurs correctly
+*/
+	case 3:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0220"));
+		iTest->LogSubTest(_L("Fade Children"));
+		FadeChildrenL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0221
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading in newly created child windows
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Fade in newly created child windows and check the fading occurs correctly
+
+@SYMTestExpectedResults Fading in the newly created child windows occurs correctly
+*/
+	case 4:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0221"));
+		iTest->LogSubTest(_L("Fade Children newly created"));
+		FadeChildrenAfterNewChildIsCreatedL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0222
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading in window behind another window
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Fade in window behind another window and check the fading occurs correctly
+
+@SYMTestExpectedResults Fading in window occurs correctly
+*/
+	case 5:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0222"));
+		iTest->LogSubTest(_L("Fade Behind"));
+		FadeBehindL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0223
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test differnt fading techniques in a window
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Fade using different fading techniques in a window
+					and check the fading occurs correctly
+
+@SYMTestExpectedResults Fading in window occurs correctly
+*/
+	case 6:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0223"));
+#if(defined(__DISPLAY_MODE_64K_COLOR))  //The test case Alternative Fadings1&2 & System Fade are not executed for EColor64k
+		iTest->LogSubTest(_L("Alternative Fadings1"));
+		ColorTest2();
+#else
+		LOG_MESSAGE(_L("Alternative Fadings1 test not run"));
+#endif
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0224
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test differnt fading techniques in a window
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Fade using different fading techniques in a window
+					and check the fading occurs correctly
+
+@SYMTestExpectedResults Fading in window occurs correctly
+*/
+	case 7:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0224"));
+#if(defined(__DISPLAY_MODE_64K_COLOR))  //The test case Alternative Fadings1&2 & System Fade are not executed for EColor64k
+		iTest->LogSubTest(_L("Alternative Fadings2"));
+		FadeTest();
+#else
+		LOG_MESSAGE(_L("Alternative Fadings2 test not run"));
+#endif
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0225
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test differnt system wide fading techniques in a window
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Fade using different system wide fading techniques in a window
+					and check the fading occurs correctly
+
+@SYMTestExpectedResults Fading in system occurs correctly
+*/
+	case 8:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0225"));
+		iTest->LogSubTest(_L("System Fade"));
+		SystemFadeL();
+		SystemAlternateFadeL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0226
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading in window behind another window when the window has been moved
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Fade in window behind another window and check the fading occurs correctly
+
+@SYMTestExpectedResults Fading in window occurs correctly
+*/
+	case 9:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0226"));
+		iTest->LogSubTest(_L("Fade behind moved"));
+		FadeBehindWhenMovedL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0227
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Destroy the blnk window used for fading
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Destroy the blnk window used for fading and check it was deleted correctly
+
+@SYMTestExpectedResults The window is destroyed
+*/
+	case 10:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0227"));
+		DestroyBlankWindow();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0228
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test backup window creation and drawing
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Create a backup window and draw in it
+
+@SYMTestExpectedResults The drawing is correct in the window
+*/
+	case BACKUPWIN:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0228"));
+		iTest->LogSubTest(_L("BackupWin Draw"));
+		CreateBitmapsL();
+		CreateBackupWindowL(EFalse);
+		Draw();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0229
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading with backup window obscured
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Test fading with the backup window obscured
+
+@SYMTestExpectedResults Fading occurs correctly with window obscured
+*/
+	case BACKUPWIN+1:
+	((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0229"));
+		iTest->LogSubTest(_L("BackupWin Obscured"));
+		ObscuredL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0230
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading with backup window being moved
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Test fading with the backup window being moved
+
+@SYMTestExpectedResults Fading occurs correctly with window moved
+*/
+	case BACKUPWIN+2:
+	((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0230"));
+		iTest->LogSubTest(_L("BackupWin Moving"));
+		MovingL();
+		DestroyDrawableWindow();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0231
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test backup window creation and drawing
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Create a backup window and draw in it
+
+@SYMTestExpectedResults The drawing is correct in the window
+*/
+	case BACKUPWIN+3:
+	((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0231"));
+		iTest->LogSubTest(_L("BackupWin Draw"));
+		CreateBackupWindowL(ETrue);
+		Draw();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0232
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading with backup window obscured
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Test fading with the backup window obscured
+
+@SYMTestExpectedResults Fading occurs correctly with window obscured
+*/
+	case BACKUPWIN+4:
+	((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0232"));
+		iTest->LogSubTest(_L("BackupWin Obscured"));
+		ObscuredL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0233
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading with backup window being moved
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Test fading with the backup window being moved
+
+@SYMTestExpectedResults Fading occurs correctly with window moved
+*/
+	case BACKUPWIN+5:
+	((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0233"));
+		iTest->LogSubTest(_L("BackupWin Moving"));
+		MovingL();
+		DestroyDrawableWindow();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0234
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test redraw window creation and drawing
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Create a redraw window and draw in it
+
+@SYMTestExpectedResults The drawing is correct in the window
+*/
+	case REDRAWWIN:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0234"));
+		iTest->LogSubTest(_L("RedrawWin Draw"));
+		CreateRedrawWindowL();
+		Draw();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0235
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading with redraw window obscured
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Test fading with the redraw window obscured
+
+@SYMTestExpectedResults Fading occurs correctly with window obscured
+*/
+	case REDRAWWIN+1:
+	((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0235"));
+		iTest->LogSubTest(_L("RedrawWin Obscured"));
+		ObscuredL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0236
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading with redraw window being moved
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Test fading with the redraw window being moved
+
+@SYMTestExpectedResults Fading occurs correctly with window moved
+*/
+	case REDRAWWIN+2:
+	((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0236"));
+		iTest->LogSubTest(_L("RedrawWin Moving"));
+		MovingL();
+		break;
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0237
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test different fading techniques within a redraw window
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Test different fading techniques within a redraw window
+
+@SYMTestExpectedResults Fading occurs correctly for the different techniques
+*/
+	case REDRAWWIN+3:
+	((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0237"));
+		iTest->LogSubTest(_L("AlternativeFadeDraw"));
+		Draw(ETrue);
+		break;
+
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0238
+
+@SYMDEF             DEF081259
+
+@SYMTestCaseDesc    Test fading within a redraw window using the graphic context
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Test fading within a redraw window using the graphic context
+
+@SYMTestExpectedResults Fading occurs correctly in the window
+*/
+	case REDRAWWIN+4:
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0238"));
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NONNGA
+		iTest->LogSubTest(_L("GC Test"));
+		GCDraw();
+		DestroyDrawableWindow();
+		DestroyBitmaps();
+#endif
+		break;
+
+/**
+@SYMTestCaseID		GRAPHICS-WSERV-0538
+
+@SYMDEF             DEF120965
+
+@SYMTestCaseDesc    Test fading under transparent window
+
+@SYMTestPriority    High
+
+@SYMTestStatus      Implemented
+
+@SYMTestActions     Construct opaque window lying under two transparent windows. Fade the opaque and the transparent windows.
+
+@SYMTestExpectedResults Each of the overlapping areas should be faded only once.
+*/
+	case REDRAWWIN+5:
+		{
+		((CTFadeStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0538"));
+		iTest->LogSubTest(_L("Fade behind transparent window"));
+		CRedrawWin* win = new(ELeave) CRedrawWin(this);
+		win->ConstructL(TRect(0,0,0,0));
+		TInt transparency = win->Win()->SetTransparencyAlphaChannel(); 
+		if (transparency!=KErrNotSupported)
+			{
+			FadeBehindTransparentWindowL();
+			}
+		else
+			{
+			WARN_PRINTF1(_L("Transparency not supported. Skipping test."));
+			}
+		delete win;
+		break;
+		}
+	case REDRAWWIN+6:
+		((CTFadeStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+		iTest->LogSubTest(_L("Test complete\n"));
+#ifdef TEST_GRAPHICS_WSERV_TAUTOSERVER_NGA
+		DestroyDrawableWindow();
+		DestroyBitmaps();
+#endif
+		((CTFadeStep*)iStep)->CloseTMSGraphicsStep();
+		TestComplete();
+		break;
+	default:
+		((CTFadeStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
+		break;
+		}
+	((CTFadeStep*)iStep)->RecordTestResultL();
+	}
+
+__WS_CONSTRUCT_STEP__(Fade)