sl@0: // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies). sl@0: // All rights reserved. sl@0: // This component and the accompanying materials are made available sl@0: // under the terms of "Eclipse Public License v1.0" sl@0: // which accompanies this distribution, and is available sl@0: // at the URL "http://www.eclipse.org/legal/epl-v10.html". sl@0: // sl@0: // Initial Contributors: sl@0: // Nokia Corporation - initial contribution. sl@0: // sl@0: // Contributors: sl@0: // sl@0: // Description: sl@0: // ORDINAL.CPP sl@0: // Test ordinal position and priority changes on windows sl@0: // sl@0: // sl@0: sl@0: /** sl@0: @file sl@0: @test sl@0: @internalComponent - Internal Symbian test code sl@0: */ sl@0: sl@0: #include "TORDINAL.H" sl@0: sl@0: _LIT(KLogNextSibling,"NextSibling of iChild%d is not iChild%d"); sl@0: _LIT(KLogNoNextSibling,"iChild%d has a NextSibling when it shouldn't"); sl@0: _LIT(KLogPrevSibling,"PrevSibling of iChild%d is not iChild%d"); sl@0: _LIT(KLogNoPrevSibling,"iChild%d has a PrevSibling when it shouldn't"); sl@0: sl@0: CTOrdinal::CTOrdinal(CTestStep* aStep): sl@0: CTWsGraphicsBase(aStep) sl@0: { sl@0: } sl@0: sl@0: COrdinalWindowBase::COrdinalWindowBase(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) : iClient(aClient), iTest(aTest), iTestStep(aTestStep) sl@0: { sl@0: } sl@0: sl@0: COrdinalWindow::COrdinalWindow(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) : COrdinalWindowBase(aClient, aTest, aTestStep), iClientWin(aClient->iWs) sl@0: { sl@0: __DECLARE_NAME(_S("COrdinalWindow")); sl@0: } sl@0: sl@0: COrdinalWindowGroup::COrdinalWindowGroup(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) : COrdinalWindowBase(aClient, aTest, aTestStep), iGroupWin(aClient->iWs) sl@0: { sl@0: __DECLARE_NAME(_S("COrdinalWindowGroup")); sl@0: } sl@0: sl@0: COrdinalWindowBase::~COrdinalWindowBase() sl@0: { sl@0: if (iWin) sl@0: iWin->Close(); sl@0: } sl@0: sl@0: void COrdinalWindowBase::Draw() sl@0: {} sl@0: sl@0: inline RWindowTreeNode* COrdinalWindowBase::WinTreeNode() sl@0: { sl@0: return(iWin); sl@0: } sl@0: sl@0: inline TUint32 COrdinalWindowBase::Handle() sl@0: { sl@0: return reinterpret_cast(this); sl@0: } sl@0: sl@0: COrdinalWindowBase *COrdinalWindowGroup::NewL(CTClient *aClient, CTestBase* aTest, CTestStep* aTestStep) sl@0: { sl@0: COrdinalWindowGroup *oWin=new(ELeave) COrdinalWindowGroup(aClient, aTest, aTestStep); sl@0: TInt err=oWin->iGroupWin.Construct((TUint32)oWin); sl@0: if (err<0) sl@0: { sl@0: delete oWin; sl@0: User::Leave(err); sl@0: } sl@0: oWin->iWin= &oWin->iGroupWin; sl@0: return(oWin); sl@0: } sl@0: sl@0: COrdinalWindowBase *COrdinalWindow::NewL(CTClient* aClient, RWindowTreeNode* aParent, CTestBase* aTest, CTestStep* aTestStep) sl@0: { sl@0: COrdinalWindow *oWin=new(ELeave) COrdinalWindow(aClient, aTest, aTestStep); sl@0: TInt err=oWin->iClientWin.Construct(*aParent,(TUint32)oWin); sl@0: if (err!=KErrNone) sl@0: { sl@0: delete oWin; sl@0: User::Leave(err); sl@0: } sl@0: oWin->iClientWin.Activate(); sl@0: oWin->iWin= &oWin->iClientWin; sl@0: return(oWin); sl@0: } sl@0: sl@0: TInt COrdinalWindowBase::OrdinalPosition() sl@0: { sl@0: return(iWin->OrdinalPosition()); sl@0: } sl@0: sl@0: void COrdinalWindowBase::SetOrdinalPosition(TInt aPos) sl@0: { sl@0: iWin->SetOrdinalPosition(aPos); sl@0: } sl@0: sl@0: void COrdinalWindowBase::SetOrdinalPosition(TInt aPos,TInt aPri) sl@0: { sl@0: iWin->SetOrdinalPosition(aPos,aPri); sl@0: } sl@0: sl@0: CTOrdinal::~CTOrdinal() sl@0: { sl@0: delete iClient; sl@0: } sl@0: sl@0: void DZ(COrdinalWindowBase * &aX) sl@0: { sl@0: delete aX; sl@0: aX=NULL; sl@0: } sl@0: sl@0: void CTOrdinal::DestroyWindows() sl@0: { sl@0: DZ(iParent); sl@0: DZ(iParent2); sl@0: DZ(iParent3); sl@0: for(TInt child=0;childTEST(iWin->OrdinalPosition()==aTestPos); sl@0: } sl@0: sl@0: void COrdinalWindowBase::SetAndTestOP(TInt aPos,TInt aTestPos) sl@0: { sl@0: iWin->SetOrdinalPosition(aPos); sl@0: iTestStep->TEST(iWin->OrdinalPosition()==aTestPos); sl@0: } sl@0: sl@0: void COrdinalWindowBase::SetAndTestOP(TInt aPos) sl@0: { sl@0: SetAndTestOP(aPos, aPos); sl@0: } sl@0: sl@0: TInt COrdinalWindowBase::SetToLastAndGetOP() sl@0: { sl@0: iWin->SetOrdinalPosition(-1); sl@0: return(iWin->OrdinalPosition()); sl@0: } sl@0: sl@0: TInt COrdinalWindowBase::SetToLastAndGetOPPri(TInt aPri) sl@0: { sl@0: iWin->SetOrdinalPosition(-1, aPri); sl@0: return(iWin->OrdinalPosition()); sl@0: } sl@0: sl@0: void COrdinalWindowBase::SetAndTestOPPri(TInt aPos,TInt aPri,TInt aTestPos) sl@0: { sl@0: iWin->SetOrdinalPosition(aPos,aPri); sl@0: iTestStep->TEST(iWin->OrdinalPosition()==aTestPos); sl@0: iTestStep->TEST(iWin->OrdinalPriority()==aPri); sl@0: } sl@0: sl@0: void COrdinalWindowBase::SetAndTestOPPri(TInt aPos,TInt aPri) sl@0: { sl@0: SetAndTestOPPri(aPos,aPri,aPos); sl@0: } sl@0: sl@0: inline COrdinalWindowBase* COrdinalWindowBase::NextSibling() const sl@0: { sl@0: return reinterpret_cast(iWin->NextSibling()); sl@0: } sl@0: sl@0: inline COrdinalWindowBase* COrdinalWindowBase::PrevSibling() const sl@0: { sl@0: return reinterpret_cast(iWin->PrevSibling()); sl@0: } sl@0: sl@0: void CTOrdinal::TestWindowOrderNext(TInt aBefore,TInt aAfter) sl@0: { sl@0: TInt retVal=(iChild[aBefore]->NextSibling()==iChild[aAfter]); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: LOG_MESSAGE3(KLogNextSibling,aBefore,aAfter); sl@0: } sl@0: sl@0: void CTOrdinal::TestWindowOrderNext(TInt aLast) sl@0: { sl@0: TInt retVal=(iChild[aLast]->NextSibling()==0); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: LOG_MESSAGE2(KLogNoNextSibling,aLast); sl@0: } sl@0: sl@0: void CTOrdinal::TestWindowOrderPrev(TInt aAfter,TInt aBefore) sl@0: { sl@0: TInt retVal=(iChild[aAfter]->PrevSibling()==iChild[aBefore]); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: LOG_MESSAGE3(KLogPrevSibling,aAfter,aBefore); sl@0: } sl@0: sl@0: void CTOrdinal::TestWindowOrderPrev(TInt aFirst) sl@0: { sl@0: TInt retVal=(iChild[aFirst]->PrevSibling()==0); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: LOG_MESSAGE2(KLogNoPrevSibling,aFirst); sl@0: } sl@0: sl@0: void CTOrdinal::OrdinalPos() sl@0: { sl@0: TInt last=iChild[0]->SetToLastAndGetOP(); sl@0: iChild[0]->SetAndTestOP(0); sl@0: iChild[5]->TestOP(5); sl@0: iChild[1]->SetAndTestOP(3); sl@0: iChild[0]->SetAndTestOP(0); sl@0: iChild[0]->SetAndTestOP(-1,last); sl@0: iChild[0]->SetAndTestOP(-1000,last); sl@0: iChild[0]->SetAndTestOP(2); sl@0: iChild[0]->SetAndTestOP(-1000,last); sl@0: iChild[0]->SetAndTestOP(0); sl@0: for(TInt index=0;index<=5;index++) sl@0: iChild[4]->SetAndTestOP(index,index); sl@0: iChild[0]->SetAndTestOP(-1,last); sl@0: iChild[1]->SetAndTestOP(-1,last); sl@0: iChild[2]->SetAndTestOP(-1,last); sl@0: iChild[3]->SetAndTestOP(-1,last); sl@0: iChild[4]->SetAndTestOP(-1,last); sl@0: iChild[5]->SetAndTestOP(-1,last); sl@0: TInt child; sl@0: for (child=0;childSetToLastAndGetOPPri(12); sl@0: iChild[2]->TestOP(last12); sl@0: TInt lastKMax=iChild[2]->SetToLastAndGetOPPri(KMaxTInt32); sl@0: iChild[2]->TestOP(lastKMax); sl@0: TInt last=iChild[2]->SetToLastAndGetOPPri(0); sl@0: iChild[2]->TestOP(last); sl@0: iChild[2]->SetAndTestOPPri(-1,12,last12); // One and only pri 12 window sl@0: iChild[3]->SetAndTestOPPri(-1,KMaxTInt32,lastKMax); // One and only pri KMaxTInt32 window sl@0: iChild[1]->SetAndTestOPPri(0,KMaxTInt32); sl@0: iChild[5]->SetAndTestOP(-1,last-3); sl@0: iChild[1]->TestOP(0); sl@0: iChild[0]->SetAndTestOPPri(0,50); sl@0: iChild[1]->SetAndTestOPPri(0,50); sl@0: iChild[2]->SetAndTestOPPri(0,50); sl@0: iChild[3]->SetAndTestOPPri(0,50); sl@0: iChild[1]->TestOP(2); sl@0: if (iGroupTest) sl@0: { sl@0: retVal=(reinterpret_cast(iChild[0]->NextSibling())==iClient->iGroup); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: { sl@0: _LIT(KLog,"iChild0 NextSibling is not the main group window"); sl@0: LOG_MESSAGE(KLog); sl@0: } sl@0: retVal=(reinterpret_cast(iClient->iGroup->NextSibling())==iChild[4]); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: { sl@0: _LIT(KLog,"NextSibling of main group window is not iChild4"); sl@0: LOG_MESSAGE(KLog); sl@0: } sl@0: } sl@0: else sl@0: TestWindowOrderNext(0,4); sl@0: TestWindowOrderNext(4,5); sl@0: TestWindowOrderNext(5); sl@0: iChild[2]->SetAndTestOPPri(5,-1,0); sl@0: iChild[3]->SetAndTestOPPri(5,-1,1); sl@0: TestWindowOrderNext(5,2); sl@0: iChild[0]->SetAndTestOPPri(100000,KMinTInt32,0); sl@0: iChild[1]->SetAndTestOPPri(200000,KMinTInt32,1); sl@0: iChild[2]->SetAndTestOPPri(300000,KMinTInt32,2); sl@0: iChild[5]->SetAndTestOPPri(0,0,0); sl@0: iChild[3]->TestOP(0); sl@0: iChild[0]->SetAndTestOPPri(0,-1); sl@0: iChild[1]->SetAndTestOPPri(0,-1); sl@0: iChild[2]->SetAndTestOPPri(0,-1); sl@0: iChild[3]->SetAndTestOPPri(0,1); sl@0: iChild[4]->SetAndTestOPPri(0,1); sl@0: iChild[5]->SetAndTestOPPri(0,1); sl@0: TestWindowOrderPrev(0,1); sl@0: TestWindowOrderPrev(1,2); sl@0: if (iGroupTest) sl@0: { sl@0: retVal=(reinterpret_cast(iChild[2]->PrevSibling())==iClient->iGroup); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: { sl@0: _LIT(KLog,"iChild2 PrevSibling is not the main group window"); sl@0: LOG_MESSAGE(KLog); sl@0: } sl@0: retVal=(reinterpret_cast(iClient->iGroup->PrevSibling())==iChild[3]); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: { sl@0: _LIT(KLog,"PrevSibling of main group window is not iChild3"); sl@0: LOG_MESSAGE(KLog); sl@0: } sl@0: } sl@0: else sl@0: TestWindowOrderPrev(2,3); sl@0: TestWindowOrderPrev(3,4); sl@0: TestWindowOrderPrev(4,5); sl@0: TestWindowOrderPrev(5); sl@0: } sl@0: sl@0: void CTOrdinal::ConstructL() sl@0: { sl@0: iClient=new(ELeave) COrdinalClient(); sl@0: iClient->SetScreenNumber(iTest->iScreenNumber); sl@0: iClient->ConstructL(); sl@0: } sl@0: sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0446 sl@0: sl@0: @SYMCR CR1164 sl@0: sl@0: @SYMTestCaseDesc Test ClientHandle function returns right value sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Call this function on windows at various times sl@0: sl@0: @SYMTestExpectedResults The value set when window was created is returned sl@0: */ sl@0: void CTOrdinal::CreateWindowsL(TInt aMode) sl@0: { sl@0: RWindowTreeNode* parent=NULL; sl@0: RWindowTreeNode* base=iClient->iGroup->WinTreeNode(); sl@0: TInt errors=0; sl@0: sl@0: if (base->Child()!=0) sl@0: { sl@0: _LIT(KErrText,"Main Group Window has children at start of test"); sl@0: LOG_MESSAGE(KErrText); sl@0: AutoPanic(EAutoPanicGroupWinHasChild); sl@0: } sl@0: if (base->ClientHandle()!=reinterpret_cast(iClient->iGroup)) sl@0: ++errors; sl@0: if (base->Parent()!=0) sl@0: ++errors; sl@0: TEST(errors==0); sl@0: if (errors>0) sl@0: { sl@0: _LIT(KErrText,"Handles of Main Group Window are not as expected"); sl@0: LOG_MESSAGE2(KErrText,errors); sl@0: } sl@0: iGroupTest=EFalse; sl@0: switch(aMode) sl@0: { sl@0: case 3: sl@0: iParent=COrdinalWindow::NewL(iClient,base,iTest,iStep); sl@0: parent=iParent->WinTreeNode(); sl@0: CheckHandlesOnNewWindow(iClient->iGroup,iParent); sl@0: break; sl@0: case 1: sl@0: parent=iClient->iGroup->WinTreeNode(); sl@0: break; sl@0: case 2: sl@0: iParent=COrdinalWindow::NewL(iClient,base,iTest,iStep); sl@0: CheckHandlesOnNewWindow(iClient->iGroup,iParent); sl@0: iParent2=COrdinalWindow::NewL(iClient,iParent->WinTreeNode(),iTest,iStep); sl@0: CheckHandlesOnNewWindow(iParent,iParent2); sl@0: iParent3=COrdinalWindow::NewL(iClient,iParent2->WinTreeNode(),iTest,iStep); sl@0: parent=iParent3->WinTreeNode(); sl@0: CheckHandlesOnNewWindow(iParent2,iParent3); sl@0: break; sl@0: case 0: sl@0: iGroupTest=ETrue; sl@0: for (TInt child=ENumChildren-1;child>=0;--child) sl@0: iChild[child]=COrdinalWindowGroup::NewL(iClient,iTest,iStep); sl@0: CheckHandles(0); sl@0: return; sl@0: } sl@0: for (TInt child=ENumChildren-1;child>=0;--child) sl@0: { sl@0: iChild[child]=COrdinalWindow::NewL(iClient,parent,iTest,iStep); sl@0: if (iChild[child]->Handle()!=parent->Child()) sl@0: ++errors; sl@0: } sl@0: TEST(errors==0); sl@0: if (errors>0) sl@0: { sl@0: _LIT(KErrText,"%d windows were not the first child"); sl@0: LOG_MESSAGE2(KErrText,errors); sl@0: } sl@0: CheckHandles(parent->ClientHandle()); sl@0: } sl@0: sl@0: void CTOrdinal::CheckHandlesOnNewWindow(CTWindowGroup* aParent,COrdinalWindowBase* aWin) sl@0: { sl@0: TInt errors=0; sl@0: if (aParent->WinTreeNode()->Child()!=aWin->Handle()) sl@0: ++errors; sl@0: if (aWin->WinTreeNode()->Parent()!=reinterpret_cast(aParent)) sl@0: ++errors; sl@0: CheckHandlesOnNewWindow(errors,aWin); sl@0: } sl@0: sl@0: void CTOrdinal::CheckHandlesOnNewWindow(COrdinalWindowBase* aParent,COrdinalWindowBase* aWin) sl@0: { sl@0: TInt errors=0; sl@0: if (aParent->WinTreeNode()->Child()!=aWin->Handle()) sl@0: ++errors; sl@0: if (aWin->WinTreeNode()->Parent()!=aParent->Handle()) sl@0: ++errors; sl@0: CheckHandlesOnNewWindow(errors,aWin); sl@0: } sl@0: sl@0: void CTOrdinal::CheckHandlesOnNewWindow(TInt aErrors,COrdinalWindowBase* aWin) sl@0: { sl@0: RWindowTreeNode* win=aWin->WinTreeNode(); sl@0: if (win->ClientHandle()!=aWin->Handle()) sl@0: ++aErrors; sl@0: if (win->PrevSibling()!=0) sl@0: ++aErrors; sl@0: if (win->NextSibling()!=0) sl@0: ++aErrors; sl@0: if (win->Child()!=0) sl@0: ++aErrors; sl@0: TEST(aErrors==0); sl@0: if (aErrors>0) sl@0: { sl@0: _LIT(KErrText,"%d errors in handles of newly created window"); sl@0: LOG_MESSAGE2(KErrText,aErrors); sl@0: } sl@0: } sl@0: sl@0: void CTOrdinal::CheckHandles(TUint aParent) sl@0: { sl@0: TInt errors=0; sl@0: TInt child; sl@0: for (child=0;childWinTreeNode()->ClientHandle()!=iChild[child]->Handle()) sl@0: ++errors; sl@0: } sl@0: TEST(errors==0); sl@0: if (errors>0) sl@0: { sl@0: _LIT(KErrText,"%d windows gave wrong client handle"); sl@0: LOG_MESSAGE2(KErrText,errors); sl@0: errors=0; sl@0: } sl@0: for (child=0;childWinTreeNode()->Parent()!=aParent) sl@0: ++errors; sl@0: } sl@0: TEST(errors==0); sl@0: if (errors>0) sl@0: { sl@0: _LIT(KErrText,"%d children gave wrong parent handle"); sl@0: LOG_MESSAGE2(KErrText,errors); sl@0: errors=0; sl@0: } sl@0: for (child=1;childWinTreeNode()->NextSibling()!=iChild[child]->Handle()) sl@0: ++errors; sl@0: } sl@0: if (iChild[5]->WinTreeNode()->NextSibling()!=0 && !iGroupTest) sl@0: ++errors; sl@0: TEST(errors==0); sl@0: if (errors>0) sl@0: { sl@0: _LIT(KErrText,"%d windows gave wrong next sibling handle"); sl@0: LOG_MESSAGE2(KErrText,errors); sl@0: errors=0; sl@0: } sl@0: if (iChild[0]->WinTreeNode()->PrevSibling()!=0 && !iGroupTest) sl@0: ++errors; sl@0: for (child=1;childWinTreeNode()->PrevSibling()!=iChild[child-1]->Handle()) sl@0: ++errors; sl@0: } sl@0: TEST(errors==0); sl@0: if (errors>0) sl@0: { sl@0: _LIT(KErrText,"%d windows gave wrong prev sibling handle"); sl@0: LOG_MESSAGE2(KErrText,errors); sl@0: } sl@0: } sl@0: sl@0: COrdinalClient::COrdinalClient() sl@0: { sl@0: } sl@0: sl@0: void COrdinalClient::ConstructL() sl@0: { sl@0: User::LeaveIfError(iWs.Connect()); sl@0: // change to correct screen sl@0: // sl@0: iScreen = new (ELeave) CWsScreenDevice(iWs); sl@0: User::LeaveIfError(iScreen->Construct(iScreenNumber)); sl@0: sl@0: TheClient->iGroup->WinTreeNode()->SetOrdinalPosition(0,-2000000000); sl@0: TheClient->iWs.Flush(); sl@0: iGroup=new(ELeave) CTWindowGroup(this); sl@0: iGroup->ConstructL(); sl@0: } sl@0: sl@0: COrdinalClient::~COrdinalClient() sl@0: { sl@0: TheClient->iGroup->WinTreeNode()->SetOrdinalPosition(0,0); sl@0: } sl@0: sl@0: void COrdinalClient::KeyL(const TKeyEvent &,const TTime &) sl@0: { sl@0: } sl@0: sl@0: void CTOrdinal::RunTestCaseL(TInt /*aCurTestCase*/) sl@0: { sl@0: _LIT(KTest1,"Ordinal 1"); sl@0: ((CTOrdinalStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); sl@0: switch(++iTest->iState) sl@0: { sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0217 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test ordinal position and priority changes on windows sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Set different ordinal positions and priorities on a sl@0: number of windows and check they have been set sl@0: correctly sl@0: sl@0: @SYMTestExpectedResults The positions and priorities are set correctly sl@0: */ sl@0: case 1: sl@0: ((CTOrdinalStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0217")); sl@0: iTest->LogSubTest(KTest1); sl@0: { sl@0: for(TInt index=0;index<4;index++) sl@0: { sl@0: ((CTOrdinalStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0446")); sl@0: CreateWindowsL(index); sl@0: ((CTOrdinalStep*)iStep)->RecordTestResultL(); sl@0: OrdinalPos(); sl@0: OrdinalPriority(); sl@0: DestroyWindows(); sl@0: } sl@0: } sl@0: ((CTOrdinalStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0217")); sl@0: if (!iStep->TestStepResult() == EPass) sl@0: TEST(EFalse); sl@0: break; sl@0: default: sl@0: ((CTOrdinalStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); sl@0: ((CTOrdinalStep*)iStep)->CloseTMSGraphicsStep(); sl@0: TestComplete(); sl@0: break; sl@0: }; sl@0: ((CTOrdinalStep*)iStep)->RecordTestResultL(); sl@0: } sl@0: sl@0: __WS_CONSTRUCT_STEP__(Ordinal)