Added GLES 1.x spinning cube-rendering code to eglbringuptest
The coordinate, color and index data are uploaded to server-side
buffers by the CGLES1Cube::KhrSetup function. CGLES1Cube::KhrPaint
just sets the view matrix and issues a draw command.
Which demo to display can be selected by passing its name on the
command line, e.g.
eglbringuptest vgline
eglbringuptest gles1cube
If no name is provided, the application defaults to vgline.
// Copyright (c) 1996-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:
// ORDINAL.CPP
// Test ordinal position and priority changes on windows
//
//
/**
@file
@test
@internalComponent - Internal Symbian test code
*/
#include "TORDINAL.H"
_LIT(KLogNextSibling,"NextSibling of iChild%d is not iChild%d");
_LIT(KLogNoNextSibling,"iChild%d has a NextSibling when it shouldn't");
_LIT(KLogPrevSibling,"PrevSibling of iChild%d is not iChild%d");
_LIT(KLogNoPrevSibling,"iChild%d has a PrevSibling when it shouldn't");
CTOrdinal::CTOrdinal(CTestStep* aStep):
CTWsGraphicsBase(aStep)
{
}
COrdinalWindowBase::COrdinalWindowBase(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) : iClient(aClient), iTest(aTest), iTestStep(aTestStep)
{
}
COrdinalWindow::COrdinalWindow(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) : COrdinalWindowBase(aClient, aTest, aTestStep), iClientWin(aClient->iWs)
{
__DECLARE_NAME(_S("COrdinalWindow"));
}
COrdinalWindowGroup::COrdinalWindowGroup(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) : COrdinalWindowBase(aClient, aTest, aTestStep), iGroupWin(aClient->iWs)
{
__DECLARE_NAME(_S("COrdinalWindowGroup"));
}
COrdinalWindowBase::~COrdinalWindowBase()
{
if (iWin)
iWin->Close();
}
void COrdinalWindowBase::Draw()
{}
inline RWindowTreeNode* COrdinalWindowBase::WinTreeNode()
{
return(iWin);
}
inline TUint32 COrdinalWindowBase::Handle()
{
return reinterpret_cast<TUint>(this);
}
COrdinalWindowBase *COrdinalWindowGroup::NewL(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep)
{
COrdinalWindowGroup *oWin=new(ELeave) COrdinalWindowGroup(aClient, aTest, aTestStep);
TInt err=oWin->iGroupWin.Construct((TUint32)oWin);
if (err<0)
{
delete oWin;
User::Leave(err);
}
oWin->iWin= &oWin->iGroupWin;
return(oWin);
}
COrdinalWindowBase *COrdinalWindow::NewL(CTClient* aClient, RWindowTreeNode* aParent, CTestBase* aTest, CTestStep* aTestStep)
{
COrdinalWindow *oWin=new(ELeave) COrdinalWindow(aClient, aTest, aTestStep);
TInt err=oWin->iClientWin.Construct(*aParent,(TUint32)oWin);
if (err!=KErrNone)
{
delete oWin;
User::Leave(err);
}
oWin->iClientWin.Activate();
oWin->iWin= &oWin->iClientWin;
return(oWin);
}
TInt COrdinalWindowBase::OrdinalPosition()
{
return(iWin->OrdinalPosition());
}
void COrdinalWindowBase::SetOrdinalPosition(TInt aPos)
{
iWin->SetOrdinalPosition(aPos);
}
void COrdinalWindowBase::SetOrdinalPosition(TInt aPos,TInt aPri)
{
iWin->SetOrdinalPosition(aPos,aPri);
}
CTOrdinal::~CTOrdinal()
{
delete iClient;
}
void DZ(COrdinalWindowBase * &aX)
{
delete aX;
aX=NULL;
}
void CTOrdinal::DestroyWindows()
{
DZ(iParent);
DZ(iParent2);
DZ(iParent3);
for(TInt child=0;child<ENumChildren;++child)
DZ(iChild[child]);
}
void COrdinalWindowBase::TestOP(TInt aTestPos)
{
iTestStep->TEST(iWin->OrdinalPosition()==aTestPos);
}
void COrdinalWindowBase::SetAndTestOP(TInt aPos,TInt aTestPos)
{
iWin->SetOrdinalPosition(aPos);
iTestStep->TEST(iWin->OrdinalPosition()==aTestPos);
}
void COrdinalWindowBase::SetAndTestOP(TInt aPos)
{
SetAndTestOP(aPos, aPos);
}
TInt COrdinalWindowBase::SetToLastAndGetOP()
{
iWin->SetOrdinalPosition(-1);
return(iWin->OrdinalPosition());
}
TInt COrdinalWindowBase::SetToLastAndGetOPPri(TInt aPri)
{
iWin->SetOrdinalPosition(-1, aPri);
return(iWin->OrdinalPosition());
}
void COrdinalWindowBase::SetAndTestOPPri(TInt aPos,TInt aPri,TInt aTestPos)
{
iWin->SetOrdinalPosition(aPos,aPri);
iTestStep->TEST(iWin->OrdinalPosition()==aTestPos);
iTestStep->TEST(iWin->OrdinalPriority()==aPri);
}
void COrdinalWindowBase::SetAndTestOPPri(TInt aPos,TInt aPri)
{
SetAndTestOPPri(aPos,aPri,aPos);
}
inline COrdinalWindowBase* COrdinalWindowBase::NextSibling() const
{
return reinterpret_cast<COrdinalWindow*>(iWin->NextSibling());
}
inline COrdinalWindowBase* COrdinalWindowBase::PrevSibling() const
{
return reinterpret_cast<COrdinalWindow*>(iWin->PrevSibling());
}
void CTOrdinal::TestWindowOrderNext(TInt aBefore,TInt aAfter)
{
TInt retVal=(iChild[aBefore]->NextSibling()==iChild[aAfter]);
TEST(retVal);
if (!retVal)
LOG_MESSAGE3(KLogNextSibling,aBefore,aAfter);
}
void CTOrdinal::TestWindowOrderNext(TInt aLast)
{
TInt retVal=(iChild[aLast]->NextSibling()==0);
TEST(retVal);
if (!retVal)
LOG_MESSAGE2(KLogNoNextSibling,aLast);
}
void CTOrdinal::TestWindowOrderPrev(TInt aAfter,TInt aBefore)
{
TInt retVal=(iChild[aAfter]->PrevSibling()==iChild[aBefore]);
TEST(retVal);
if (!retVal)
LOG_MESSAGE3(KLogPrevSibling,aAfter,aBefore);
}
void CTOrdinal::TestWindowOrderPrev(TInt aFirst)
{
TInt retVal=(iChild[aFirst]->PrevSibling()==0);
TEST(retVal);
if (!retVal)
LOG_MESSAGE2(KLogNoPrevSibling,aFirst);
}
void CTOrdinal::OrdinalPos()
{
TInt last=iChild[0]->SetToLastAndGetOP();
iChild[0]->SetAndTestOP(0);
iChild[5]->TestOP(5);
iChild[1]->SetAndTestOP(3);
iChild[0]->SetAndTestOP(0);
iChild[0]->SetAndTestOP(-1,last);
iChild[0]->SetAndTestOP(-1000,last);
iChild[0]->SetAndTestOP(2);
iChild[0]->SetAndTestOP(-1000,last);
iChild[0]->SetAndTestOP(0);
for(TInt index=0;index<=5;index++)
iChild[4]->SetAndTestOP(index,index);
iChild[0]->SetAndTestOP(-1,last);
iChild[1]->SetAndTestOP(-1,last);
iChild[2]->SetAndTestOP(-1,last);
iChild[3]->SetAndTestOP(-1,last);
iChild[4]->SetAndTestOP(-1,last);
iChild[5]->SetAndTestOP(-1,last);
TInt child;
for (child=0;child<ENumChildren-1;++child)
TestWindowOrderNext(child,child+1);
TestWindowOrderNext(5);
}
void CTOrdinal::OrdinalPriority()
{
TBool retVal;
TInt last12=iChild[2]->SetToLastAndGetOPPri(12);
iChild[2]->TestOP(last12);
TInt lastKMax=iChild[2]->SetToLastAndGetOPPri(KMaxTInt32);
iChild[2]->TestOP(lastKMax);
TInt last=iChild[2]->SetToLastAndGetOPPri(0);
iChild[2]->TestOP(last);
iChild[2]->SetAndTestOPPri(-1,12,last12); // One and only pri 12 window
iChild[3]->SetAndTestOPPri(-1,KMaxTInt32,lastKMax); // One and only pri KMaxTInt32 window
iChild[1]->SetAndTestOPPri(0,KMaxTInt32);
iChild[5]->SetAndTestOP(-1,last-3);
iChild[1]->TestOP(0);
iChild[0]->SetAndTestOPPri(0,50);
iChild[1]->SetAndTestOPPri(0,50);
iChild[2]->SetAndTestOPPri(0,50);
iChild[3]->SetAndTestOPPri(0,50);
iChild[1]->TestOP(2);
if (iGroupTest)
{
retVal=(reinterpret_cast<CBase*>(iChild[0]->NextSibling())==iClient->iGroup);
TEST(retVal);
if (!retVal)
{
_LIT(KLog,"iChild0 NextSibling is not the main group window");
LOG_MESSAGE(KLog);
}
retVal=(reinterpret_cast<CBase*>(iClient->iGroup->NextSibling())==iChild[4]);
TEST(retVal);
if (!retVal)
{
_LIT(KLog,"NextSibling of main group window is not iChild4");
LOG_MESSAGE(KLog);
}
}
else
TestWindowOrderNext(0,4);
TestWindowOrderNext(4,5);
TestWindowOrderNext(5);
iChild[2]->SetAndTestOPPri(5,-1,0);
iChild[3]->SetAndTestOPPri(5,-1,1);
TestWindowOrderNext(5,2);
iChild[0]->SetAndTestOPPri(100000,KMinTInt32,0);
iChild[1]->SetAndTestOPPri(200000,KMinTInt32,1);
iChild[2]->SetAndTestOPPri(300000,KMinTInt32,2);
iChild[5]->SetAndTestOPPri(0,0,0);
iChild[3]->TestOP(0);
iChild[0]->SetAndTestOPPri(0,-1);
iChild[1]->SetAndTestOPPri(0,-1);
iChild[2]->SetAndTestOPPri(0,-1);
iChild[3]->SetAndTestOPPri(0,1);
iChild[4]->SetAndTestOPPri(0,1);
iChild[5]->SetAndTestOPPri(0,1);
TestWindowOrderPrev(0,1);
TestWindowOrderPrev(1,2);
if (iGroupTest)
{
retVal=(reinterpret_cast<CBase*>(iChild[2]->PrevSibling())==iClient->iGroup);
TEST(retVal);
if (!retVal)
{
_LIT(KLog,"iChild2 PrevSibling is not the main group window");
LOG_MESSAGE(KLog);
}
retVal=(reinterpret_cast<CBase*>(iClient->iGroup->PrevSibling())==iChild[3]);
TEST(retVal);
if (!retVal)
{
_LIT(KLog,"PrevSibling of main group window is not iChild3");
LOG_MESSAGE(KLog);
}
}
else
TestWindowOrderPrev(2,3);
TestWindowOrderPrev(3,4);
TestWindowOrderPrev(4,5);
TestWindowOrderPrev(5);
}
void CTOrdinal::ConstructL()
{
iClient=new(ELeave) COrdinalClient();
iClient->SetScreenNumber(iTest->iScreenNumber);
iClient->ConstructL();
}
/**
@SYMTestCaseID GRAPHICS-WSERV-0446
@SYMCR CR1164
@SYMTestCaseDesc Test ClientHandle function returns right value
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Call this function on windows at various times
@SYMTestExpectedResults The value set when window was created is returned
*/
void CTOrdinal::CreateWindowsL(TInt aMode)
{
RWindowTreeNode* parent=NULL;
RWindowTreeNode* base=iClient->iGroup->WinTreeNode();
TInt errors=0;
if (base->Child()!=0)
{
_LIT(KErrText,"Main Group Window has children at start of test");
LOG_MESSAGE(KErrText);
AutoPanic(EAutoPanicGroupWinHasChild);
}
if (base->ClientHandle()!=reinterpret_cast<TUint32&>(iClient->iGroup))
++errors;
if (base->Parent()!=0)
++errors;
TEST(errors==0);
if (errors>0)
{
_LIT(KErrText,"Handles of Main Group Window are not as expected");
LOG_MESSAGE2(KErrText,errors);
}
iGroupTest=EFalse;
switch(aMode)
{
case 3:
iParent=COrdinalWindow::NewL(iClient,base,iTest,iStep);
parent=iParent->WinTreeNode();
CheckHandlesOnNewWindow(iClient->iGroup,iParent);
break;
case 1:
parent=iClient->iGroup->WinTreeNode();
break;
case 2:
iParent=COrdinalWindow::NewL(iClient,base,iTest,iStep);
CheckHandlesOnNewWindow(iClient->iGroup,iParent);
iParent2=COrdinalWindow::NewL(iClient,iParent->WinTreeNode(),iTest,iStep);
CheckHandlesOnNewWindow(iParent,iParent2);
iParent3=COrdinalWindow::NewL(iClient,iParent2->WinTreeNode(),iTest,iStep);
parent=iParent3->WinTreeNode();
CheckHandlesOnNewWindow(iParent2,iParent3);
break;
case 0:
iGroupTest=ETrue;
for (TInt child=ENumChildren-1;child>=0;--child)
iChild[child]=COrdinalWindowGroup::NewL(iClient,iTest,iStep);
CheckHandles(0);
return;
}
for (TInt child=ENumChildren-1;child>=0;--child)
{
iChild[child]=COrdinalWindow::NewL(iClient,parent,iTest,iStep);
if (iChild[child]->Handle()!=parent->Child())
++errors;
}
TEST(errors==0);
if (errors>0)
{
_LIT(KErrText,"%d windows were not the first child");
LOG_MESSAGE2(KErrText,errors);
}
CheckHandles(parent->ClientHandle());
}
void CTOrdinal::CheckHandlesOnNewWindow(CTWindowGroup* aParent,COrdinalWindowBase* aWin)
{
TInt errors=0;
if (aParent->WinTreeNode()->Child()!=aWin->Handle())
++errors;
if (aWin->WinTreeNode()->Parent()!=reinterpret_cast<TUint32&>(aParent))
++errors;
CheckHandlesOnNewWindow(errors,aWin);
}
void CTOrdinal::CheckHandlesOnNewWindow(COrdinalWindowBase* aParent,COrdinalWindowBase* aWin)
{
TInt errors=0;
if (aParent->WinTreeNode()->Child()!=aWin->Handle())
++errors;
if (aWin->WinTreeNode()->Parent()!=aParent->Handle())
++errors;
CheckHandlesOnNewWindow(errors,aWin);
}
void CTOrdinal::CheckHandlesOnNewWindow(TInt aErrors,COrdinalWindowBase* aWin)
{
RWindowTreeNode* win=aWin->WinTreeNode();
if (win->ClientHandle()!=aWin->Handle())
++aErrors;
if (win->PrevSibling()!=0)
++aErrors;
if (win->NextSibling()!=0)
++aErrors;
if (win->Child()!=0)
++aErrors;
TEST(aErrors==0);
if (aErrors>0)
{
_LIT(KErrText,"%d errors in handles of newly created window");
LOG_MESSAGE2(KErrText,aErrors);
}
}
void CTOrdinal::CheckHandles(TUint aParent)
{
TInt errors=0;
TInt child;
for (child=0;child<ENumChildren;++child)
{
if (iChild[child]->WinTreeNode()->ClientHandle()!=iChild[child]->Handle())
++errors;
}
TEST(errors==0);
if (errors>0)
{
_LIT(KErrText,"%d windows gave wrong client handle");
LOG_MESSAGE2(KErrText,errors);
errors=0;
}
for (child=0;child<ENumChildren;++child)
{
if (iChild[child]->WinTreeNode()->Parent()!=aParent)
++errors;
}
TEST(errors==0);
if (errors>0)
{
_LIT(KErrText,"%d children gave wrong parent handle");
LOG_MESSAGE2(KErrText,errors);
errors=0;
}
for (child=1;child<ENumChildren;++child)
{
if (iChild[child-1]->WinTreeNode()->NextSibling()!=iChild[child]->Handle())
++errors;
}
if (iChild[5]->WinTreeNode()->NextSibling()!=0 && !iGroupTest)
++errors;
TEST(errors==0);
if (errors>0)
{
_LIT(KErrText,"%d windows gave wrong next sibling handle");
LOG_MESSAGE2(KErrText,errors);
errors=0;
}
if (iChild[0]->WinTreeNode()->PrevSibling()!=0 && !iGroupTest)
++errors;
for (child=1;child<ENumChildren;++child)
{
if (iChild[child]->WinTreeNode()->PrevSibling()!=iChild[child-1]->Handle())
++errors;
}
TEST(errors==0);
if (errors>0)
{
_LIT(KErrText,"%d windows gave wrong prev sibling handle");
LOG_MESSAGE2(KErrText,errors);
}
}
COrdinalClient::COrdinalClient()
{
}
void COrdinalClient::ConstructL()
{
User::LeaveIfError(iWs.Connect());
// change to correct screen
//
iScreen = new (ELeave) CWsScreenDevice(iWs);
User::LeaveIfError(iScreen->Construct(iScreenNumber));
TheClient->iGroup->WinTreeNode()->SetOrdinalPosition(0,-2000000000);
TheClient->iWs.Flush();
iGroup=new(ELeave) CTWindowGroup(this);
iGroup->ConstructL();
}
COrdinalClient::~COrdinalClient()
{
TheClient->iGroup->WinTreeNode()->SetOrdinalPosition(0,0);
}
void COrdinalClient::KeyL(const TKeyEvent &,const TTime &)
{
}
void CTOrdinal::RunTestCaseL(TInt /*aCurTestCase*/)
{
_LIT(KTest1,"Ordinal 1");
((CTOrdinalStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName);
switch(++iTest->iState)
{
/**
@SYMTestCaseID GRAPHICS-WSERV-0217
@SYMDEF DEF081259
@SYMTestCaseDesc Test ordinal position and priority changes on windows
@SYMTestPriority High
@SYMTestStatus Implemented
@SYMTestActions Set different ordinal positions and priorities on a
number of windows and check they have been set
correctly
@SYMTestExpectedResults The positions and priorities are set correctly
*/
case 1:
((CTOrdinalStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0217"));
iTest->LogSubTest(KTest1);
{
for(TInt index=0;index<4;index++)
{
((CTOrdinalStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0446"));
CreateWindowsL(index);
((CTOrdinalStep*)iStep)->RecordTestResultL();
OrdinalPos();
OrdinalPriority();
DestroyWindows();
}
}
((CTOrdinalStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0217"));
if (!iStep->TestStepResult() == EPass)
TEST(EFalse);
break;
default:
((CTOrdinalStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName);
((CTOrdinalStep*)iStep)->CloseTMSGraphicsStep();
TestComplete();
break;
};
((CTOrdinalStep*)iStep)->RecordTestResultL();
}
__WS_CONSTRUCT_STEP__(Ordinal)