wlanutilities/wlanwizard/tsrc/ut/hbautotest.cpp
branchRCL_3
changeset 25 f28ada11abbf
parent 24 63be7eb3fc78
equal deleted inserted replaced
24:63be7eb3fc78 25:f28ada11abbf
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:
       
    15 *
       
    16 */
       
    17 
       
    18 #include "hbautotest.h"
       
    19 #include <hbmainwindow.h>
       
    20 #include <hbwidget.h>
       
    21 
       
    22 
       
    23 const qreal STEP = 4; //How many pixels to drag before sending an event
       
    24 
       
    25 //Init static members
       
    26 bool HbAutoTest::pointerPressed = false;
       
    27 QPointF HbAutoTest::pressPoint = QPointF();
       
    28 
       
    29 void HbAutoTest::mouseMove (HbAutoTestMainWindow *window, HbWidget *widget, QPointF pos, int delay)
       
    30 {
       
    31     if (delay!=-1) {
       
    32         QTest::qWait(delay);
       
    33     }
       
    34     QPointF targetPoint=QPointF();
       
    35     if (pos==QPointF()) {
       
    36         targetPoint = middlePointOfWidget(widget);
       
    37     } else {
       
    38         targetPoint = widget->mapToScene(pos);
       
    39     }
       
    40     if (pointerPressed) {
       
    41         //Now we should drag an item
       
    42         drag(window, targetPoint);
       
    43             HbAutoTestMouseEvent me (
       
    44             QEvent::MouseMove, 
       
    45             targetPoint.toPoint(), 
       
    46             window->viewport()->mapToGlobal(targetPoint.toPoint()), 
       
    47             Qt::NoButton, 
       
    48             Qt::NoButton, 
       
    49             Qt::NoModifier);
       
    50             QSpontaneKeyEvent::setSpontaneous(&me);
       
    51             qApp->notify((window->viewport()), &me);
       
    52             QCoreApplication::sendPostedEvents();
       
    53             QTest::qWait(1);
       
    54     } else {
       
    55             HbAutoTestMouseEvent me (
       
    56             QEvent::MouseMove, 
       
    57             targetPoint.toPoint(), 
       
    58             window->viewport()->mapToGlobal(targetPoint.toPoint()), 
       
    59             Qt::NoButton, 
       
    60             Qt::NoButton, 
       
    61             Qt::NoModifier);
       
    62             QSpontaneKeyEvent::setSpontaneous(&me);
       
    63             qApp->notify((window->viewport()), &me);
       
    64             QCoreApplication::sendPostedEvents();
       
    65             QTest::qWait(1);
       
    66 
       
    67     }
       
    68     QTest::qWait(1);
       
    69     QTest::qWait(1);
       
    70 }
       
    71  
       
    72 void HbAutoTest::mousePress (HbAutoTestMainWindow *window, HbWidget *widget, QPointF pos, int delay)
       
    73 {
       
    74     if (delay!=-1) {
       
    75         QTest::qWait(delay);
       
    76     }
       
    77     pointerPressed=true;
       
    78     QPointF targetPoint=QPointF();
       
    79     if (pos==QPointF()) {
       
    80         targetPoint = middlePointOfWidget(widget);
       
    81     } else {
       
    82         targetPoint = widget->mapToScene(pos);
       
    83     }
       
    84     QCursor::setPos(window->mapToGlobal(targetPoint.toPoint()));
       
    85 
       
    86     pressPoint=targetPoint;
       
    87     
       
    88     HbAutoTestMouseEvent me (
       
    89     QEvent::MouseButtonPress, 
       
    90     targetPoint.toPoint(), 
       
    91     window->viewport()->mapToGlobal(targetPoint.toPoint()), 
       
    92     Qt::LeftButton, 
       
    93     Qt::LeftButton, 
       
    94     Qt::NoModifier);
       
    95 
       
    96     QSpontaneKeyEvent::setSpontaneous(&me);
       
    97     qApp->notify((window->viewport()), &me);
       
    98     QCoreApplication::sendPostedEvents();
       
    99     QCoreApplication::sendPostedEvents();
       
   100     QTest::qWait(1);
       
   101 }
       
   102 
       
   103 void HbAutoTest::mouseRelease (HbAutoTestMainWindow *window, HbWidget *widget, QPointF pos, int delay)
       
   104 {
       
   105     if (delay!=-1) {
       
   106         QTest::qWait(delay);
       
   107     }
       
   108     pointerPressed=false;
       
   109     QPointF targetPoint=QPointF();
       
   110     if (pos==QPointF()) {
       
   111         targetPoint = middlePointOfWidget(widget);
       
   112     } else {
       
   113         targetPoint = widget->mapToScene(pos);
       
   114     }
       
   115     QCursor::setPos(window->mapToGlobal(targetPoint.toPoint()));
       
   116     pressPoint=QPointF();
       
   117     HbAutoTestMouseEvent me (
       
   118     QEvent::MouseButtonRelease, 
       
   119     targetPoint.toPoint(), 
       
   120     window->viewport()->mapToGlobal(targetPoint.toPoint()), 
       
   121     Qt::LeftButton, 
       
   122     Qt::NoButton, 
       
   123     Qt::NoModifier);
       
   124 
       
   125     QSpontaneKeyEvent::setSpontaneous(&me);
       
   126     qApp->notify((window->viewport()), &me);
       
   127     QCoreApplication::sendPostedEvents();
       
   128 
       
   129     QTest::qWait(1);
       
   130     QTest::qWait(1);
       
   131 }
       
   132 
       
   133 void HbAutoTest::mouseClick (HbAutoTestMainWindow *window, const HbWidget *widget, QPointF pos, int delay)
       
   134 {
       
   135     if (delay!=-1) {
       
   136         QTest::qWait(delay);
       
   137     }
       
   138     QPointF targetPoint=QPointF();
       
   139     if (pos==QPointF()) {
       
   140         targetPoint = middlePointOfWidget(widget);
       
   141     } else {
       
   142         targetPoint = widget->mapToScene(pos);
       
   143     }
       
   144     
       
   145     QCursor::setPos(window->mapToGlobal(targetPoint.toPoint()));
       
   146     
       
   147     HbAutoTestMouseEvent me (
       
   148     QEvent::MouseButtonPress, 
       
   149     targetPoint.toPoint(), 
       
   150     window->viewport()->mapToGlobal(targetPoint.toPoint()), 
       
   151     Qt::LeftButton, 
       
   152     Qt::LeftButton, 
       
   153     Qt::NoModifier);
       
   154     QSpontaneKeyEvent::setSpontaneous(&me);
       
   155     qApp->notify((window->viewport()), &me);
       
   156     QCoreApplication::sendPostedEvents();
       
   157     //QTime currentTime = QTime::currentTime();
       
   158     //qDebug() << currentTime.toString("hh:mm:ss.zzz") << ": Left button down";
       
   159     QTest::qWait(1);
       
   160 
       
   161     if (delay!=-1) {
       
   162         QTest::qWait(delay);
       
   163     }
       
   164     HbAutoTestMouseEvent me2 (
       
   165     QEvent::MouseButtonRelease, 
       
   166     targetPoint.toPoint(), 
       
   167     window->viewport()->mapToGlobal(targetPoint.toPoint()), 
       
   168     Qt::LeftButton, 
       
   169     Qt::NoButton,
       
   170     Qt::NoModifier);
       
   171 
       
   172     QSpontaneKeyEvent::setSpontaneous(&me2);
       
   173     qApp->notify((window->viewport()), &me2);
       
   174     QCoreApplication::sendPostedEvents();
       
   175     //currentTime = QTime::currentTime();
       
   176     //qDebug() << currentTime.toString("hh:mm:ss.zzz") << ": Left button up";
       
   177 
       
   178     QTest::qWait(1);
       
   179     QTest::qWait(1);
       
   180 }   
       
   181 
       
   182 QPointF HbAutoTest::middlePointOfWidget( const HbWidget* widget)
       
   183 {
       
   184     QRectF widgetRect = widget->rect();
       
   185     QRectF widgetSceneRect = widget->mapRectToScene(widgetRect);
       
   186     qreal middleX = ((widgetSceneRect.right() - widgetSceneRect.left())/2)+widgetSceneRect.left();
       
   187     qreal middleY = ((widgetSceneRect.bottom() - widgetSceneRect.top())/2)+widgetSceneRect.top();  
       
   188     return QPointF(middleX,middleY);
       
   189 }
       
   190 
       
   191 
       
   192 
       
   193 void HbAutoTest::drag(HbAutoTestMainWindow *window, QPointF targetPoint)
       
   194 {
       
   195     qreal tempX = targetPoint.x() - pressPoint.x();
       
   196     qreal tempY = targetPoint.y() - pressPoint.y();
       
   197     qreal totalTrip = sqrt ((tempX * tempX) + (tempY * tempY));
       
   198     
       
   199     int numberOfSteps = qRound(totalTrip / STEP);
       
   200     HbAutoTestMouseEvent me (
       
   201         QEvent::MouseMove, 
       
   202         targetPoint.toPoint(), 
       
   203         window->viewport()->mapToGlobal(targetPoint.toPoint()), 
       
   204         Qt::NoButton , 
       
   205         Qt::LeftButton, 
       
   206         Qt::NoModifier);
       
   207 
       
   208     QPointF nextPanPoint=pressPoint;
       
   209     for (int i=1; i<numberOfSteps; i++) { //On purpose not =<
       
   210         
       
   211         nextPanPoint.setY (pressPoint.y()+((i / (qreal)numberOfSteps) * tempY));
       
   212         nextPanPoint.setX (pressPoint.x()+((i / (qreal)numberOfSteps) * tempX));
       
   213         
       
   214         QCursor::setPos(window->mapToGlobal(nextPanPoint.toPoint()));
       
   215 
       
   216         me =  HbAutoTestMouseEvent (QEvent::MouseMove,
       
   217                             nextPanPoint.toPoint(), 
       
   218                             window->viewport()->mapToGlobal(nextPanPoint.toPoint()), 
       
   219                             Qt::NoButton, 
       
   220                             Qt::LeftButton, 
       
   221                             Qt::NoModifier);   
       
   222 
       
   223         QSpontaneKeyEvent::setSpontaneous(&me);
       
   224         qApp->notify((window->viewport()), &me);
       
   225         QCoreApplication::sendPostedEvents();
       
   226     }
       
   227 
       
   228     QCursor::setPos(window->mapToGlobal(targetPoint.toPoint()));
       
   229 
       
   230     //One more (or the only one) step to the target
       
   231     me =  HbAutoTestMouseEvent (QEvent::MouseMove,
       
   232                             targetPoint.toPoint(), 
       
   233                             window->viewport()->mapToGlobal(targetPoint.toPoint()), 
       
   234                             Qt::NoButton, 
       
   235                             Qt::LeftButton, 
       
   236                             Qt::NoModifier);   
       
   237     QSpontaneKeyEvent::setSpontaneous(&me);
       
   238     qApp->notify((window->viewport()), &me);
       
   239     QCoreApplication::sendPostedEvents();
       
   240 }
       
   241 
       
   242 
       
   243 void HbAutoTest::simulateEvent(QWidget *widget, bool press, int code,
       
   244                               Qt::KeyboardModifiers modifier, QString text, bool repeat, int delay)
       
   245     {
       
   246         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   247         extern int Q_TESTLIB_EXPORT defaultKeyDelay();
       
   248 
       
   249         if (delay == -1 || delay < 10) // defaultKeyDelay())
       
   250             delay = 10; //defaultKeyDelay();
       
   251         if(delay > 0)
       
   252             QTest::qWait(delay);
       
   253 //        Q_UNUSED(delay);
       
   254 //        QTest::qWait(10); //TODO: Remove this and reveal above out-commented code
       
   255 
       
   256         HbAutoTestKeyEvent a(press ? QEvent::KeyPress : QEvent::KeyRelease, code, modifier, text, repeat);
       
   257         QSpontaneKeyEvent::setSpontaneous(&a);
       
   258         if (!qApp->notify(widget, &a))
       
   259             QTest::qWarn("Keyboard event not accepted by receiving widget");
       
   260     }
       
   261 
       
   262 void HbAutoTest::sendKeyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key code,
       
   263                              QString text, Qt::KeyboardModifiers modifier, int delay)
       
   264     {
       
   265         QTEST_ASSERT(qApp);
       
   266 
       
   267         if (!widget)
       
   268             widget = QWidget::keyboardGrabber();
       
   269         if (!widget) {
       
   270             if (QWidget *apw = QApplication::activePopupWidget())
       
   271                 widget = apw->focusWidget() ? apw->focusWidget() : apw;
       
   272             else
       
   273                 widget = QApplication::focusWidget();
       
   274         }
       
   275         if (!widget)
       
   276             widget = QApplication::activeWindow();
       
   277 
       
   278         QTEST_ASSERT(widget);
       
   279 
       
   280         if (action == QTest::Click) {
       
   281             QPointer<QWidget> ptr(widget);
       
   282             sendKeyEvent(QTest::Press, widget, code, text, modifier, delay);
       
   283             if (!ptr) {
       
   284                 // if we send key-events to embedded widgets, they might be destroyed
       
   285                 // when the user presses Return
       
   286                 return;
       
   287             }
       
   288             sendKeyEvent(QTest::Release, widget, code, text, modifier, delay);
       
   289             return;
       
   290         }
       
   291 
       
   292         bool repeat = false;
       
   293 
       
   294         if (action == QTest::Press) {
       
   295             if (modifier & Qt::ShiftModifier)
       
   296                 simulateEvent(widget, true, Qt::Key_Shift, 0, QString(), false, delay);
       
   297 
       
   298             if (modifier & Qt::ControlModifier)
       
   299                 simulateEvent(widget, true, Qt::Key_Control, modifier & Qt::ShiftModifier, QString(), false, delay);
       
   300 
       
   301             if (modifier & Qt::AltModifier)
       
   302                 simulateEvent(widget, true, Qt::Key_Alt,
       
   303                               modifier & (Qt::ShiftModifier | Qt::ControlModifier), QString(), false, delay);
       
   304             if (modifier & Qt::MetaModifier)
       
   305                 simulateEvent(widget, true, Qt::Key_Meta, modifier & (Qt::ShiftModifier
       
   306                                                                       | Qt::ControlModifier | Qt::AltModifier), QString(), false, delay);
       
   307             simulateEvent(widget, true, code, modifier, text, repeat, delay);
       
   308         } else if (action == QTest::Release) {
       
   309             simulateEvent(widget, false, code, modifier, text, repeat, delay);
       
   310 
       
   311             if (modifier & Qt::MetaModifier)
       
   312                 simulateEvent(widget, false, Qt::Key_Meta, modifier, QString(), false, delay);
       
   313             if (modifier & Qt::AltModifier)
       
   314                 simulateEvent(widget, false, Qt::Key_Alt, modifier &
       
   315                               (Qt::ShiftModifier | Qt::ControlModifier | Qt::AltModifier), QString(), false, delay);
       
   316 
       
   317             if (modifier & Qt::ControlModifier)
       
   318                 simulateEvent(widget, false, Qt::Key_Control,
       
   319                               modifier & (Qt::ShiftModifier | Qt::ControlModifier), QString(), false, delay);
       
   320 
       
   321             if (modifier & Qt::ShiftModifier)
       
   322                 simulateEvent(widget, false, Qt::Key_Shift, modifier & Qt::ShiftModifier, QString(), false, delay);
       
   323         }
       
   324     }
       
   325 
       
   326 void HbAutoTest::sendKeyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key code,
       
   327                              char ascii, Qt::KeyboardModifiers modifier, int delay)
       
   328     {
       
   329         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   330         QString text;
       
   331         if (ascii)
       
   332             text = QString(QChar::fromLatin1(ascii));
       
   333         sendKeyEvent(action, widget, code, text, modifier, delay);
       
   334     }
       
   335 
       
   336 void HbAutoTest::keyEvent(QTest::KeyAction action, QWidget *widget, char ascii,
       
   337                                 Qt::KeyboardModifiers modifier, int delay)
       
   338     { 
       
   339         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   340         sendKeyEvent(action, widget, asciiToKey(ascii), ascii, modifier, delay); 
       
   341      }
       
   342      
       
   343 void HbAutoTest::keyEvent(QTest::KeyAction action, QWidget *widget, Qt::Key key,
       
   344                                 Qt::KeyboardModifiers modifier, int delay)
       
   345     { 
       
   346         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   347         sendKeyEvent(action, widget, key, keyToAscii(key), modifier, delay); 
       
   348      }
       
   349 
       
   350 void HbAutoTest::keyClicks(QWidget *widget, const QString &sequence,
       
   351                                  Qt::KeyboardModifiers modifier, int delay)
       
   352     {
       
   353         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   354         for (int i=0; i < sequence.length(); i++)
       
   355             keyEvent(QTest::Click, widget, sequence.at(i).toLatin1(), modifier, delay);
       
   356     }
       
   357 
       
   358 void HbAutoTest::keyPress(QWidget *widget, char key, Qt::KeyboardModifiers modifier, int delay)
       
   359     { 
       
   360         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   361         keyEvent(QTest::Press, widget, key, modifier, delay); 
       
   362     }
       
   363     
       
   364 void HbAutoTest::keyRelease(QWidget *widget, char key, Qt::KeyboardModifiers modifier, int delay)
       
   365     { 
       
   366         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   367         keyEvent(QTest::Release, widget, key, modifier, delay); 
       
   368     }
       
   369     
       
   370 void HbAutoTest::keyClick(QWidget *widget, char key, Qt::KeyboardModifiers modifier, int delay)
       
   371     { 
       
   372         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   373         keyEvent(QTest::Click, widget, key, modifier, delay); 
       
   374     }
       
   375     
       
   376 void HbAutoTest::keyPress(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier, int delay)
       
   377     { 
       
   378         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   379         keyEvent(QTest::Press, widget, key, modifier, delay); 
       
   380     }
       
   381     
       
   382 void HbAutoTest::keyRelease(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier, int delay)
       
   383     { 
       
   384         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   385         keyEvent(QTest::Release, widget, key, modifier, delay); }
       
   386     
       
   387 void HbAutoTest::keyClick(QWidget *widget, Qt::Key key, Qt::KeyboardModifiers modifier, int delay)
       
   388     { 
       
   389         Q_ASSERT_X(dynamic_cast<HbAutoTestMainWindow *>(( widget) ) != 0, "HbAutoTest", "Always use with HbAutoTestMainWindow");
       
   390         keyEvent(QTest::Click, widget, key, modifier, delay); 
       
   391     }
       
   392 
       
   393 Qt::Key HbAutoTest::asciiToKey(char ascii)
       
   394 {
       
   395     switch ((unsigned char)ascii) {
       
   396     case 0x08: return Qt::Key_Backspace;
       
   397     case 0x09: return Qt::Key_Tab;
       
   398     case 0x0b: return Qt::Key_Backtab;
       
   399     case 0x0d: return Qt::Key_Return;
       
   400     case 0x1b: return Qt::Key_Escape;
       
   401     case 0x20: return Qt::Key_Space;
       
   402     case 0x21: return Qt::Key_Exclam;
       
   403     case 0x22: return Qt::Key_QuoteDbl;
       
   404     case 0x23: return Qt::Key_NumberSign;
       
   405     case 0x24: return Qt::Key_Dollar;
       
   406     case 0x25: return Qt::Key_Percent;
       
   407     case 0x26: return Qt::Key_Ampersand;
       
   408     case 0x27: return Qt::Key_Apostrophe;
       
   409     case 0x28: return Qt::Key_ParenLeft;
       
   410     case 0x29: return Qt::Key_ParenRight;
       
   411     case 0x2a: return Qt::Key_Asterisk;
       
   412     case 0x2b: return Qt::Key_Plus;
       
   413     case 0x2c: return Qt::Key_Comma;
       
   414     case 0x2d: return Qt::Key_Minus;
       
   415     case 0x2e: return Qt::Key_Period;
       
   416     case 0x2f: return Qt::Key_Slash;
       
   417     case 0x30: return Qt::Key_0;
       
   418     case 0x31: return Qt::Key_1;
       
   419     case 0x32: return Qt::Key_2;
       
   420     case 0x33: return Qt::Key_3;
       
   421     case 0x34: return Qt::Key_4;
       
   422     case 0x35: return Qt::Key_5;
       
   423     case 0x36: return Qt::Key_6;
       
   424     case 0x37: return Qt::Key_7;
       
   425     case 0x38: return Qt::Key_8;
       
   426     case 0x39: return Qt::Key_9;
       
   427     case 0x3a: return Qt::Key_Colon;
       
   428     case 0x3b: return Qt::Key_Semicolon;
       
   429     case 0x3c: return Qt::Key_Less;
       
   430     case 0x3d: return Qt::Key_Equal;
       
   431     case 0x3e: return Qt::Key_Greater;
       
   432     case 0x3f: return Qt::Key_Question;
       
   433     case 0x40: return Qt::Key_At;
       
   434     case 0x41: return Qt::Key_A;
       
   435     case 0x42: return Qt::Key_B;
       
   436     case 0x43: return Qt::Key_C;
       
   437     case 0x44: return Qt::Key_D;
       
   438     case 0x45: return Qt::Key_E;
       
   439     case 0x46: return Qt::Key_F;
       
   440     case 0x47: return Qt::Key_G;
       
   441     case 0x48: return Qt::Key_H;
       
   442     case 0x49: return Qt::Key_I;
       
   443     case 0x4a: return Qt::Key_J;
       
   444     case 0x4b: return Qt::Key_K;
       
   445     case 0x4c: return Qt::Key_L;
       
   446     case 0x4d: return Qt::Key_M;
       
   447     case 0x4e: return Qt::Key_N;
       
   448     case 0x4f: return Qt::Key_O;
       
   449     case 0x50: return Qt::Key_P;
       
   450     case 0x51: return Qt::Key_Q;
       
   451     case 0x52: return Qt::Key_R;
       
   452     case 0x53: return Qt::Key_S;
       
   453     case 0x54: return Qt::Key_T;
       
   454     case 0x55: return Qt::Key_U;
       
   455     case 0x56: return Qt::Key_V;
       
   456     case 0x57: return Qt::Key_W;
       
   457     case 0x58: return Qt::Key_X;
       
   458     case 0x59: return Qt::Key_Y;
       
   459     case 0x5a: return Qt::Key_Z;
       
   460     case 0x5b: return Qt::Key_BracketLeft;
       
   461     case 0x5c: return Qt::Key_Backslash;
       
   462     case 0x5d: return Qt::Key_BracketRight;
       
   463     case 0x5e: return Qt::Key_AsciiCircum;
       
   464     case 0x5f: return Qt::Key_Underscore;
       
   465     case 0x60: return Qt::Key_QuoteLeft;
       
   466     case 0x61: return Qt::Key_A;
       
   467     case 0x62: return Qt::Key_B;
       
   468     case 0x63: return Qt::Key_C;
       
   469     case 0x64: return Qt::Key_D;
       
   470     case 0x65: return Qt::Key_E;
       
   471     case 0x66: return Qt::Key_F;
       
   472     case 0x67: return Qt::Key_G;
       
   473     case 0x68: return Qt::Key_H;
       
   474     case 0x69: return Qt::Key_I;
       
   475     case 0x6a: return Qt::Key_J;
       
   476     case 0x6b: return Qt::Key_K;
       
   477     case 0x6c: return Qt::Key_L;
       
   478     case 0x6d: return Qt::Key_M;
       
   479     case 0x6e: return Qt::Key_N;
       
   480     case 0x6f: return Qt::Key_O;
       
   481     case 0x70: return Qt::Key_P;
       
   482     case 0x71: return Qt::Key_Q;
       
   483     case 0x72: return Qt::Key_R;
       
   484     case 0x73: return Qt::Key_S;
       
   485     case 0x74: return Qt::Key_T;
       
   486     case 0x75: return Qt::Key_U;
       
   487     case 0x76: return Qt::Key_V;
       
   488     case 0x77: return Qt::Key_W;
       
   489     case 0x78: return Qt::Key_X;
       
   490     case 0x79: return Qt::Key_Y;
       
   491     case 0x7a: return Qt::Key_Z;
       
   492     case 0x7b: return Qt::Key_BraceLeft;
       
   493     case 0x7c: return Qt::Key_Bar;
       
   494     case 0x7d: return Qt::Key_BraceRight;
       
   495     case 0x7e: return Qt::Key_AsciiTilde;
       
   496 
       
   497     // Latin 1 codes adapted from X: keysymdef.h,v 1.21 94/08/28 16:17:06
       
   498     case 0xa0: return Qt::Key_nobreakspace;
       
   499     case 0xa1: return Qt::Key_exclamdown;
       
   500     case 0xa2: return Qt::Key_cent;
       
   501     case 0xa3: return Qt::Key_sterling;
       
   502     case 0xa4: return Qt::Key_currency;
       
   503     case 0xa5: return Qt::Key_yen;
       
   504     case 0xa6: return Qt::Key_brokenbar;
       
   505     case 0xa7: return Qt::Key_section;
       
   506     case 0xa8: return Qt::Key_diaeresis;
       
   507     case 0xa9: return Qt::Key_copyright;
       
   508     case 0xaa: return Qt::Key_ordfeminine;
       
   509     case 0xab: return Qt::Key_guillemotleft;
       
   510     case 0xac: return Qt::Key_notsign;
       
   511     case 0xad: return Qt::Key_hyphen;
       
   512     case 0xae: return Qt::Key_registered;
       
   513     case 0xaf: return Qt::Key_macron;
       
   514     case 0xb0: return Qt::Key_degree;
       
   515     case 0xb1: return Qt::Key_plusminus;
       
   516     case 0xb2: return Qt::Key_twosuperior;
       
   517     case 0xb3: return Qt::Key_threesuperior;
       
   518     case 0xb4: return Qt::Key_acute;
       
   519     case 0xb5: return Qt::Key_mu;
       
   520     case 0xb6: return Qt::Key_paragraph;
       
   521     case 0xb7: return Qt::Key_periodcentered;
       
   522     case 0xb8: return Qt::Key_cedilla;
       
   523     case 0xb9: return Qt::Key_onesuperior;
       
   524     case 0xba: return Qt::Key_masculine;
       
   525     case 0xbb: return Qt::Key_guillemotright;
       
   526     case 0xbc: return Qt::Key_onequarter;
       
   527     case 0xbd: return Qt::Key_onehalf;
       
   528     case 0xbe: return Qt::Key_threequarters;
       
   529     case 0xbf: return Qt::Key_questiondown;
       
   530     case 0xc0: return Qt::Key_Agrave;
       
   531     case 0xc1: return Qt::Key_Aacute;
       
   532     case 0xc2: return Qt::Key_Acircumflex;
       
   533     case 0xc3: return Qt::Key_Atilde;
       
   534     case 0xc4: return Qt::Key_Adiaeresis;
       
   535     case 0xc5: return Qt::Key_Aring;
       
   536     case 0xc6: return Qt::Key_AE;
       
   537     case 0xc7: return Qt::Key_Ccedilla;
       
   538     case 0xc8: return Qt::Key_Egrave;
       
   539     case 0xc9: return Qt::Key_Eacute;
       
   540     case 0xca: return Qt::Key_Ecircumflex;
       
   541     case 0xcb: return Qt::Key_Ediaeresis;
       
   542     case 0xcc: return Qt::Key_Igrave;
       
   543     case 0xcd: return Qt::Key_Iacute;
       
   544     case 0xce: return Qt::Key_Icircumflex;
       
   545     case 0xcf: return Qt::Key_Idiaeresis;
       
   546     case 0xd0: return Qt::Key_ETH;
       
   547     case 0xd1: return Qt::Key_Ntilde;
       
   548     case 0xd2: return Qt::Key_Ograve;
       
   549     case 0xd3: return Qt::Key_Oacute;
       
   550     case 0xd4: return Qt::Key_Ocircumflex;
       
   551     case 0xd5: return Qt::Key_Otilde;
       
   552     case 0xd6: return Qt::Key_Odiaeresis;
       
   553     case 0xd7: return Qt::Key_multiply;
       
   554     case 0xd8: return Qt::Key_Ooblique;
       
   555     case 0xd9: return Qt::Key_Ugrave;
       
   556     case 0xda: return Qt::Key_Uacute;
       
   557     case 0xdb: return Qt::Key_Ucircumflex;
       
   558     case 0xdc: return Qt::Key_Udiaeresis;
       
   559     case 0xdd: return Qt::Key_Yacute;
       
   560     case 0xde: return Qt::Key_THORN;
       
   561     case 0xdf: return Qt::Key_ssharp;
       
   562     case 0xe5: return Qt::Key_Aring;
       
   563     case 0xe6: return Qt::Key_AE;
       
   564     case 0xf7: return Qt::Key_division;
       
   565     case 0xf8: return Qt::Key_Ooblique;
       
   566     case 0xff: return Qt::Key_ydiaeresis;
       
   567     default: QTEST_ASSERT(false); return Qt::Key(0);
       
   568     }
       
   569 }
       
   570 
       
   571 char HbAutoTest::keyToAscii(Qt::Key key)
       
   572 {
       
   573     switch (key) {
       
   574     case Qt::Key_Backspace: return 0x8; //BS
       
   575     case Qt::Key_Tab: return 0x09; // HT
       
   576     case Qt::Key_Backtab: return 0x0b; // VT
       
   577     case Qt::Key_Enter:
       
   578     case Qt::Key_Return: return 0x0d; // CR
       
   579     case Qt::Key_Escape: return 0x1b; // ESC
       
   580     case Qt::Key_Space: return 0x20;        // 7 bit printable ASCII
       
   581     case Qt::Key_Exclam: return 0x21;
       
   582     case Qt::Key_QuoteDbl: return 0x22;
       
   583     case Qt::Key_NumberSign: return 0x23;
       
   584     case Qt::Key_Dollar: return 0x24;
       
   585     case Qt::Key_Percent: return 0x25;
       
   586     case Qt::Key_Ampersand: return 0x26;
       
   587     case Qt::Key_Apostrophe: return 0x27;
       
   588     case Qt::Key_ParenLeft: return 0x28;
       
   589     case Qt::Key_ParenRight: return 0x29;
       
   590     case Qt::Key_Asterisk: return 0x2a;
       
   591     case Qt::Key_Plus: return 0x2b;
       
   592     case Qt::Key_Comma: return 0x2c;
       
   593     case Qt::Key_Minus: return 0x2d;
       
   594     case Qt::Key_Period: return 0x2e;
       
   595     case Qt::Key_Slash: return 0x2f;
       
   596     case Qt::Key_0: return 0x30;
       
   597     case Qt::Key_1: return 0x31;
       
   598     case Qt::Key_2: return 0x32;
       
   599     case Qt::Key_3: return 0x33;
       
   600     case Qt::Key_4: return 0x34;
       
   601     case Qt::Key_5: return 0x35;
       
   602     case Qt::Key_6: return 0x36;
       
   603     case Qt::Key_7: return 0x37;
       
   604     case Qt::Key_8: return 0x38;
       
   605     case Qt::Key_9: return 0x39;
       
   606     case Qt::Key_Colon: return 0x3a;
       
   607     case Qt::Key_Semicolon: return 0x3b;
       
   608     case Qt::Key_Less: return 0x3c;
       
   609     case Qt::Key_Equal: return 0x3d;
       
   610     case Qt::Key_Greater: return 0x3e;
       
   611     case Qt::Key_Question: return 0x3f;
       
   612     case Qt::Key_At: return 0x40;
       
   613     case Qt::Key_A: return 0x61; // 0x41 == 'A', 0x61 == 'a'
       
   614     case Qt::Key_B: return 0x62;
       
   615     case Qt::Key_C: return 0x63;
       
   616     case Qt::Key_D: return 0x64;
       
   617     case Qt::Key_E: return 0x65;
       
   618     case Qt::Key_F: return 0x66;
       
   619     case Qt::Key_G: return 0x67;
       
   620     case Qt::Key_H: return 0x68;
       
   621     case Qt::Key_I: return 0x69;
       
   622     case Qt::Key_J: return 0x6a;
       
   623     case Qt::Key_K: return 0x6b;
       
   624     case Qt::Key_L: return 0x6c;
       
   625     case Qt::Key_M: return 0x6d;
       
   626     case Qt::Key_N: return 0x6e;
       
   627     case Qt::Key_O: return 0x6f;
       
   628     case Qt::Key_P: return 0x70;
       
   629     case Qt::Key_Q: return 0x71;
       
   630     case Qt::Key_R: return 0x72;
       
   631     case Qt::Key_S: return 0x73;
       
   632     case Qt::Key_T: return 0x74;
       
   633     case Qt::Key_U: return 0x75;
       
   634     case Qt::Key_V: return 0x76;
       
   635     case Qt::Key_W: return 0x77;
       
   636     case Qt::Key_X: return 0x78;
       
   637     case Qt::Key_Y: return 0x79;
       
   638     case Qt::Key_Z: return 0x7a;
       
   639     case Qt::Key_BracketLeft: return 0x5b;
       
   640     case Qt::Key_Backslash: return 0x5c;
       
   641     case Qt::Key_BracketRight: return 0x5d;
       
   642     case Qt::Key_AsciiCircum: return 0x5e;
       
   643     case Qt::Key_Underscore: return 0x5f;
       
   644     case Qt::Key_QuoteLeft: return 0x60;
       
   645 
       
   646     case Qt::Key_BraceLeft: return 0x7b;
       
   647     case Qt::Key_Bar: return 0x7c;
       
   648     case Qt::Key_BraceRight: return 0x7d;
       
   649     case Qt::Key_AsciiTilde: return 0x7e;
       
   650 
       
   651     case Qt::Key_Delete: return 0;
       
   652     case Qt::Key_Insert: return 0; // = 0x1006,
       
   653     case Qt::Key_Pause: return 0; // = 0x1008,
       
   654     case Qt::Key_Print: return 0; // = 0x1009,
       
   655     case Qt::Key_SysReq: return 0; // = 0x100a,
       
   656 
       
   657     case Qt::Key_Clear: return 0; // = 0x100b,
       
   658 
       
   659     case Qt::Key_Home: return 0; // = 0x1010,        // cursor movement
       
   660     case Qt::Key_End: return 0; // = 0x1011,
       
   661     case Qt::Key_Left: return 0; // = 0x1012,
       
   662     case Qt::Key_Up: return 0; // = 0x1013,
       
   663     case Qt::Key_Right: return 0; // = 0x1014,
       
   664     case Qt::Key_Down: return 0; // = 0x1015,
       
   665     case Qt::Key_PageUp: return 0; // = 0x1016,
       
   666     case Qt::Key_PageDown: return 0; // = 0x1017,
       
   667     case Qt::Key_Shift: return 0; // = 0x1020,        // modifiers
       
   668     case Qt::Key_Control: return 0; // = 0x1021,
       
   669     case Qt::Key_Meta: return 0; // = 0x1022,
       
   670     case Qt::Key_Alt: return 0; // = 0x1023,
       
   671     case Qt::Key_CapsLock: return 0; // = 0x1024,
       
   672     case Qt::Key_NumLock: return 0; // = 0x1025,
       
   673     case Qt::Key_ScrollLock: return 0; // = 0x1026,
       
   674     case Qt::Key_F1: return 0; // = 0x1030,        // function keys
       
   675     case Qt::Key_F2: return 0; // = 0x1031,
       
   676     case Qt::Key_F3: return 0; // = 0x1032,
       
   677     case Qt::Key_F4: return 0; // = 0x1033,
       
   678     case Qt::Key_F5: return 0; // = 0x1034,
       
   679     case Qt::Key_F6: return 0; // = 0x1035,
       
   680     case Qt::Key_F7: return 0; // = 0x1036,
       
   681     case Qt::Key_F8: return 0; // = 0x1037,
       
   682     case Qt::Key_F9: return 0; // = 0x1038,
       
   683     case Qt::Key_F10: return 0; // = 0x1039,
       
   684     case Qt::Key_F11: return 0; // = 0x103a,
       
   685     case Qt::Key_F12: return 0; // = 0x103b,
       
   686     case Qt::Key_F13: return 0; // = 0x103c,
       
   687     case Qt::Key_F14: return 0; // = 0x103d,
       
   688     case Qt::Key_F15: return 0; // = 0x103e,
       
   689     case Qt::Key_F16: return 0; // = 0x103f,
       
   690     case Qt::Key_F17: return 0; // = 0x1040,
       
   691     case Qt::Key_F18: return 0; // = 0x1041,
       
   692     case Qt::Key_F19: return 0; // = 0x1042,
       
   693     case Qt::Key_F20: return 0; // = 0x1043,
       
   694     case Qt::Key_F21: return 0; // = 0x1044,
       
   695     case Qt::Key_F22: return 0; // = 0x1045,
       
   696     case Qt::Key_F23: return 0; // = 0x1046,
       
   697     case Qt::Key_F24: return 0; // = 0x1047,
       
   698     case Qt::Key_F25: return 0; // = 0x1048,        // F25 .. F35 only on X11
       
   699     case Qt::Key_F26: return 0; // = 0x1049,
       
   700     case Qt::Key_F27: return 0; // = 0x104a,
       
   701     case Qt::Key_F28: return 0; // = 0x104b,
       
   702     case Qt::Key_F29: return 0; // = 0x104c,
       
   703     case Qt::Key_F30: return 0; // = 0x104d,
       
   704     case Qt::Key_F31: return 0; // = 0x104e,
       
   705     case Qt::Key_F32: return 0; // = 0x104f,
       
   706     case Qt::Key_F33: return 0; // = 0x1050,
       
   707     case Qt::Key_F34: return 0; // = 0x1051,
       
   708     case Qt::Key_F35: return 0; // = 0x1052,
       
   709     case Qt::Key_Super_L: return 0; // = 0x1053,        // extra keys
       
   710     case Qt::Key_Super_R: return 0; // = 0x1054,
       
   711     case Qt::Key_Menu: return 0; // = 0x1055,
       
   712     case Qt::Key_Hyper_L: return 0; // = 0x1056,
       
   713     case Qt::Key_Hyper_R: return 0; // = 0x1057,
       
   714     case Qt::Key_Help: return 0; // = 0x1058,
       
   715     case Qt::Key_Direction_L: return 0; // = 0x1059,
       
   716     case Qt::Key_Direction_R: return 0; // = 0x1060,
       
   717 
       
   718     // Latin 1 codes adapted from X: keysymdef.h,v 1.21 94/08/28 16:17:06
       
   719     case Qt::Key_nobreakspace: return char(0xa0);
       
   720     case Qt::Key_exclamdown: return char(0xa1);
       
   721     case Qt::Key_cent: return char(0xa2);
       
   722     case Qt::Key_sterling: return char(0xa3);
       
   723     case Qt::Key_currency: return char(0xa4);
       
   724     case Qt::Key_yen: return char(0xa5);
       
   725     case Qt::Key_brokenbar: return char(0xa6);
       
   726     case Qt::Key_section: return char(0xa7);
       
   727     case Qt::Key_diaeresis: return char(0xa8);
       
   728     case Qt::Key_copyright: return char(0xa9);
       
   729     case Qt::Key_ordfeminine: return char(0xaa);
       
   730     case Qt::Key_guillemotleft: return char(0xab); // left angle quotation mar
       
   731     case Qt::Key_notsign: return char(0xac);
       
   732     case Qt::Key_hyphen: return char(0xad);
       
   733     case Qt::Key_registered: return char(0xae);
       
   734     case Qt::Key_macron: return char(0xaf);
       
   735     case Qt::Key_degree: return char(0xb0);
       
   736     case Qt::Key_plusminus: return char(0xb1);
       
   737     case Qt::Key_twosuperior: return char(0xb2);
       
   738     case Qt::Key_threesuperior: return char(0xb3);
       
   739     case Qt::Key_acute: return char(0xb4);
       
   740     case Qt::Key_mu: return char(0xb5);
       
   741     case Qt::Key_paragraph: return char(0xb6);
       
   742     case Qt::Key_periodcentered: return char(0xb7);
       
   743     case Qt::Key_cedilla: return char(0xb8);
       
   744     case Qt::Key_onesuperior: return char(0xb9);
       
   745     case Qt::Key_masculine: return char(0xba);
       
   746     case Qt::Key_guillemotright: return char(0xbb); // right angle quotation mar
       
   747     case Qt::Key_onequarter: return char(0xbc);
       
   748     case Qt::Key_onehalf: return char(0xbd);
       
   749     case Qt::Key_threequarters: return char(0xbe);
       
   750     case Qt::Key_questiondown: return char(0xbf);
       
   751     case Qt::Key_Agrave: return char(0xc0);
       
   752     case Qt::Key_Aacute: return char(0xc1);
       
   753     case Qt::Key_Acircumflex: return char(0xc2);
       
   754     case Qt::Key_Atilde: return char(0xc3);
       
   755     case Qt::Key_Adiaeresis: return char(0xc4);
       
   756     case Qt::Key_Aring: return char(0xe5);
       
   757     case Qt::Key_AE: return char(0xe6);
       
   758     case Qt::Key_Ccedilla: return char(0xc7);
       
   759     case Qt::Key_Egrave: return char(0xc8);
       
   760     case Qt::Key_Eacute: return char(0xc9);
       
   761     case Qt::Key_Ecircumflex: return char(0xca);
       
   762     case Qt::Key_Ediaeresis: return char(0xcb);
       
   763     case Qt::Key_Igrave: return char(0xcc);
       
   764     case Qt::Key_Iacute: return char(0xcd);
       
   765     case Qt::Key_Icircumflex: return char(0xce);
       
   766     case Qt::Key_Idiaeresis: return char(0xcf);
       
   767     case Qt::Key_ETH: return char(0xd0);
       
   768     case Qt::Key_Ntilde: return char(0xd1);
       
   769     case Qt::Key_Ograve: return char(0xd2);
       
   770     case Qt::Key_Oacute: return char(0xd3);
       
   771     case Qt::Key_Ocircumflex: return char(0xd4);
       
   772     case Qt::Key_Otilde: return char(0xd5);
       
   773     case Qt::Key_Odiaeresis: return char(0xd6);
       
   774     case Qt::Key_multiply: return char(0xd7);
       
   775     case Qt::Key_Ooblique: return char(0xf8);
       
   776     case Qt::Key_Ugrave: return char(0xd9);
       
   777     case Qt::Key_Uacute: return char(0xda);
       
   778     case Qt::Key_Ucircumflex: return char(0xdb);
       
   779     case Qt::Key_Udiaeresis: return char(0xdc);
       
   780     case Qt::Key_Yacute: return char(0xdd);
       
   781     case Qt::Key_THORN: return char(0xde);
       
   782     case Qt::Key_ssharp: return char(0xdf);
       
   783     case Qt::Key_division: return char(0xf7);
       
   784     case Qt::Key_ydiaeresis: return char(0xff);
       
   785 
       
   786     // multimedia/internet keys - ignored by default - see QKeyEvent c'tor
       
   787 
       
   788     case Qt::Key_Back : return 0; // = 0x1061,
       
   789     case Qt::Key_Forward : return 0; // = 0x1062,
       
   790     case Qt::Key_Stop : return 0; // = 0x1063,
       
   791     case Qt::Key_Refresh : return 0; // = 0x1064,
       
   792 
       
   793     case Qt::Key_VolumeDown: return 0; // = 0x1070,
       
   794     case Qt::Key_VolumeMute : return 0; // = 0x1071,
       
   795     case Qt::Key_VolumeUp: return 0; // = 0x1072,
       
   796     case Qt::Key_BassBoost: return 0; // = 0x1073,
       
   797     case Qt::Key_BassUp: return 0; // = 0x1074,
       
   798     case Qt::Key_BassDown: return 0; // = 0x1075,
       
   799     case Qt::Key_TrebleUp: return 0; // = 0x1076,
       
   800     case Qt::Key_TrebleDown: return 0; // = 0x1077,
       
   801 
       
   802     case Qt::Key_MediaPlay : return 0; // = 0x1080,
       
   803     case Qt::Key_MediaStop : return 0; // = 0x1081,
       
   804     case Qt::Key_MediaPrevious : return 0; // = 0x1082,
       
   805     case Qt::Key_MediaNext : return 0; // = 0x1083,
       
   806     case Qt::Key_MediaRecord: return 0; // = 0x1084,
       
   807 
       
   808     case Qt::Key_HomePage : return 0; // = 0x1090,
       
   809     case Qt::Key_Favorites : return 0; // = 0x1091,
       
   810     case Qt::Key_Search : return 0; // = 0x1092,
       
   811     case Qt::Key_Standby: return 0; // = 0x1093,
       
   812     case Qt::Key_OpenUrl: return 0; // = 0x1094,
       
   813 
       
   814     case Qt::Key_LaunchMail : return 0; // = 0x10a0,
       
   815     case Qt::Key_LaunchMedia: return 0; // = 0x10a1,
       
   816     case Qt::Key_Launch0 : return 0; // = 0x10a2,
       
   817     case Qt::Key_Launch1 : return 0; // = 0x10a3,
       
   818     case Qt::Key_Launch2 : return 0; // = 0x10a4,
       
   819     case Qt::Key_Launch3 : return 0; // = 0x10a5,
       
   820     case Qt::Key_Launch4 : return 0; // = 0x10a6,
       
   821     case Qt::Key_Launch5 : return 0; // = 0x10a7,
       
   822     case Qt::Key_Launch6 : return 0; // = 0x10a8,
       
   823     case Qt::Key_Launch7 : return 0; // = 0x10a9,
       
   824     case Qt::Key_Launch8 : return 0; // = 0x10aa,
       
   825     case Qt::Key_Launch9 : return 0; // = 0x10ab,
       
   826     case Qt::Key_LaunchA : return 0; // = 0x10ac,
       
   827     case Qt::Key_LaunchB : return 0; // = 0x10ad,
       
   828     case Qt::Key_LaunchC : return 0; // = 0x10ae,
       
   829     case Qt::Key_LaunchD : return 0; // = 0x10af,
       
   830     case Qt::Key_LaunchE : return 0; // = 0x10b0,
       
   831     case Qt::Key_LaunchF : return 0; // = 0x10b1,
       
   832 
       
   833     default: QTEST_ASSERT(false); return 0;
       
   834     }
       
   835 }