1
/****************************************************************************
2
**
3
** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4
** All rights reserved.
5
** Contact: Nokia Corporation (qt-info@nokia.com)
6
**
7
** This file is part of the test suite of the Qt Toolkit.
8
**
9
** $QT_BEGIN_LICENSE:LGPL$
10
** GNU Lesser General Public License Usage
11
** This file may be used under the terms of the GNU Lesser General Public
12
** License version 2.1 as published by the Free Software Foundation and
13
** appearing in the file LICENSE.LGPL included in the packaging of this
14
** file. Please review the following information to ensure the GNU Lesser
15
** General Public License version 2.1 requirements will be met:
16
** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
17
**
18
** In addition, as a special exception, Nokia gives you certain additional
19
** rights. These rights are described in the Nokia Qt LGPL Exception
20
** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
21
**
22
** GNU General Public License Usage
23
** Alternatively, this file may be used under the terms of the GNU General
24
** Public License version 3.0 as published by the Free Software Foundation
25
** and appearing in the file LICENSE.GPL included in the packaging of this
26
** file. Please review the following information to ensure the GNU General
27
** Public License version 3.0 requirements will be met:
28
** http://www.gnu.org/copyleft/gpl.html.
29
**
30
** Other Usage
31
** Alternatively, this file may be used in accordance with the terms and
32
** conditions contained in a signed written agreement between you and Nokia.
33
**
34
**
35
**
36
**
37
**
38
** $QT_END_LICENSE$
39
**
40
****************************************************************************/
41
42
43
#include <QtTest/QtTest>
44
#include <qapplication.h>
45
#include <q3accel.h>
46
#include <qtextedit.h>
47
#include <qmainwindow.h>
48
#include <qstatusbar.h>
49
#include <qstring.h>
50
51
class AccelForm;
52
QT_FORWARD_DECLARE_CLASS(QTextEdit)
53
QT_FORWARD_DECLARE_CLASS(QMainWindow)
54
55
//TESTED_CLASS=
56
//TESTED_FILES=
57
58
class tst_Q3Accel : public QObject
59
{
60
    Q_OBJECT
61
public:
62
    tst_Q3Accel();
63
    virtual ~tst_Q3Accel();
64
65
66
public slots:
67
    void accelTrig1() { currentResult = Accel1Triggered; }
68
    void accelTrig2() { currentResult = Accel2Triggered; }
69
    void ambig1() { currentResult = Ambiguous; ambigResult = Accel1Triggered; }
70
    void ambig2() { currentResult = Ambiguous; ambigResult = Accel2Triggered; }
71
    void statusMessage( const QString& message ) { sbText = message; }
72
73
public slots:
74
    void initTestCase();
75
private slots:
76
    void number_data();
77
    void number();
78
    void text_data();
79
    void text();
80
    void disabledItems();
81
    void ambiguousItems();
82
    void unicodeCompare();
83
    void unicodeCompose();
84
85
protected:
86
    static int toButtons( int key );
87
    void defElements();
88
    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 );
89
    void testElement();
90
91
    enum Action {
92
        SetupAccel,
93
        TestAccel,
94
        ClearAll
95
    } currentAction;
96
97
    enum Widget {
98
        NoWidget,
99
        Accel1,
100
        Accel2
101
    };
102
103
    enum Result {
104
        NoResult,
105
        Accel1Triggered,
106
        Accel2Triggered,
107
        Ambiguous
108
    } currentResult;
109
110
    QMainWindow *mainW;
111
    Q3Accel *accel1;
112
    Q3Accel *accel2;
113
    QTextEdit *edit;
114
    QString sbText;
115
    Result ambigResult;
