diff options
Diffstat (limited to 'tests/auto/q3accel/tst_q3accel.cpp')
-rw-r--r-- | tests/auto/q3accel/tst_q3accel.cpp | 1053 |
1 files changed, 1053 insertions, 0 deletions
diff --git a/tests/auto/q3accel/tst_q3accel.cpp b/tests/auto/q3accel/tst_q3accel.cpp new file mode 100644 index 0000000..c2ba9dd --- /dev/null +++ b/tests/auto/q3accel/tst_q3accel.cpp @@ -0,0 +1,1053 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** Contact: Qt Software Information (qt-info@nokia.com) +** +** This file is part of the test suite of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** No Commercial Usage +** This file contains pre-release code and may not be distributed. +** You may use this file in accordance with the terms and conditions +** contained in the either Technology Preview License Agreement or the +** Beta Release License Agreement. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 2.1 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 2.1 requirements +** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html. +** +** In addition, as a special exception, Nokia gives you certain +** additional rights. These rights are described in the Nokia Qt LGPL +** Exception version 1.0, included in the file LGPL_EXCEPTION.txt in this +** package. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3.0 as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL included in the +** packaging of this file. Please review the following information to +** ensure the GNU General Public License version 3.0 requirements will be +** met: http://www.gnu.org/copyleft/gpl.html. +** +** If you are unsure which license is appropriate for your use, please +** contact the sales department at qt-sales@nokia.com. +** $QT_END_LICENSE$ +** +****************************************************************************/ + + +#include <QtTest/QtTest> +#include <qapplication.h> +#include <q3accel.h> +#include <qtextedit.h> +#include <qmainwindow.h> +#include <qstatusbar.h> +#include <qstring.h> + +class AccelForm; +QT_FORWARD_DECLARE_CLASS(QTextEdit) +QT_FORWARD_DECLARE_CLASS(QMainWindow) + +//TESTED_CLASS= +//TESTED_FILES= + +class tst_Q3Accel : public QObject +{ + Q_OBJECT +public: + tst_Q3Accel(); + virtual ~tst_Q3Accel(); + + +public slots: + void accelTrig1() { currentResult = Accel1Triggered; } + void accelTrig2() { currentResult = Accel2Triggered; } + void ambig1() { currentResult = Ambiguous; ambigResult = Accel1Triggered; } + void ambig2() { currentResult = Ambiguous; ambigResult = Accel2Triggered; } + void statusMessage( const QString& message ) { sbText = message; } + +public slots: + void initTestCase(); +private slots: + void number_data(); + void number(); + void text_data(); + void text(); + void disabledItems(); + void ambiguousItems(); + void unicodeCompare(); + void unicodeCompose(); + +protected: + static int toButtons( int key ); + void defElements(); + void sendKeyEvents( int k1, QChar c1 = 0, int k2 = 0, QChar c2 = 0, int k3 = 0, QChar c3 = 0, int k4 = 0, QChar c4 = 0 ); + void testElement(); + + enum Action { + SetupAccel, + TestAccel, + ClearAll + } currentAction; + + enum Widget { + NoWidget, + Accel1, + Accel2 + }; + + enum Result { + NoResult, + Accel1Triggered, + Accel2Triggered, + Ambiguous + } currentResult; + + QMainWindow *mainW; + Q3Accel *accel1; + Q3Accel *accel2; + QTextEdit *edit; + QString sbText; + Result ambigResult; +}; + +// copied from qkeysequence.cpp +const QString MacCtrl = QString(QChar(0x2318)); +const QString MacMeta = QString(QChar(0x2303)); +const QString MacAlt = QString(QChar(0x2325)); +const QString MacShift = QString(QChar(0x21E7)); + +tst_Q3Accel::tst_Q3Accel(): mainW( 0 ) +{ +} + +tst_Q3Accel::~tst_Q3Accel() +{ + delete mainW; +} + +void tst_Q3Accel::initTestCase() +{ + currentResult = NoResult; + mainW = new QMainWindow(0); + mainW->setObjectName("main window"); + mainW->setFixedSize( 100, 100 ); + accel1 = new Q3Accel(mainW, "test_accel1" ); + accel2 = new Q3Accel(mainW, "test_accel2" ); + edit = new QTextEdit(mainW); + edit->setObjectName("test_edit"); + connect( accel1, SIGNAL(activated(int)), this, SLOT(accelTrig1()) ); + connect( accel2, SIGNAL(activated(int)), this, SLOT(accelTrig2()) ); +#if QT_VERSION >= 0x30100 + connect( accel1, SIGNAL(activatedAmbiguously(int)), this, SLOT(ambig1()) ); + connect( accel2, SIGNAL(activatedAmbiguously(int)), this, SLOT(ambig2()) ); +#endif + mainW->setCentralWidget( edit ); + connect( mainW->statusBar(), SIGNAL(messageChanged(const QString&)), + this, SLOT(statusMessage(const QString&)) ); + qApp->setMainWidget( mainW ); + mainW->show(); +} + +int tst_Q3Accel::toButtons( int key ) +{ + int result = 0; + if ( key & Qt::SHIFT ) + result |= Qt::ShiftModifier; + if ( key & Qt::CTRL ) + result |= Qt::ControlModifier; +#if QT_VERSION >= 0x30100 + if ( key & Qt::META ) + result |= Qt::MetaModifier; +#endif + if ( key & Qt::ALT ) + result |= Qt::AltModifier; + return result; +} + +void tst_Q3Accel::defElements() +{ + QTest::addColumn<int>("theAction"); + QTest::addColumn<int>("theTestWidget"); + QTest::addColumn<QString>("theString"); + QTest::addColumn<int>("the1Key"); + QTest::addColumn<int>("the1Char"); + QTest::addColumn<int>("the2Key"); + QTest::addColumn<int>("the2Char"); + QTest::addColumn<int>("the3Key"); + QTest::addColumn<int>("the3Char"); + QTest::addColumn<int>("the4Key"); + QTest::addColumn<int>("the4Char"); + QTest::addColumn<int>("theResult"); +} + +#if QT_VERSION >= 0x30100 +void tst_Q3Accel::number() +{ + testElement(); +} +void tst_Q3Accel::text() +{ + testElement(); +} +// ------------------------------------------------------------------ +// Number Elements -------------------------------------------------- +// ------------------------------------------------------------------ +void tst_Q3Accel::number_data() +{ + defElements(); + + // Clear all + QTest::newRow( "N00 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + //=========================================== + // [Shift + key] on non-shift accels testing + //=========================================== + + /* Testing Single Sequences + Shift + Qt::Key_M on Qt::Key_M + Qt::Key_M on Qt::Key_M + Shift + Qt::Key_Plus on Qt::Key_Pluss + Qt::Key_Plus on Qt::Key_Pluss + */ + QTest::newRow( "N001 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N001:Shift + M - [M]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N001:M - [M]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + + QTest::newRow( "N001 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("") + << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N001:Shift + + [+]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + QTest::newRow( "N001:+ [+]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + + QTest::newRow( "N001 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + Shift + Qt::Key_M on Shift + Qt::Key_M + Qt::Key_M on Shift + Qt::Key_M + Shift + Qt::Key_Plus on Shift + Qt::Key_Pluss + Qt::Key_Plus on Shift + Qt::Key_Pluss + */ + QTest::newRow( "N002 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N002:Shift + M - [Shift + M]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N002:M - [Shift + M]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "N002 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_Plus) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N002:Shift + + [Shift + +]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + QTest::newRow( "N002:+ [Shift + +]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "N002 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + Shift + Qt::Key_F1 on Qt::Key_F1 + Qt::Key_F1 on Qt::Key_F1 + */ + QTest::newRow( "N003 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N003:Shift + F1 - [F1]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N003:F1 - [F1]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + + QTest::newRow( "N003 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + Shift + Qt::Key_F1 on Shift + Qt::Key_F1 + Qt::Key_F1 on Shift + Qt::Key_F1 + */ + QTest::newRow( "N004 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N004:Shift + F1 - [Shift + F1]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N004:F1 - [Shift + F1]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "N004 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + Qt::Key_BackTab on Qt::Key_Tab + Shift + Qt::Key_Tab on Qt::Key_Tab + Qt::Key_Tab on Qt::Key_Tab + */ + QTest::newRow( "N005 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N005:BackTab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_BackTab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N005:Shift + Tab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + Qt::Key_Tab << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N005:Tab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + + QTest::newRow( "N005 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + Qt::Key_BackTab on Shift + Qt::Key_Tab + Shift + Qt::Key_Tab on Shift + Qt::Key_Tab + Qt::Key_Tab on Shift + Qt::Key_Tab + */ + QTest::newRow( "N006 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N006:BackTab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_BackTab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N006:Shift + Tab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N006:Tab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "N006 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + + //=========================================== + // [Shift + key] and [key] on accels with + // and without modifiers + //=========================================== + + /* Testing Single Sequences + Qt::Key_F1 + Shift + Qt::Key_F1 + */ + QTest::newRow( "N007 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N007 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N007:F1" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N007:Shift + F1" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + + QTest::newRow( "N007 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + Qt::Key_M + Shift + Qt::Key_M + Ctrl + Qt::Key_M + Alt + Qt::Key_M + */ + QTest::newRow( "N01 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N02 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N03 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::CTRL) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N04 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("") + << int(Qt::ALT) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + + QTest::newRow( "N:Qt::Key_M" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N:Shift + Qt::Key_M" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + QTest::newRow( "N:Ctrl + Qt::Key_M" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::CTRL) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N:Alt + Qt::Key_M" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::ALT) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + + /* Testing Single Sequence Ambiguity + Qt::Key_M on accel2 + */ + QTest::newRow( "N05 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N:int(Qt::Key_M) on int(Accel2)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Ambiguous); + + /* Testing Single Specialkeys + int(Qt::Key_aring) + int(Qt::Key_Aring) + UNICODE_ACCEL + int(Qt::Key_K) + */ + /* The #ifdefs for Qt4 are there, because accelerators are always case insensitive in Qt4. + It was not wise to differentiate between ASCII (where accelerators where case insensitive) and all other + unicode chars in 3.x. + */ + QTest::newRow( "N06 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::Key_aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); +#if QT_VERSION < 0x040000 + QTest::newRow( "N07 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("") + << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); +#endif + QTest::newRow( "N08 - sA2" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::UNICODE_ACCEL) + int(Qt::Key_K) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "N:int(Qt::Key_aring)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); +#if QT_VERSION < 0x040000 + QTest::newRow( "N:int(Qt::Key_Aring)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); +#endif + QTest::newRow( "N:int(Qt::Key_aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_unknown) << 0xE5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); +#if QT_VERSION < 0x040000 + QTest::newRow( "N:int(Qt::Key_Aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_unknown) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); +#else + QTest::newRow( "N:int(Qt::Key_Aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_unknown) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); +#endif + QTest::newRow( "N:UNICODE_ACCEL + int(Qt::Key_K)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::UNICODE_ACCEL) + int(Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + + // Clear all + QTest::newRow( "N09 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Multiple Sequences + int(Qt::Key_M) + int(Qt::Key_I), int(Qt::Key_M) + Shift+int(Qt::Key_I), int(Qt::Key_M) + */ + QTest::newRow( "N10 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N11 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("") + << int(Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "N12 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "N:int(Qt::Key_M) (2)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "N:int(Qt::Key_I), int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << int(Accel2Triggered); + QTest::newRow( "N:Shift+int(Qt::Key_I), int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << int(Accel1Triggered); +} + +// ------------------------------------------------------------------ +// Text Elements ---------------------------------------------------- +// ------------------------------------------------------------------ +void tst_Q3Accel::text_data() +{ + defElements(); + // Clear all + QTest::newRow( "T00 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + //=========================================== + // [Shift + key] on non-shift accels testing + //=========================================== + + /* Testing Single Sequences + Shift + int(Qt::Key_M) on int(Qt::Key_M) + int(Qt::Key_M) on int(Qt::Key_M) + Shift + int(Qt::Key_Plus) on Qt::Key_Pluss + int(Qt::Key_Plus) on Qt::Key_Pluss + */ + QTest::newRow( "T001 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T001:Shift + M - [M]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T001:M - [M]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + + QTest::newRow( "T001 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("+") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T001:Shift + + [+]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + QTest::newRow( "T001:+ [+]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + + QTest::newRow( "T001 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + Shift + int(Qt::Key_M) on Shift + int(Qt::Key_M) + int(Qt::Key_M) on Shift + int(Qt::Key_M) + Shift + int(Qt::Key_Plus) on Shift + Qt::Key_Pluss + int(Qt::Key_Plus) on Shift + Qt::Key_Pluss + Shift + Ctrl + int(Qt::Key_Plus) on Ctrl + Qt::Key_Pluss + Ctrl + int(Qt::Key_Plus) on Ctrl + Qt::Key_Pluss + */ + QTest::newRow( "T002 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Shift+M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T002:Shift + M - [Shift + M]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T002:M - [Shift + M]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "T002 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("Shift++") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T002:Shift + + [Shift + +]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + QTest::newRow( "T002:+ [Shift + +]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "T002 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + Shift + Ctrl + int(Qt::Key_Plus) on Ctrl + int(Qt::Key_Plus) + Ctrl + int(Qt::Key_Plus) on Ctrl + int(Qt::Key_Plus) + int(Qt::Key_Plus) on Ctrl + int(Qt::Key_Plus) + */ + QTest::newRow( "T002b - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Ctrl++") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T002b:Shift + Ctrl + + [Ctrl + +]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::CTRL) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T002b:Ctrl + [Ctrl + +]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::CTRL) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T002b: + [Ctrl + +]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + /* Testing Single Sequences + Shift + int(Qt::Key_F1) on int(Qt::Key_F1) + int(Qt::Key_F1) on int(Qt::Key_F1) + */ + QTest::newRow( "T003 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("F1") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T003:Shift + F1 - [F1]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T003:F1 - [F1]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + + QTest::newRow( "T003 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + Shift + int(Qt::Key_F1) on Shift + int(Qt::Key_F1) + int(Qt::Key_F1) on Shift + int(Qt::Key_F1) + */ + QTest::newRow( "T004 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Shift+F1") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T004:Shift + F1 - [Shift + F1]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T004:F1 - [Shift + F1]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "T004 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + int(Qt::Key_BackTab) on int(Qt::Key_Tab) + Shift + int(Qt::Key_Tab) on int(Qt::Key_Tab) + int(Qt::Key_Tab) on int(Qt::Key_Tab) + */ + QTest::newRow( "T005 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Tab") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T005:BackTab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_BackTab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T005:Shift + Tab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T005:Tab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + + QTest::newRow( "N005 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + int(Qt::Key_BackTab) on Shift + int(Qt::Key_Tab) + Shift + int(Qt::Key_Tab) on Shift + int(Qt::Key_Tab) + int(Qt::Key_Tab) on Shift + int(Qt::Key_Tab) + */ + QTest::newRow( "T006 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Shift+Tab") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T006:BackTab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_BackTab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T006:Shift + Tab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T006:Tab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "T006 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + //=========================================== + // [Shift + key] and [key] on accels with + // and without modifiers + //=========================================== + + /* Testing Single Sequences + int(Qt::Key_F1) + Shift + int(Qt::Key_F1) + */ + QTest::newRow( "T007 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("F1") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T007 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("Shift+F1") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T007:F1" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T007:Shift + F1" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + + QTest::newRow( "T005 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Single Sequences + int(Qt::Key_M) + Shift + int(Qt::Key_M) + Ctrl + int(Qt::Key_M) + Alt + int(Qt::Key_M) + */ + QTest::newRow( "T01 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T02 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("Shift+M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T03 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Ctrl+M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T04 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("Alt+M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + + QTest::newRow( "T:int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T:Shift + int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + QTest::newRow( "T:Ctrl + int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::CTRL) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T:Alt + int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::ALT) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); + + /* Testing Single Sequence Ambiguity + int(Qt::Key_M) on accel2 + */ + QTest::newRow( "T05 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T:int(Qt::Key_M) on int(Accel2)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Ambiguous); + + /* Testing Single Specialkeys + int(Qt::Key_aring) + int(Qt::Key_Aring) + UNICODE_ACCEL + int(Qt::Key_K) + */ + /* see comments above on the #ifdef'ery */ + QTest::newRow( "T06 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("\x0E5") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); +#if QT_VERSION < 0x040000 + QTest::newRow( "T07 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("\x0C5") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); +#endif + QTest::newRow( "T08 - sA2" ) << int(SetupAccel) << int(Accel1) << QString("K") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "T:int(Qt::Key_aring)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); +#if QT_VERSION < 0x040000 + QTest::newRow( "T:int(Qt::Key_Aring)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_Aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); +#endif + QTest::newRow( "T:int(Qt::Key_aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_unknown) << 0xE5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); +#if QT_VERSION < 0x040000 + QTest::newRow( "T:int(Qt::Key_Aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_unknown) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered); +#else + QTest::newRow( "T:int(Qt::Key_Aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_unknown) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); +#endif + QTest::newRow( "T:UNICODE_ACCEL + int(Qt::Key_K)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::UNICODE_ACCEL) + int(Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + + // Clear all + QTest::newRow( "T09 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0; + + /* Testing Multiple Sequences + int(Qt::Key_M) + int(Qt::Key_I), int(Qt::Key_M) + Shift+int(Qt::Key_I), int(Qt::Key_M) + */ + QTest::newRow( "T10 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T11 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("I, M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + QTest::newRow( "T12 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Shift+I, M") + << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult); + + QTest::newRow( "T:int(Qt::Key_M) (2)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered); + QTest::newRow( "T:int(Qt::Key_I), int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << int(Accel2Triggered); + QTest::newRow( "T:Shift+int(Qt::Key_I), int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("") + << int(Qt::SHIFT) + int(Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << int(Accel1Triggered); +} + +// ------------------------------------------------------------------ +// Disabled Elements ------------------------------------------------ +// ------------------------------------------------------------------ +void tst_Q3Accel::disabledItems() +{ + accel1->setEnabled( TRUE ); + accel2->setEnabled( TRUE ); + + /* Testing Disabled Accel + Qt::Key_M on A1 + Shift + Qt::Key_M on A1 + Qt::Key_M on A2 (disabled) + Shift + Qt::Key_M on A2 (disabled) + */ + accel1->clear(); + accel2->clear(); + accel1->insertItem( QKeySequence("M") ); + accel1->insertItem( QKeySequence("Shift+M") ); + accel2->insertItem( QKeySequence("M") ); + accel2->insertItem( QKeySequence("Shift+M") ); + accel2->setEnabled( FALSE ); + currentResult = NoResult; + sendKeyEvents( Qt::Key_M, 'm' ); + QCOMPARE( currentResult, Accel1Triggered ); + currentResult = NoResult; + sendKeyEvents( Qt::SHIFT+Qt::Key_M, 'M' ); + QCOMPARE( currentResult, Accel1Triggered ); + accel2->setEnabled( TRUE ); //PS! + + /* Testing Disabled Accel + Qt::Key_M on A1 + Shift + Qt::Key_M on A1 (disabled) + Qt::Key_M on A2 (disabled) + Shift + Qt::Key_M on A2 + */ + accel1->clear(); + accel2->clear(); + accel1->insertItem( QKeySequence("M") ); + int i1 = accel1->insertItem( QKeySequence("Shift+M") ); + int i2 = accel2->insertItem( QKeySequence("M") ); + accel2->insertItem( QKeySequence("Shift+M") ); + accel1->setItemEnabled( i1, FALSE ); + accel2->setItemEnabled( i2, FALSE ); + currentResult = NoResult; + sendKeyEvents( Qt::Key_M, 'm' ); + QCOMPARE( currentResult, Accel1Triggered ); + currentResult = NoResult; + sendKeyEvents( Qt::SHIFT+Qt::Key_M, 'M' ); + QCOMPARE( currentResult, Accel2Triggered ); + + /* Testing Disabled Accel Items + Qt::Key_F5 on A1 + Shift + Qt::Key_F5 on A2 (disabled) + */ + accel1->clear(); + accel2->clear(); + i1 = accel1->insertItem( QKeySequence("F5") ); + i2 = accel2->insertItem( QKeySequence("Shift+F5") ); + accel1->setItemEnabled( i1, TRUE ); + accel2->setItemEnabled( i2, FALSE ); + currentResult = NoResult; + sendKeyEvents( Qt::Key_F5, 0 ); + QCOMPARE( currentResult, Accel1Triggered ); + currentResult = NoResult; + sendKeyEvents( Qt::SHIFT+Qt::Key_F5, 0 ); + QCOMPARE( currentResult, NoResult ); + + /* Testing Disabled Accel + Qt::Key_F5 on A1 + Shift + Qt::Key_F5 on A2 (disabled) + */ + accel1->clear(); + accel2->clear(); + i1 = accel1->insertItem( QKeySequence("F5") ); + i2 = accel2->insertItem( QKeySequence("Shift+F5") ); + accel1->setEnabled( TRUE ); + accel2->setEnabled( FALSE ); + currentResult = NoResult; + sendKeyEvents( Qt::Key_F5, 0 ); + QCOMPARE( currentResult, Accel1Triggered ); + currentResult = NoResult; + sendKeyEvents( Qt::SHIFT+Qt::Key_F5, 0 ); + QCOMPARE( currentResult, NoResult ); + + + + /* Testing Disabled Accel, and the corresponding statusbar feedback + Ctrl + Qt::Key_K, Ctrl + Qt::Key_L on A1 + Ctrl + Qt::Key_K, Ctrl + Qt::Key_M on A2 (disabled) + */ + accel1->clear(); + accel2->clear(); + i1 = accel1->insertItem( QKeySequence("Ctrl+K, Ctrl+L") ); + i2 = accel2->insertItem( QKeySequence("Ctrl+K, Ctrl+M") ); + accel1->setItemEnabled( i1, TRUE ); + accel2->setItemEnabled( i2, FALSE ); + currentResult = NoResult; + sendKeyEvents( Qt::CTRL+Qt::Key_K, 0 ); + sendKeyEvents( Qt::CTRL+Qt::Key_Q, 0 ); + QCOMPARE( currentResult, NoResult ); +#ifndef Q_WS_MAC + QCOMPARE( sbText, QString("Ctrl+K, Ctrl+Q not defined") ); +#else + QCOMPARE(sbText, MacCtrl + "K, " + MacCtrl + "Q not defined"); +#endif + currentResult = NoResult; + sendKeyEvents( Qt::CTRL+Qt::Key_K, 0 ); + sendKeyEvents( Qt::CTRL+Qt::Key_M, 0 ); + QCOMPARE( currentResult, NoResult ); + QCOMPARE(sbText, QString()); + currentResult = NoResult; + sendKeyEvents( Qt::CTRL+Qt::Key_K, 0 ); + sendKeyEvents( Qt::CTRL+Qt::Key_L, 0 ); + QCOMPARE( currentResult, Accel1Triggered ); + QCOMPARE(sbText, QString()); + + accel1->setEnabled( TRUE ); + accel2->setEnabled( TRUE ); +} + +// ------------------------------------------------------------------ +// Ambiguous Elements ----------------------------------------------- +// ------------------------------------------------------------------ +void tst_Q3Accel::ambiguousItems() +{ + accel1->setEnabled( TRUE ); + accel2->setEnabled( TRUE ); + + /* Testing Disabled Accel + Qt::Key_M on A1 + Qt::Key_M on A2 + */ + accel1->clear(); + accel2->clear(); + accel1->insertItem( QKeySequence("M") ); + accel2->insertItem( QKeySequence("M") ); + currentResult = NoResult; + sendKeyEvents( Qt::Key_M, 'm' ); + QCOMPARE( currentResult, Ambiguous ); + QCOMPARE( ambigResult, Accel1Triggered ); + currentResult = NoResult; + sendKeyEvents( Qt::Key_M, 'm' ); + QCOMPARE( currentResult, Ambiguous ); + QCOMPARE( ambigResult, Accel2Triggered ); + currentResult = NoResult; + sendKeyEvents( Qt::Key_M, 'm' ); + QCOMPARE( currentResult, Ambiguous ); + QCOMPARE( ambigResult, Accel1Triggered ); + + accel1->setEnabled( TRUE ); + accel2->setEnabled( TRUE ); +} + +// ------------------------------------------------------------------ +// Unicode and non-unicode Elements --------------------------------- +// ------------------------------------------------------------------ +void tst_Q3Accel::unicodeCompare() +{ + accel1->setEnabled( TRUE ); + accel2->setEnabled( TRUE ); + + QKeySequence ks1("Ctrl+M"); + QKeySequence ks2( Qt::CTRL+Qt::Key_M ); + accel1->clear(); + accel2->clear(); + accel1->insertItem( ks1 ); + accel2->insertItem( ks2 ); + currentResult = NoResult; + sendKeyEvents( Qt::CTRL+Qt::Key_M, 0 ); + QCOMPARE( currentResult, Ambiguous ); + // They _are_ ambiguous, so the QKeySequence operator== + // should indicate the same + QVERIFY( ks1 == ks2 ); + QVERIFY( !(ks1 != ks2) ); +} + +// ------------------------------------------------------------------ +// Unicode composed keys using keypad, and number accels ------------ +// ------------------------------------------------------------------ +void tst_Q3Accel::unicodeCompose() +{ + accel1->setEnabled( TRUE ); + accel2->setEnabled( TRUE ); + +#if 0 +//#if QT_VERSION >= 0x30200 + accel1->clear(); + accel2->clear(); + accel1->insertItem( META+Qt::Key_9 ); + edit->setFocus(); + currentResult = NoResult; + + // Turn on unicode composing, and + // compose a smileyface. ( 9786 = 0x263A ) + QApplication::setMetaComposedUnicode(); + QChar ch1( '9' ); + QChar ch2( '7' ); + QChar ch3( '8' ); + QChar ch4( '6' ); + QString s1( ch1 ); + QString s2( ch2 ); + QString s3( ch3 ); + QString s4( ch4 ); + QKeyEvent k1a( QEvent::AccelOverride, Qt::Key_9, ch1.row() ? 0 : ch1.cell(), Qt::MetaModifier + Qt::KeypadModifier, s1 ); + QKeyEvent k1p( QEvent::KeyPress, Qt::Key_9, ch1.row() ? 0 : ch1.cell(), Qt::MetaModifier + Qt::KeypadModifier, s1 ); + QKeyEvent k1r( QEvent::KeyRelease, Qt::Key_9, ch1.row() ? 0 : ch1.cell(), Qt::MetaModifier + Qt::KeypadModifier, s1 ); + QKeyEvent k2a( QEvent::AccelOverride, Qt::Key_7, ch2.row() ? 0 : ch2.cell(), Qt::MetaModifier + Qt::KeypadModifier, s2 ); + QKeyEvent k2p( QEvent::KeyPress, Qt::Key_7, ch2.row() ? 0 : ch2.cell(), Qt::MetaModifier + Qt::KeypadModifier, s2 ); + QKeyEvent k2r( QEvent::KeyRelease, Qt::Key_7, ch2.row() ? 0 : ch2.cell(), Qt::MetaModifier + Qt::KeypadModifier, s2 ); + QKeyEvent k3a( QEvent::AccelOverride, Qt::Key_8, ch3.row() ? 0 : ch3.cell(), Qt::MetaModifier + Qt::KeypadModifier, s3 ); + QKeyEvent k3p( QEvent::KeyPress, Qt::Key_8, ch3.row() ? 0 : ch3.cell(), Qt::MetaModifier + Qt::KeypadModifier, s3 ); + QKeyEvent k3r( QEvent::KeyRelease, Qt::Key_8, ch3.row() ? 0 : ch3.cell(), Qt::MetaModifier + Qt::KeypadModifier, s3 ); + QKeyEvent k4a( QEvent::AccelOverride, Qt::Key_6, ch4.row() ? 0 : ch4.cell(), Qt::MetaModifier + Qt::KeypadModifier, s4 ); + QKeyEvent k4p( QEvent::KeyPress, Qt::Key_6, ch4.row() ? 0 : ch4.cell(), Qt::MetaModifier + Qt::KeypadModifier, s4 ); + QKeyEvent k4r( QEvent::KeyRelease, Qt::Key_6, ch4.row() ? 0 : ch4.cell(), Qt::MetaModifier + Qt::KeypadModifier, s4 ); + QKeyEvent k5r( QEvent::KeyRelease, Qt::Key_Meta, 0, 0, "" ); + QApplication::sendEvent( edit, &k1a ); + QApplication::sendEvent( edit, &k1p ); + QApplication::sendEvent( edit, &k1r ); + QCOMPARE( currentResult, NoResult ); + + QApplication::sendEvent( edit, &k2a ); + QApplication::sendEvent( edit, &k2p ); + QApplication::sendEvent( edit, &k2r ); + QCOMPARE( currentResult, NoResult ); + + QApplication::sendEvent( edit, &k3a ); + QApplication::sendEvent( edit, &k3p ); + QApplication::sendEvent( edit, &k3r ); + QCOMPARE( currentResult, NoResult ); + + QApplication::sendEvent( edit, &k4a ); + QApplication::sendEvent( edit, &k4p ); + QApplication::sendEvent( edit, &k4r ); + QCOMPARE( currentResult, NoResult ); + + QApplication::sendEvent( edit, &k5r ); + // Unicode character is fully composed, and + // shouldn't have triggered any accels + QCOMPARE( currentResult, NoResult ); + + // Verify that the unicode character indeed + // is composed + QVERIFY( edit->text().length() == 1 ); + QCOMPARE( (int)edit->text()[0].unicode(), 9786 ); + + sendKeyEvents( META+Qt::Key_9, 0 ); + QCOMPARE( currentResult, Accel1Triggered ); +#else + QSKIP( "Unicode composing non-existant in Qt 3.y.z", SkipAll); +#endif +} + +// ------------------------------------------------------------------ +// Element Testing ------------------------------------------------- +// ------------------------------------------------------------------ +void tst_Q3Accel::testElement() +{ +#if 0 + currentResult = NoResult; + QFETCH( int, theAction ); + QFETCH( int, theTestWidget ); + QFETCH( QString, theString ); + QFETCH( int, the1Key ); + QFETCH( int, the1Char ); + QFETCH( int, the2Key ); + QFETCH( int, the2Char ); + QFETCH( int, the3Key ); + QFETCH( int, the3Char ); + QFETCH( int, the4Key ); + QFETCH( int, the4Char ); + QFETCH( int, theResult ); + + Q3Accel *ac = 0; + switch( theTestWidget ) { + case Accel1: + ac = accel1; + break; + case Accel2: + ac = accel2; + break; + case NoWidget: + default: + ac = 0; + } + + if ( theAction == ClearAll ) { + // Clear all current accelerators + accel1->clear(); + accel2->clear(); + QCOMPARE( TRUE, TRUE ); + } else if ( theAction == SetupAccel ) { + // Set up accelerator for next test + QKeySequence ks; + if ( QString(theString).isEmpty() ) { + ks = QKeySequence( the1Key, the2Key, the3Key, the4Key ); + } else { + ks = QKeySequence( theString ); + } + ac->insertItem( ks ); + QCOMPARE( TRUE, TRUE ); + } else { + // Send keyevents + sendKeyEvents( the1Key, the1Char, + the2Key, the2Char, + the3Key, the3Char, + the4Key, the4Char ); + // Verify the result + QCOMPARE( currentResult, theResult ); + } +#endif +} + +void tst_Q3Accel::sendKeyEvents( int k1, QChar c1, int k2, QChar c2, int k3, QChar c3, int k4, QChar c4 ) +{ + int b1 = toButtons( k1 ); + int b2 = toButtons( k2 ); + int b3 = toButtons( k3 ); + int b4 = toButtons( k4 ); + k1 &= ~Qt::MODIFIER_MASK; + k2 &= ~Qt::MODIFIER_MASK; + k3 &= ~Qt::MODIFIER_MASK; + k4 &= ~Qt::MODIFIER_MASK; +#if QT_VERSION < 0x040000 + QKeyEvent ke( QEvent::Accel, k1, k1, b1, QString(c1) ); +#else + QKeyEvent ke( QEvent::Accel, k1, (Qt::KeyboardModifiers)b1, QString(c1) ); +#endif + QApplication::sendEvent( mainW, &ke ); + if ( k2 ) { + QKeyEvent ke( QEvent::Accel, k2, k2, b2, QString(c2) ); + QApplication::sendEvent( mainW, &ke ); + } + if ( k3 ) { + QKeyEvent ke( QEvent::Accel, k3, k3, b3, QString(c3) ); + QApplication::sendEvent( mainW, &ke ); + } + if ( k4 ) { + QKeyEvent ke( QEvent::Accel, k4, k4, b4, QString(c4) ); + QApplication::sendEvent( mainW, &ke ); + } +} + +// ---------------------------------------------------------------------------- +// ---------------------------------------------------------------------------- + +#else // For Qt < 3.1 +void tst_Q3Accel::number_data() +{ + QTest::addColumn<int>("bogus"); + QTest::newRow( "b01" ) << 0; +} + +void tst_Q3Accel::number() +{ + QSKIP( "Accel test for Qt < 3.1 not implemented", SkipAll); +} + +void tst_Q3Accel::text_data() +{ + QTest::addColumn<int>("bogus"); + QTest::newRow( "b02" ) << 0; +} + +void tst_Q3Accel::text() +{ + QSKIP( "Accel test for Qt < 3.1 not implemented", SkipAll); +} +void tst_Q3Accel::disabledItems() +{ + QSKIP( "Accel test for Qt < 3.1 not implemented", SkipAll); +} +void tst_Q3Accel::ambiguousItems() +{ + QSKIP( "Amibguous signals non-existant in Qt < 3.1", SkipAll); +} +void tst_Q3Accel::unicodeCompare() +{ + QSKIP( "Accel test for Qt < 3.1 not implemented", SkipAll); +} +void tst_Q3Accel::unicodeCompose() +{ + QSKIP( "Unicode composing non-existant in Qt < 3.1", SkipAll); +} +#endif // QT_VERSION >= 0x30100 + +QTEST_MAIN(tst_Q3Accel) +#include "tst_q3accel.moc" |