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: // Coverted from TMan test code (TMMODCHG.CPP) August 2000 sl@0: // Test modifier changed message 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 "TMODCHG.H" sl@0: sl@0: #define LOGGING on //Uncoment this line to get extra logging sl@0: sl@0: struct TModifierChangedTestsParams sl@0: { sl@0: TText *txt; // Text message telling user what to do sl@0: TUint changed; sl@0: TUint state; sl@0: TUint stateMask; sl@0: }; sl@0: sl@0: LOCAL_D TModifierChangedTestsParams ModifierChangedTests[]={ sl@0: {(TText *)_S("Press Caps"),EModifierCapsLock,EModifierCapsLock,EModifierCapsLock}, sl@0: {(TText *)_S("Press Caps (again)"),EModifierCapsLock,0,EModifierCapsLock}, sl@0: {(TText *)_S("Press left shift"),EModifierShift|EModifierLeftShift,EModifierShift|EModifierLeftShift,EModifierShift|EModifierLeftShift}, sl@0: {(TText *)_S("Release left shift"),EModifierShift|EModifierLeftShift,0,EModifierShift|EModifierLeftShift}, sl@0: {(TText *)_S("Press right shift"),EModifierShift|EModifierRightShift,EModifierShift|EModifierRightShift,EModifierShift|EModifierRightShift}, sl@0: {(TText *)_S("Release right shift"),EModifierShift|EModifierRightShift,0,EModifierShift|EModifierRightShift}, sl@0: {(TText *)_S("Press (left) func"),EModifierFunc|EModifierLeftFunc,EModifierFunc|EModifierLeftFunc,EModifierFunc|EModifierLeftFunc}, sl@0: {(TText *)_S("Release (left) func"),EModifierFunc|EModifierLeftFunc,0,EModifierFunc|EModifierLeftFunc}, sl@0: {(TText *)_S("Press (left) control"),EModifierCtrl|EModifierLeftCtrl,EModifierCtrl|EModifierLeftCtrl,EModifierCtrl|EModifierLeftCtrl}, sl@0: {(TText *)_S("Release (left) control"),EModifierCtrl|EModifierLeftCtrl,0,EModifierCtrl|EModifierLeftCtrl}, sl@0: }; sl@0: sl@0: // list of ModifierEvents that should be monitored sl@0: LOCAL_D TInt ModifierChangedEvents=EModifierShift|EModifierLeftShift|EModifierRightShift| sl@0: EModifierCapsLock|EModifierFunc|EModifierLeftFunc|EModifierCtrl|EModifierLeftCtrl; sl@0: sl@0: const TInt numTests=sizeof(ModifierChangedTests)/sizeof(ModifierChangedTests[0]); sl@0: sl@0: sl@0: // sl@0: // CTEventWindowGroup class // sl@0: // sl@0: sl@0: CTEventWindowGroup::CTEventWindowGroup(CTClient *aClient, CTModifiersChanged *aTest) : CTWindowGroup(aClient), iTest(aTest) sl@0: {} sl@0: sl@0: void CTEventWindowGroup::ConstructL() sl@0: { sl@0: CTWindowGroup::ConstructL(); sl@0: iGroupWin.EnableModifierChangedEvents(ModifierChangedEvents,EEventControlAlways); sl@0: } sl@0: sl@0: void CTEventWindowGroup::ModifiersChanged(const TModifiersChangedEvent &aModifiersChanged, const TTime &) sl@0: { sl@0: iTest->TestModifiersState(aModifiersChanged); // tests if event is correct sl@0: } sl@0: sl@0: void CTEventWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &) sl@0: { sl@0: if (aKey.iCode==EKeyEscape || (aKey.iCode==' ' && iTest->iModSetTest)) sl@0: iTest->EndTest(); // not really needed, because timer cancels long running tests sl@0: } sl@0: sl@0: // sl@0: // CMCWindow, class // sl@0: // sl@0: sl@0: CMCWindow::CMCWindow(CTModifiersChanged *aTest) : CTWin(), iTest(aTest) sl@0: { sl@0: iBack=TRgb::Gray256(230); sl@0: } sl@0: sl@0: void CMCWindow::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc) sl@0: { sl@0: ConstructExtLD(*parent,pos,size); sl@0: iWin.SetBackgroundColor(iBack); sl@0: Activate(); sl@0: AssignGC(aGc); sl@0: iLineHeight=iFont->HeightInPixels()*5/4; sl@0: iFontAscent=iFont->AscentInPixels(); sl@0: iXpos1=4; sl@0: iXpos2=iXpos1+12*iFont->TextWidthInPixels(_L("M")); sl@0: } sl@0: sl@0: void CMCWindow::DrawModSetLine(const TDesC &aDes,TInt aModifier,TInt iSettableModifiers) sl@0: { sl@0: iYpos+=iLineHeight; sl@0: iGc->DrawText(aDes, TPoint(iXpos1,iYpos)); sl@0: iGc->DrawText(aModifier&iSettableModifiers ? _L("Yes"):_L("No"), TPoint(iXpos2,iYpos)); sl@0: } sl@0: sl@0: void CMCWindow::Draw() sl@0: { sl@0: iGc->Clear(); sl@0: if (iTest->iModSetTest) sl@0: { sl@0: iYpos=iFontAscent+3; sl@0: TBuf<32> buf; sl@0: buf.Format(TRefByValue(_L("Settable? [0x%4x]")), iTest->iSettable); sl@0: iGc->DrawText(_L("Modifier"), TPoint(iXpos1,iYpos)); sl@0: iGc->DrawText(buf, TPoint(iXpos2,iYpos)); sl@0: DrawModSetLine(_L("Shift"),EModifierShift,iTest->iSettable); sl@0: DrawModSetLine(_L("Left Shift"),EModifierLeftShift,iTest->iSettable); sl@0: DrawModSetLine(_L("Func"),EModifierFunc,iTest->iSettable); sl@0: DrawModSetLine(_L("Caps"),EModifierCapsLock,iTest->iSettable); sl@0: DrawModSetLine(_L("NumLock"),EModifierNumLock,iTest->iSettable); sl@0: DrawModSetLine(_L("Double Click"),EModifierDoubleClick,iTest->iSettable); sl@0: } sl@0: else sl@0: iGc->DrawText(TPtrC(ModifierChangedTests[iTest->SubState()].txt), TPoint(10,20)); sl@0: } sl@0: sl@0: // sl@0: sl@0: CTModifiersChanged::CTModifiersChanged(CTestStep* aStep): CTWsGraphicsBase(aStep), sl@0: iSkipFirstModifierEvents(EFalse), iSubSchedulerRunning(EFalse) sl@0: { sl@0: } sl@0: sl@0: CTModifiersChanged::~CTModifiersChanged() sl@0: { sl@0: delete iTimeOut; sl@0: delete iWin; sl@0: delete iEventGroup; sl@0: } sl@0: sl@0: void CTModifiersChanged::ConstructL() sl@0: { sl@0: iTimeOut=new(ELeave) CTimeOut(); sl@0: iTimeOut->ConstructL(); sl@0: iWin=new(ELeave) CMCWindow(this); sl@0: iWin->SetUpL(TPoint(10,10),TSize(240,200),Client()->iGroup, *Client()->iGc); sl@0: } sl@0: sl@0: TInt CTModifiersChanged::TimeOut(TAny* aTest) // static sl@0: { sl@0: static_cast(aTest)->TimeOut(); sl@0: return(KErrNone); sl@0: } sl@0: sl@0: void CTModifiersChanged::TimeOut() sl@0: { sl@0: #if defined(LOGGING) sl@0: _LIT(KLogTimeOut,"Test timed out after %d secs."); sl@0: LOG_MESSAGE2(KLogTimeOut,KTimeOutAfter/1000000); sl@0: #endif sl@0: EndTest(); sl@0: } sl@0: sl@0: void CTModifiersChanged::EndTest() sl@0: { sl@0: TEST(EFalse); // test failed (timeout or manually cancelled) sl@0: if (iModSetTest) sl@0: { sl@0: iModSetTest=EFalse; sl@0: iWin->Invalidate(); sl@0: } sl@0: _LIT(KLogEndTest,"EndTest - State %d - SubState %d"); sl@0: LOG_MESSAGE3(KLogEndTest,iTest->iState,iSubState); sl@0: if (iSubSchedulerRunning) sl@0: { sl@0: iSubSchedulerRunning = EFalse; sl@0: CActiveScheduler::Stop(); // stop the sub-scheduler, so test-framework can execute the next test sl@0: } sl@0: } sl@0: sl@0: TInt CTModifiersChanged::SubState() const sl@0: { sl@0: return(iSubState); sl@0: } sl@0: sl@0: void CTModifiersChanged::IncSubState() sl@0: { sl@0: if (iSubStateInvalidate(); sl@0: TheClient->WaitForRedrawsToFinish(); sl@0: SendEvents(); sl@0: } sl@0: else if (iSubState>=numTests-1) // test finished successfully sl@0: { sl@0: if (iSubSchedulerRunning) sl@0: { sl@0: iSubSchedulerRunning = EFalse; sl@0: CActiveScheduler::Stop(); // stop the sub-scheduler, so test-framework can execute the next test sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTModifiersChanged::TestModifiersState(const TModifiersChangedEvent &aModifiersChanged) sl@0: { sl@0: if (iTest->iState==1) // only if currently in test 1 (add another if for further tests) sl@0: { sl@0: TInt getMods=Client()->iWs.GetModifierState(); // double check the modifiers sl@0: #if defined(LOGGING) sl@0: if (iSkipFirstModifierEvents) sl@0: { sl@0: _LIT(KLogIgnored,"### This Event is part of the initial setup and is ignored for the test. ###"); sl@0: LOG_MESSAGE(KLogIgnored); sl@0: } sl@0: TLogMessageText buf; sl@0: _LIT(KLog1,"##MC1 SS=%x Test-Modifiers=0x%x Test-Changed=0x%x Test-Mask=0x%x"); sl@0: buf.Format(KLog1,iSubState,ModifierChangedTests[iSubState].state,ModifierChangedTests[iSubState].changed,ModifierChangedTests[iSubState].stateMask); sl@0: LOG_MESSAGE(buf); sl@0: _LIT(KLog2,"##MC2 Event-Modifiers=0x%x Event-Changed=0x%x Get-Modifiers=0x%x"); sl@0: buf.Format(KLog2,aModifiersChanged.iModifiers,aModifiersChanged.iChangedModifiers,getMods); sl@0: LOG_MESSAGE(buf); sl@0: _LIT(KLog3,"##MC3 Changed: (Event) 0x%x==0x%x (Test)"); sl@0: buf.Format(KLog3,aModifiersChanged.iChangedModifiers,ModifierChangedTests[iSubState].changed); sl@0: LOG_MESSAGE(buf); sl@0: _LIT(KLog4,"##MC4 Modifier (with mask): (Event) 0x%x==0x%x (Test)"); sl@0: buf.Format(KLog4,aModifiersChanged.iModifiers&ModifierChangedTests[iSubState].stateMask,ModifierChangedTests[iSubState].state); sl@0: LOG_MESSAGE(buf); sl@0: _LIT(KLog5,"##MC5 Modifier (with mask): (Get) 0x%x==0x%x (Test)"); sl@0: buf.Format(KLog5,getMods&ModifierChangedTests[iSubState].stateMask,ModifierChangedTests[iSubState].state); sl@0: LOG_MESSAGE(buf); sl@0: #endif sl@0: if (iSkipFirstModifierEvents) // skip the events caused by the initialization sl@0: { sl@0: if(--iSkipCounter<=0) sl@0: { sl@0: iSkipFirstModifierEvents = EFalse; sl@0: } sl@0: } sl@0: else sl@0: { sl@0: if (aModifiersChanged.iChangedModifiers==ModifierChangedTests[iSubState].changed && sl@0: (aModifiersChanged.iModifiers&ModifierChangedTests[iSubState].stateMask)==ModifierChangedTests[iSubState].state && sl@0: (getMods&ModifierChangedTests[iSubState].stateMask)==ModifierChangedTests[iSubState].state) sl@0: { sl@0: IncSubState(); // subtest is successfull sl@0: } sl@0: else sl@0: { sl@0: TEST(EFalse); // subtest failed sl@0: _LIT(KLogTestFailed,"Modifier Change test failed."); sl@0: LOG_MESSAGE(KLogTestFailed); sl@0: } sl@0: } sl@0: } // if test 1 sl@0: } sl@0: sl@0: void CTModifiersChanged::BadParams() sl@0: { sl@0: } sl@0: sl@0: /** sl@0: * Resets all the modifiers after the test is finished. Make sure that all keys used in the sl@0: * test are in the up-state. sl@0: */ sl@0: void CTModifiersChanged::ResetModifiers() sl@0: { sl@0: _LIT(KLogResetModifiersError,"Error %d occured while turning off modifier 0x%x"); sl@0: TInt err; sl@0: if ((err = Client()->iWs.SetModifierState(EModifierCapsLock,ETurnOffModifier)) != KErrNone) sl@0: LOG_MESSAGE3(KLogResetModifiersError,err, EModifierCapsLock); sl@0: if ((err = Client()->iWs.SetModifierState(EModifierShift,ETurnOffModifier)) != KErrNone) sl@0: LOG_MESSAGE3(KLogResetModifiersError,err, EModifierShift); sl@0: if ((err = Client()->iWs.SetModifierState(EModifierLeftShift,ETurnOffModifier)) != KErrNone) sl@0: LOG_MESSAGE3(KLogResetModifiersError,err, EModifierLeftShift); sl@0: if ((err = Client()->iWs.SetModifierState(EModifierRightShift,ETurnOffModifier)) != KErrNone) sl@0: LOG_MESSAGE3(KLogResetModifiersError,err, EModifierRightShift); sl@0: if ((err = Client()->iWs.SetModifierState(EModifierFunc,ETurnOffModifier)) != KErrNone) sl@0: LOG_MESSAGE3(KLogResetModifiersError,err, EModifierFunc); sl@0: if ((err = Client()->iWs.SetModifierState(EModifierLeftFunc,ETurnOffModifier)) != KErrNone) sl@0: LOG_MESSAGE3(KLogResetModifiersError,err, EModifierLeftFunc); sl@0: if ((err = Client()->iWs.SetModifierState(EModifierCtrl,ETurnOffModifier)) != KErrNone) sl@0: LOG_MESSAGE3(KLogResetModifiersError,err, EModifierCtrl); sl@0: if ((err = Client()->iWs.SetModifierState(EModifierLeftCtrl,ETurnOffModifier)) != KErrNone) sl@0: LOG_MESSAGE3(KLogResetModifiersError,err, EModifierLeftCtrl); sl@0: } sl@0: sl@0: /** sl@0: * Initialises the Modifier state. All tested modifiers must be in the up-state before the sl@0: * test starts. The number of sent key simulations needed for initialization is recorded. sl@0: * Each key simulation during initialization causes a ModifierChanged event which should be sl@0: * ignored because it's not part of the actual test. sl@0: */ sl@0: void CTModifiersChanged::ModifierChangedEventsL() sl@0: { sl@0: iEventGroup=new(ELeave) CTEventWindowGroup(Client(), this); sl@0: iEventGroup->ConstructL(); sl@0: TInt modifiers=Client()->iWs.GetModifierState(); sl@0: sl@0: if ((ModifierChangedEvents&modifiers)>0) // reset modifiers if they are in the down-state sl@0: { sl@0: iSkipFirstModifierEvents = ETrue; sl@0: if ((modifiers&EModifierCapsLock)>0) sl@0: { sl@0: iTest->SimulateKeyDownUp(EStdKeyCapsLock); sl@0: ++iSkipCounter; sl@0: modifiers=Client()->iWs.GetModifierState(); sl@0: } sl@0: if ((modifiers&EModifierLeftShift)>0) sl@0: { sl@0: iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftShift); sl@0: ++iSkipCounter; sl@0: modifiers=Client()->iWs.GetModifierState(); sl@0: } sl@0: if ((modifiers&EModifierRightShift)>0) sl@0: { sl@0: iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyRightShift); sl@0: ++iSkipCounter; sl@0: modifiers=Client()->iWs.GetModifierState(); sl@0: } sl@0: if ((modifiers&EModifierLeftFunc)>0) sl@0: { sl@0: iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftFunc); sl@0: ++iSkipCounter; sl@0: modifiers=Client()->iWs.GetModifierState(); sl@0: } sl@0: if ((modifiers&EModifierLeftCtrl)>0) sl@0: { sl@0: iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftCtrl); sl@0: ++iSkipCounter; sl@0: } sl@0: } sl@0: modifiers=Client()->iWs.GetModifierState(); sl@0: _LIT(KLog,"Initial Modifiers state 0x%x (ideally should be zero)"); sl@0: LOG_MESSAGE2(KLog,modifiers); sl@0: } sl@0: sl@0: void CTModifiersChanged::CheckModifier(TEventModifier aModifier) sl@0: { sl@0: TBool retVal; sl@0: TInt oldMods=Client()->iWs.GetModifierState(); sl@0: Client()->iWs.SetModifierState(aModifier,EToggleModifier); sl@0: TInt getMods=Client()->iWs.GetModifierState(); sl@0: if (oldMods!=getMods) sl@0: { sl@0: _LIT(KLogOff,"Attempted to turn off modifiers 0x%x, 0x%x still on"); sl@0: _LIT(KLogOn,"Attempted to turn on modifiers 0x%x, 0x%x still off"); sl@0: iSettable|=aModifier; sl@0: Client()->iWs.SetModifierState(aModifier,ETurnOffModifier); sl@0: getMods=Client()->iWs.GetModifierState(); sl@0: retVal=!(getMods&aModifier); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: LOG_MESSAGE3(KLogOff,aModifier,getMods&aModifier); sl@0: Client()->iWs.SetModifierState(aModifier,ETurnOnModifier); sl@0: getMods=Client()->iWs.GetModifierState(); sl@0: retVal=getMods&aModifier; sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: LOG_MESSAGE3(KLogOn,aModifier,getMods&aModifier); sl@0: Client()->iWs.SetModifierState(aModifier,ETurnOffModifier); sl@0: getMods=Client()->iWs.GetModifierState(); sl@0: retVal=!(getMods&aModifier); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: LOG_MESSAGE3(KLogOff,aModifier,getMods&aModifier); sl@0: if (oldMods&aModifier) sl@0: Client()->iWs.SetModifierState(aModifier,ETurnOnModifier); sl@0: } sl@0: else sl@0: { sl@0: Client()->iWs.SetModifierState(aModifier,ETurnOffModifier); sl@0: retVal=oldMods==Client()->iWs.GetModifierState(); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: { sl@0: _LIT(KLog,"Attempted to turn off modifiers 0x%x, suceeded when it should have failed"); sl@0: LOG_MESSAGE2(KLog,aModifier); sl@0: } sl@0: Client()->iWs.SetModifierState(aModifier,ETurnOnModifier); sl@0: retVal=oldMods==Client()->iWs.GetModifierState(); sl@0: TEST(retVal); sl@0: if (!retVal) sl@0: { sl@0: _LIT(KLog,"Attempted to turn on modifiers 0x%x, suceeded when it should have failed"); sl@0: LOG_MESSAGE2(KLog,aModifier); sl@0: } sl@0: } sl@0: } sl@0: sl@0: void CTModifiersChanged::SetModifiers() sl@0: { sl@0: iModSetTest=ETrue; sl@0: for(TInt mod=1;mod!=0;mod<<=1) sl@0: CheckModifier((TEventModifier)mod); sl@0: iWin->Invalidate(); sl@0: Client()->iWs.Flush(); sl@0: } sl@0: sl@0: void CTModifiersChanged::SendEvents() sl@0: { sl@0: iTest->LogSubState(iSubState); sl@0: switch (iSubState) sl@0: { sl@0: case 0: sl@0: iTest->SimulateKeyDownUp(EStdKeyCapsLock); sl@0: break; sl@0: case 1: sl@0: iTest->SimulateKeyDownUp(EStdKeyCapsLock); sl@0: break; sl@0: case 2: sl@0: iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftShift); sl@0: break; sl@0: case 3: sl@0: iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftShift); sl@0: break; sl@0: case 4: sl@0: iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyRightShift); sl@0: break; sl@0: case 5: sl@0: iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyRightShift); sl@0: break; sl@0: case 6: sl@0: iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftFunc); sl@0: break; sl@0: case 7: sl@0: iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftFunc); sl@0: break; sl@0: case 8: sl@0: iTest->SimulateKey(TRawEvent::EKeyDown,EStdKeyLeftCtrl); sl@0: break; sl@0: case 9: sl@0: iTest->SimulateKey(TRawEvent::EKeyUp,EStdKeyLeftCtrl); sl@0: break; sl@0: default: sl@0: TEST(EFalse); sl@0: return; sl@0: } sl@0: TheClient->iWs.Flush(); sl@0: } sl@0: sl@0: void CTModifiersChanged::RunTestCaseL(TInt /*aCurTestCase*/) sl@0: { sl@0: _LIT(KModChange,"Modifier Change"); sl@0: _LIT(KTestErrors,"Bad Parameter"); sl@0: ((CTModifiersChangedStep*)iStep)->SetTestStepID(KUnknownSYMTestCaseIDName); sl@0: switch(++iTest->iState) sl@0: { sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0239 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test modifier changed message sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Test that modifier changed message functions correctly sl@0: sl@0: @SYMTestExpectedResults The message functions correctly sl@0: */ sl@0: case 1: sl@0: ((CTModifiersChangedStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0239")); sl@0: iTest->LogSubTest(KModChange); sl@0: ModifierChangedEventsL(); sl@0: // start a timer to cancel the sub-scheduler sl@0: iTimeOut->Start(KTimeOutAfter,TCallBack(CTModifiersChanged::TimeOut,this)); sl@0: SendEvents(); sl@0: iSubSchedulerRunning = ETrue; sl@0: CActiveScheduler::Start(); // sub-scheduler blocks this AO (test-framework) until completion sl@0: iTimeOut->Cancel(); sl@0: ((CTModifiersChangedStep*)iStep)->RecordTestResultL(); sl@0: ((CTModifiersChangedStep*)iStep)->CloseTMSGraphicsStep(); sl@0: break; sl@0: /** sl@0: @SYMTestCaseID GRAPHICS-WSERV-0240 sl@0: sl@0: @SYMDEF DEF081259 sl@0: sl@0: @SYMTestCaseDesc Test bad parameters for modifier changed message sl@0: sl@0: @SYMTestPriority High sl@0: sl@0: @SYMTestStatus Implemented sl@0: sl@0: @SYMTestActions Test using bad parameters for a modifier changed message sl@0: sl@0: @SYMTestExpectedResults Responds correctly when bad parameters are used sl@0: */ sl@0: case 2: sl@0: ((CTModifiersChangedStep*)iStep)->SetTestStepID(_L("GRAPHICS-WSERV-0240")); sl@0: iTest->LogSubTest(KTestErrors); sl@0: BadParams(); sl@0: ((CTModifiersChangedStep*)iStep)->RecordTestResultL(); sl@0: break; sl@0: default: sl@0: ResetModifiers(); // reset modifiers, so further tests are not influenced sl@0: ((CTModifiersChangedStep*)iStep)->SetTestStepID(KNotATestSYMTestCaseIDName); sl@0: ((CTModifiersChangedStep*)iStep)->CloseTMSGraphicsStep(); sl@0: TestComplete(); sl@0: } sl@0: sl@0: sl@0: } sl@0: sl@0: __WS_CONSTRUCT_STEP__(ModifiersChanged)