kerneltest/e32test/window/t_keys.cpp
changeset 0 a41df078684a
child 43 c1f20ce4abcf
equal deleted inserted replaced
-1:000000000000 0:a41df078684a
       
     1 // Copyright (c) 1996-2009 Nokia Corporation and/or its subsidiary(-ies).
       
     2 // All rights reserved.
       
     3 // This component and the accompanying materials are made available
       
     4 // under the terms of the License "Eclipse Public License v1.0"
       
     5 // which accompanies this distribution, and is available
       
     6 // at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     7 //
       
     8 // Initial Contributors:
       
     9 // Nokia Corporation - initial contribution.
       
    10 //
       
    11 // Contributors:
       
    12 //
       
    13 // Description:
       
    14 // e32test\window\t_keys.cpp
       
    15 // 
       
    16 //
       
    17 
       
    18 #include <e32test.h>
       
    19 #include <e32hal.h>
       
    20 #include <e32twin.h>
       
    21 #include <e32svr.h>
       
    22 
       
    23 const TBool KEY_UP=ETrue;
       
    24 const TBool KEY_DOWN=EFalse;
       
    25 const TBool EXPECT_NO_KEY_PRESS=EFalse;
       
    26 const TBool EXPECT_KEY_PRESS=ETrue;
       
    27 
       
    28 LOCAL_D RTest test(_L("T_KEYS"));
       
    29 LOCAL_D CKeyTranslator *KeyTranslator;
       
    30 LOCAL_D CCaptureKeys *CaptureKeys;
       
    31 
       
    32 LOCAL_C TBool testType()
       
    33 //
       
    34 // Determine whether the Func key sets Alt or Func modifier
       
    35 //
       
    36     {
       
    37 	TKeyData keyData;
       
    38     TBool ret;
       
    39     KeyTranslator->TranslateKey(EStdKeyLeftFunc,EFalse,*CaptureKeys,keyData);
       
    40     ret=(keyData.iModifiers==(EModifierLeftFunc|EModifierFunc));
       
    41     KeyTranslator->TranslateKey(EStdKeyLeftFunc,ETrue,*CaptureKeys,keyData);
       
    42     return(ret);
       
    43     }
       
    44 
       
    45 LOCAL_C void testConv(const TDesC& aDes,TBool aKeyup,TBool aRet,TUint aScanCode,TUint aKeyCode,TInt aModifiers)
       
    46 	{
       
    47 	TKeyData keyData;
       
    48     TBool ret=KeyTranslator->TranslateKey(aScanCode, aKeyup,*CaptureKeys,keyData);
       
    49 	test.Next(aDes);
       
    50 	test(ret==aRet);
       
    51 	test((keyData.iKeyCode==aKeyCode));
       
    52 	test((keyData.iModifiers==aModifiers));
       
    53 	}
       
    54 
       
    55 LOCAL_C void testCtrl(TInt aKeyCode)
       
    56 //
       
    57 // Test that prssing Ctrl-xyz returns ascii code xyz
       
    58 //
       
    59     {
       
    60 
       
    61     TBuf<16> down;
       
    62     TBuf<16> up;
       
    63 
       
    64     TInt val[4];
       
    65     TInt ii=0;
       
    66 	TInt key=aKeyCode;
       
    67 
       
    68     while(key)
       
    69         {
       
    70         val[ii++]=key%10;
       
    71         key/=10;
       
    72         }
       
    73 
       
    74 	testConv(_L("Left control down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftCtrl,0,EModifierCtrl|EModifierLeftCtrl);
       
    75 
       
    76 	TUint downModifiers=EModifierCtrl|EModifierLeftCtrl|EModifierPureKeycode;
       
    77 	TUint upModifiers=EModifierCtrl|EModifierLeftCtrl|EModifierKeyUp;
       
    78 
       
    79     while(ii--)
       
    80         {
       
    81         down.Format(_L("%d down"),val[ii]);
       
    82         up.Format(_L("%d up"),val[ii]);
       
    83     	testConv(down,KEY_DOWN,EXPECT_NO_KEY_PRESS,val[ii]+'0',0,downModifiers);
       
    84     	testConv(up,KEY_UP,EXPECT_NO_KEY_PRESS,val[ii]+'0',0,upModifiers);
       
    85 		downModifiers&=~(EModifierPureKeycode);
       
    86         }
       
    87 
       
    88 	testConv(_L("Left control up"),KEY_UP,EXPECT_KEY_PRESS,EStdKeyLeftCtrl,aKeyCode,EModifierKeyUp|EModifierSpecial);
       
    89     }
       
    90 
       
    91 /*
       
    92 LOCAL_C void testAccents(TInt aNum,TInt aLetter,TInt aKeycode)
       
    93 //
       
    94 // Check accents by pressing Ctrl-n followed by a letter
       
    95 //
       
    96 	{
       
    97 
       
    98 	TBuf<16> down;
       
    99 	TBuf<16> up;
       
   100 //
       
   101 // Press the Ctrl key
       
   102 //
       
   103 	testConv(_L("Left control down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftCtrl,0,EModifierCtrl|EModifierLeftCtrl);
       
   104 //
       
   105 // While it's down, press the given number key...
       
   106 //
       
   107     down.Format(_L("%c down"),aNum);
       
   108    	testConv(down,KEY_DOWN,EXPECT_NO_KEY_PRESS,aNum,0,EModifierCtrl|EModifierLeftCtrl|EModifierPureKeycode);
       
   109 //
       
   110 // Release the number and Ctrl keys
       
   111 //
       
   112     up.Format(_L("%c up"),aNum);
       
   113    	testConv(up,KEY_UP,EXPECT_NO_KEY_PRESS,aNum,0,EModifierCtrl|EModifierLeftCtrl|EModifierKeyUp);
       
   114 	testConv(_L("Left control up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftCtrl,0,EModifierKeyUp);
       
   115 //
       
   116 // Press the letter key and check an accent is returned...
       
   117 //
       
   118     down.Format(_L("%c down"),aLetter);
       
   119     up.Format(_L("%c up"),aLetter);
       
   120    	testConv(down,KEY_DOWN,EXPECT_KEY_PRESS,aLetter,aKeycode,EModifierSpecial);
       
   121    	testConv(up,KEY_UP,EXPECT_NO_KEY_PRESS,aLetter,0,EModifierKeyUp);
       
   122 	}
       
   123 */
       
   124 
       
   125 GLDEF_C TInt E32Main()
       
   126 //
       
   127 // Test the keyboard translator
       
   128 //
       
   129     {
       
   130 
       
   131     test.Start(_L("Keyboard translator tests"));
       
   132 
       
   133     KeyTranslator=CKeyTranslator::New();
       
   134     CaptureKeys=new CCaptureKeys();
       
   135 
       
   136 	CaptureKeys->Construct();
       
   137 
       
   138     TUint scancode=EStdKeyLeftArrow;
       
   139 //
       
   140 // Test that the special keys pass through and anything after
       
   141 // or before raises an error
       
   142 //
       
   143 	testConv(_L("First Special key down"),KEY_DOWN,EXPECT_KEY_PRESS,ESpecialKeyBase,ESpecialKeyBase,0);
       
   144 	testConv(_L("First Special key up"),KEY_UP,EXPECT_NO_KEY_PRESS,ESpecialKeyBase,0,EModifierKeyUp);
       
   145 
       
   146 	testConv(_L("Last Sepcial key down"),KEY_DOWN,EXPECT_KEY_PRESS,ESpecialKeyBase+ESpecialKeyCount-1,ESpecialKeyBase+ESpecialKeyCount-1,0);
       
   147 	testConv(_L("Last Special key up"),KEY_UP,EXPECT_NO_KEY_PRESS,ESpecialKeyBase+ESpecialKeyCount-1,0,EModifierKeyUp);
       
   148 
       
   149 	testConv(_L("Key before Special range down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,ESpecialKeyBase-1,0,0);
       
   150 	testConv(_L("Key before Special range up"),KEY_UP,EXPECT_NO_KEY_PRESS,0,0,EModifierKeyUp);
       
   151 
       
   152 	testConv(_L("Key after Special range down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,ESpecialKeyBase+ESpecialKeyCount,0,0);
       
   153 	testConv(_L("Key after Sepcial range up"),KEY_UP,EXPECT_NO_KEY_PRESS,ESpecialKeyBase+ESpecialKeyCount,0,EModifierKeyUp);
       
   154 //
       
   155 // Test a range of keys...
       
   156 //
       
   157 	for(scancode='A';scancode<='Z';scancode++)
       
   158 		{
       
   159 		TBuf<16> buf;
       
   160 
       
   161 		buf.Format(_L("Testing key %c"),scancode);
       
   162 		testConv(buf,KEY_DOWN,EXPECT_KEY_PRESS,scancode,'a'+scancode-'A',EModifierAutorepeatable);
       
   163 		testConv(buf,KEY_UP,EXPECT_NO_KEY_PRESS,scancode,0,EModifierKeyUp);
       
   164 		}
       
   165 //
       
   166 // Test shift and control modifiers
       
   167 //
       
   168 	testConv(_L("Left shift down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftShift,0,EModifierShift|EModifierLeftShift);
       
   169 	testConv(_L("Left shift up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftShift,0,EModifierKeyUp);
       
   170 
       
   171 	testConv(_L("Right shift down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightShift,0,EModifierShift|EModifierRightShift);
       
   172 	testConv(_L("Right shift up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightShift,0,EModifierKeyUp);
       
   173 
       
   174 	testConv(_L("Left shift down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftShift,0,EModifierShift|EModifierLeftShift);
       
   175 	testConv(_L("Right shift down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightShift,0,EModifierShift|EModifierRightShift|EModifierLeftShift);
       
   176 	testConv(_L("Left shift up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftShift,0,EModifierKeyUp|EModifierShift|EModifierRightShift);
       
   177 	testConv(_L("Right shift up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightShift,0,EModifierKeyUp);
       
   178 
       
   179 	testConv(_L("Left control down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftCtrl,0,EModifierCtrl|EModifierLeftCtrl);
       
   180 	testConv(_L("Left control up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftCtrl,0,EModifierKeyUp|EModifierPureKeycode);
       
   181 
       
   182 	testConv(_L("Right control down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightCtrl,0,EModifierCtrl|EModifierRightCtrl);
       
   183 	testConv(_L("Right control up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightCtrl,0,EModifierKeyUp|EModifierPureKeycode);
       
   184 
       
   185 	testConv(_L("Left control down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftCtrl,0,EModifierCtrl|EModifierLeftCtrl);
       
   186 	testConv(_L("Right control down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightCtrl,0,EModifierCtrl|EModifierRightCtrl|EModifierLeftCtrl);
       
   187 	testConv(_L("Left control up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftCtrl,0,EModifierKeyUp|EModifierCtrl|EModifierRightCtrl|EModifierPureKeycode);
       
   188 	testConv(_L("Right control up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightCtrl,0,EModifierKeyUp|EModifierPureKeycode);
       
   189 //
       
   190 // Test function and alt keys - these are swapped on some platforms
       
   191 //
       
   192     if(testType())
       
   193         {
       
   194     	testConv(_L("Left func down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftFunc,0,EModifierFunc|EModifierLeftFunc);
       
   195     	testConv(_L("Left func up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftFunc,0,EModifierKeyUp);
       
   196 
       
   197     	testConv(_L("Right func down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightFunc,0,EModifierFunc|EModifierRightFunc);
       
   198     	testConv(_L("Right func up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightFunc,0,EModifierKeyUp);
       
   199 
       
   200     	testConv(_L("Left func down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftFunc,0,EModifierFunc|EModifierLeftFunc);
       
   201     	testConv(_L("Right func down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightFunc,0,EModifierFunc|EModifierRightFunc|EModifierLeftFunc);
       
   202     	testConv(_L("Left func up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftFunc,0,EModifierKeyUp|EModifierFunc|EModifierRightFunc);
       
   203     	testConv(_L("Right func up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightFunc,0,EModifierKeyUp);
       
   204 
       
   205     	testConv(_L("Left alt down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftAlt,0,EModifierAlt|EModifierLeftAlt);
       
   206     	testConv(_L("Left alt up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftAlt,0,EModifierKeyUp);
       
   207 
       
   208     	testConv(_L("Right alt down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightAlt,0,EModifierAlt|EModifierRightAlt);
       
   209     	testConv(_L("Right alt up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightAlt,0,EModifierKeyUp);
       
   210 
       
   211     	testConv(_L("Left alt down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftAlt,0,EModifierAlt|EModifierLeftAlt);
       
   212     	testConv(_L("Right alt down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightAlt,0,EModifierAlt|EModifierRightAlt|EModifierLeftAlt);
       
   213     	testConv(_L("Left alt up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftAlt,0,EModifierKeyUp|EModifierAlt|EModifierRightAlt);
       
   214     	testConv(_L("Right alt up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightAlt,0,EModifierKeyUp);
       
   215         }
       
   216     else
       
   217         {
       
   218     	testConv(_L("Left func down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftAlt,0,EModifierFunc|EModifierLeftFunc);
       
   219     	testConv(_L("Left func up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftAlt,0,EModifierKeyUp);
       
   220 
       
   221     	testConv(_L("Right func down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightAlt,0,EModifierFunc|EModifierRightFunc);
       
   222     	testConv(_L("Right func up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightAlt,0,EModifierKeyUp);
       
   223 
       
   224     	testConv(_L("Left func down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftAlt,0,EModifierFunc|EModifierLeftFunc);
       
   225     	testConv(_L("Right func down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightAlt,0,EModifierFunc|EModifierRightFunc|EModifierLeftFunc);
       
   226     	testConv(_L("Left func up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftAlt,0,EModifierKeyUp|EModifierFunc|EModifierRightFunc);
       
   227 	    testConv(_L("Right func up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightAlt,0,EModifierKeyUp);
       
   228 
       
   229     	testConv(_L("Left alt down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftFunc,0,EModifierAlt|EModifierLeftAlt);
       
   230     	testConv(_L("Left alt up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftFunc,0,EModifierKeyUp);
       
   231 
       
   232     	testConv(_L("Right alt down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightFunc,0,EModifierAlt|EModifierRightAlt);
       
   233     	testConv(_L("Right alt up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightFunc,0,EModifierKeyUp);
       
   234 
       
   235     	testConv(_L("Left alt down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyLeftFunc,0,EModifierAlt|EModifierLeftAlt);
       
   236     	testConv(_L("Right alt down"),KEY_DOWN,EXPECT_NO_KEY_PRESS,EStdKeyRightFunc,0,EModifierAlt|EModifierRightAlt|EModifierLeftAlt);
       
   237     	testConv(_L("Left alt up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyLeftFunc,0,EModifierKeyUp|EModifierAlt|EModifierRightAlt);
       
   238     	testConv(_L("Right alt up"),KEY_UP,EXPECT_NO_KEY_PRESS,EStdKeyRightFunc,0,EModifierKeyUp);
       
   239         }
       
   240 //
       
   241 // Test control entering of ascii codes
       
   242 //
       
   243     testCtrl(123);
       
   244     testCtrl(217);
       
   245     testCtrl(53);
       
   246     testCtrl(37);
       
   247 
       
   248 /* These accent tests are dependent upon the keyboard mapping being used. They need enhancing
       
   249    so that they adjust according to the platform on which they are being run
       
   250 
       
   251 //
       
   252 // Test that pressing Ctrl-1 followed by 'e' gives accents
       
   253 //
       
   254 	testAccents('1','E',0xe6);
       
   255 	testAccents('2','E',0xea);
       
   256 	testAccents('3','E',0xe8);
       
   257 	testAccents('4','E',0xe9);
       
   258 	testAccents('5','A',0xe3);
       
   259 	testAccents('6','E',0xea);
       
   260 
       
   261 */
       
   262 	test.End();
       
   263 	return(KErrNone);
       
   264     }
       
   265