~canonical-platform-qa/autopilot-qt/overlay

« back to all changes in this revision

Viewing changes to tests/unittests/tst_introspection.cpp

  • Committer: Tarmac
  • Author(s): Thomi Richards
  • Date: 2013-09-16 19:29:53 UTC
  • mfrom: (70.1.15 experimental)
  • Revision ID: tarmac-20130916192953-gfi8t8ot60cvm4ea
1.4 wire protocol changes. Fixes: https://bugs.launchpad.net/bugs/1195141, https://bugs.launchpad.net/bugs/1214128.

Approved by PS Jenkins bot.

Show diffs side-by-side

added added

removed removed

Lines of Context:
26
26
#include <QPushButton>
27
27
 
28
28
#include "introspection.h"
 
29
#include "qtnode.h"
29
30
 
30
31
QVariant IntrospectNode(QObject* obj);
31
32
 
46
47
    void test_properties_data();
47
48
    void test_properties();
48
49
 
 
50
    void test_property_matching();
 
51
 
49
52
private:
50
53
    QMainWindow *m_object;
51
54
};
74
77
 
75
78
    m_object->setObjectName("testWindow");
76
79
    m_object->setProperty("dynamicTestProperty", "testValue");
 
80
    m_object->setProperty("dynamicStringProperty", QString("testValue"));
77
81
    m_object->setProperty("myUInt", QVariant(quint8(5)));
78
82
    m_object->setProperty("myStringList", QVariant(QStringList() << "string1" << "string2" << "string3"));
79
83
    m_object->setProperty("myColor", QColor("red"));
113
117
    QTest::addColumn<QVariant>("firstResultPropertyValue");
114
118
 
115
119
#ifdef QT5_SUPPORT
116
 
    QTest::newRow("/") << "/" << 1 << "/tst_introspection" << "Children" << QVariant(QStringList() << "QMainWindow" << "QWidgetWindow");
117
 
    QTest::newRow("//QWidget[id=6]") << "//QWidget[id=6]" << 1 << "/tst_introspection/QMainWindow/QWidget" << "objectName" << QVariant("centralTestWidget");
118
 
    QTest::newRow("//QPushButton[id=9]") << "//QPushButton[id=9]" << 1 << "/tst_introspection/QMainWindow/QWidget/QPushButton" << "objectName" << QVariant("myButton2");
 
120
    QTest::newRow("/")
 
121
        << "/"
 
122
        << 1
 
123
        << "/tst_introspection"
 
124
        << "Children"
 
125
        << QVariant(
 
126
            QVariantList()
 
127
                << 0
 
128
                << QVariant(
 
129
                    QStringList()
 
130
                        << "QMainWindow"
 
131
                        << "QWidgetWindow"
 
132
                    )
 
133
            );
 
134
 
 
135
    QTest::newRow("//QWidget[id=6]")
 
136
        << "//QWidget[id=6]"
 
137
        << 1
 
138
        << "/tst_introspection/QMainWindow/QWidget"
 
139
        << "objectName"
 
140
        << QVariant(
 
141
            QVariantList()
 
142
                << 0
 
143
                << "centralTestWidget"
 
144
            );
 
145
 
 
146
    QTest::newRow("//QPushButton[id=9]")
 
147
        << "//QPushButton[id=9]"
 
148
        << 1
 
149
        << "/tst_introspection/QMainWindow/QWidget/QPushButton"
 
150
        << "objectName"
 
151
        << QVariant(
 
152
            QVariantList()
 
153
                << 0
 
154
                << "myButton2"
 
155
            );
119
156
#else
120
 
    QTest::newRow("/") << "/" << 1 << "/tst_introspection" << "Children" << QVariant(QStringList() << "QMainWindow");
121
 
    QTest::newRow("//QWidget[id=5]") << "//QWidget[id=5]" << 1 << "/tst_introspection/QMainWindow/QWidget" << "objectName" << QVariant("centralTestWidget");
 
157
    QTest::newRow("/")
 
158
        << "/"
 
159
        << 1
 
160
        << "/tst_introspection"
 
161
        << "Children"
 
162
        << QVariant(
 
163
            QVariantList()
 
164
                << 0
 
165
                << "QMainWindow"
 
166
            );
 
167
 
 
168
    QTest::newRow("//QWidget[id=5]")
 
169
        << "//QWidget[id=5]"
 
170
        << 1
 
171
        << "/tst_introspection/QMainWindow/QWidget"
 
172
        << "objectName"
 
173
        << QVariant(
 
174
            QVariantList()
 
175
                << 0
 
176
                << "centralTestWidget"
 
177
            );
122
178
 
123
179
    // Depending on the environment, Qt4 could add a second QWidget at position 6. That moves other items down by one.
