~tpeeters/ubuntu-ui-toolkit/10-tabsModelIndex

« back to all changes in this revision

Viewing changes to tests/unit_x11/tst_inversemousearea/tst_inversemouseareatest.cpp

  • Committer: tpeeters
  • Date: 2014-03-24 19:13:15 UTC
  • mfrom: (967.1.15 ubuntu-ui-toolkit)
  • Revision ID: tim.peeters@canonical.com-20140324191315-cgmt5x2h6v2xq1jh
merge trunk

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
#include <QtCore/QEvent>
24
24
 
25
25
#include "inversemouseareatype.h"
 
26
#include "ucunits.h"
26
27
#include <private/qquickevents_p_p.h>
 
28
#include <qpa/qwindowsysteminterface.h>
 
29
 
 
30
#define DOUBLECLICK_TIMEOUT 400
 
31
 
 
32
using QTest::QTouchEventSequence;
27
33
 
28
34
class tst_InverseMouseAreaTest : public QObject
29
35
{
30
36
    Q_OBJECT
31
37
    
32
38
public:
33
 
    tst_InverseMouseAreaTest() {}
 
39
    tst_InverseMouseAreaTest() :
 
40
    quickView(0), quickEngine(0), device(0)
 
41
    {}
34
42
 
35
43
private:
36
44
    QQuickView *quickView;
37
45
    QQmlEngine *quickEngine;
 
46
    QTouchDevice *device;
38
47
    QObjectCleanupHandler eventCleanup;
39
48
 
40
 
    InverseMouseAreaType *testArea(const QString &document)
 
49
    InverseMouseAreaType *testArea(const QString &document, const QString &imaName = QString())
41
50
    {
42
51
        // delete previous root
43
52
        QObject *rootObject = quickView->rootObject();
52
61
        if (!rootObject)
53
62
            return 0;
54
63
 
 
64
        if (!imaName.isEmpty()) {
 
65
            return rootObject->findChild<InverseMouseAreaType*>(imaName);
 
66
        }
55
67
        QList<QQuickItem*> items = rootObject->findChildren<QQuickItem*>();
56
68
        Q_FOREACH(QQuickItem *item, items) {
57
69
            InverseMouseAreaType *area = qobject_cast<InverseMouseAreaType*>(item);
61
73
        return 0;
62
74
    }
63
75
 
 
76
    QPoint guPoint(qreal guX, qreal guY)
 
77
    {
 
78
        return QPointF(UCUnits::instance().gu(guX), UCUnits::instance().gu(guY)).toPoint();
 
79
    }
 
80
 
 
81
    void touchClick(QWindow *window, const QPoint &point)
 
82
    {
 
83
        QTest::touchEvent(window, device).press(0, point, window);
 
84
        QTest::qWait(10);
 
85
        QTest::touchEvent(window, device).release(0, point, window);
 
86
    }
 
87
 
64
88
protected Q_SLOTS:
65
89
    void capturePressed(QQuickMouseEvent *event)
66
90
    {
77
101
        quickView = new QQuickView(0);
78
102
        quickEngine = quickView->engine();
79
103
 
 
104
        device = new QTouchDevice;
 
105
        device->setType(QTouchDevice::TouchScreen);
 
106
        QWindowSystemInterface::registerTouchDevice(device);
 
107
 
80
108
        quickView->setGeometry(0,0, 240, 320);
81
109
        //add modules folder so we have access to the plugin from QML
82
110
        QStringList imports = quickEngine->importPathList();
175
203
        QSignalSpy ma1Spy(ma1, SIGNAL(pressed(QQuickMouseEvent*)));
176
204
        QSignalSpy ma2Spy(ma2, SIGNAL(pressed(QQuickMouseEvent*)));
177
205
 
178
 
        // click in the top rectangle
179
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 10));
180
 
        QTest::waitForEvents();
181
 
        QCOMPARE(ma1Spy.count(), 0);
182
 
        QCOMPARE(ma2Spy.count(), 0);
183
 
        QCOMPARE(imaSpy.count(), 1);
184
 
        imaSpy.clear();
185
 
 
186
 
        // click in the second rectangle
187
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 65));
188
 
        QTest::waitForEvents();
189
 
        QCOMPARE(ma1Spy.count(), 0);
190
 
        QCOMPARE(ma2Spy.count(), 0);
191
 
        QCOMPARE(imaSpy.count(), 1);
192
 
        imaSpy.clear();
193
 
 
194
 
        // click in teh button
195
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(25, 85));
 
206
        // click in the top rectangle, use 800msec delay to prevent dblclick detection
 
207
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 10), DOUBLECLICK_TIMEOUT);
 
208
        QTest::waitForEvents();
 
209
        QCOMPARE(ma1Spy.count(), 0);
 
210
        QCOMPARE(ma2Spy.count(), 0);
 
211
        QCOMPARE(imaSpy.count(), 1);
 
