--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/windowing/windowserver/tauto/TORDINAL.CPP Tue Feb 02 01:47:50 2010 +0200
@@ -0,0 +1,579 @@
+// 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)