124
 
    if (Introspect("//QWidget[id=6]").count() > 0) {
125
 
        QTest::newRow("//QPushButton[id=9]") << "//QPushButton[id=9]" << 1 << "/tst_introspection/QMainWindow/QWidget/QPushButton" << "objectName" << QVariant("myButton2");
126
 
    } else {
127
 
        QTest::newRow("//QPushButton[id=8]") << "//QPushButton[id=8]" << 1 << "/tst_introspection/QMainWindow/QWidget/QPushButton" << "objectName" << QVariant("myButton2");
 
180
    if (Introspect("//QWidget[id=6]").count() > 0)
 
181
    {
 
182
        QTest::newRow("//QPushButton[id=9]")
 
183
            << "//QPushButton[id=9]"
 
184
            << 1
 
185
            << "/tst_introspection/QMainWindow/QWidget/QPushButton"
 
186
            << "objectName"
 
187
            << QVariant(
 
188
                QVariantList()
 
189
                    << 0
 
190
                    << "myButton2"
 
191
                );
 
192
    }
 
193
    else
 
194
    {
 
195
        QTest::newRow("//QPushButton[id=8]")
 
196
            << "//QPushButton[id=8]"
 
197
            << 1
 
198
            << "/tst_introspection/QMainWindow/QWidget/QPushButton"
 
199
            << "objectName"
 
200
            << QVariant(
 
201
                QVariantList()
 
202
                    << 0
 
203
                    << "myButton2"
 
204
                );
128
205
    }
129
206
#endif
130
207
 
131
 
    QTest::newRow("//GridLayout") << "//QGridLayout" << 1 << "/tst_introspection/QMainWindow/QWidget/QGridLayout" << "objectName" << QVariant("myTestLayout");
132
 
    QTest::newRow("//QPushButton") << "//QPushButton" << 2 << "/tst_introspection/QMainWindow/QWidget/QPushButton" << "objectName" << QVariant("myButton1");
133
 
    QTest::newRow("//QWidget/*") << "//QWidget/*" << 5 << "/tst_introspection/QMainWindow/QWidget/QGridLayout" << "objectName" << QVariant("myTestLayout");
134
 
    QTest::newRow("broken query") << "broken query" << 0 << QString() << QString() << QVariant();
 
208
    QTest::newRow("/tst_introspection/QMainWindow/QWidget/QGridLayout")
 
209
        << "//QGridLayout"
 
210
        << 1
 
211
        << "/tst_introspection/QMainWindow/QWidget/QGridLayout"
 
212
        << "objectName"
 
213
        << QVariant(
 
214
            QVariantList()
 
215
                << 0
 
216
                << "myTestLayout"
 
217
            );
 
218
 
 
219
    QTest::newRow("parent of leaf node")
 
220
        << "/tst_introspection/QMainWindow/QWidget/QGridLayout/.."
 
221
        << 1
 
222
        << "/tst_introspection/QMainWindow/QWidget"
 
223
        << "objectName"
 
224
        << QVariant(
 
225
            QVariantList()
 
226
                << 0
 
227
                << "centralTestWidget"
 
228
            );
 
229
 
 
230
    QTest::newRow("parent of root node")
 
231
        << "/tst_introspection/.."
 
232
        << 1
 
233
        << "/tst_introspection"
 
234
        << "id"
 
235
        << QVariant(
 
236
            QVariantList()
 
237
                << 0
 
238
                << 1
 
239
            );
 
240
 
 
241
    QTest::newRow("//QPushButton")
 
242
        << "//QPushButton"
 
243
        << 2
 
244
        << "/tst_introspection/QMainWindow/QWidget/QPushButton"
 
245
        << "objectName"
 
246
        << QVariant(
 
247
            QVariantList()
 
248
                << 0
 
249
                << "myButton1"
 
250
            );
 
251
 
 
252
    QTest::newRow("//QWidget/*")
 
253
        << "//QWidget/*"
 
254
        << 5
 
255
        << "/tst_introspection/QMainWindow/QWidget/QGridLayout"
 
256
        << "objectName"
 
257
        << QVariant(
 
258
            QVariantList()
 
259
                << 0
 
260
                << "myTestLayout"
 
261
            );
 
262
 
 
263
    QTest::newRow("broken query")
 
264
        << "broken query"
 
265
        << 0
 
266
        << QString()
 
267
        << QString()
 
268
        << QVariant();
135
269
}
136
270
 
137
271
void tst_Introspection::test_introspect()
142
276
    QFETCH(QString, firstResultPropertyName);
143
277
    QFETCH(QVariant, firstResultPropertyValue);
144
278
 
145
 
    QList<QVariant> resultList = Introspect(xpath);
 
279
    QList<NodeIntrospectionData> resultList = Introspect(xpath);
146
280
 
147
281
    QCOMPARE(resultList.count(), resultCount);
