windowing/windowserver/twsgraphic/TWsGraphicShareTest.CPP
author Faisal Memon <faisal.memon@nokia.com>
Thu, 06 May 2010 11:31:11 +0100
branchNewGraphicsArchitecture
changeset 47 48b924ae7197
parent 0 5d03bc08d59c
permissions -rw-r--r--
Applied patch 1, to provide a syborg specific minigui oby file. Need to compare this with the "stripped" version currently in the tree. This supplied version applies for Nokia builds, but need to repeat the test for SF builds to see if pruning is needed, or if the file needs to be device-specific.

// 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);
	}