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