148
282
 
149
283
    if (resultCount > 0) {
150
 
        QVariant firstResult = resultList.first();
151
 
        QVariantMap firstResultProperties = firstResult.toList().last().toMap();
 
284
        NodeIntrospectionData first_object = resultList.first();
152
285
 
153
 
        QCOMPARE(firstResult.toList().first().toString(), firstResultType);
154
 
        QCOMPARE(firstResultProperties.value(firstResultPropertyName), firstResultPropertyValue);
 
286
        QCOMPARE(first_object.object_path, firstResultType);
 
287
        QCOMPARE(first_object.state.value(firstResultPropertyName), firstResultPropertyValue);
155
288
    }
156
289
}
157
290
 
171
304
    qApp->setApplicationName(app_name);
172
305
 
173
306
#ifdef QT5_SUPPORT
174
 
    QList<QVariant> result = Introspect("//QWidgetWindow");
 
307
    QList<NodeIntrospectionData> result = Introspect("//QWidgetWindow");
175
308
#else
176
 
    QList<QVariant> result = Introspect("//QMainWindow");
 
309
    QList<NodeIntrospectionData> result = Introspect("//QMainWindow");
177
310
#endif
178
311
 
179
312
    QVERIFY(!result.isEmpty());
185
318
    QTest::addColumn<QVariant>("propertyValue");
186
319
    QTest::addColumn<bool>("fuzzyCompare");
187
320
 
188
 
    QTest::newRow("static property") << "objectName" << QVariant(m_object->objectName()) << false;
189
 
    QTest::newRow("dynamic property") << "dynamicTestProperty" << m_object->property("dynamicTestProperty") << false;
190
 
 
191
 
    QTest::newRow("int") << "width" << QVariant(m_object->width()) << false;
192
 
    QTest::newRow("uint") << "myUInt" << m_object->property("myUInt") << false;
193
 
    QTest::newRow("bool") << "visible" << QVariant(m_object->isVisible()) << false;
194
 
    QTest::newRow("double") << "windowOpacity" << QVariant(m_object->windowOpacity()) << true;
195
 
 
196
 
    QTest::newRow("QString") << "objectName" << QVariant(m_object->objectName()) << false;
197
 
    QTest::newRow("QStringList") << "myStringList" << m_object->property("myStringList") << false;
198
 
    QTest::newRow("QSize") << "maximumSize" << QVariant(QList<QVariant>() << m_object->maximumWidth() << m_object->maximumHeight()) << false;
199
 
    QTest::newRow("QPoint") << "pos" << QVariant(QList<QVariant>() << m_object->x() << m_object->y()) << false;
200
 
    QTest::newRow("QRect") << "geometry" << QVariant(QList<QVariant>() << m_object->geometry().x() << m_object->geometry().y() << m_object->geometry().width() << m_object->geometry().height()) << false;
201
 
    QTest::newRow("QColor") << "myColor" << QVariant(QList<QVariant>() << 255 << 0 << 0 << 255) << false;
202
 
    QTest::newRow("QByteArray") << "myByteArray" << m_object->property("myByteArray") << false;
203
 
    QTest::newRow("QUrl") << "myUrl" << m_object->property("myUrl") << false;
204
 
    QTest::newRow("QDateTime") << "myDateTime" << QVariant(m_object->property("myDateTime").toDateTime().toTime_t()) << false;
205
 
    QTest::newRow("QDate") << "myDate" << QVariant(m_object->property("myDate").toDateTime().toTime_t()) << false;
206
 
    QTest::newRow("QTime") << "myTime" << QVariant(m_object->property("myTime").toTime().toString("hh:mm:ss")) << false;
 
321
    QTest::newRow("static property")
 
322
        << "objectName"
 
323
        << QVariant(
 
324
            QVariantList()
 
325
                << 0
 
326
                << m_object->objectName()
 
327
            )
 
328
        << false;
 
329
 
 
330
    QTest::newRow("dynamic property")
 
331
        << "dynamicTestProperty"
 
332
        << QVariant(
 
333
            QVariantList()
 
334
                << 0
 
335
                << m_object->property("dynamicTestProperty")
 
336
            )
 
337
        << false;
 
338
 
 
339
    QTest::newRow("int")
 
340
    << "width"
 
341
    << QVariant(
 
342
        QVariantList()
 
343
            << 0
 
344
            << m_object->width()
 
345
        )
 
346
        << false;
 
347
 
 
348
    QTest::newRow("uint")
 
349
        << "myUInt"
 
350
        << QVariant(
 
351
            QVariantList()
 
352
                << 0
 
353
                << m_object->property("myUInt")
 
354
            )
 
355
        << false;
 
356
 
 
357
    QTest::newRow("bool")
 
358
        << "visible"
 
