--- a/windowing/windowserver/tman/TMCAPKEY.CPP Tue Jun 22 15:21:29 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,625 +0,0 @@
-// Copyright (c) 1995-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:
-// Test capture key
-//
-//
-
-#include <e32std.h>
-#include <e32svr.h>
-#include <e32keys.h>
-#include "W32STD.H"
-#include "../tlib/testbase.h"
-#include "TMAN.H"
-
-enum TTestMode
- {
- EModeNormalCapture,
- EModeWaitingForFirstDown,
- EModeKeyUpsAndDowns,
- EModeAbortKeys,
- };
-enum TCapKeyRetValues
- {
- ECapKeyOkay,
- ECapKeyRetry,
- ECapKeyFail,
- };
-
-struct SCapKeyParams
- {
- TInt connIndex; // Connection that should capture this key
- TUint keyCode;
- TUint modifier_mask;
- TUint modifiers;
- };
-
-struct SCapKeyTestParams
- {
- TText *txt; // Text message telling user what to do
- TInt connIndex; // Connection that receive the key press
- TUint keyCode; // Expected key code
- TUint modifier_mask;// Modifiers mask for expected modifiers
- TUint modifiers; // Expected modifiers
- };
-
-struct SAbortKeyTests
- {
- TUint keyCode; // Expected key code
- TUint modifier_mask;// Modifiers mask for expected modifiers
- TUint modifiers; // Expected modifiers
- };
-
-LOCAL_D SCapKeyParams capKeys[]={
- {1,19,EModifierFunc|EModifierCtrl,EModifierFunc|EModifierCtrl},
- {2,'b',EModifierFunc|EModifierCtrl,EModifierFunc},
- {2,'n',EModifierFunc|EModifierCtrl,EModifierFunc},
- {0,3,EModifierFunc|EModifierCtrl,EModifierFunc|EModifierCtrl},
- {2,'q',0,0},
- {2,'w',0,0},
- };
-
-LOCAL_D SCapKeyParams capUpAndDownKeys[]={
- {2,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,0},
- {2,EStdKeyEnter,EModifierFunc|EModifierCtrl|EModifierShift,EModifierShift},
- };
-
-LOCAL_D SCapKeyTestParams capKeyTests[]={
- {(TText *)_S("Press q"),2,'q',EModifierFunc|EModifierCtrl|EModifierShift,0},
- //{(TText *)_S("Press <Alt>q"),2,'q',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
- {(TText *)_S("Press <Alt>w"),2,'w',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
- {(TText *)_S("Press a"),0,'a',0},
- //{(TText *)_S("Press <Ctrl><Alt>a"),1,1,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
- {(TText *)_S("Press <Ctrl><Alt>s"),1,19,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
- //{(TText *)_S("Press <Alt>b"),2,'b',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
- {(TText *)_S("Press <Alt>n"),2,'n',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
- {(TText *)_S("Press <Ctrl><Alt>b"),0,2,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
- //{(TText *)_S("Press <Alt>c"),0,'c',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
- {(TText *)_S("Press <Alt>d"),0,'d',EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc},
- {(TText *)_S("Press <Ctrl><Alt>c"),0,3,EModifierFunc|EModifierCtrl|EModifierShift,EModifierFunc|EModifierCtrl},
-//
-// Capture ups and downs
-//
- {(TText *)_S("Press <Space>"),2,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,0},
- {(TText *)_S("Press <Enter>"),0,EStdKeyEnter,EModifierShift,0},
- {(TText *)_S("Press <Shift><Space>"),0,EStdKeySpace,EModifierFunc|EModifierCtrl|EModifierShift,EModifierShift},
- {(TText *)_S("Press <Shift><Enter>"),2,EStdKeyEnter,EModifierShift,EModifierShift},
-//
-// Priority keys
-//
- {(TText *)_S("Press <Ctrl>c"),0,0,0,0},
- {(TText *)_S("Press <Ctrl>d"),0,0,0,0},
- {(TText *)_S("Press z"),0,0,0,0},
- };
-
-LOCAL_D SAbortKeyTests abortKeyTests[]={
- {3,EModifierCtrl,EModifierCtrl},
- {4,EModifierCtrl,EModifierCtrl},
- {'z',EModifierFunc|EModifierCtrl|EModifierShift,0}
- };
-
-struct SErrorCapKey
- {
- TInt keyCode;
- TUint modifier_mask;
- TUint modifiers;
- };
-
-LOCAL_D SErrorCapKey errorKeys[]={
- {'a',EModifierFunc|EModifierShift,EModifierFunc|EModifierCtrl},
- {'1',0,EModifierFunc},
- {3,EModifierCtrl,EModifierCtrl|EModifierShift},
- };
-
-const TInt numCapKeys=sizeof(capKeys)/sizeof(capKeys[0]);
-const TInt numTests=sizeof(capKeyTests)/sizeof(capKeyTests[0]);
-const TInt numErrorKeys=sizeof(errorKeys)/sizeof(errorKeys[0]);
-const TInt numAbortKeyTests=sizeof(abortKeyTests)/sizeof(abortKeyTests[0]);
-const TInt numUpDownKeys=sizeof(capUpAndDownKeys)/sizeof(capUpAndDownKeys[0]);
-const TInt numUpDownKeyTests=4;
-const TInt numCapKeyTests=numTests-numAbortKeyTests-numUpDownKeyTests;
-
-LOCAL_D TInt capKeyHandle[numCapKeys];
-LOCAL_D TInt capUpDownKeyHandle[numUpDownKeys];
-
-class CCKWindow;
-class TCaptureKeyTest;
-class CCKAbortConnection;
-
-class CCKConnectionBase : public CTClient
- {
-public:
- CCKConnectionBase(TCaptureKeyTest *aTest);
- void ConstructL();
-protected:
- TCaptureKeyTest *iTest;
- };
-
-class CCKConnection : public CCKConnectionBase
- {
-public:
- CCKConnection(TCaptureKeyTest *aTest, TInt aConnIndex);
- ~CCKConnection();
- void ConstructL();
- void CheckKeyL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey);
- void SubStateChanged();
- void KeyTestL(TInt aBool);
- void KeyL(const TKeyEvent &aKey,const TTime &aTime);
- void CheckUpDownL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey);
- void CheckUpDownL(const TKeyEvent &aKey);
- inline TInt Index() {return iConnIndex;}
-protected:
- TInt iConnIndex;
- CCKWindow *iWin;
- };
-
-class CAbortHandler : public CTEventBase
- {
-public:
- CAbortHandler(RWsSession *aWs, CCKAbortConnection *aConnection);
- ~CAbortHandler();
- void Request();
-protected:
- void DoCancel();
- void doRunL();
-protected:
- CCKAbortConnection *iConnection;
- };
-
-class CCKAbortConnection : public CCKConnectionBase
- {
-public:
- CCKAbortConnection(TCaptureKeyTest *aTest);
- ~CCKAbortConnection();
- void ConstructL();
- void ReceivedAbortEventL(TInt aHandle, TKeyEvent *aKey);
- void Foreground();
-protected:
- CAbortHandler *iAbortHandler;
- TInt iAbortKeyIndex;
- };
-
-class CCKWindow : public CTWin
- {
-public:
- CCKWindow(TCaptureKeyTest *aTest, TInt aConnIndex);
- void SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc);
- void Draw();
-protected:
- TInt iConnIndex;
- TCaptureKeyTest *iTest;
- TRgb iBack;
- };
-
-class CCKWindowGroup : public CTWindowGroup
- {
-public:
- CCKWindowGroup(CTClient *aClient, TCaptureKeyTest *aTest);
- void KeyL(const TKeyEvent &aKey,const TTime &aTime);
- void KeyDownL(const TKeyEvent &aKey,const TTime &);
- void KeyUpL(const TKeyEvent &aKey,const TTime &);
- void CheckUpDown(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey);
-private:
- TCaptureKeyTest *iTest;
- };
-
-class TCaptureKeyTest : public CTestBase
- {
-public:
- TCaptureKeyTest();
- ~TCaptureKeyTest();
- TestState DoTestL();
- void ConstructL();
- void EndCaptureKeyTest();
- TInt SubState() const;
- void IncSubState();
- void BadParamsL();
- void CapKeyPurgingL();
- void SetUpPriorityKeyTest();
- void TestComplete();
- void CaptureUpsAndDownsTest();
- TTestMode Mode();
- void SetMode(TTestMode aMode);
-private:
- CCKConnection *iConn1;
- CCKConnection *iConn2;
- CCKConnection *iConn3;
- CCKAbortConnection *iAbortConn;
- TSize iWinSize;
- TInt iState;
- TInt iSubState;
- TTestMode iMode;
- };
-
-GLDEF_C CTestBase *CreateMultiCaptureKeyTest()
- {
- return(new(ELeave) TCaptureKeyTest());
- }
-
-//
-// CAbortHandler
-
-CAbortHandler::CAbortHandler(RWsSession *aWs, CCKAbortConnection *aConnection) : CTEventBase(aWs, 10), iConnection(aConnection)
- {
- }
-
-CAbortHandler::~CAbortHandler()
- {
- Cancel();
- }
-
-void CAbortHandler::Request()
- {
- iWs->PriorityKeyReady(&iStatus);
- SetActive();
- }
-
-void CAbortHandler::DoCancel()
- {
- iWs->PriorityKeyReadyCancel();
- }
-
-void CAbortHandler::doRunL()
- {
- TWsPriorityKeyEvent abortEvent;
- iWs->GetPriorityKey(abortEvent);
- iConnection->ReceivedAbortEventL(abortEvent.Handle(),abortEvent.Key());
- }
-
-//
-// CCKConnection
-
-CCKConnectionBase::CCKConnectionBase(TCaptureKeyTest *aTest) : iTest(aTest)
- {
- }
-
-void CCKConnectionBase::ConstructL()
- {
- CTClient::ConstructL();
- iGroup=new(ELeave) CCKWindowGroup(this, iTest);
- iGroup->ConstructL();
- }
-
-CCKConnection::CCKConnection(TCaptureKeyTest *aTest, TInt aConnIndex) : CCKConnectionBase(aTest), iConnIndex(aConnIndex)
- {
- }
-
-CCKConnection::~CCKConnection()
- {
- for(TInt index=0;index<numCapKeys;index++)
- if (capKeys[index].connIndex==iConnIndex)
- iGroup->GroupWin()->CancelCaptureKey(capKeyHandle[index]);
- for(TInt index2=0;index2<numUpDownKeys;index2++)
- if (capUpAndDownKeys[index2].connIndex==iConnIndex)
- iGroup->GroupWin()->CancelCaptureKeyUpAndDowns(capUpDownKeyHandle[index2]);
- CTWin::Delete(iWin);
- }
-
-void CCKConnection::SubStateChanged()
- {
- iWin->Invalidate();
- iWs.Flush();
- }
-
-void CCKConnection::ConstructL()
- {
- CCKConnectionBase::ConstructL();
- for(TInt index=0;index<numCapKeys;index++)
- if (capKeys[index].connIndex==iConnIndex)
- capKeyHandle[index]=User::LeaveIfError(iGroup->GroupWin()->CaptureKey(capKeys[index].keyCode,capKeys[index].modifier_mask,capKeys[index].modifiers));
- for(TInt index2=0;index2<numUpDownKeys;index2++)
- if (capUpAndDownKeys[index2].connIndex==iConnIndex)
- capUpDownKeyHandle[index2]=User::LeaveIfError(iGroup->GroupWin()->CaptureKeyUpAndDowns(capUpAndDownKeys[index2].keyCode,
- capUpAndDownKeys[index2].modifier_mask,capUpAndDownKeys[index2].modifiers));
- TSize screenSize=iGroup->Size();
- TInt winWidth=screenSize.iWidth/2;
- TInt winHeight=screenSize.iHeight-10;
- iGroup->GroupWin()->AutoForeground(EFalse); // Don't allow clicking to cause foreground, might mess up test
- CCKWindow *win=new(ELeave) CCKWindow(iTest, iConnIndex);
- win->SetUpL(TPoint(5,5),TSize(winWidth,winHeight),iGroup,*iGc);
- iWin=win;
- }
-
-void CCKConnection::KeyTestL(TInt aBool)
- {
- if (!aBool)
- {
- CTDialog *dialog=new(ELeave) CTDialog();
- TInt ret=0;
- dialog->ConstructLD(*iGroup,*iGc);
- dialog->SetTitle(_L("Invalid key press"));
- dialog->SetLine1(_L("Try again?"));
- dialog->SetNumButtons(2);
- dialog->SetButtonText(0,_L("Fail"));
- dialog->SetButtonText(1,_L("Retry"));
- ret=dialog->Display();
- User::Leave(ret==1 ? ECapKeyRetry : ECapKeyFail);
- }
- }
-
-void CCKConnection::CheckKeyL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey)
- {
- KeyTestL(aKeyTest.connIndex==iConnIndex);
- KeyTestL(aKeyTest.keyCode==aKey.iCode);
- KeyTestL(aKeyTest.modifiers==(aKey.iModifiers&aKeyTest.modifier_mask));
- }
-
-void CCKConnection::CheckUpDownL(const SCapKeyTestParams &aKeyTest, const TKeyEvent &aKey)
- {
- KeyTestL(aKeyTest.connIndex==iConnIndex);
- KeyTestL(aKeyTest.keyCode==(TUint)aKey.iScanCode);
- KeyTestL(aKeyTest.modifiers==(aKey.iModifiers&aKeyTest.modifier_mask));
- }
-
-void CCKConnection::KeyL(const TKeyEvent &aKey,const TTime &)
- {
- if (iTest->Mode()==EModeNormalCapture)
- {
- if (aKey.iCode==EKeyEscape)
- iTest->AbortL();
- TRAPD(ret,CheckKeyL(capKeyTests[iTest->SubState()],aKey));
- if (ret==ECapKeyOkay)
- iTest->IncSubState();
- else
- iTest->TestL(ret==ECapKeyRetry);
- }
- }
-
-void CCKConnection::CheckUpDownL(const TKeyEvent &aKey)
- {
- CheckUpDownL(capKeyTests[iTest->SubState()],aKey);
- }
-
-CCKAbortConnection::CCKAbortConnection(TCaptureKeyTest *aTest) : CCKConnectionBase(aTest)
- {
- }
-
-CCKAbortConnection::~CCKAbortConnection()
- {
- iGroup->GroupWin()->RemovePriorityKey(3,EModifierCtrl,EModifierCtrl);
- delete iAbortHandler;
- }
-
-void CCKAbortConnection::ConstructL()
- {
- CCKConnectionBase::ConstructL();
- User::LeaveIfError(iGroup->GroupWin()->AddPriorityKey(abortKeyTests[0].keyCode,abortKeyTests[0].modifier_mask,abortKeyTests[0].modifiers));
- User::LeaveIfError(iGroup->GroupWin()->AddPriorityKey(abortKeyTests[1].keyCode,abortKeyTests[1].modifier_mask,abortKeyTests[1].modifiers));
- User::LeaveIfError(iGroup->GroupWin()->AddPriorityKey(abortKeyTests[2].keyCode,abortKeyTests[2].modifier_mask,abortKeyTests[2].modifiers));
- iAbortHandler=new(ELeave) CAbortHandler(&iWs, this);
- iAbortHandler->Construct();
- iWs.Flush();
- }
-
-void CCKAbortConnection::ReceivedAbortEventL(TInt aHandle, TKeyEvent *aKey)
- {
- iTest->TestL(aHandle==(TInt)iGroup);
- iTest->TestL(aKey->iCode==abortKeyTests[iAbortKeyIndex].keyCode);
- iTest->TestL((aKey->iModifiers&abortKeyTests[iAbortKeyIndex].modifier_mask)==abortKeyTests[iAbortKeyIndex].modifiers);
- iAbortKeyIndex++;
- iTest->IncSubState();
- }
-
-void CCKAbortConnection::Foreground()
- {
- iGroup->GroupWin()->SetOrdinalPosition(0);
- iWs.Flush();
- }
-
-//
-// CCKWindowGroup class //
-//
-
-CCKWindowGroup::CCKWindowGroup(CTClient *aClient, TCaptureKeyTest *aTest) : CTWindowGroup(aClient), iTest(aTest)
- {}
-
-void CCKWindowGroup::KeyL(const TKeyEvent &aKey,const TTime &time)
- {
- /*TLogMessageText buf(_S("##Recieved Key: "));
- buf.Append(aKey.iScanCode);
- buf.Append('(');
- buf.AppendNum(aKey.iScanCode);
- buf.Append(')');
- if (!iCurWin)
- {
- buf.Append('(');
- buf.AppendNum(((CCKConnection *)iClient)->Index());
- buf.Append(')');
- }
- iClient->iWs.LogMessage(buf);*/
- if (iCurWin)
- iCurWin->WinKeyL(aKey,time);
- else
- ((CCKConnection *)iClient)->KeyL(aKey,time);
- }
-
-void CCKWindowGroup::KeyDownL(const TKeyEvent &aKey,const TTime &)
- {
- if (aKey.iScanCode!=EStdKeyLeftShift && aKey.iScanCode!=EStdKeyRightShift)
- {
- if (iTest->Mode()==EModeWaitingForFirstDown)
- iTest->SetMode(EModeKeyUpsAndDowns);
- if (iTest->Mode()==EModeKeyUpsAndDowns)
- ((CCKConnection *)iClient)->CheckUpDownL(aKey);
- }
- }
-
-void CCKWindowGroup::KeyUpL(const TKeyEvent &aKey,const TTime &)
- {
- if (aKey.iScanCode!=EStdKeyLeftShift && aKey.iScanCode!=EStdKeyRightShift)
- {
- if (iTest->Mode()==EModeKeyUpsAndDowns)
- {
- ((CCKConnection *)iClient)->CheckUpDownL(aKey);
- iTest->IncSubState();
- }
- }
- }
-
-//
-// CCKWindow, class //
-//
-
-CCKWindow::CCKWindow(TCaptureKeyTest *aTest, TInt aConnIndex) : CTWin(), iConnIndex(aConnIndex), iTest(aTest)
- {
- iBack=TRgb::Gray256(230);
- }
-
-void CCKWindow::SetUpL(TPoint pos,TSize size,CTWinBase *parent, CWindowGc &aGc)
- {
- ConstructExtLD(*parent,pos,size);
- iWin.SetBackgroundColor(iBack);
- Activate();
- AssignGC(aGc);
- }
-
-void CCKWindow::Draw()
- {
- iGc->Clear();
- if (iConnIndex==0)
- iGc->DrawText(TPtrC(capKeyTests[iTest->SubState()].txt), TPoint(10,20));
- }
-
-//
-
-TCaptureKeyTest::TCaptureKeyTest() : CTestBase(_L("Capture Key"))
- {}
-
-TCaptureKeyTest::~TCaptureKeyTest()
- {
- delete iConn1;
- delete iConn2;
- delete iConn3;
- delete iAbortConn;
- }
-
-void TCaptureKeyTest::ConstructL()
- {
- iAbortConn=new(ELeave) CCKAbortConnection(this);
- iAbortConn->ConstructL();
- iConn3=new(ELeave) CCKConnection(this,2);
- iConn3->ConstructL();
- iConn2=new(ELeave) CCKConnection(this,1);
- iConn2->ConstructL();
- iConn1=new(ELeave) CCKConnection(this,0);
- iConn1->ConstructL();
- iMode=EModeNormalCapture;
- }
-
-TInt TCaptureKeyTest::SubState() const
- {
- return(iSubState);
- }
-
-void TCaptureKeyTest::IncSubState()
- {
- iSubState++;
- iConn1->SubStateChanged();
- iConn2->SubStateChanged();
- iConn3->SubStateChanged();
- switch(iMode)
- {
- case EModeNormalCapture:
- if (iSubState==numCapKeyTests)
- TestComplete();
- break;
- case EModeKeyUpsAndDowns:
- if (iSubState==(numCapKeyTests+numUpDownKeyTests))
- TestComplete();
- break;
- case EModeAbortKeys:
- if (iSubState==(numCapKeyTests+numUpDownKeyTests+numAbortKeyTests))
- TestComplete();
- break;
- default:
- break;
- }
- }
-
-void TCaptureKeyTest::CapKeyPurgingL()
- {
- TInt base=Client()->iWs.ResourceCount();
- RWindowGroup groupWin(Client()->iWs);
- User::LeaveIfError(groupWin.Construct(ENullWsHandle));
- TInt capHandle=User::LeaveIfError(groupWin.CaptureKey('a',EModifierFunc,EModifierFunc));
- User::LeaveIfError(groupWin.CaptureKey('b',EModifierFunc,EModifierFunc));
- TestL(Client()->iWs.ResourceCount()==(base+3));
- groupWin.CancelCaptureKey(capHandle);
- TestL(Client()->iWs.ResourceCount()==(base+2));
- groupWin.Close();
- TestL(Client()->iWs.ResourceCount()==base); // Check it also freed the extra capture key
- }
-
-void TCaptureKeyTest::BadParamsL()
- {
- TInt resCount=Client()->iWs.ResourceCount();
- for(TInt index=0;index<numErrorKeys;index++)
- TestL(Client()->iGroup->GroupWin()->CaptureKey(errorKeys[index].keyCode,errorKeys[index].modifier_mask,errorKeys[index].modifiers)==KErrArgument);
- TestL(Client()->iWs.ResourceCount()==resCount);
- }
-
-void TCaptureKeyTest::TestComplete()
- {
- Request();
- }
-
-void TCaptureKeyTest::SetMode(TTestMode aMode)
- {
- iMode=aMode;
- }
-
-TTestMode TCaptureKeyTest::Mode()
- {
- return(iMode);
- }
-
-void TCaptureKeyTest::SetUpPriorityKeyTest()
- {
- iMode=EModeAbortKeys;
- iAbortConn->Foreground();
- }
-
-void TCaptureKeyTest::CaptureUpsAndDownsTest()
- {
- iMode=EModeWaitingForFirstDown;
- }
-
-TestState TCaptureKeyTest::DoTestL()
- {
- switch(iState)
- {
- case 0: // Dummy one to let capture key tests run
- iState++;
- return(EContinue);
- case 1:
- LogSubTest(_L("Capture ups and downs"),1);
- CaptureUpsAndDownsTest();
- iState++;
- return(EContinue);
- case 2:
- LogSubTest(_L("Abort key"),1);
- SetUpPriorityKeyTest();
- iState++;
- return(EContinue);
- case 3:
- LogSubTest(_L("Errors"),1);
- BadParamsL();
- CapKeyPurgingL();
- LogSubTest(_L("CaptureKey"),1);
- iState++;
- return(ENext);
- default:
- return(EFinished);
- }
-// return(ENext);
- }