Fix def files so that the implementation agnostic interface definition has no non-standards defined entry points, and change the eglrefimpl specific implementation to place its private entry points high up in the ordinal order space in the implementation region, not the standards based entrypoints region.
// 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:
// Manual window server tests
// Note: Wherever possible tests should be put into the TAUTO automatic test
// code test should only go here when manual operation is essential
//
//
#include <e32std.h>
#include "W32STD.H"
#include <e32svr.h>
#include "TMAN.H"
#define LOG_TESTS
class ErrorDialog : public CTDialog
{
public:
ErrorDialog(CTestBase *aTest);
void ButtonPressL(TInt aButton);
private:
CTestBase *iTest;
};
class TestWindowGroup : public CTWindowGroup
{
public:
TestWindowGroup(CTClient *aClient);
void ConstructL();
void KeyL(const TKeyEvent &aKey,const TTime &aTime);
void KeyDownL(const TKeyEvent &aKey,const TTime &aTime);
void KeyUpL(const TKeyEvent &aKey,const TTime &aTime);
};
class CTManScheduler : public CActiveScheduler
{
public:
void SetClient(TestClient *aClient);
void Error(TInt anError) const;
private:
void doErrorL(TInt anError) const;
private:
TestClient *iClient;
};
typedef CTestBase *(*CTestBaseCreate)();
GLREF_C CTestBase *CreateScreenModeTest();
GLREF_C CTestBase *CreateScaleTest();
GLREF_C CTestBase *CreateTextTest();
GLREF_C CTestBase *CreateDummyTest();
GLREF_C CTestBase *CreateMultiConTest();
GLREF_C CTestBase *CreateMultiCaptureKeyTest();
GLREF_C CTestBase *CreateHotKeyTest();
GLREF_C CTestBase *CreatePointerTest();
GLREF_C CTestBase *CreatePointerCaptureTest();
GLREF_C CTestBase *CreatePointerBufferTest();
GLREF_C CTestBase *CreateModifiersChangedTest();
GLREF_C CTestBase *CreatePointerKeyTest();
GLREF_C CTestBase *CreatePasswordTest();
GLREF_C CTestBase *CreatePointerCursorTest();
GLREF_C CTestBase *CreateScreenModeTimes();
// Tests that have not been converted to tauto yet
CTestBaseCreate CreateTestClass[]={
CreateScreenModeTimes,
CreatePointerCursorTest,
CreatePointerTest, //Mostly converted
CreatePointerKeyTest, //Mostly converted
CreateModifiersChangedTest, //Partially Conerted
CreatePointerBufferTest,
CreateTextTest,
CreateScaleTest,
CreateDummyTest,
};
LogWindow *LogWin;
void TManPanic(TInt aPanic)
{
User::Panic(_L("Auto"),aPanic);
}
//
// Log window, logs testing //
//
LogWindow::LogWindow() : CTWin()
{
}
void LogWindow::ConstructL(CTWinBase &parent)
{
CTWin::ConstructL(parent);
iTitleHeight=iFont->HeightInPixels()+4;
}
void LogWindow::Draw()
{
iGc->SetPenColor(TRgb::Gray16(8));
iGc->SetPenColor(TRgb::Gray16(0));
DrawBorder();
iGc->DrawLine(TPoint(0,iTitleHeight),TPoint(iSize.iWidth,iTitleHeight));
iGc->DrawText(iTestTitle, TPoint((iSize.iWidth-iFont->TextWidthInPixels(iTestTitle))/2,iFont->AscentInPixels()+2));
}
void LogWindow::LogTest(TDesC &aTitle,TInt aNum)
{
iTestTitle.Format(TRefByValue<const TDesC>(_L("Test %d,%S")),aNum,&aTitle);
iWin.Invalidate();
Client()->iWs.Flush();
}
//
// Test window, simple window used to do test graphics in //
//
TestWindow::TestWindow() : CTWin()
{
}
void TestWindow::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
{
iBorderWin=new(ELeave) BorderWindow();
iBorderWin->SetUpL(pos,size,parent,aGc);
CTWin::ConstructExtLD(*iBorderWin,TPoint(2,2),TSize(size.iWidth-4,size.iHeight-4));
Activate();
AssignGC(aGc);
}
void TestWindow::Draw()
{
iGc->Clear();
}
//
BorderWindow::BorderWindow() : CTWin()
{
}
void BorderWindow::ConstructL(CTWinBase &parent)
{
CTWin::ConstructL(parent);
}
void BorderWindow::Draw()
{
iGc->SetBrushColor(TRgb::Gray16(0));
iGc->SetBrushStyle(CGraphicsContext::ESolidBrush);
iGc->SetPenStyle(CGraphicsContext::ENullPen);
iGc->DrawRect(TRect(Size()));
}
//
TestWindowGroup::TestWindowGroup(CTClient *aClient) : CTWindowGroup(aClient)
{
}
void TestWindowGroup::ConstructL()
{
CTWindowGroup::ConstructL();
GroupWin()->EnableScreenChangeEvents();
}
void TestWindowGroup::KeyDownL(const TKeyEvent &aKey,const TTime &aTime)
{
if (iCurWin)
iCurWin->KeyDownL(aKey,aTime);
}
void TestWindowGroup::KeyUpL(const TKeyEvent &aKey,const TTime &aTime)
{
if (iCurWin)
iCurWin->KeyUpL(aKey,aTime);
}
void TestWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &aTime)
{
if (aKey.iModifiers&EModifierFunc)
{
switch(aKey.iCode)
{
case 'f':
((TestClient *)Client())->Driver()->iTest->TriggerFail();
break;
}
}
else if (iCurWin)
iCurWin->WinKeyL(aKey,aTime);
}
//
TestClient::TestClient()
{
}
void TestClient::ConstructL()
{
CTClient::ConstructL();
iGroup=new(ELeave) TestWindowGroup(this);
iGroup->ConstructL();
TSize screenSize=iGroup->Size();
TInt winWidth=(screenSize.iWidth/3)-10;
TInt winHeight=screenSize.iHeight-10;
LogWin=new(ELeave) LogWindow();
LogWin->SetUpL(TPoint(5+winWidth*2,5),TSize(winWidth,winHeight),iGroup,*iGc);
iDriver=new(ELeave) TestDriver(this);
}
TestClient::~TestClient()
{
delete iDriver;
}
TestDriver *TestClient::Driver()
{
return(iDriver);
}
//
// Error dialog //
//
ErrorDialog::ErrorDialog(CTestBase *aTest) : CTDialog(), iTest(aTest)
{}
void ErrorDialog::ButtonPressL(TInt aButton)
{
switch(aButton)
{
case 0:
{
CTestBase *test=iTest;
CTDialog::Delete(this);
if (test)
test->Driver()->DestroyTest();
CActiveScheduler::Stop();
User::Leave(0); // Signals RunL not to do another request
}
break;
case 1:
CTestBase *test=iTest;
CTDialog::Delete(this);
if (test)
{
test->Driver()->TestComplete();
test->Driver()->DestroyTest();
}
break;
}
}
//
// TestDriver, drives the test code //
//
TestDriver::TestDriver(TestClient *aClient) : CActive(-10), iClient(aClient)
{
CActiveScheduler::Add(this);
Request();
}
TestClient *TestDriver::Client()
{
return(iClient);
}
TestDriver::~TestDriver()
{
Cancel();
DestroyTest();
}
void TestDriver::DoCancel()
{
TRequestStatus *pStat= &iStatus;
RThread().RequestComplete(pStat,KErrCancel);
}
void TestDriver::Request()
{
TRequestStatus *pStat= &iStatus;
RThread().RequestComplete(pStat,KErrNone);
SetActive();
}
void TestDriver::RunL()
{
iTest=(*CreateTestClass[iTestNum])();
iTest->StartTest(iTestNum,this);
iTest->ConstructL();
}
void TestDriver::TestComplete()
{
iTestNum++;
if (iTestNum==sizeof(CreateTestClass)/sizeof(CreateTestClass[0]))
{
DisplayDialog(_L("Tests complete"),_L(""),_L(""));
CActiveScheduler::Stop();
}
else
Request();
}
void TestDriver::DestroyTest()
{
delete iTest;
iTest=NULL;
}
// CTestBase //
CTestBase::CTestBase(const TDesC &aTitle) : CActive(-10)
{
CActiveScheduler::Add(this);
iTitle.Copy(aTitle);
}
CTestBase::~CTestBase()
{
User::Free(iBuf1);
User::Free(iBuf2);
Cancel();
}
void CTestBase::DoCancel()
{
TRequestStatus *pStat= &iStatus;
RThread().RequestComplete(pStat,KErrCancel);
}
void CTestBase::Request()
{
TRequestStatus *pStat= &iStatus;
RThread().RequestComplete(pStat,KErrNone);
SetActive();
}
void CTestBase::TriggerFail()
{
iFail=ETrue;
}
TestClient *CTestBase::Client()
{
return(iDriver->Client());
}
void CTestBase::LogLeave(TInt aErr)
{
#if defined(LOG_TESTS)
TLogMessageText buf;
_LIT(KLeave,"MAN Left with error code %d in sub-test %d: ");
buf.AppendFormat(KLeave,aErr,iSubTestNum);
buf.Append(iSubTitle);
Client()->LogMessage(buf);
#else
aErr=KErrNone; //To stop a warning
#endif
}
void CTestBase::RunL()
{
TInt ret=EInvalid;
TRAPD(err,ret=DoTestL());
if (err!=KErrNone)
{
LogLeave(err);
if (err!=ETestFailed)
{
User::Leave(err);
}
}
else if (ret==EFinished)
{
iDriver->TestComplete();
iDriver->DestroyTest();
}
else if (ret==ENext)
Request();
}
void CTestBase::StartTest(TInt aNum, TestDriver *aDriver)
{
iDriver=aDriver;
iTestNum=aNum;
LogWin->LogTest(iTitle,aNum);
#if defined(LOG_TESTS)
TLogMessageText buf;
_LIT(ManNewTest,"MAN New Test %d: ");
buf.AppendFormat(ManNewTest,aNum);
buf.Append(iTitle);
Client()->LogMessage(buf);
#endif
Request();
}
void CTestBase::LogSubTest(const TDesC &aSubTitle,TInt aNum)
{
iSubTestNum=aNum;
iSubTitle=aSubTitle;
#if defined(LOG_TESTS)
TLogMessageText buf;
_LIT(ManSubTest,"MAN SubTest %d: ");
buf.AppendFormat(ManSubTest,iSubTestNum);
buf.Append(iSubTitle);
Client()->LogMessage(buf);
#endif
}
void CTestBase::AbortL()
{
TestDriver *driver=iDriver;
iDriver->DestroyTest();
driver->TestComplete();
User::Leave(ETestFailed);
}
void CTestBase::TestL(TInt aCondition)
{
if (!aCondition || iFail)
{
iFail=EFalse;
ErrorDialog *dialog=new ErrorDialog(this);
if (dialog)
{
dialog->SetTitle(_L("Test failed"));
dialog->SetNumButtons(2);
dialog->SetButtonText(0,_L("Abort all tests"));
dialog->SetButtonText(1,_L("Continue other tests"));
dialog->ConstructLD(*Client()->iGroup,*Client()->iGc);
dialog->Display();
}
User::Leave(ETestFailed);
}
}
void CTManScheduler::SetClient(TestClient *aClient)
{
iClient=aClient;
}
void CTManScheduler::Error(TInt aError) const
{
TRAP_IGNORE(doErrorL(aError));
CActiveScheduler::Stop();
}
void CTManScheduler::doErrorL(TInt aError) const
{
CTDialog *dialog=new(ELeave) CTDialog();
if (dialog)
{
TWindowTitle title;
title.Format(TRefByValue<const TDesC>(_L("Error %d")),aError);
dialog->SetTitle(title);
dialog->SetNumButtons(1);
dialog->SetButtonText(0,_L("Abort tests"));
dialog->ConstructLD(*iClient->iGroup,*iClient->iGc);
dialog->Display();
}
}
//
GLDEF_C CTClient *CreateClientL()
{
return(new(ELeave) TestClient());
}
GLDEF_C TInt E32Main()
{
return(TestLibStartUp(CreateClientL));
}