359
        << QVariant(
 
360
            QVariantList()
 
361
                << 0
 
362
                << m_object->isVisible()
 
363
            )
 
364
        << false;
 
365
 
 
366
    QTest::newRow("double")
 
367
        << "windowOpacity"
 
368
        << QVariant(
 
369
            QVariantList()
 
370
                << 0
 
371
                << m_object->windowOpacity()
 
372
            )
 
373
        << true;
 
374
 
 
375
    QTest::newRow("QString")
 
376
        << "objectName"
 
377
        << QVariant(
 
378
            QVariantList()
 
379
                << 0
 
380
                << m_object->objectName()
 
381
            )
 
382
        << false;
 
383
 
 
384
    QTest::newRow("QStringList")
 
385
        << "myStringList"
 
386
        << QVariant(
 
387
            QVariantList()
 
388
                << 0
 
389
                << m_object->property("myStringList")
 
390
            )
 
391
        << false;
 
392
 
 
393
    QTest::newRow("QSize")
 
394
        << "maximumSize"
 
395
        << QVariant(
 
396
            QVariantList()
 
397
                << 3
 
398
                << m_object->maximumWidth()
 
399
                << m_object->maximumHeight()
 
400
            )
 
401
        << false;
 
402
 
 
403
    QTest::newRow("QPoint")
 
404
        << "pos"
 
405
        << QVariant(
 
406
            QVariantList()
 
407
                << 2
 
408
                << m_object->x()
 
409
                << m_object->y()
 
410
            )
 
411
        << false;
 
412
 
 
413
    QTest::newRow("QRect")
 
414
        << "geometry"
 
415
        << QVariant(
 
416
            QVariantList()
 
417
                << 1
 
418
                << m_object->geometry().x()
 
419
                << m_object->geometry().y()
 
420
                << m_object->geometry().width()
 
421
                << m_object->geometry().height()
 
422
            )
 
423
        << false;
 
424
 
 
425
    QTest::newRow("QColor")
 
426
        << "myColor"
 
427
        << QVariant(
 
428
            QVariantList()
 
429
                << 4
 
430
                << qvariant_cast<QColor>(m_object->property("myColor")).red()
 
431
                << qvariant_cast<QColor>(m_object->property("myColor")).green()
 
432
                << qvariant_cast<QColor>(m_object->property("myColor")).blue()
 
433
                << qvariant_cast<QColor>(m_object->property("myColor")).alpha()
 
434
            )
 
435
        << false;
 
436
 
 
437
    QTest::newRow("QByteArray")
 
438
        << "myByteArray"
 
439
        << QVariant(
 
440
            QVariantList()
 
441
                << 0
 
442
                << m_object->property("myByteArray")
 
443
            )
 
444
        << false;
 
445
 
 
446
    QTest::newRow("QUrl")
 
447
        << "myUrl"
 
448
        << QVariant(
 
449
            QVariantList()
 
450
                << 0
 
451
                << m_object->property("myUrl")
 
452
            )
 
453
        << false;
 
454
 
 
455
    QTest::newRow("QDateTime")
 
456
        << "myDateTime"
 
457
        << QVariant(
 
458
            QVariantList()
 
459
                << 5
 
460
                << m_object->property("myDateTime").toDateTime().toTime_t()
 
461
            )
 
462
        << false;
 
463
 
 
464
    QTest::newRow("QDate")
 
465
        << "myDate"
 
466
        << QVariant(
 
467
            QVariantList()
 
468
                << 5
 
469
                << m_object->property("myDate").toDateTime().toTime_t()
 
470
            )
 
471
        << false;
 
472
 
 
473
    QTest::newRow("QTime")
 
474
        << "myTime"
 
475
        << QVariant(
 
476
            QVariantList()
 
477
                << 6
 
478
                << m_object->property("myTime").toTime().hour()
 
479
                << m_object->property("myTime").toTime().minute()
 
480
                << m_object->property("myTime").toTime().second()
 
481
                << m_object->property("myTime").toTime().msec()
 
482
            )
 
483
        << false;
207
484
}
208
485
 
209
486
void tst_Introspection::test_properties()
224
501
    }
225
502
}
226
503
 
 
504
void tst_Introspection::test_property_matching()
 
505
{
 
506
    QtNode n(m_object);
 
507
 
 
508
    QVERIFY(n.MatchStringProperty("dynamicStringProperty", "testValue") == true);
 
509
    QVERIFY(n.MatchStringProperty("dynamicTestProperty", "testValue") == true);
 
510
    QVERIFY(n.MatchIntegerProperty("myUInt", 5) == true);
 
511
    QVERIFY(n.MatchBooleanProperty("visible", true) == true);
 
512
}
 
513
 
227
514
QTEST_MAIN(tst_Introspection)
228
515
 
229
516
#include "tst_introspection.moc"