116
};
117
118
// copied from qkeysequence.cpp
119
const QString MacCtrl = QString(QChar(0x2318));
120
const QString MacMeta = QString(QChar(0x2303));
121
const QString MacAlt = QString(QChar(0x2325));
122
const QString MacShift = QString(QChar(0x21E7));
123
124
tst_Q3Accel::tst_Q3Accel(): mainW( 0 )
125
{
126
}
127
128
tst_Q3Accel::~tst_Q3Accel()
129
{
130
    delete mainW;
131
}
132
133
void tst_Q3Accel::initTestCase()
134
{
135
    currentResult = NoResult;
136
    mainW = new QMainWindow(0);
137
    mainW->setObjectName("main window");
138
    mainW->setFixedSize( 100, 100 );
139
    accel1 = new Q3Accel(mainW, "test_accel1" );
140
    accel2 = new Q3Accel(mainW, "test_accel2" );
141
    edit   = new QTextEdit(mainW);
142
    edit->setObjectName("test_edit");
143
    connect( accel1, SIGNAL(activated(int)), this, SLOT(accelTrig1()) );
144
    connect( accel2, SIGNAL(activated(int)), this, SLOT(accelTrig2()) );
145
    connect( accel1, SIGNAL(activatedAmbiguously(int)), this, SLOT(ambig1()) );
146
    connect( accel2, SIGNAL(activatedAmbiguously(int)), this, SLOT(ambig2()) );
147
    mainW->setCentralWidget( edit );
148
    connect( mainW->statusBar(), SIGNAL(messageChanged(const QString&)),
149
             this, SLOT(statusMessage(const QString&)) );
150
    qApp->setMainWidget( mainW );
151
    mainW->show();
152
}
153
154
int tst_Q3Accel::toButtons( int key )
155
{
156
    int result = 0;
157
    if ( key & Qt::SHIFT )
158
        result |= Qt::ShiftModifier;
159
    if ( key & Qt::CTRL )
160
        result |= Qt::ControlModifier;
161
    if ( key & Qt::META )
162
        result |= Qt::MetaModifier;
163
    if ( key & Qt::ALT )
164
        result |= Qt::AltModifier;
165
    return result;
166
}
167
168
void tst_Q3Accel::defElements()
169
{
170
    QTest::addColumn<int>("theAction");
171
    QTest::addColumn<int>("theTestWidget");
172
    QTest::addColumn<QString>("theString");
173
    QTest::addColumn<int>("the1Key");
174
    QTest::addColumn<int>("the1Char");
175
    QTest::addColumn<int>("the2Key");
176
    QTest::addColumn<int>("the2Char");
177
    QTest::addColumn<int>("the3Key");
178
    QTest::addColumn<int>("the3Char");
179
    QTest::addColumn<int>("the4Key");
180
    QTest::addColumn<int>("the4Char");
181
    QTest::addColumn<int>("theResult");
182
}
183
184
void tst_Q3Accel::number()
185
{
186
    testElement();
187
}
188
void tst_Q3Accel::text()
189
{
190
    testElement();
191
}
192
// ------------------------------------------------------------------
193
// Number Elements --------------------------------------------------
194
// ------------------------------------------------------------------
195
void tst_Q3Accel::number_data()
196
{
197
    defElements();
198
199
    // Clear all
200
    QTest::newRow( "N00 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
201
202
    //===========================================
203
    // [Shift + key] on non-shift accels testing
204
    //===========================================
205
206
    /* Testing Single Sequences
207
       Shift + Qt::Key_M    on  Qt::Key_M
208
               Qt::Key_M    on  Qt::Key_M
209
       Shift + Qt::Key_Plus on  Qt::Key_Pluss
210
               Qt::Key_Plus on  Qt::Key_Pluss
211
    */
212
    QTest::newRow( "N001 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
213
        << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
214
    QTest::newRow( "N001:Shift + M - [M]" ) << int(TestAccel) << int(NoWidget) << QString("")
215
        << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
216
    QTest::newRow( "N001:M - [M]" ) << int(TestAccel) << int(NoWidget) << QString("")
217
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
218
219
    QTest::newRow( "N001 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("")
220
        << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
221
    QTest::newRow( "N001:Shift + + [+]" ) << int(TestAccel) << int(NoWidget) << QString("")
222
        << int(Qt::SHIFT) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
223
    QTest::newRow( "N001:+ [+]" ) << int(TestAccel) << int(NoWidget) << QString("")
224
        << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
225
226
    QTest::newRow( "N001 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
227
228
    /* Testing Single Sequences
229
       Shift + Qt::Key_M    on  Shift + Qt::Key_M
230
               Qt::Key_M    on  Shift + Qt::Key_M
231
       Shift + Qt::Key_Plus on  Shift + Qt::Key_Pluss
232
               Qt::Key_Plus on  Shift + Qt::Key_Pluss
233
    */
234
    QTest::newRow( "N002 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
235
        << int(Qt::SHIFT) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
236
    QTest::newRow( "N002:Shift + M - [Shift + M]" ) << int(TestAccel) << int(NoWidget) << QString("")
237
        << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
238
    QTest::newRow( "N002:M - [Shift + M]" ) << int(TestAccel) << int(NoWidget) << QString("")
239
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
240
241
    QTest::newRow( "N002 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("")
242
        << int(Qt::SHIFT) + int(Qt::Key_Plus) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
243
    QTest::newRow( "N002:Shift + + [Shift + +]" ) << int(TestAccel) << int(NoWidget) << QString("")
244
        << int(Qt::SHIFT) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
245
    QTest::newRow( "N002:+ [Shift + +]" ) << int(TestAccel) << int(NoWidget) << QString("")
246
        << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
247
248
    QTest::newRow( "N002 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
249
250
    /* Testing Single Sequences
251
       Shift + Qt::Key_F1   on  Qt::Key_F1
252
               Qt::Key_F1   on  Qt::Key_F1
253
    */
254
    QTest::newRow( "N003 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
255
        << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
256
    QTest::newRow( "N003:Shift + F1 - [F1]" ) << int(TestAccel) << int(NoWidget) << QString("")
257
        << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
258
    QTest::newRow( "N003:F1 - [F1]" ) << int(TestAccel) << int(NoWidget) << QString("")
259
        << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
260
261
    QTest::newRow( "N003 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
262
263
    /* Testing Single Sequences
264
       Shift + Qt::Key_F1   on  Shift + Qt::Key_F1
265
               Qt::Key_F1   on  Shift + Qt::Key_F1
266
    */
267
    QTest::newRow( "N004 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
268
        << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
269
    QTest::newRow( "N004:Shift + F1 - [Shift + F1]" ) << int(TestAccel) << int(NoWidget) << QString("")
270
        << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
271
    QTest::newRow( "N004:F1 - [Shift + F1]" ) << int(TestAccel) << int(NoWidget) << QString("")
272
        << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
273
274
    QTest::newRow( "N004 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
275
276
    /* Testing Single Sequences
277
               Qt::Key_BackTab  on  Qt::Key_Tab
278
       Shift + Qt::Key_Tab      on  Qt::Key_Tab
279
               Qt::Key_Tab      on  Qt::Key_Tab
280
    */
281
    QTest::newRow( "N005 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
282
        << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
283
    QTest::newRow( "N005:BackTab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
284
        << int(Qt::Key_BackTab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
285
    QTest::newRow( "N005:Shift + Tab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
286
        << int(Qt::SHIFT) + Qt::Key_Tab << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
287
    QTest::newRow( "N005:Tab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
288
        << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
289
290
    QTest::newRow( "N005 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
291
292
    /* Testing Single Sequences
293
               Qt::Key_BackTab  on  Shift + Qt::Key_Tab
294
       Shift + Qt::Key_Tab      on  Shift + Qt::Key_Tab
295
               Qt::Key_Tab      on  Shift + Qt::Key_Tab
296
    */
297
    QTest::newRow( "N006 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
298
        << int(Qt::SHIFT) + int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
299
    QTest::newRow( "N006:BackTab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
300
        << int(Qt::SHIFT) + int(Qt::Key_BackTab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
301
    QTest::newRow( "N006:Shift + Tab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
302
        << int(Qt::SHIFT) + int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
303
    QTest::newRow( "N006:Tab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
304
        << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
305
306
    QTest::newRow( "N006 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
307
308
309
    //===========================================
310
    // [Shift + key] and [key] on accels with
311
    // and without modifiers
312
    //===========================================
313
314
    /* Testing Single Sequences
315
       Qt::Key_F1
316
       Shift + Qt::Key_F1
317
    */
318
    QTest::newRow( "N007 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
319
        << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
320
    QTest::newRow( "N007 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("")
321
        << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
322
    QTest::newRow( "N007:F1" ) << int(TestAccel) << int(NoWidget) << QString("")
323
        << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
324
    QTest::newRow( "N007:Shift + F1" ) << int(TestAccel) << int(NoWidget) << QString("")
325
        << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
326
327
    QTest::newRow( "N007 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
328
329
    /* Testing Single Sequences
330
       Qt::Key_M
331
       Shift + Qt::Key_M
332
       Ctrl  + Qt::Key_M
333
       Alt   + Qt::Key_M
334
    */
335
    QTest::newRow( "N01 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
336
        << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
337
    QTest::newRow( "N02 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("")
338
        << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
339
    QTest::newRow( "N03 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
340
        << int(Qt::CTRL) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
341
    QTest::newRow( "N04 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("")
342
        << int(Qt::ALT) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
343
344
345
    QTest::newRow( "N:Qt::Key_M" ) << int(TestAccel) << int(NoWidget) << QString("")
346
        << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
347
    QTest::newRow( "N:Shift + Qt::Key_M" ) << int(TestAccel) << int(NoWidget) << QString("")
348
        << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
349
    QTest::newRow( "N:Ctrl + Qt::Key_M" ) << int(TestAccel) << int(NoWidget) << QString("")
350
        << int(Qt::CTRL) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
351
    QTest::newRow( "N:Alt + Qt::Key_M" ) << int(TestAccel) << int(NoWidget) << QString("")
352
        << int(Qt::ALT) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
353
354
    /* Testing Single Sequence Ambiguity
355
       Qt::Key_M on accel2
356
    */
357
    QTest::newRow( "N05 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("")
358
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
359
    QTest::newRow( "N:int(Qt::Key_M) on int(Accel2)" ) << int(TestAccel) << int(NoWidget) << QString("")
360
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Ambiguous);
361
362
    /* Testing Single Specialkeys
363
       int(Qt::Key_aring)
364
       int(Qt::Key_Aring)
365
       UNICODE_ACCEL + int(Qt::Key_K)
366
    */
367
    QTest::newRow( "N06 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
368
        << int(Qt::Key_aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
369
    QTest::newRow( "N08 - sA2" ) << int(SetupAccel) << int(Accel1) << QString("")
370
        << int(Qt::UNICODE_ACCEL) + int(Qt::Key_K) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
371
372
    QTest::newRow( "N:int(Qt::Key_aring)" ) << int(TestAccel) << int(NoWidget) << QString("")
373
        << int(Qt::Key_aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
374
    QTest::newRow( "N:int(Qt::Key_aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("")
375
        << int(Qt::Key_unknown) << 0xE5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
376
    QTest::newRow( "N:int(Qt::Key_Aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("")
377
        << int(Qt::Key_unknown) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
378
    QTest::newRow( "N:UNICODE_ACCEL + int(Qt::Key_K)" ) << int(TestAccel) << int(NoWidget) << QString("")
379
        << int(Qt::UNICODE_ACCEL) + int(Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
380
381
    // Clear all
382
    QTest::newRow( "N09 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
383
384
    /* Testing Multiple Sequences
385
       int(Qt::Key_M)
386
       int(Qt::Key_I), int(Qt::Key_M)
387
       Shift+int(Qt::Key_I), int(Qt::Key_M)
388
    */
389
    QTest::newRow( "N10 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
390
        << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
391
    QTest::newRow( "N11 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("")
392
        << int(Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << int(NoResult);
393
    QTest::newRow( "N12 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("")
394
        << int(Qt::SHIFT) + int(Qt::Key_I) << 0 << int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << int(NoResult);
395
396
    QTest::newRow( "N:int(Qt::Key_M) (2)" ) << int(TestAccel) << int(NoWidget) << QString("")
397
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
398
    QTest::newRow( "N:int(Qt::Key_I), int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("")
399
        << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << int(Accel2Triggered);
400
    QTest::newRow( "N:Shift+int(Qt::Key_I), int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("")
401
        << int(Qt::SHIFT) + int(Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << int(Accel1Triggered);
402
}
403
404
// ------------------------------------------------------------------
405
// Text Elements ----------------------------------------------------
406
// ------------------------------------------------------------------
407
void tst_Q3Accel::text_data()
408
{
409
    defElements();
410
    // Clear all
411
    QTest::newRow( "T00 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
412
413
    //===========================================
414
    // [Shift + key] on non-shift accels testing
415
    //===========================================
416
417
    /* Testing Single Sequences
418
       Shift + int(Qt::Key_M)    on  int(Qt::Key_M)
419
               int(Qt::Key_M)    on  int(Qt::Key_M)
420
       Shift + int(Qt::Key_Plus) on  Qt::Key_Pluss
421
               int(Qt::Key_Plus) on  Qt::Key_Pluss
422
    */
423
    QTest::newRow( "T001 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("M")
424
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
425
    QTest::newRow( "T001:Shift + M - [M]" ) << int(TestAccel) << int(NoWidget) << QString("")
426
        << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
427
    QTest::newRow( "T001:M - [M]" ) << int(TestAccel) << int(NoWidget) << QString("")
428
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
429
430
    QTest::newRow( "T001 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("+")
431
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
432
    QTest::newRow( "T001:Shift + + [+]" ) << int(TestAccel) << int(NoWidget) << QString("")
433
        << int(Qt::SHIFT) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
434
    QTest::newRow( "T001:+ [+]" ) << int(TestAccel) << int(NoWidget) << QString("")
435
        << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
436
437
    QTest::newRow( "T001 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
438
439
    /* Testing Single Sequences
440
       Shift + int(Qt::Key_M)    on  Shift + int(Qt::Key_M)
441
               int(Qt::Key_M)    on  Shift + int(Qt::Key_M)
442
       Shift + int(Qt::Key_Plus) on  Shift + Qt::Key_Pluss
443
               int(Qt::Key_Plus) on  Shift + Qt::Key_Pluss
444
       Shift + Ctrl + int(Qt::Key_Plus) on  Ctrl + Qt::Key_Pluss
445
               Ctrl + int(Qt::Key_Plus) on  Ctrl + Qt::Key_Pluss
446
    */
447
    QTest::newRow( "T002 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Shift+M")
448
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
449
    QTest::newRow( "T002:Shift + M - [Shift + M]" ) << int(TestAccel) << int(NoWidget) << QString("")
450
        << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
451
    QTest::newRow( "T002:M - [Shift + M]" ) << int(TestAccel) << int(NoWidget) << QString("")
452
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
453
454
    QTest::newRow( "T002 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("Shift++")
455
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
456
    QTest::newRow( "T002:Shift + + [Shift + +]" ) << int(TestAccel) << int(NoWidget) << QString("")
457
        << int(Qt::SHIFT) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
458
    QTest::newRow( "T002:+ [Shift + +]" ) << int(TestAccel) << int(NoWidget) << QString("")
459
        << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
460
461
    QTest::newRow( "T002 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
462
463
    /* Testing Single Sequences
464
       Shift + Ctrl + int(Qt::Key_Plus) on  Ctrl + int(Qt::Key_Plus)
465
               Ctrl + int(Qt::Key_Plus) on  Ctrl + int(Qt::Key_Plus)
466
                      int(Qt::Key_Plus) on  Ctrl + int(Qt::Key_Plus)
467
    */
468
    QTest::newRow( "T002b - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Ctrl++")
469
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
470
    QTest::newRow( "T002b:Shift + Ctrl + + [Ctrl + +]" ) << int(TestAccel) << int(NoWidget) << QString("")
471
        << int(Qt::SHIFT) + int(Qt::CTRL) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
472
    QTest::newRow( "T002b:Ctrl + [Ctrl + +]" ) << int(TestAccel) << int(NoWidget) << QString("")
473
        << int(Qt::CTRL) + int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
474
    QTest::newRow( "T002b: + [Ctrl + +]" ) << int(TestAccel) << int(NoWidget) << QString("")
475
        << int(Qt::Key_Plus) << int('+') << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
476
477
    /* Testing Single Sequences
478
       Shift + int(Qt::Key_F1)   on  int(Qt::Key_F1)
479
               int(Qt::Key_F1)   on  int(Qt::Key_F1)
480
    */
481
    QTest::newRow( "T003 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("F1")
482
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
483
    QTest::newRow( "T003:Shift + F1 - [F1]" ) << int(TestAccel) << int(NoWidget) << QString("")
484
        << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
485
    QTest::newRow( "T003:F1 - [F1]" ) << int(TestAccel) << int(NoWidget) << QString("")
486
        << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
487
488
    QTest::newRow( "T003 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
489
490
    /* Testing Single Sequences
491
       Shift + int(Qt::Key_F1)   on  Shift + int(Qt::Key_F1)
492
               int(Qt::Key_F1)   on  Shift + int(Qt::Key_F1)
493
    */
494
    QTest::newRow( "T004 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Shift+F1")
495
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
496
    QTest::newRow( "T004:Shift + F1 - [Shift + F1]" ) << int(TestAccel) << int(NoWidget) << QString("")
497
        << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
498
    QTest::newRow( "T004:F1 - [Shift + F1]" ) << int(TestAccel) << int(NoWidget) << QString("")
499
        << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
500
501
    QTest::newRow( "T004 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
502
503
    /* Testing Single Sequences
504
               int(Qt::Key_BackTab)  on  int(Qt::Key_Tab)
505
       Shift + int(Qt::Key_Tab)      on  int(Qt::Key_Tab)
506
               int(Qt::Key_Tab)      on  int(Qt::Key_Tab)
507
    */
508
    QTest::newRow( "T005 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Tab")
509
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
510
    QTest::newRow( "T005:BackTab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
511
        << int(Qt::Key_BackTab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
512
    QTest::newRow( "T005:Shift + Tab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
513
        << int(Qt::SHIFT) + int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
514
    QTest::newRow( "T005:Tab - [Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
515
        << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
516
517
    QTest::newRow( "N005 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
518
519
    /* Testing Single Sequences
520
               int(Qt::Key_BackTab)  on  Shift + int(Qt::Key_Tab)
521
       Shift + int(Qt::Key_Tab)      on  Shift + int(Qt::Key_Tab)
522
               int(Qt::Key_Tab)      on  Shift + int(Qt::Key_Tab)
523
    */
524
    QTest::newRow( "T006 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Shift+Tab")
525
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
526
    QTest::newRow( "T006:BackTab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
527
        << int(Qt::SHIFT) + int(Qt::Key_BackTab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
528
    QTest::newRow( "T006:Shift + Tab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
529
        << int(Qt::SHIFT) + int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
530
    QTest::newRow( "T006:Tab - [Shift + Tab]" ) << int(TestAccel) << int(NoWidget) << QString("")
531
        << int(Qt::Key_Tab) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
532
533
    QTest::newRow( "T006 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
534
535
    //===========================================
536
    // [Shift + key] and [key] on accels with
537
    // and without modifiers
538
    //===========================================
539
540
    /* Testing Single Sequences
541
       int(Qt::Key_F1)
542
       Shift + int(Qt::Key_F1)
543
    */
544
    QTest::newRow( "T007 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("F1")
545
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
546
    QTest::newRow( "T007 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("Shift+F1")
547
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
548
    QTest::newRow( "T007:F1" ) << int(TestAccel) << int(NoWidget) << QString("")
549
        << int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
550
    QTest::newRow( "T007:Shift + F1" ) << int(TestAccel) << int(NoWidget) << QString("")
551
        << int(Qt::SHIFT) + int(Qt::Key_F1) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
552
553
    QTest::newRow( "T005 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
554
555
    /* Testing Single Sequences
556
       int(Qt::Key_M)
557
       Shift + int(Qt::Key_M)
558
       Ctrl  + int(Qt::Key_M)
559
       Alt   + int(Qt::Key_M)
560
    */
561
    QTest::newRow( "T01 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("M")
562
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
563
    QTest::newRow( "T02 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("Shift+M")
564
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
565
    QTest::newRow( "T03 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Ctrl+M")
566
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
567
    QTest::newRow( "T04 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("Alt+M")
568
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
569
570
571
    QTest::newRow( "T:int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("")
572
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
573
    QTest::newRow( "T:Shift + int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("")
574
        << int(Qt::SHIFT) + int(Qt::Key_M) << int('M') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
575
    QTest::newRow( "T:Ctrl + int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("")
576
        << int(Qt::CTRL) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
577
    QTest::newRow( "T:Alt + int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("")
578
        << int(Qt::ALT) + int(Qt::Key_M) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel2Triggered);
579
580
    /* Testing Single Sequence Ambiguity
581
       int(Qt::Key_M) on accel2
582
    */
583
    QTest::newRow( "T05 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("M")
584
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
585
    QTest::newRow( "T:int(Qt::Key_M) on int(Accel2)" ) << int(TestAccel) << int(NoWidget) << QString("")
586
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Ambiguous);
587
588
    /* Testing Single Specialkeys
589
       int(Qt::Key_aring)
590
       int(Qt::Key_Aring)
591
       UNICODE_ACCEL + int(Qt::Key_K)
592
    */
593
    /* see comments above on the #ifdef'ery */
594
    QTest::newRow( "T06 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("\x0E5")
595
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
596
    QTest::newRow( "T08 - sA2" ) << int(SetupAccel) << int(Accel1) << QString("K")
597
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
598
599
    QTest::newRow( "T:int(Qt::Key_aring)" ) << int(TestAccel) << int(NoWidget) << QString("")
600
        << int(Qt::Key_aring) << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
601
    QTest::newRow( "T:int(Qt::Key_aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("")
602
        << int(Qt::Key_unknown) << 0xE5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
603
    QTest::newRow( "T:int(Qt::Key_Aring) - Text Form" ) << int(TestAccel) << int(NoWidget) << QString("")
604
        << int(Qt::Key_unknown) << 0xC5 << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
605
    QTest::newRow( "T:UNICODE_ACCEL + int(Qt::Key_K)" ) << int(TestAccel) << int(NoWidget) << QString("")
606
        << int(Qt::UNICODE_ACCEL) + int(Qt::Key_K) << int('k') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
607
608
    // Clear all
609
    QTest::newRow( "T09 - clear" ) << int(ClearAll) <<0<<QString("")<<0<<0<<0<<0<<0<<0<<0<<0<<0;
610
611
    /* Testing Multiple Sequences
612
       int(Qt::Key_M)
613
       int(Qt::Key_I), int(Qt::Key_M)
614
       Shift+int(Qt::Key_I), int(Qt::Key_M)
615
    */
616
    QTest::newRow( "T10 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("M")
617
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
618
    QTest::newRow( "T11 - sA2" ) << int(SetupAccel) << int(Accel2) << QString("I, M")
619
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
620
    QTest::newRow( "T12 - sA1" ) << int(SetupAccel) << int(Accel1) << QString("Shift+I, M")
621
        << 0 << 0 << 0 << 0 << 0 << 0 << 0 << 0 << int(NoResult);
622
623
    QTest::newRow( "T:int(Qt::Key_M) (2)" ) << int(TestAccel) << int(NoWidget) << QString("")
624
        << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << 0 << 0 << int(Accel1Triggered);
625
    QTest::newRow( "T:int(Qt::Key_I), int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("")
626
        << int(Qt::Key_I) << int('i') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << int(Accel2Triggered);
627
    QTest::newRow( "T:Shift+int(Qt::Key_I), int(Qt::Key_M)" ) << int(TestAccel) << int(NoWidget) << QString("")
628
        << int(Qt::SHIFT) + int(Qt::Key_I) << int('I') << int(Qt::Key_M) << int('m') << 0 << 0 << 0 << 0 << int(Accel1Triggered);
629
}
630
631
// ------------------------------------------------------------------
632
// Disabled Elements ------------------------------------------------
633
// ------------------------------------------------------------------
634
void tst_Q3Accel::disabledItems()
635
{
636
    accel1->setEnabled( TRUE );
637
    accel2->setEnabled( TRUE );
638
639
    /* Testing Disabled Accel
640
       Qt::Key_M          on A1
641
       Shift + Qt::Key_M  on A1
642
       Qt::Key_M          on A2 (disabled)
643
       Shift + Qt::Key_M  on A2 (disabled)
644
    */
645
    accel1->clear();
646
    accel2->clear();
647
    accel1->insertItem( QKeySequence("M") );
648
    accel1->insertItem( QKeySequence("Shift+M") );
649
    accel2->insertItem( QKeySequence("M") );
650
    accel2->insertItem( QKeySequence("Shift+M") );
651
    accel2->setEnabled( FALSE );
652
    currentResult = NoResult;
653
    sendKeyEvents( Qt::Key_M, 'm' );
654
    QCOMPARE( currentResult, Accel1Triggered );
655
    currentResult = NoResult;
656
    sendKeyEvents( Qt::SHIFT+Qt::Key_M, 'M' );
657
    QCOMPARE( currentResult, Accel1Triggered );
658
    accel2->setEnabled( TRUE ); //PS!
659
660
    /* Testing Disabled Accel
661
       Qt::Key_M          on A1
662
       Shift + Qt::Key_M  on A1 (disabled)
663
       Qt::Key_M          on A2 (disabled)
664
       Shift + Qt::Key_M  on A2
665
    */
666
    accel1->clear();
667
    accel2->clear();
668
    accel1->insertItem( QKeySequence("M") );
669
    int i1 = accel1->insertItem( QKeySequence("Shift+M") );
670
    int i2 = accel2->insertItem( QKeySequence("M") );
671
    accel2->insertItem( QKeySequence("Shift+M") );
672
    accel1->setItemEnabled( i1, FALSE );
673
    accel2->setItemEnabled( i2, FALSE );
674
    currentResult = NoResult;
675
    sendKeyEvents( Qt::Key_M, 'm' );
676
    QCOMPARE( currentResult, Accel1Triggered );
677
    currentResult = NoResult;
678
    sendKeyEvents( Qt::SHIFT+Qt::Key_M, 'M' );
679
    QCOMPARE( currentResult, Accel2Triggered );
680
681
    /* Testing Disabled Accel Items
682
       Qt::Key_F5          on A1
683
       Shift + Qt::Key_F5  on A2 (disabled)
684
    */
685
    accel1->clear();
686
    accel2->clear();
687
    i1 = accel1->insertItem( QKeySequence("F5") );
688
    i2 = accel2->insertItem( QKeySequence("Shift+F5") );
689
    accel1->setItemEnabled( i1, TRUE );
690
    accel2->setItemEnabled( i2, FALSE );
691
    currentResult = NoResult;
692
    sendKeyEvents( Qt::Key_F5, 0 );
693
    QCOMPARE( currentResult, Accel1Triggered );
694
    currentResult = NoResult;
695
    sendKeyEvents( Qt::SHIFT+Qt::Key_F5, 0 );
696
    QCOMPARE( currentResult, NoResult );
697
698
    /* Testing Disabled Accel
699
       Qt::Key_F5          on A1
700
       Shift + Qt::Key_F5  on A2 (disabled)
701
    */
702
    accel1->clear();
703
    accel2->clear();
704
    i1 = accel1->insertItem( QKeySequence("F5") );
705
    i2 = accel2->insertItem( QKeySequence("Shift+F5") );
706
    accel1->setEnabled( TRUE );
707
    accel2->setEnabled( FALSE );
708
    currentResult = NoResult;
709
    sendKeyEvents( Qt::Key_F5, 0 );
710
    QCOMPARE( currentResult, Accel1Triggered );
711
    currentResult = NoResult;
712
    sendKeyEvents( Qt::SHIFT+Qt::Key_F5, 0 );
713
    QCOMPARE( currentResult, NoResult );
714
715
716
717
    /* Testing Disabled Accel, and the corresponding statusbar feedback
718
       Ctrl + Qt::Key_K, Ctrl + Qt::Key_L on A1
719
       Ctrl + Qt::Key_K, Ctrl + Qt::Key_M on A2 (disabled)
720
    */
721
    accel1->clear();
722
    accel2->clear();
723
    i1 = accel1->insertItem( QKeySequence("Ctrl+K, Ctrl+L") );
724
    i2 = accel2->insertItem( QKeySequence("Ctrl+K, Ctrl+M") );
725
    accel1->setItemEnabled( i1, TRUE );
726
    accel2->setItemEnabled( i2, FALSE );
727
    currentResult = NoResult;
728
    sendKeyEvents( Qt::CTRL+Qt::Key_K, 0 );
729
    sendKeyEvents( Qt::CTRL+Qt::Key_Q, 0 );
730
    QCOMPARE( currentResult, NoResult );
731
#ifndef Q_WS_MAC
732
    QCOMPARE( sbText, QString("Ctrl+K, Ctrl+Q not defined") );
733
#else
734
    QCOMPARE(sbText, MacCtrl + "K, " + MacCtrl + "Q not defined");
735
#endif
736
    currentResult = NoResult;
737
    sendKeyEvents( Qt::CTRL+Qt::Key_K, 0 );
738
    sendKeyEvents( Qt::CTRL+Qt::Key_M, 0 );
739
    QCOMPARE( currentResult, NoResult );
740
    QCOMPARE(sbText, QString());
741
    currentResult = NoResult;
742
    sendKeyEvents( Qt::CTRL+Qt::Key_K, 0 );
743
    sendKeyEvents( Qt::CTRL+Qt::Key_L, 0 );
744
    QCOMPARE( currentResult, Accel1Triggered );
745
    QCOMPARE(sbText, QString());
746
747
    accel1->setEnabled( TRUE );
748
    accel2->setEnabled( TRUE );
749
}
750
751
// ------------------------------------------------------------------
752
// Ambiguous Elements -----------------------------------------------
753
// ------------------------------------------------------------------
754
void tst_Q3Accel::ambiguousItems()
755
{
756
    accel1->setEnabled( TRUE );
757
    accel2->setEnabled( TRUE );
758
759
    /* Testing Disabled Accel
760
       Qt::Key_M  on A1
761
       Qt::Key_M  on A2
762
    */
763
    accel1->clear();
764
    accel2->clear();
765
    accel1->insertItem( QKeySequence("M") );
766
    accel2->insertItem( QKeySequence("M") );
767
    currentResult = NoResult;
768
    sendKeyEvents( Qt::Key_M, 'm' );
769
    QCOMPARE( currentResult, Ambiguous );
770
    QCOMPARE( ambigResult, Accel1Triggered );
771
    currentResult = NoResult;
772
    sendKeyEvents( Qt::Key_M, 'm' );
773
    QCOMPARE( currentResult, Ambiguous );
774
    QCOMPARE( ambigResult, Accel2Triggered );
775
    currentResult = NoResult;
776
    sendKeyEvents( Qt::Key_M, 'm' );
777
    QCOMPARE( currentResult, Ambiguous );
778
    QCOMPARE( ambigResult, Accel1Triggered );
779
780
    accel1->setEnabled( TRUE );
781
    accel2->setEnabled( TRUE );
782
}
783
784
// ------------------------------------------------------------------
785
// Unicode and non-unicode Elements ---------------------------------
786
// ------------------------------------------------------------------
787
void tst_Q3Accel::unicodeCompare()
788
{
789
    accel1->setEnabled( TRUE );
790
    accel2->setEnabled( TRUE );
791
792
    QKeySequence ks1("Ctrl+M");
793
    QKeySequence ks2( Qt::CTRL+Qt::Key_M );
794
    accel1->clear();
795
    accel2->clear();
796
    accel1->insertItem( ks1 );
797
    accel2->insertItem( ks2 );
798
    currentResult = NoResult;
799
    sendKeyEvents( Qt::CTRL+Qt::Key_M, 0 );
800
    QCOMPARE( currentResult, Ambiguous );
801
    // They _are_ ambiguous, so the QKeySequence operator==
802
    // should indicate the same
803
    QVERIFY( ks1 == ks2 );
804
    QVERIFY( !(ks1 != ks2) );
805
}
806
807
// ------------------------------------------------------------------
808
// Unicode composed keys using keypad, and number accels ------------
809
// ------------------------------------------------------------------
810
void tst_Q3Accel::unicodeCompose()
811
{
812
    accel1->setEnabled( TRUE );
813
    accel2->setEnabled( TRUE );
814
815
#if 0
816
//#if QT_VERSION >= 0x30200
817
    accel1->clear();
818
    accel2->clear();
819
    accel1->insertItem( META+Qt::Key_9 );
820
    edit->setFocus();
821
    currentResult = NoResult;
822
823
    // Turn on unicode composing, and
824
    // compose a smileyface. ( 9786 = 0x263A )
825
    QApplication::setMetaComposedUnicode();
826
    QChar ch1( '9' );
827
    QChar ch2( '7' );
828
    QChar ch3( '8' );
829
    QChar ch4( '6' );
830
    QString s1( ch1 );
831
    QString s2( ch2 );
832
    QString s3( ch3 );
833
    QString s4( ch4 );
834
    QKeyEvent k1a( QEvent::AccelOverride, Qt::Key_9, ch1.row() ? 0 : ch1.cell(), Qt::MetaModifier + Qt::KeypadModifier, s1 );
835
    QKeyEvent k1p( QEvent::KeyPress, Qt::Key_9, ch1.row() ? 0 : ch1.cell(), Qt::MetaModifier + Qt::KeypadModifier, s1 );
836
    QKeyEvent k1r( QEvent::KeyRelease, Qt::Key_9, ch1.row() ? 0 : ch1.cell(), Qt::MetaModifier + Qt::KeypadModifier, s1 );
837
    QKeyEvent k2a( QEvent::AccelOverride, Qt::Key_7, ch2.row() ? 0 : ch2.cell(), Qt::MetaModifier + Qt::KeypadModifier, s2 );
838
    QKeyEvent k2p( QEvent::KeyPress, Qt::Key_7, ch2.row() ? 0 : ch2.cell(), Qt::MetaModifier + Qt::KeypadModifier, s2 );
839
    QKeyEvent k2r( QEvent::KeyRelease, Qt::Key_7, ch2.row() ? 0 : ch2.cell(), Qt::MetaModifier + Qt::KeypadModifier, s2 );
840
    QKeyEvent k3a( QEvent::AccelOverride, Qt::Key_8, ch3.row() ? 0 : ch3.cell(), Qt::MetaModifier + Qt::KeypadModifier, s3 );
841
    QKeyEvent k3p( QEvent::KeyPress, Qt::Key_8, ch3.row() ? 0 : ch3.cell(), Qt::MetaModifier + Qt::KeypadModifier, s3 );
842
    QKeyEvent k3r( QEvent::KeyRelease, Qt::Key_8, ch3.row() ? 0 : ch3.cell(), Qt::MetaModifier + Qt::KeypadModifier, s3 );
843
    QKeyEvent k4a( QEvent::AccelOverride, Qt::Key_6, ch4.row() ? 0 : ch4.cell(), Qt::MetaModifier + Qt::KeypadModifier, s4 );
844
    QKeyEvent k4p( QEvent::KeyPress, Qt::Key_6, ch4.row() ? 0 : ch4.cell(), Qt::MetaModifier + Qt::KeypadModifier, s4 );
845
    QKeyEvent k4r( QEvent::KeyRelease, Qt::Key_6, ch4.row() ? 0 : ch4.cell(), Qt::MetaModifier + Qt::KeypadModifier, s4 );
846
    QKeyEvent k5r( QEvent::KeyRelease, Qt::Key_Meta, 0, 0, "" );
847
    QApplication::sendEvent( edit, &k1a );
848
    QApplication::sendEvent( edit, &k1p );
849
    QApplication::sendEvent( edit, &k1r );
850
    QCOMPARE( currentResult, NoResult );
851
852
    QApplication::sendEvent( edit, &k2a );
853
    QApplication::sendEvent( edit, &k2p );
854
    QApplication::sendEvent( edit, &k2r );
855
    QCOMPARE( currentResult, NoResult );
856
857
    QApplication::sendEvent( edit, &k3a );
858
    QApplication::sendEvent( edit, &k3p );
859
    QApplication::sendEvent( edit, &k3r );
860
    QCOMPARE( currentResult, NoResult );
861
862
    QApplication::sendEvent( edit, &k4a );
863
    QApplication::sendEvent( edit, &k4p );
864
    QApplication::sendEvent( edit, &k4r );
865
    QCOMPARE( currentResult, NoResult );
866
867
    QApplication::sendEvent( edit, &k5r );
868
    // Unicode character is fully composed, and
869
    // shouldn't have triggered any accels
870
    QCOMPARE( currentResult, NoResult );
871
872
    // Verify that the unicode character indeed
873
    // is composed
874
    QVERIFY( edit->text().length() == 1 );
875
    QCOMPARE( (int)edit->text()[0].unicode(), 9786 );
876
877
    sendKeyEvents( META+Qt::Key_9, 0 );
878
    QCOMPARE( currentResult, Accel1Triggered );
879
#else
880
    QSKIP( "Unicode composing non-existant in Qt 3.y.z", SkipAll);
881
#endif
882
}
883
884
// ------------------------------------------------------------------
885
// Element Testing  -------------------------------------------------
886
// ------------------------------------------------------------------
887
void tst_Q3Accel::testElement()
888
{
889
#if 0
890
    currentResult = NoResult;
891
    QFETCH( int, theAction );
892
    QFETCH( int, theTestWidget );
893
    QFETCH( QString, theString );
894
    QFETCH( int, the1Key );
895
    QFETCH( int, the1Char );
896
    QFETCH( int, the2Key );
897
    QFETCH( int, the2Char );
898
    QFETCH( int, the3Key );
899
    QFETCH( int, the3Char );
900
    QFETCH( int, the4Key );
901
    QFETCH( int, the4Char );
902
    QFETCH( int, theResult );
903
904
    Q3Accel *ac = 0;
905
    switch( theTestWidget ) {
906
    case Accel1:
907
        ac = accel1;
908
        break;
909
    case Accel2:
910
        ac = accel2;
911
        break;
912
    case NoWidget:
913
    default:
914
        ac = 0;
915
    }
916
917
    if ( theAction == ClearAll ) {
918
        // Clear all current accelerators
919
        accel1->clear();
920
        accel2->clear();
921
        QCOMPARE( TRUE, TRUE );
922
    } else if ( theAction == SetupAccel ) {
923
        // Set up accelerator for next test
924
        QKeySequence ks;
925
        if ( QString(theString).isEmpty() ) {
926
            ks =  QKeySequence( the1Key, the2Key, the3Key, the4Key );
927
        } else {
928
            ks = QKeySequence( theString );
929
        }
930
        ac->insertItem( ks );
931
        QCOMPARE( TRUE, TRUE );
932
    } else {
933
        // Send keyevents
934
        sendKeyEvents( the1Key, the1Char,
935
                       the2Key, the2Char,
936
                       the3Key, the3Char,
937
                       the4Key, the4Char );
938
        // Verify the result
939
        QCOMPARE( currentResult, theResult );
940
    }
941
#endif
942
}
943
944
void tst_Q3Accel::sendKeyEvents( int k1, QChar c1, int k2, QChar c2, int k3, QChar c3, int k4, QChar c4 )
945
{
946
    int b1 = toButtons( k1 );
947
    int b2 = toButtons( k2 );
948
    int b3 = toButtons( k3 );
949
    int b4 = toButtons( k4 );
950
    k1 &= ~Qt::MODIFIER_MASK;
951
    k2 &= ~Qt::MODIFIER_MASK;
952
    k3 &= ~Qt::MODIFIER_MASK;
953
    k4 &= ~Qt::MODIFIER_MASK;
954
    QKeyEvent ke( QEvent::Accel, k1, (Qt::KeyboardModifiers)b1, QString(c1) );
955
    QApplication::sendEvent( mainW, &ke );
956
    if ( k2 ) {
957
        QKeyEvent ke( QEvent::Accel, k2, k2, b2, QString(c2) );
958
        QApplication::sendEvent( mainW, &ke );
959
    }
960
    if ( k3 ) {
961
        QKeyEvent ke( QEvent::Accel, k3, k3, b3, QString(c3) );
962
        QApplication::sendEvent( mainW, &ke );
963
    }
964
    if ( k4 ) {
965
        QKeyEvent ke( QEvent::Accel, k4, k4, b4, QString(c4) );
966
        QApplication::sendEvent( mainW, &ke );
967
    }
968
}
969
970
QTEST_MAIN(tst_Q3Accel)
971
#include "tst_q3accel.moc"