212
        imaSpy.clear();
 
213
 
 
214
        // click in the second rectangle, use 800msec delay to prevent dblclick detection
 
215
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 65), DOUBLECLICK_TIMEOUT);
 
216
        QTest::waitForEvents();
 
217
        QCOMPARE(ma1Spy.count(), 0);
 
218
        QCOMPARE(ma2Spy.count(), 0);
 
219
        QCOMPARE(imaSpy.count(), 1);
 
220
        imaSpy.clear();
 
221
 
 
222
        // click in the button, use 800msec delay to prevent dblclick detection
 
223
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(25, 85), DOUBLECLICK_TIMEOUT);
196
224
        QTest::waitForEvents();
197
225
        QCOMPARE(ma1Spy.count(), 0);
198
226
        QCOMPARE(ma2Spy.count(), 1);
199
227
        QCOMPARE(imaSpy.count(), 0);
200
228
 
 
229
        // double click in the second rectangle
201
230
        QSignalSpy imaDSpy(area, SIGNAL(doubleClicked(QQuickMouseEvent*)));
202
231
        QTest::mouseDClick(quickView, Qt::LeftButton, 0, QPoint(10, 65));
 
232
        QTest::waitForEvents();
 
233
        // FIXME: this is flaky
203
234
        QCOMPARE(imaDSpy.count(), 1);
204
235
        imaDSpy.clear();
205
236
 
 
237
        // double click in the first rectangle
206
238
        QTest::mouseDClick(quickView, Qt::LeftButton, 0, QPoint(10, 10));
 
239
        QTest::waitForEvents();
207
240
        QCOMPARE(imaDSpy.count(), 1);
208
241
        imaDSpy.clear();
209
242
    }
224
257
        QSignalSpy ma1Spy(ma1, SIGNAL(pressed(QQuickMouseEvent*)));
225
258
        QSignalSpy ma2Spy(ma2, SIGNAL(pressed(QQuickMouseEvent*)));
226
259
 
227
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 10));
 
260
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 10), DOUBLECLICK_TIMEOUT);
228
261
        QTest::waitForEvents();
229
262
        QCOMPARE(ma1Spy.count(), 1);
230
263
        QCOMPARE(ma2Spy.count(), 0);
231
264
        QCOMPARE(imaSpy.count(), 1);
232
265
        ma1Spy.clear(); imaSpy.clear();
233
266
 
234
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 65));
 
267
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 65), DOUBLECLICK_TIMEOUT);
235
268
        QTest::waitForEvents();
236
269
        QCOMPARE(ma1Spy.count(), 0);
237
270
        QCOMPARE(ma2Spy.count(), 1);
238
271
        QCOMPARE(imaSpy.count(), 1);
239
272
        ma2Spy.clear(); imaSpy.clear();
240
273
 
241
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(25, 80));
 
274
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(25, 80), DOUBLECLICK_TIMEOUT);
242
275
        QTest::waitForEvents();
243
276
        QCOMPARE(ma1Spy.count(), 0);
244
277
        QCOMPARE(ma2Spy.count(), 1);
269
302
        QSignalSpy imaSpy(area, SIGNAL(pressed(QQuickMouseEvent*)));
270
303
        QSignalSpy ma2Spy(ma2, SIGNAL(pressed(QQuickMouseEvent*)));
271
304
 
272
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 10));
273
 
        QTest::waitForEvents();
274
 
        QCOMPARE(ma2Spy.count(), 0);
275
 
        QCOMPARE(imaSpy.count(), 1);
276
 
        imaSpy.clear();
277
 
 
278
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 65));
279
 
        QTest::waitForEvents();
280
 
        QCOMPARE(ma2Spy.count(), 0);
281
 
        QCOMPARE(imaSpy.count(), 1);
282
 
        imaSpy.clear();
283
 
 
284
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(25, 80));
 
305
        // click on the topmost rectangle
 
306
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 10), DOUBLECLICK_TIMEOUT);
 
307
        QTest::waitForEvents();
 
308
        QCOMPARE(ma2Spy.count(), 0);
 
309
        QCOMPARE(imaSpy.count(), 1);
 
310
        imaSpy.clear();
 
311
 
 
312
        // click on the second rectangle
 
313
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(10, 65), DOUBLECLICK_TIMEOUT);
 
314
        QTest::waitForEvents();
 
315
        QCOMPARE(ma2Spy.count(), 0);
 
316
        QCOMPARE(imaSpy.count(), 1);
 
317
        imaSpy.clear();
 
318
 
 
319
        // click on the button
 
320
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(25, 85), DOUBLECLICK_TIMEOUT);
285
321
        QTest::waitForEvents();
286
322
        QCOMPARE(ma2Spy.count(), 1);
287
323
        QCOMPARE(imaSpy.count(), 0);
288
324
 
 
325
        // double click on the second rectangle
