1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000
1.2 +++ b/os/graphics/windowing/windowserver/test/tman/TMMODCHG.CPP Fri Jun 15 03:10:57 2012 +0200
1.3 @@ -0,0 +1,301 @@
1.4 +// Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
1.5 +// All rights reserved.
1.6 +// This component and the accompanying materials are made available
1.7 +// under the terms of "Eclipse Public License v1.0"
1.8 +// which accompanies this distribution, and is available
1.9 +// at the URL "http://www.eclipse.org/legal/epl-v10.html".
1.10 +//
1.11 +// Initial Contributors:
1.12 +// Nokia Corporation - initial contribution.
1.13 +//
1.14 +// Contributors:
1.15 +//
1.16 +// Description:
1.17 +// Test modifier changed message
1.18 +//
1.19 +//
1.20 +
1.21 +#include <e32std.h>
1.22 +#include <e32svr.h>
1.23 +#include "W32STD.H"
1.24 +#include "../tlib/testbase.h"
1.25 +#include "TMAN.H"
1.26 +
1.27 +class CTModifiersChangedTest;
1.28 +
1.29 +class CMCWindow : public CTWin
1.30 + {
1.31 +public:
1.32 + CMCWindow(CTModifiersChangedTest *aTest);
1.33 + void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
1.34 + void Draw();
1.35 + void DrawModSetLine(const TDesC &aDes,TInt aModifier,TInt iSettableModifiers);
1.36 +protected:
1.37 + CTModifiersChangedTest *iTest;
1.38 + TRgb iBack;
1.39 + TInt iLineHeight;
1.40 + TInt iFontAscent;
1.41 + TInt iYpos;
1.42 + TInt iXpos1;
1.43 + TInt iXpos2;
1.44 + };
1.45 +
1.46 +class CTEventWindowGroup : public CTWindowGroup
1.47 + {
1.48 +public:
1.49 + CTEventWindowGroup(CTClient *aClient, CTModifiersChangedTest *iTest);
1.50 + void ConstructL();
1.51 + void ModifiersChanged(const TModifiersChangedEvent &aModifiersChanged ,const TTime &aTime);
1.52 + void KeyL(const TKeyEvent &aKey,const TTime &aTime);
1.53 +private:
1.54 + CTModifiersChangedTest *iTest;
1.55 + };
1.56 +
1.57 +class CTModifiersChangedTest : public CTestBase
1.58 + {
1.59 +public:
1.60 + CTModifiersChangedTest();
1.61 + ~CTModifiersChangedTest();
1.62 + TestState DoTestL();
1.63 + void ConstructL();
1.64 + void EndTest();
1.65 + TInt SubState() const;
1.66 + void IncSubState();
1.67 + void BadParams();
1.68 + void ModifierChangedEventsL();
1.69 + void SetModifiersL();
1.70 + void CheckModifierL(TEventModifier aModifier);
1.71 +public:
1.72 + TBool iModSetTest;
1.73 + TInt iSettable;
1.74 +private:
1.75 + TSize iWinSize;
1.76 + TInt iState;
1.77 + TInt iSubState;
1.78 + CTEventWindowGroup *iEventGroup;
1.79 + CMCWindow *iWin;
1.80 + };
1.81 +
1.82 +struct TModifierChangedTestsParams
1.83 + {
1.84 + TText *txt; // Text message telling user what to do
1.85 + TUint changed;
1.86 + TUint state;
1.87 + TUint stateMask;
1.88 + };
1.89 +
1.90 +LOCAL_D TModifierChangedTestsParams ModifierChangedTests[]={
1.91 +#if defined(__WINS__)
1.92 + {(TText *)_S("Press Caps"),EModifierCapsLock,EModifierCapsLock,EModifierCapsLock},
1.93 + {(TText *)_S("Press Caps (again)"),EModifierCapsLock,0,EModifierCapsLock},
1.94 +#endif
1.95 + {(TText *)_S("Press left shift"),EModifierShift|EModifierLeftShift,EModifierShift|EModifierLeftShift,EModifierShift|EModifierLeftShift},
1.96 + {(TText *)_S("Release left shift"),EModifierShift|EModifierLeftShift,0,EModifierShift|EModifierLeftShift},
1.97 + {(TText *)_S("Press right shift"),EModifierShift|EModifierRightShift,EModifierShift|EModifierRightShift,EModifierShift|EModifierRightShift},
1.98 + {(TText *)_S("Release right shift"),EModifierShift|EModifierRightShift,0,EModifierShift|EModifierRightShift},
1.99 + {(TText *)_S("Press (left) func"),EModifierFunc|EModifierLeftFunc,EModifierFunc|EModifierLeftFunc,EModifierFunc|EModifierLeftFunc},
1.100 + {(TText *)_S("Release (left) func"),EModifierFunc|EModifierLeftFunc,0,EModifierFunc|EModifierLeftFunc},
1.101 + {(TText *)_S("Press (left) control"),EModifierCtrl|EModifierLeftCtrl,EModifierCtrl|EModifierLeftCtrl,EModifierCtrl|EModifierLeftCtrl},
1.102 + {(TText *)_S("Release (left) control"),EModifierCtrl|EModifierLeftCtrl,0,EModifierCtrl|EModifierLeftCtrl},
1.103 + };
1.104 +
1.105 +const TInt numTests=sizeof(ModifierChangedTests)/sizeof(ModifierChangedTests[0]);
1.106 +
1.107 +GLDEF_C CTestBase *CreateModifiersChangedTest()
1.108 + {
1.109 + return(new(ELeave) CTModifiersChangedTest());
1.110 + }
1.111 +
1.112 +//
1.113 +// CTEventWindowGroup class //
1.114 +//
1.115 +
1.116 +CTEventWindowGroup::CTEventWindowGroup(CTClient *aClient, CTModifiersChangedTest *aTest) : CTWindowGroup(aClient), iTest(aTest)
1.117 + {}
1.118 +
1.119 +void CTEventWindowGroup::ConstructL()
1.120 + {
1.121 + CTWindowGroup::ConstructL();
1.122 + iGroupWin.EnableModifierChangedEvents(EModifierShift|EModifierLeftShift|EModifierRightShift|EModifierCapsLock|
1.123 + EModifierFunc|EModifierLeftFunc|EModifierCtrl|EModifierLeftCtrl,EEventControlAlways);
1.124 + }
1.125 +
1.126 +void CTEventWindowGroup::ModifiersChanged(const TModifiersChangedEvent &aModifiersChanged ,const TTime &)
1.127 + {
1.128 + TInt ss=iTest->SubState();
1.129 + TInt getMods=Client()->iWs.GetModifierState(); // Double check the mods with get mods
1.130 + if (aModifiersChanged.iChangedModifiers==ModifierChangedTests[ss].changed &&
1.131 + (aModifiersChanged.iModifiers&ModifierChangedTests[ss].stateMask)==ModifierChangedTests[ss].state &&
1.132 + (getMods&ModifierChangedTests[ss].stateMask)==ModifierChangedTests[ss].state)
1.133 + iTest->IncSubState();
1.134 + }
1.135 +
1.136 +void CTEventWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &)
1.137 + {
1.138 + if (aKey.iCode==EKeyEscape || (aKey.iCode==' ' && iTest->iModSetTest))
1.139 + iTest->EndTest();
1.140 + }
1.141 +
1.142 +//
1.143 +// CMCWindow, class //
1.144 +//
1.145 +
1.146 +CMCWindow::CMCWindow(CTModifiersChangedTest *aTest) : CTWin(), iTest(aTest)
1.147 + {
1.148 + iBack=TRgb::Gray256(230);
1.149 + }
1.150 +
1.151 +void CMCWindow::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
1.152 + {
1.153 + ConstructExtLD(*parent,pos,size);
1.154 + iWin.SetBackgroundColor(iBack);
1.155 + Activate();
1.156 + AssignGC(aGc);
1.157 + iLineHeight=iFont->HeightInPixels()*5/4;
1.158 + iFontAscent=iFont->AscentInPixels();
1.159 + iXpos1=4;
1.160 + iXpos2=iXpos1+12*iFont->TextWidthInPixels(_L("M"));
1.161 + }
1.162 +
1.163 +void CMCWindow::DrawModSetLine(const TDesC &aDes,TInt aModifier,TInt iSettableModifiers)
1.164 + {
1.165 + iYpos+=iLineHeight;
1.166 + iGc->DrawText(aDes, TPoint(iXpos1,iYpos));
1.167 + iGc->DrawText(aModifier&iSettableModifiers ? _L("Yes"):_L("No"), TPoint(iXpos2,iYpos));
1.168 + }
1.169 +
1.170 +void CMCWindow::Draw()
1.171 + {
1.172 + iGc->Clear();
1.173 + if (iTest->iModSetTest)
1.174 + {
1.175 + iYpos=iFontAscent+3;
1.176 + TBuf<32> buf;
1.177 + buf.Format(TRefByValue<const TDesC>(_L("Settable? [0x%4x]")), iTest->iSettable);
1.178 + iGc->DrawText(_L("Modifier"), TPoint(iXpos1,iYpos));
1.179 + iGc->DrawText(buf, TPoint(iXpos2,iYpos));
1.180 + DrawModSetLine(_L("Shift"),EModifierShift,iTest->iSettable);
1.181 + DrawModSetLine(_L("Left Shift"),EModifierLeftShift,iTest->iSettable);
1.182 + DrawModSetLine(_L("Func"),EModifierFunc,iTest->iSettable);
1.183 + DrawModSetLine(_L("Caps"),EModifierCapsLock,iTest->iSettable);
1.184 + DrawModSetLine(_L("NumLock"),EModifierNumLock,iTest->iSettable);
1.185 + DrawModSetLine(_L("Double Click"),EModifierDoubleClick,iTest->iSettable);
1.186 + }
1.187 + else
1.188 + iGc->DrawText(TPtrC(ModifierChangedTests[iTest->SubState()].txt), TPoint(10,20));
1.189 + }
1.190 +
1.191 +//
1.192 +
1.193 +CTModifiersChangedTest::CTModifiersChangedTest() : CTestBase(_L("Capture Key"))
1.194 + {}
1.195 +
1.196 +CTModifiersChangedTest::~CTModifiersChangedTest()
1.197 + {
1.198 + delete iWin;
1.199 + delete iEventGroup;
1.200 + }
1.201 +
1.202 +void CTModifiersChangedTest::EndTest()
1.203 + {
1.204 + if (iModSetTest)
1.205 + {
1.206 + iModSetTest=EFalse;
1.207 + iWin->Invalidate();
1.208 + }
1.209 + Request();
1.210 + }
1.211 +
1.212 +void CTModifiersChangedTest::ConstructL()
1.213 + {
1.214 + iWin=new(ELeave) CMCWindow(this);
1.215 + iWin->SetUpL(TPoint(10,10),TSize(240,200),Client()->iGroup, *Client()->iGc);
1.216 + }
1.217 +
1.218 +TInt CTModifiersChangedTest::SubState() const
1.219 + {
1.220 + return(iSubState);
1.221 + }
1.222 +
1.223 +void CTModifiersChangedTest::IncSubState()
1.224 + {
1.225 + if (iSubState==(numTests-1))
1.226 + EndTest();
1.227 + else
1.228 + {
1.229 + iSubState++;
1.230 + iWin->Invalidate();
1.231 + }
1.232 + }
1.233 +
1.234 +void CTModifiersChangedTest::BadParams()
1.235 + {
1.236 + }
1.237 +
1.238 +void CTModifiersChangedTest::ModifierChangedEventsL()
1.239 + {
1.240 + iEventGroup=new(ELeave) CTEventWindowGroup(Client(), this);
1.241 + iEventGroup->ConstructL();
1.242 + }
1.243 +
1.244 +void CTModifiersChangedTest::CheckModifierL(TEventModifier aModifier)
1.245 + {
1.246 + TInt oldMods=Client()->iWs.GetModifierState();
1.247 + Client()->iWs.SetModifierState(aModifier, EToggleModifier);
1.248 + TInt getMods=Client()->iWs.GetModifierState();
1.249 + if (oldMods!=getMods)
1.250 + {
1.251 + iSettable|=aModifier;
1.252 + Client()->iWs.SetModifierState(aModifier, ETurnOffModifier);
1.253 + getMods=Client()->iWs.GetModifierState();
1.254 + TestL(!(getMods&aModifier));
1.255 + Client()->iWs.SetModifierState(aModifier, ETurnOnModifier);
1.256 + getMods=Client()->iWs.GetModifierState();
1.257 + TestL(getMods&aModifier);
1.258 + Client()->iWs.SetModifierState(aModifier, ETurnOffModifier);
1.259 + getMods=Client()->iWs.GetModifierState();
1.260 + TestL(!(getMods&aModifier));
1.261 + if (oldMods&aModifier)
1.262 + Client()->iWs.SetModifierState(aModifier, ETurnOnModifier);
1.263 + }
1.264 + else
1.265 + {
1.266 + Client()->iWs.SetModifierState(aModifier, ETurnOffModifier);
1.267 + TestL(oldMods==Client()->iWs.GetModifierState());
1.268 + Client()->iWs.SetModifierState(aModifier, ETurnOnModifier);
1.269 + TestL(oldMods==Client()->iWs.GetModifierState());
1.270 + }
1.271 + }
1.272 +
1.273 +void CTModifiersChangedTest::SetModifiersL()
1.274 + {
1.275 + iModSetTest=ETrue;
1.276 + for(TInt mod=1;mod!=0;mod<<=1)
1.277 + CheckModifierL((TEventModifier)mod);
1.278 + iWin->Invalidate();
1.279 + Client()->iWs.Flush();
1.280 + }
1.281 +
1.282 +TestState CTModifiersChangedTest::DoTestL()
1.283 + {
1.284 + switch(iState)
1.285 + {
1.286 + case 0: //The first 2 tests have been converted to TAuto test code.
1.287 + ModifierChangedEventsL();
1.288 + /* iState++;
1.289 + return(EContinue);
1.290 + case 1:
1.291 + LogSubTest(_L("Errors"),1);
1.292 + BadParams();
1.293 + break;
1.294 + case 2:*/
1.295 + LogSubTest(_L("Set modifiers"),1);
1.296 + SetModifiersL();
1.297 + iState++;
1.298 + return(EContinue);
1.299 + default:
1.300 + return(EFinished);
1.301 + }
1.302 + //iState++;
1.303 + //return(ENext);
1.304 + }