289
326
        QSignalSpy imaDSpy(area, SIGNAL(doubleClicked(QQuickMouseEvent*)));
290
327
        QTest::mouseDClick(quickView, Qt::LeftButton, 0, QPoint(10, 65));
291
328
        QCOMPARE(imaDSpy.count(), 1);
292
329
        imaDSpy.clear();
293
330
 
 
331
        // double click on the first rectangle
294
332
        QTest::mouseDClick(quickView, Qt::LeftButton, 0, QPoint(10, 10));
295
333
        QCOMPARE(imaDSpy.count(), 1);
296
334
        imaDSpy.clear();
309
347
        QSignalSpy enteredSpy(area, SIGNAL(entered()));
310
348
        QSignalSpy exitedSpy(area, SIGNAL(exited()));
311
349
 
312
 
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(5, 5));
 
350
        QTest::mouseClick(quickView, Qt::LeftButton, 0, QPoint(5, 5), DOUBLECLICK_TIMEOUT);
313
351
        QCOMPARE(pressSpy.count(), 1);
314
352
        QCOMPARE(releaseSpy.count(), 1);
315
353
        QCOMPARE(clickSpy.count(), 1);
362
400
        QSignalSpy maSpy(ma, SIGNAL(pressed(QQuickMouseEvent*)));
363
401
        QSignalSpy imaDblClick(ima, SIGNAL(doubleClicked(QQuickMouseEvent*)));
364
402
 
365
 
        QTest::mouseClick(quickView, Qt::LeftButton, Qt::NoModifier, QPoint(15, 15));
 
403
        QTest::mouseClick(quickView, Qt::LeftButton, Qt::NoModifier, QPoint(15, 15), DOUBLECLICK_TIMEOUT);
366
404
        QCOMPARE(imaSpy.count(), 0);
367
405
        QCOMPARE(maSpy.count(), 0);
368
406
 
369
 
        QTest::mouseClick(quickView, Qt::LeftButton, Qt::NoModifier, QPoint(115, 15));
 
407
        QTest::mouseClick(quickView, Qt::LeftButton, Qt::NoModifier, QPoint(115, 15), DOUBLECLICK_TIMEOUT);
370
408
        QCOMPARE(imaSpy.count(), 1);
371
409
        QCOMPARE(maSpy.count(), 0);
372
410
 
373
411
        imaSpy.clear();
374
 
        QTest::mouseClick(quickView, Qt::LeftButton, Qt::NoModifier, QPoint(115, 115));
 
412
        QTest::mouseClick(quickView, Qt::LeftButton, Qt::NoModifier, QPoint(115, 115), DOUBLECLICK_TIMEOUT);
375
413
        QCOMPARE(imaSpy.count(), 1);
376
414
        QCOMPARE(maSpy.count(), 0);
377
415
 
452
490
        QCOMPARE(imaSpy.count(), 0);
453
491
    }
454
492
 
 
493
    void test_MouseClicksOnHeaderNotSeen_bug1288876_data()
 
494
    {
 
495
        QTest::addColumn<QString>("document");
 
496
 
 
497
        QTest::newRow("InverseMouseArea in a Page") << "InverseMouseAreaInPage.qml";
 
498
        QTest::newRow("InverseMouseArea with clip") << "InverseMouseAreaClip.qml";
 
499
        QTest::newRow("InverseMouseArea parent clipped") << "InverseMouseAreaParentClipped.qml";
 
500
        QTest::newRow("InverseMouseArea in a ListView") << "InverseMouseAreaInListView.qml";
 
501
        QTest::newRow("InverseMouseArea in a Flickable") << "InverseMouseAreaInFlickable.qml";
 
502
    }
 
503
 
 
504
    void test_MouseClicksOnHeaderNotSeen_bug1288876()
 
505
    {
 
506
        QFETCH(QString, document);
 
507
        testArea(document);
 
508
        InverseMouseAreaType *ima = quickView->rootObject()->
 
509
                property("ima").value<InverseMouseAreaType*>();
 
510
        QVERIFY(ima);
 
511
        QCOMPARE(ima->objectName(), QString("Test_IMA"));
 
512
        quickView->show();
 
513
        QTest::qWaitForWindowExposed(quickView);
 
514
 
 
515
        QSignalSpy imaSpy(ima, SIGNAL(clicked(QQuickMouseEvent*)));
 
516
 
 
517
        // make sure we click on the header
 
518
        QTest::mouseClick(quickView, Qt::LeftButton, Qt::NoModifier, guPoint(20, 5));
 
519
        QCOMPARE(imaSpy.count(), 1);
 
520
 
 
521
        imaSpy.clear();
 
522
        touchClick(quickView, guPoint(20, 5));
 
523
        QCOMPARE(imaSpy.count(), 1);
 
524
    }
 
525
 
455
526
};
456
527
 
457
528
QTEST_MAIN(tst_InverseMouseAreaTest)