diff options
Diffstat (limited to 'tests/auto')
180 files changed, 5813 insertions, 1509 deletions
diff --git a/tests/auto/collections/tst_collections.cpp b/tests/auto/collections/tst_collections.cpp index 670cff0..f97805e 100644 --- a/tests/auto/collections/tst_collections.cpp +++ b/tests/auto/collections/tst_collections.cpp @@ -164,6 +164,7 @@ private slots: void qtimerList(); void containerTypedefs(); void forwardDeclared(); + void alignment(); }; struct LargeStatic { @@ -3481,5 +3482,113 @@ void tst_Collections::forwardDeclared() { typedef QSet<T1> C; C *x = 0; /* C::iterator i; */ C::const_iterator j; Q_UNUSED(x) } } +#if defined(Q_ALIGNOF) && defined(Q_DECL_ALIGN) + +class Q_DECL_ALIGN(4) Aligned4 +{ + char i; +public: + Aligned4(int i = 0) : i(i) {} + bool checkAligned() const + { + return (quintptr(this) & 3) == 0; + } + + inline bool operator==(const Aligned4 &other) const { return i == other.i; } + inline bool operator<(const Aligned4 &other) const { return i < other.i; } + friend inline int qHash(const Aligned4 &a) { return qHash(a.i); } +}; + +class Q_DECL_ALIGN(128) Aligned128 +{ + char i; +public: + Aligned128(int i = 0) : i(i) {} + bool checkAligned() const + { + return (quintptr(this) & 127) == 0; + } + + inline bool operator==(const Aligned128 &other) const { return i == other.i; } + inline bool operator<(const Aligned128 &other) const { return i < other.i; } + friend inline int qHash(const Aligned128 &a) { return qHash(a.i); } +}; + +template<typename C> +void testVectorAlignment() +{ + typedef typename C::value_type Aligned; + C container; + container.append(Aligned()); + QVERIFY(container[0].checkAligned()); + + for (int i = 0; i < 200; ++i) + container.append(Aligned()); + + for (int i = 0; i < container.size(); ++i) + QVERIFY(container.at(i).checkAligned()); +} + +template<typename C> +void testContiguousCacheAlignment() +{ + typedef typename C::value_type Aligned; + C container(150); + container.append(Aligned()); + QVERIFY(container[container.firstIndex()].checkAligned()); + + for (int i = 0; i < 200; ++i) + container.append(Aligned()); + + for (int i = container.firstIndex(); i < container.lastIndex(); ++i) + QVERIFY(container.at(i).checkAligned()); +} + +template<typename C> +void testAssociativeContainerAlignment() +{ + typedef typename C::key_type Key; + typedef typename C::mapped_type Value; + C container; + container.insert(Key(), Value()); + + typename C::const_iterator it = container.constBegin(); + QVERIFY(it.key().checkAligned()); + QVERIFY(it.value().checkAligned()); + + // add some more elements + for (int i = 0; i < 200; ++i) + container.insert(Key(i), Value(i)); + + it = container.constBegin(); + for ( ; it != container.constEnd(); ++it) { + QVERIFY(it.key().checkAligned()); + QVERIFY(it.value().checkAligned()); + } +} + +void tst_Collections::alignment() +{ + testVectorAlignment<QVector<Aligned4> >(); + testVectorAlignment<QVector<Aligned128> >(); + testContiguousCacheAlignment<QContiguousCache<Aligned4> >(); + testContiguousCacheAlignment<QContiguousCache<Aligned128> >(); + testAssociativeContainerAlignment<QMap<Aligned4, Aligned4> >(); + testAssociativeContainerAlignment<QMap<Aligned4, Aligned128> >(); + testAssociativeContainerAlignment<QMap<Aligned128, Aligned4> >(); + testAssociativeContainerAlignment<QMap<Aligned128, Aligned128> >(); + testAssociativeContainerAlignment<QHash<Aligned4, Aligned4> >(); + testAssociativeContainerAlignment<QHash<Aligned4, Aligned128> >(); + testAssociativeContainerAlignment<QHash<Aligned128, Aligned4> >(); + testAssociativeContainerAlignment<QHash<Aligned128, Aligned128> >(); +} + +#else +void tst_Collections::alignment() +{ + QSKIP("Compiler doesn't support necessary extension keywords", SkipAll) +} +#endif + QTEST_APPLESS_MAIN(tst_Collections) #include "tst_collections.moc" diff --git a/tests/auto/declarative/behaviors/data/empty.qml b/tests/auto/declarative/behaviors/data/empty.qml new file mode 100644 index 0000000..412e26c --- /dev/null +++ b/tests/auto/declarative/behaviors/data/empty.qml @@ -0,0 +1,23 @@ +import Qt 4.6 +Rectangle { + width: 400 + height: 400 + Rectangle { + id: rect + objectName: "MyRect" + width: 100; height: 100; color: "green" + x: Behavior {} + } + MouseRegion { + id: clicker + anchors.fill: parent + } + states: State { + name: "moved" + when: clicker.pressed + PropertyChanges { + target: rect + x: 200 + } + } +} diff --git a/tests/auto/declarative/behaviors/data/nonSelecting.qml b/tests/auto/declarative/behaviors/data/nonSelecting.qml new file mode 100644 index 0000000..ae9a9f5 --- /dev/null +++ b/tests/auto/declarative/behaviors/data/nonSelecting.qml @@ -0,0 +1,26 @@ +import Qt 4.6 +Rectangle { + width: 400 + height: 400 + Rectangle { + id: rect + objectName: "MyRect" + width: 100; height: 100; color: "green" + x: Behavior { + objectName: "MyBehavior"; + NumberAnimation { target: rect; property: "y"; duration: 200; } + } + } + MouseRegion { + id: clicker + anchors.fill: parent + } + states: State { + name: "moved" + when: clicker.pressed + PropertyChanges { + target: rect + x: 200 + } + } +} diff --git a/tests/auto/declarative/behaviors/data/reassignedAnimation.qml b/tests/auto/declarative/behaviors/data/reassignedAnimation.qml new file mode 100644 index 0000000..693a595 --- /dev/null +++ b/tests/auto/declarative/behaviors/data/reassignedAnimation.qml @@ -0,0 +1,27 @@ +import Qt 4.6 +Rectangle { + width: 400 + height: 400 + Rectangle { + id: rect + objectName: "MyRect" + width: 100; height: 100; color: "green" + x: Behavior { + objectName: "MyBehavior" + NumberAnimation { duration: 200 } + NumberAnimation { duration: 1000 } + } + } + MouseRegion { + id: clicker + anchors.fill: parent + } + states: State { + name: "moved" + when: clicker.pressed + PropertyChanges { + target: rect + x: 200 + } + } +} diff --git a/tests/auto/declarative/behaviors/tst_behaviors.cpp b/tests/auto/declarative/behaviors/tst_behaviors.cpp index 29c631d..da910d9 100644 --- a/tests/auto/declarative/behaviors/tst_behaviors.cpp +++ b/tests/auto/declarative/behaviors/tst_behaviors.cpp @@ -225,11 +225,9 @@ void tst_behaviors::reassignedAnimation() QTest::ignoreMessage(QtWarningMsg, "QML QmlBehavior (file://" SRCDIR "/data/reassignedAnimation.qml:9:12) Can't change the animation assigned to a Behavior."); QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(c.create()); QVERIFY(rect); - - rect->setState("moved"); - QTest::qWait(200 + 100); - qreal x = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect"))->x(); - QCOMPARE(x, qreal(200)); //i.e. the right behavior has been triggered + QCOMPARE(qobject_cast<QmlNumberAnimation*>( + qobject_cast<QmlBehavior*>( + rect->findChild<QmlBehavior*>("MyBehavior"))->animation())->duration(), 200); } QTEST_MAIN(tst_behaviors) diff --git a/tests/auto/declarative/datetimeformatter/tst_datetimeformatter.cpp b/tests/auto/declarative/datetimeformatter/tst_datetimeformatter.cpp index 1712b86..5899d8d 100644 --- a/tests/auto/declarative/datetimeformatter/tst_datetimeformatter.cpp +++ b/tests/auto/declarative/datetimeformatter/tst_datetimeformatter.cpp @@ -67,12 +67,16 @@ void tst_datetimeformatter::date() QVERIFY(formatter != 0); QDate date(2008,12,24); + QCOMPARE(formatter->date(), date); + QCOMPARE(formatter->dateTime().date(), date); QCOMPARE(formatter->dateText(),date.toString(Qt::SystemLocaleShortDate)); formatter->setLongStyle(true); + QVERIFY(formatter->longStyle()); QCOMPARE(formatter->dateText(),date.toString(Qt::SystemLocaleLongDate)); formatter->setDateFormat("ddd MMMM d yy"); + QCOMPARE(formatter->dateFormat(), QLatin1String("ddd MMMM d yy")); QCOMPARE(formatter->dateText(),date.toString("ddd MMMM d yy")); QVERIFY(formatter->timeText().isEmpty()); @@ -91,6 +95,7 @@ void tst_datetimeformatter::time() QTime time(14,15,38,200); QCOMPARE(formatter->time(),time); + QCOMPARE(formatter->dateTime().time(),time); QCOMPARE(formatter->timeText(),time.toString(Qt::SystemLocaleShortDate)); @@ -98,6 +103,7 @@ void tst_datetimeformatter::time() QCOMPARE(formatter->timeText(),time.toString(Qt::SystemLocaleLongDate)); formatter->setTimeFormat("H:m:s a"); + QCOMPARE(formatter->timeFormat(), QLatin1String("H:m:s a")); QCOMPARE(formatter->timeText(),time.toString("H:m:s a")); formatter->setTimeFormat("hh:mm:ss.zzz"); @@ -117,12 +123,16 @@ void tst_datetimeformatter::dateTime() QVERIFY(formatter != 0); QDateTime dateTime(QDate(1978,03,04),QTime(9,13,54)); + QCOMPARE(formatter->dateTime(),dateTime); + QCOMPARE(formatter->date(),dateTime.date()); + QCOMPARE(formatter->time(),dateTime.time()); QCOMPARE(formatter->dateTimeText(),dateTime.toString(Qt::SystemLocaleShortDate)); formatter->setLongStyle(true); QCOMPARE(formatter->dateTimeText(),dateTime.toString(Qt::SystemLocaleLongDate)); formatter->setDateTimeFormat("M/d/yy H:m:s a"); + QCOMPARE(formatter->dateTimeFormat(), QLatin1String("M/d/yy H:m:s a")); QCOMPARE(formatter->dateTimeText(),dateTime.toString("M/d/yy H:m:s a")); } diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro index 73269e1..1be38a8 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/declarative/declarative.pro @@ -1,35 +1,41 @@ TEMPLATE = subdirs -SUBDIRS += anchors \ - animatedimage \ - animations \ - behaviors \ - datetimeformatter \ +SUBDIRS += \ + anchors \ # Cover + animatedimage \ # Cover + animations \ # Cover + behaviors \ # Cover + datetimeformatter \ # Cover examples \ - layouts \ - listview \ - numberformatter \ - pathview \ - qfxloader \ - qfxpixmapcache \ - qfxtextedit \ - qfxtextinput \ - qfxwebview \ - qmetaobjectbuilder \ - qmlcontext \ - qmldom \ - qmlecmascript \ - qmlgraphicstext \ - qmllanguage \ - qmllist \ - qmllistaccessor \ - qmlmetaproperty \ - qmlmetatype \ - qmlpropertymap \ - qmltimer \ - repeater \ - sql \ - states \ - visual + layouts \ # Cover + listview \ # Cover + numberformatter \ # Cover + pathview \ # Cover + qfxloader \ # Cover + qfxtextedit \ # Cover + qfxtextinput \ # Cover + qfxwebview \ # Cover + qmetaobjectbuilder \ # Cover + qmlcontext \ # Cover + qmldom \ # Cover + qmlecmascript \ # Cover + qmlfontloader \ # Cover + qmlgraphicsborderimage \ # Cover + qmlgraphicsparticles \ # Cover + qmlgraphicstext \ # Cover + qmllanguage \ # Cover + qmllist \ # Cover + qmllistaccessor \ # Cover + qmlmetaproperty \ # Cover + qmlmetatype \ # Cover + qmlpixmapcache \ # Cover + qmlpropertymap \ # Cover + qmlqt \ # Cover + qmltimer \ # Cover + qmlxmllistmodel \ # Cover + repeater \ # Cover + sql \ # Cover + states \ # Cover + visual # Cover # Tests which should run in Pulse PULSE_TESTS = $$SUBDIRS diff --git a/tests/auto/declarative/examples/data/dummytest.qml b/tests/auto/declarative/examples/data/dummytest.qml index cd9d8fb..b20e907 100644 --- a/tests/auto/declarative/examples/data/dummytest.qml +++ b/tests/auto/declarative/examples/data/dummytest.qml @@ -2,4 +2,5 @@ import Qt.VisualTest 4.6 VisualTest { Frame { msec: 0 } + Frame { msec: 10 } } diff --git a/tests/auto/declarative/examples/data/webbrowser/webbrowser.qml b/tests/auto/declarative/examples/data/webbrowser/webbrowser.qml index bdf3290..d31787b 100644 --- a/tests/auto/declarative/examples/data/webbrowser/webbrowser.qml +++ b/tests/auto/declarative/examples/data/webbrowser/webbrowser.qml @@ -2,5 +2,5 @@ import Qt.VisualTest 4.6 VisualTest { Frame { msec: 0 } - Frame { msec: 1000 } + Frame { msec: 2000 } } diff --git a/tests/auto/declarative/examples/tst_examples.cpp b/tests/auto/declarative/examples/tst_examples.cpp index d758101..2cbb916 100644 --- a/tests/auto/declarative/examples/tst_examples.cpp +++ b/tests/auto/declarative/examples/tst_examples.cpp @@ -182,9 +182,10 @@ void tst_examples::examples() QFileInfo fi(file); QFileInfo dir(fi.path()); - QFileInfo testdata("data/"+dir.baseName()+"/"+fi.baseName()); + QString script = "data/"+dir.baseName()+"/"+fi.baseName(); + QFileInfo testdata(script+".qml"); QStringList arguments; - arguments << "-script" << (testdata.exists() ? testdata.filePath() : QLatin1String("data/dummytest")) + arguments << "-script" << (testdata.exists() ? script : QLatin1String("data/dummytest")) << "-scriptopts" << "play,testerror,exitoncomplete,exitonfailure" << file; QProcess p; diff --git a/tests/auto/declarative/listview/data/listview-enforcerange.qml b/tests/auto/declarative/listview/data/listview-enforcerange.qml new file mode 100644 index 0000000..46fddae --- /dev/null +++ b/tests/auto/declarative/listview/data/listview-enforcerange.qml @@ -0,0 +1,55 @@ +import Qt 4.6 + +Rectangle { + width: 240 + height: 320 + color: "#ffffff" + Component { + id: myDelegate + Item { + id: wrapper + objectName: "wrapper" + height: 20 + width: 240 + Text { + text: index + } + Text { + x: 30 + id: textName + objectName: "textName" + text: name + } + Text { + x: 120 + id: textNumber + objectName: "textNumber" + text: number + } + Text { + x: 200 + text: wrapper.y + } + } + } + + Component { + id: myHighlight + Rectangle { + color: "lightsteelblue" + } + } + + ListView { + id: list + objectName: "list" + width: 240 + height: 320 + model: testModel + delegate: myDelegate + highlight: myHighlight + preferredHighlightBegin: 100 + preferredHighlightEnd: 100 + highlightRangeMode: "StrictlyEnforceRange" + } +} diff --git a/tests/auto/declarative/listview/data/listview.qml b/tests/auto/declarative/listview/data/listview.qml index 9039b55..b7b838b 100644 --- a/tests/auto/declarative/listview/data/listview.qml +++ b/tests/auto/declarative/listview/data/listview.qml @@ -6,7 +6,7 @@ Rectangle { color: "#ffffff" resources: [ Component { - id: Delegate + id: myDelegate Rectangle { id: wrapper objectName: "wrapper" @@ -41,6 +41,6 @@ Rectangle { width: 240 height: 320 model: testModel - delegate: Delegate + delegate: myDelegate } } diff --git a/tests/auto/declarative/listview/tst_listview.cpp b/tests/auto/declarative/listview/tst_listview.cpp index 42d4900..6bf1080 100644 --- a/tests/auto/declarative/listview/tst_listview.cpp +++ b/tests/auto/declarative/listview/tst_listview.cpp @@ -66,11 +66,17 @@ private slots: void qListModelInterface_removed(); void qAbstractItemModel_removed(); + void qListModelInterface_moved(); + void qAbstractItemModel_moved(); + + void enforceRange(); + private: template <class T> void items(); template <class T> void changed(); template <class T> void inserted(); template <class T> void removed(); + template <class T> void moved(); QmlView *createView(const QString &filename); template<typename T> T *findItem(QmlGraphicsItem *parent, const QString &id, int index=-1); @@ -140,6 +146,11 @@ public: emit itemsRemoved(index, 1); } + void moveItem(int from, int to) { + list.move(from, to); + emit itemsMoved(from, to, 1); + } + void modifyItem(int index, const QString &name, const QString &number) { list[index] = QPair<QString,QString>(name, number); emit itemsChanged(index, 1, roles()); @@ -195,6 +206,12 @@ public: emit endRemoveRows(); } + void moveItem(int from, int to) { + emit beginMoveRows(QModelIndex(), from, from, QModelIndex(), to); + list.move(from, to); + emit endMoveRows(); + } + void modifyItem(int idx, const QString &name, const QString &number) { list[idx] = QPair<QString,QString>(name, number); emit dataChanged(index(idx,0), index(idx,0)); @@ -224,12 +241,13 @@ void tst_QmlGraphicsListView::items() canvas->execute(); qApp->processEvents(); - QmlGraphicsFlickable *listview = findItem<QmlGraphicsFlickable>(canvas->root(), "list"); + QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list"); QVERIFY(listview != 0); QmlGraphicsItem *viewport = listview->viewport(); QVERIFY(viewport != 0); + QCOMPARE(listview->count(), model.count()); QCOMPARE(viewport->childItems().count(), model.count()+1); // assumes all are visible, +1 for the (default) highlight item for (int i = 0; i < model.count(); ++i) { @@ -241,6 +259,11 @@ void tst_QmlGraphicsListView::items() QCOMPARE(number->text(), model.number(i)); } + listview->incrementCurrentIndex(); + QCOMPARE(listview->currentIndex(), 1); + listview->decrementCurrentIndex(); + QCOMPARE(listview->currentIndex(), 0); + delete canvas; } @@ -341,6 +364,26 @@ void tst_QmlGraphicsListView::inserted() QVERIFY(item->y() == i*20); } + for (int i = model.count(); i < 30; ++i) + model.insertItem(i, "Hello", QString::number(i)); + QTest::qWait(1000); + + listview->setViewportY(80); + QTest::qWait(1000); + + // Insert item outside visible area + model.insertItem(1, "Hello", "1324"); + QTest::qWait(1000); + + QVERIFY(listview->viewportY() == 80); + + // Confirm items positioned correctly + int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count() - 1; + for (int i = 5; i < 5+itemCount; ++i) { + QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i); + QVERIFY(item->y() == i*20 - 20); + } + delete canvas; } @@ -454,6 +497,141 @@ void tst_QmlGraphicsListView::removed() delete canvas; } +template <class T> +void tst_QmlGraphicsListView::moved() +{ + QmlView *canvas = createView(SRCDIR "/data/listview.qml"); + + T model; + for (int i = 0; i < 30; i++) + model.addItem("Item" + QString::number(i), ""); + + QmlContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list"); + QVERIFY(listview != 0); + + QmlGraphicsItem *viewport = listview->viewport(); + QVERIFY(viewport != 0); + + model.moveItem(1, 4); + + // let transitions settle. + QTest::qWait(1000); + + QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 1); + QVERIFY(name != 0); + QCOMPARE(name->text(), model.name(1)); + QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 1); + QVERIFY(number != 0); + QCOMPARE(number->text(), model.number(1)); + + name = findItem<QmlGraphicsText>(viewport, "textName", 4); + QVERIFY(name != 0); + QCOMPARE(name->text(), model.name(4)); + number = findItem<QmlGraphicsText>(viewport, "textNumber", 4); + QVERIFY(number != 0); + QCOMPARE(number->text(), model.number(4)); + + // Confirm items positioned correctly + int itemCount = findItems<QmlGraphicsItem>(viewport, "wrapper").count(); + for (int i = 0; i < model.count() && i < itemCount; ++i) { + QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QVERIFY(item); + QVERIFY(item->y() == i*20); + } + + listview->setViewportY(80); + + // move outside visible area + model.moveItem(1, 18); + + // let transitions settle. + QTest::qWait(1000); + + // Confirm items positioned correctly and indexes correct + for (int i = 3; i < model.count() && i < itemCount; ++i) { + QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QVERIFY(item); + QVERIFY(item->y() == i*20 + 20); + name = findItem<QmlGraphicsText>(viewport, "textName", i); + QVERIFY(name != 0); + QCOMPARE(name->text(), model.name(i)); + number = findItem<QmlGraphicsText>(viewport, "textNumber", i); + QVERIFY(number != 0); + QCOMPARE(number->text(), model.number(i)); + } + + // move from outside visible into visible + model.moveItem(20, 4); + + // let transitions settle. + QTest::qWait(1000); + + // Confirm items positioned correctly and indexes correct + for (int i = 3; i < model.count() && i < itemCount; ++i) { + QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", i); + if (!item) qWarning() << "Item" << i << "not found"; + QVERIFY(item); + QVERIFY(item->y() == i*20 + 20); + name = findItem<QmlGraphicsText>(viewport, "textName", i); + QVERIFY(name != 0); + QCOMPARE(name->text(), model.name(i)); + number = findItem<QmlGraphicsText>(viewport, "textNumber", i); + QVERIFY(number != 0); + QCOMPARE(number->text(), model.number(i)); + } + + delete canvas; +} + +void tst_QmlGraphicsListView::enforceRange() +{ + QmlView *canvas = createView(SRCDIR "/data/listview-enforcerange.qml"); + + TestModel model; + for (int i = 0; i < 30; i++) + model.addItem("Item" + QString::number(i), ""); + + QmlContext *ctxt = canvas->rootContext(); + ctxt->setContextProperty("testModel", &model); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsListView *listview = findItem<QmlGraphicsListView>(canvas->root(), "list"); + QVERIFY(listview != 0); + + QmlGraphicsItem *viewport = listview->viewport(); + QVERIFY(viewport != 0); + + // view should be positioned at the top of the range. + QmlGraphicsItem *item = findItem<QmlGraphicsItem>(viewport, "wrapper", 0); + QVERIFY(item); + QCOMPARE(listview->viewportY(), -100.0); + + QmlGraphicsText *name = findItem<QmlGraphicsText>(viewport, "textName", 0); + QVERIFY(name != 0); + QCOMPARE(name->text(), model.name(0)); + QmlGraphicsText *number = findItem<QmlGraphicsText>(viewport, "textNumber", 0); + QVERIFY(number != 0); + QCOMPARE(number->text(), model.number(0)); + + // Check currentIndex is updated when viewport moves + listview->setViewportY(20); + QTest::qWait(1000); + + QCOMPARE(listview->currentIndex(), 6); + + delete canvas; +} + void tst_QmlGraphicsListView::qListModelInterface_items() { items<TestModel>(); @@ -494,6 +672,17 @@ void tst_QmlGraphicsListView::qAbstractItemModel_removed() removed<TestModel2>(); } +void tst_QmlGraphicsListView::qListModelInterface_moved() +{ + moved<TestModel>(); +} + +void tst_QmlGraphicsListView::qAbstractItemModel_moved() +{ + moved<TestModel2>(); +} + + QmlView *tst_QmlGraphicsListView::createView(const QString &filename) { QmlView *canvas = new QmlView(0); diff --git a/tests/auto/declarative/qfxloader/SetSourceComponent.qml b/tests/auto/declarative/qfxloader/SetSourceComponent.qml index c5dd7ff..1db56c4 100644 --- a/tests/auto/declarative/qfxloader/SetSourceComponent.qml +++ b/tests/auto/declarative/qfxloader/SetSourceComponent.qml @@ -1,6 +1,6 @@ import Qt 4.6 Item { - Component { id: Comp; Rectangle { width: 120; height: 60 } } - Loader { sourceComponent: Comp } + Component { id: comp; Rectangle { width: 100; height: 50 } } + Loader { sourceComponent: comp } } diff --git a/tests/auto/declarative/qfxloader/tst_qfxloader.cpp b/tests/auto/declarative/qfxloader/tst_qfxloader.cpp index 38d06b8..9a8f8f1 100644 --- a/tests/auto/declarative/qfxloader/tst_qfxloader.cpp +++ b/tests/auto/declarative/qfxloader/tst_qfxloader.cpp @@ -53,6 +53,9 @@ public: private slots: void url(); void component(); + void clear(); + void urlToComponent(); + void componentToUrl(); void sizeLoaderToItem(); void sizeItemToLoader(); void noResize(); @@ -86,6 +89,8 @@ void tst_qfxloader::url() QVERIFY(loader->item()); QCOMPARE(loader->progress(), 1.0); QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1); + + delete loader; } void tst_qfxloader::component() @@ -99,6 +104,69 @@ void tst_qfxloader::component() QVERIFY(loader->item()); QCOMPARE(loader->progress(), 1.0); QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1); + + delete loader; +} + +void tst_qfxloader::clear() +{ + QmlComponent component(&engine, QByteArray("import Qt 4.6\nLoader { source: \"Rect120x60.qml\" }"), QUrl("file://" SRCDIR "/")); + QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create()); + QVERIFY(loader != 0); + QVERIFY(loader->item()); + QCOMPARE(loader->progress(), 1.0); + QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1); + + loader->setSource(QUrl("")); + QVERIFY(loader->item() == 0); + QCOMPARE(loader->progress(), 0.0); + QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 0); + + delete loader; +} + +void tst_qfxloader::urlToComponent() +{ + QmlComponent component(&engine, QByteArray("import Qt 4.6\n" + "Loader {\n" + " id: loader\n" + " Component { id: myComp; Rectangle { width: 10; height: 10 } }\n" + " source: \"Rect120x60.qml\"\n" + " Timer { interval: 100; running: true; onTriggered: loader.sourceComponent = myComp }\n" + "}" ) + , QUrl("file://" SRCDIR "/")); + QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(component.create()); + QTest::qWait(1000); + QVERIFY(loader != 0); + QVERIFY(loader->item()); + QCOMPARE(loader->progress(), 1.0); + QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1); + QCOMPARE(loader->width(), 10.0); + QCOMPARE(loader->height(), 10.0); + + delete loader; +} + +void tst_qfxloader::componentToUrl() +{ + QmlComponent component(&engine, QUrl("file://" SRCDIR "/SetSourceComponent.qml")); + QmlGraphicsItem *item = qobject_cast<QmlGraphicsItem*>(component.create()); + QVERIFY(item); + + QmlGraphicsLoader *loader = qobject_cast<QmlGraphicsLoader*>(item->QGraphicsObject::children().at(1)); + QVERIFY(loader); + QVERIFY(loader->item()); + QCOMPARE(loader->progress(), 1.0); + QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1); + + loader->setSource(QUrl("file://" SRCDIR "/Rect120x60.qml")); + QVERIFY(loader->item()); + QCOMPARE(loader->progress(), 1.0); + QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1); + QCOMPARE(loader->width(), 120.0); + QCOMPARE(loader->height(), 60.0); + + delete loader; } void tst_qfxloader::sizeLoaderToItem() diff --git a/tests/auto/declarative/qmlfontloader/data/dummy.ttf b/tests/auto/declarative/qmlfontloader/data/dummy.ttf new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/auto/declarative/qmlfontloader/data/dummy.ttf diff --git a/tests/auto/declarative/qmlfontloader/qmlfontloader.pro b/tests/auto/declarative/qmlfontloader/qmlfontloader.pro index 0ecfde0..bc89639 100644 --- a/tests/auto/declarative/qmlfontloader/qmlfontloader.pro +++ b/tests/auto/declarative/qmlfontloader/qmlfontloader.pro @@ -3,3 +3,6 @@ contains(QT_CONFIG,declarative): QT += declarative gui macx:CONFIG -= app_bundle SOURCES += tst_qmlfontloader.cpp + +# Define SRCDIR equal to test's source directory +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlfontloader/tst_qmlfontloader.cpp b/tests/auto/declarative/qmlfontloader/tst_qmlfontloader.cpp index 464ae5d..efc86cd 100644 --- a/tests/auto/declarative/qmlfontloader/tst_qmlfontloader.cpp +++ b/tests/auto/declarative/qmlfontloader/tst_qmlfontloader.cpp @@ -52,10 +52,12 @@ public: tst_qmlfontloader(); private slots: - void nofont(); - void namedfont(); - void localfont(); - void webfont(); + void noFont(); + void namedFont(); + void localFont(); + void failLocalFont(); + void webFont(); + void failWebFont(); private slots: @@ -67,7 +69,7 @@ tst_qmlfontloader::tst_qmlfontloader() { } -void tst_qmlfontloader::nofont() +void tst_qmlfontloader::noFont() { QString componentStr = "import Qt 4.6\nFontLoader { }"; QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); @@ -75,9 +77,12 @@ void tst_qmlfontloader::nofont() QVERIFY(fontObject != 0); QCOMPARE(fontObject->name(), QString("")); + QTRY_VERIFY(fontObject->status() == QmlFontLoader::Null); + + delete fontObject; } -void tst_qmlfontloader::namedfont() +void tst_qmlfontloader::namedFont() { QString componentStr = "import Qt 4.6\nFontLoader { name: \"Helvetica\" }"; QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); @@ -85,19 +90,32 @@ void tst_qmlfontloader::namedfont() QVERIFY(fontObject != 0); QCOMPARE(fontObject->name(), QString("Helvetica")); + QTRY_VERIFY(fontObject->status() == QmlFontLoader::Ready); +} + +void tst_qmlfontloader::localFont() +{ + QString componentStr = "import Qt 4.6\nFontLoader { source: \"" SRCDIR "/data/Fontin-Bold.ttf\" }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlFontLoader *fontObject = qobject_cast<QmlFontLoader*>(component.create()); + + QVERIFY(fontObject != 0); + QTRY_COMPARE(fontObject->name(), QString("Fontin")); + QTRY_VERIFY(fontObject->status() == QmlFontLoader::Ready); } -void tst_qmlfontloader::localfont() +void tst_qmlfontloader::failLocalFont() { - QString componentStr = "import Qt 4.6\nFontLoader { source: \"data/Fontin-Bold.ttf\" }"; + QString componentStr = "import Qt 4.6\nFontLoader { source: \"" SRCDIR "/data/dummy.ttf\" }"; QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); QmlFontLoader *fontObject = qobject_cast<QmlFontLoader*>(component.create()); QVERIFY(fontObject != 0); - QCOMPARE(fontObject->name(), QString("Fontin")); + QTRY_COMPARE(fontObject->name(), QString("")); + QTRY_VERIFY(fontObject->status() == QmlFontLoader::Error); } -void tst_qmlfontloader::webfont() +void tst_qmlfontloader::webFont() { QString componentStr = "import Qt 4.6\nFontLoader { source: \"http://www.princexml.com/fonts/steffmann/Starburst.ttf\" }"; QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); @@ -105,6 +123,18 @@ void tst_qmlfontloader::webfont() QVERIFY(fontObject != 0); QTRY_COMPARE(fontObject->name(), QString("Starburst")); + QTRY_VERIFY(fontObject->status() == QmlFontLoader::Ready); +} + +void tst_qmlfontloader::failWebFont() +{ + QString componentStr = "import Qt 4.6\nFontLoader { source: \"http://wrong.address.com/Starburst.ttf\" }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlFontLoader *fontObject = qobject_cast<QmlFontLoader*>(component.create()); + + QVERIFY(fontObject != 0); + QTRY_COMPARE(fontObject->name(), QString("")); + QTRY_VERIFY(fontObject->status() == QmlFontLoader::Error); } QTEST_MAIN(tst_qmlfontloader) diff --git a/tests/auto/declarative/qmlgraphicsborderimage/data/colors-round.sci b/tests/auto/declarative/qmlgraphicsborderimage/data/colors-round.sci new file mode 100644 index 0000000..5d2f49f --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsborderimage/data/colors-round.sci @@ -0,0 +1,7 @@ +border.left:10 +border.top:20 +border.right:30 +border.bottom:40 +horizontalTileRule:Round +verticalTileRule:Repeat +source:colors.png diff --git a/tests/auto/declarative/qmlgraphicsborderimage/data/colors.png b/tests/auto/declarative/qmlgraphicsborderimage/data/colors.png Binary files differnew file mode 100644 index 0000000..dfb62f3 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsborderimage/data/colors.png diff --git a/tests/auto/declarative/qmlgraphicsborderimage/qmlgraphicsborderimage.pro b/tests/auto/declarative/qmlgraphicsborderimage/qmlgraphicsborderimage.pro new file mode 100644 index 0000000..82da769 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsborderimage/qmlgraphicsborderimage.pro @@ -0,0 +1,8 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui +macx:CONFIG -= app_bundle + +SOURCES += tst_qmlgraphicsborderimage.cpp + +# Define SRCDIR equal to test's source directory +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp b/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp new file mode 100644 index 0000000..4174ccf --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsborderimage/tst_qmlgraphicsborderimage.cpp @@ -0,0 +1,162 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (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 Technology Preview License Agreement accompanying +** this package. +** +** 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.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <qtest.h> +#include <QTextDocument> +#include <QtDeclarative/qmlengine.h> +#include <QtDeclarative/qmlcomponent.h> +#include <private/qmlgraphicsborderimage_p.h> +#include <private/qmlgraphicsimagebase_p.h> +#include <private/qmlgraphicsscalegrid_p_p.h> + +class tst_qmlgraphicsborderimage : public QObject + +{ + Q_OBJECT +public: + tst_qmlgraphicsborderimage(); + +private slots: + void simple(); + void resized(); + void smooth(); + void tileModes(); + void sciFile(); + +private: + QmlEngine engine; +}; + +tst_qmlgraphicsborderimage::tst_qmlgraphicsborderimage() +{ +} + +void tst_qmlgraphicsborderimage::simple() +{ + QString componentStr = "import Qt 4.6\nBorderImage { source: \"" SRCDIR "/data/colors.png\" }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->width() == 120); + QVERIFY(obj->height() == 120); + QVERIFY(obj->horizontalTileMode() == QmlGraphicsBorderImage::Stretch); + QVERIFY(obj->verticalTileMode() == QmlGraphicsBorderImage::Stretch); + + delete obj; +} + +void tst_qmlgraphicsborderimage::resized() +{ + QString componentStr = "import Qt 4.6\nBorderImage { source: \"" SRCDIR "/data/colors.png\"; width: 300; height: 300 }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->width() == 300); + QVERIFY(obj->height() == 300); + QVERIFY(obj->horizontalTileMode() == QmlGraphicsBorderImage::Stretch); + QVERIFY(obj->verticalTileMode() == QmlGraphicsBorderImage::Stretch); + + delete obj; +} + +void tst_qmlgraphicsborderimage::smooth() +{ + QString componentStr = "import Qt 4.6\nBorderImage { source: \"" SRCDIR "/data/colors.png\"; smooth: true; width: 300; height: 300 }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->width() == 300); + QVERIFY(obj->height() == 300); + QVERIFY(obj->smooth() == true); + QVERIFY(obj->horizontalTileMode() == QmlGraphicsBorderImage::Stretch); + QVERIFY(obj->verticalTileMode() == QmlGraphicsBorderImage::Stretch); + + delete obj; +} + +void tst_qmlgraphicsborderimage::tileModes() +{ + { + QString componentStr = "import Qt 4.6\nBorderImage { source: \"" SRCDIR "/data/colors.png\"; width: 100; height: 300; horizontalTileMode: BorderImage.Repeat; verticalTileMode: BorderImage.Repeat }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->width() == 100); + QVERIFY(obj->height() == 300); + QVERIFY(obj->horizontalTileMode() == QmlGraphicsBorderImage::Repeat); + QVERIFY(obj->verticalTileMode() == QmlGraphicsBorderImage::Repeat); + + delete obj; + } + { + QString componentStr = "import Qt 4.6\nBorderImage { source: \"" SRCDIR "/data/colors.png\"; width: 300; height: 150; horizontalTileMode: BorderImage.Round; verticalTileMode: BorderImage.Round }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->width() == 300); + QVERIFY(obj->height() == 150); + QVERIFY(obj->horizontalTileMode() == QmlGraphicsBorderImage::Round); + QVERIFY(obj->verticalTileMode() == QmlGraphicsBorderImage::Round); + + delete obj; + } +} + +void tst_qmlgraphicsborderimage::sciFile() +{ + QString componentStr = "import Qt 4.6\nBorderImage { source: \"" SRCDIR "/data/colors-round.sci\"; width: 300; height: 300 }"; + QmlComponent component(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsBorderImage *obj = qobject_cast<QmlGraphicsBorderImage*>(component.create()); + QVERIFY(obj != 0); + QVERIFY(obj->width() == 300); + QVERIFY(obj->height() == 300); + QVERIFY(obj->border()->left() == 10); + QVERIFY(obj->border()->top() == 20); + QVERIFY(obj->border()->right() == 30); + QVERIFY(obj->border()->bottom() == 40); + QVERIFY(obj->horizontalTileMode() == QmlGraphicsBorderImage::Round); + QVERIFY(obj->verticalTileMode() == QmlGraphicsBorderImage::Repeat); + + delete obj; +} + +QTEST_MAIN(tst_qmlgraphicsborderimage) + +#include "tst_qmlgraphicsborderimage.moc" diff --git a/tests/auto/declarative/qmlgraphicsparticles/data/particle.png b/tests/auto/declarative/qmlgraphicsparticles/data/particle.png Binary files differnew file mode 100644 index 0000000..defbde5 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsparticles/data/particle.png diff --git a/tests/auto/declarative/qmlgraphicsparticles/data/particles.qml b/tests/auto/declarative/qmlgraphicsparticles/data/particles.qml new file mode 100644 index 0000000..dccd2c7 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsparticles/data/particles.qml @@ -0,0 +1,15 @@ +import Qt 4.6 +Rectangle{ + width: 100 + height: 100 + color: "black" + objectName: "rect" + Particles { id: particles + objectName: "particles" + width:1; height:1; anchors.centerIn: parent; opacity: 1 + lifeSpan: 100; lifeSpanDeviation: 20; count:1000; + fadeInDuration: 20; fadeOutDuration: 20; + angle: 0; angleDeviation: 360; velocity: 500; velocityDeviation:30 + source: "particle.png" + } +} diff --git a/tests/auto/declarative/qmlgraphicsparticles/qmlgraphicsparticles.pro b/tests/auto/declarative/qmlgraphicsparticles/qmlgraphicsparticles.pro new file mode 100644 index 0000000..94eeb4e --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsparticles/qmlgraphicsparticles.pro @@ -0,0 +1,8 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui +macx:CONFIG -= app_bundle + +SOURCES += tst_qmlgraphicsparticles.cpp + +# Define SRCDIR equal to test's source directory +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlgraphicsparticles/tst_qmlgraphicsparticles.cpp b/tests/auto/declarative/qmlgraphicsparticles/tst_qmlgraphicsparticles.cpp new file mode 100644 index 0000000..e50437a --- /dev/null +++ b/tests/auto/declarative/qmlgraphicsparticles/tst_qmlgraphicsparticles.cpp @@ -0,0 +1,122 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (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 Technology Preview License Agreement accompanying +** this package. +** +** 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.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <QtTest/QtTest> +#include <qmlview.h> +#include <private/qmlgraphicsparticles_p.h> + +class tst_QmlGraphicsParticles : public QObject +{ + Q_OBJECT +public: + tst_QmlGraphicsParticles(); + +private slots: + void properties(); + void runs(); +private: + QmlView *createView(const QString &filename); + +}; + +tst_QmlGraphicsParticles::tst_QmlGraphicsParticles() +{ +} + +void tst_QmlGraphicsParticles::properties() +{ + QmlView *canvas = createView(SRCDIR "/data/particles.qml"); + QVERIFY(canvas->root()); + QmlGraphicsParticles* particles = canvas->root()->findChild<QmlGraphicsParticles*>("particles"); + QVERIFY(particles); + + particles->setSource(QUrl("file://" SRCDIR "/data/particle.png")); + QCOMPARE(particles->source(), QUrl("file://" SRCDIR "/data/particle.png")); + + particles->setLifeSpanDeviation(1000); + QCOMPARE(particles->lifeSpanDeviation(), 1000); + + particles->setFadeInDuration(1000); + QCOMPARE(particles->fadeInDuration(), 1000); + + particles->setFadeOutDuration(1000); + QCOMPARE(particles->fadeOutDuration(), 1000); + + particles->setAngle(100.0); + QCOMPARE(particles->angle(), 100.0); + + particles->setAngleDeviation(100.0); + QCOMPARE(particles->angleDeviation(), 100.0); + + particles->setVelocity(100.0); + QCOMPARE(particles->velocity(), 100.0); + + particles->setVelocityDeviation(100.0); + QCOMPARE(particles->velocityDeviation(), 100.0); + + particles->setEmitting(false); + QCOMPARE(particles->emitting(), false); +} + +void tst_QmlGraphicsParticles::runs() +{ + QmlView *canvas = createView(SRCDIR "/data/particles.qml"); + QVERIFY(canvas->root()); + QmlGraphicsParticles* particles = canvas->root()->findChild<QmlGraphicsParticles*>("particles"); + QVERIFY(particles); + QTest::qWait(1000);//Run for one second. Test passes if it doesn't crash. +} + +QmlView *tst_QmlGraphicsParticles::createView(const QString &filename) +{ + QmlView *canvas = new QmlView(0); + canvas->setFixedSize(240,320); + + QFile file(filename); + file.open(QFile::ReadOnly); + QString qml = file.readAll(); + canvas->setQml(qml, filename); + canvas->execute(); + + return canvas; +} +QTEST_MAIN(tst_QmlGraphicsParticles) + +#include "tst_qmlgraphicsparticles.moc" diff --git a/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp b/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp index d53de59..fc47d41 100644 --- a/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp +++ b/tests/auto/declarative/qmlgraphicstext/tst_qmlgraphicstext.cpp @@ -43,6 +43,7 @@ #include <QtDeclarative/qmlengine.h> #include <QtDeclarative/qmlcomponent.h> #include <private/qmlgraphicstext_p.h> +#include <private/qmlvaluetype_p.h> #include <QFontMetrics> class tst_qmlgraphicstext : public QObject @@ -57,6 +58,7 @@ private slots: void width(); void wrap(); void elide(); + void textFormat(); // ### these tests may be trivial void horizontalAlignment(); @@ -66,6 +68,15 @@ private slots: void color(); void smooth(); + // QmlFontValueType + void weight(); + void underline(); + void overline(); + void strikeout(); + void capitalization(); + void letterSpacing(); + void wordSpacing(); + private: QStringList standard; QStringList richText; @@ -87,54 +98,54 @@ private: tst_qmlgraphicstext::tst_qmlgraphicstext() { standard << "the quick brown fox jumped over the lazy dog" - << "the quick brown fox\n jumped over the lazy dog"; + << "the quick brown fox\n jumped over the lazy dog"; richText << "<i>the <b>quick</b> brown <a href=\\\"http://www.google.com\\\">fox</a> jumped over the <b>lazy</b> dog</i>" - << "<i>the <b>quick</b> brown <a href=\\\"http://www.google.com\\\">fox</a><br>jumped over the <b>lazy</b> dog</i>"; + << "<i>the <b>quick</b> brown <a href=\\\"http://www.google.com\\\">fox</a><br>jumped over the <b>lazy</b> dog</i>"; horizontalAlignmentmentStrings << "AlignLeft" - << "AlignRight" - << "AlignHCenter"; + << "AlignRight" + << "AlignHCenter"; verticalAlignmentmentStrings << "AlignTop" - << "AlignBottom" - << "AlignVCenter"; + << "AlignBottom" + << "AlignVCenter"; horizontalAlignmentments << Qt::AlignLeft - << Qt::AlignRight - << Qt::AlignHCenter; + << Qt::AlignRight + << Qt::AlignHCenter; verticalAlignmentments << Qt::AlignTop - << Qt::AlignBottom - << Qt::AlignVCenter; + << Qt::AlignBottom + << Qt::AlignVCenter; styleStrings << "Normal" - << "Outline" - << "Raised" - << "Sunken"; + << "Outline" + << "Raised" + << "Sunken"; styles << QmlGraphicsText::Normal - << QmlGraphicsText::Outline - << QmlGraphicsText::Raised - << QmlGraphicsText::Sunken; + << QmlGraphicsText::Outline + << QmlGraphicsText::Raised + << QmlGraphicsText::Sunken; colorStrings << "aliceblue" - << "antiquewhite" - << "aqua" - << "darkkhaki" - << "darkolivegreen" - << "dimgray" - << "palevioletred" - << "lightsteelblue" - << "#000000" - << "#AAAAAA" - << "#FFFFFF" - << "#2AC05F"; - // - // need a different test to do alpha channel test - // << "#AA0011DD" - // << "#00F16B11"; - // + << "antiquewhite" + << "aqua" + << "darkkhaki" + << "darkolivegreen" + << "dimgray" + << "palevioletred" + << "lightsteelblue" + << "#000000" + << "#AAAAAA" + << "#FFFFFF" + << "#2AC05F"; + // + // need a different test to do alpha channel test + // << "#AA0011DD" + // << "#00F16B11"; + // } void tst_qmlgraphicstext::text() @@ -145,6 +156,9 @@ void tst_qmlgraphicstext::text() QVERIFY(textObject != 0); QCOMPARE(textObject->text(), QString("")); + QVERIFY(textObject->width() == 0); + + delete textObject; } for (int i = 0; i < standard.size(); i++) @@ -155,6 +169,7 @@ void tst_qmlgraphicstext::text() QVERIFY(textObject != 0); QCOMPARE(textObject->text(), standard.at(i)); + QVERIFY(textObject->width() > 0); } for (int i = 0; i < richText.size(); i++) @@ -166,6 +181,7 @@ void tst_qmlgraphicstext::text() QVERIFY(textObject != 0); QString expected = richText.at(i); QCOMPARE(textObject->text(), expected.replace("\\\"", "\"")); + QVERIFY(textObject->width() > 0); } } @@ -176,11 +192,14 @@ void tst_qmlgraphicstext::width() QmlComponent textComponent(&engine, "import Qt 4.6\nText { text: \"\" }", QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + QVERIFY(textObject != 0); QCOMPARE(textObject->width(), 0.); } for (int i = 0; i < standard.size(); i++) { + QVERIFY(!Qt::mightBeRichText(standard.at(i))); // self-test + QFont f; QFontMetrics fm(f); int metricWidth = fm.size(Qt::TextExpandTabs && Qt::TextShowMnemonic, standard.at(i)).width(); @@ -189,11 +208,15 @@ void tst_qmlgraphicstext::width() QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + QVERIFY(textObject != 0); QCOMPARE(textObject->width(), qreal(metricWidth)); + QVERIFY(textObject->textFormat() == QmlGraphicsText::AutoText); // setting text doesn't change format } for (int i = 0; i < richText.size(); i++) { + QVERIFY(Qt::mightBeRichText(richText.at(i))); // self-test + QTextDocument document; document.setHtml(richText.at(i)); document.setDocumentMargin(0); @@ -204,7 +227,9 @@ void tst_qmlgraphicstext::width() QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + QVERIFY(textObject != 0); QCOMPARE(textObject->width(), qreal(documentWidth)); + QVERIFY(textObject->textFormat() == QmlGraphicsText::AutoText); // setting text doesn't change format } } @@ -217,6 +242,8 @@ void tst_qmlgraphicstext::wrap() QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); textHeight = textObject->height(); + QVERIFY(textObject != 0); + QVERIFY(textObject->wrap() == true); QCOMPARE(textObject->width(), 300.); } @@ -226,6 +253,7 @@ void tst_qmlgraphicstext::wrap() QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + QVERIFY(textObject != 0); QCOMPARE(textObject->width(), 30.); QVERIFY(textObject->height() > textHeight); } @@ -236,6 +264,7 @@ void tst_qmlgraphicstext::wrap() QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + QVERIFY(textObject != 0); QCOMPARE(textObject->width(), 30.); QVERIFY(textObject->height() > textHeight); } @@ -246,38 +275,56 @@ void tst_qmlgraphicstext::elide() { for (Qt::TextElideMode m = Qt::ElideLeft; m<=Qt::ElideNone; m=Qt::TextElideMode(int(m)+1)) { const char* elidename[]={"ElideLeft", "ElideRight", "ElideMiddle", "ElideNone"}; - QString elide = "elide: \""+QString(elidename[int(m)])+"\";"; + QString elide = "elide: Text." + QString(elidename[int(m)]) + ";"; // XXX Poor coverage. { - QmlComponent textComponent(&engine, ("import Qt 4.6\nText { text: \"\"; "+elide+" width: 300 }").toLatin1(), QUrl("file://")); + QmlComponent textComponent(&engine, ("import Qt 4.6\nText { text: \"\"; "+elide+" width: 100 }").toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); - QCOMPARE(textObject->width(), 300.); + QCOMPARE(textObject->width(), 100.); } for (int i = 0; i < standard.size(); i++) { - QString componentStr = "import Qt 4.6\nText { "+elide+" width: 300; text: \"" + standard.at(i) + "\" }"; + QString componentStr = "import Qt 4.6\nText { "+elide+" width: 100; text: \"" + standard.at(i) + "\" }"; QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); - QCOMPARE(textObject->width(), 300.); + QCOMPARE(textObject->width(), 100.); } // richtext - does nothing for (int i = 0; i < richText.size(); i++) { - QString componentStr = "import Qt 4.6\nText { "+elide+" width: 300; text: \"" + richText.at(i) + "\" }"; + QString componentStr = "import Qt 4.6\nText { "+elide+" width: 100; text: \"" + richText.at(i) + "\" }"; QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); - QCOMPARE(textObject->width(), 300.); + QCOMPARE(textObject->width(), 100.); } } } +void tst_qmlgraphicstext::textFormat() +{ + { + QmlComponent textComponent(&engine, "import Qt 4.6\nText { text: \"Hello\"; textFormat: Text.RichText }", QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QVERIFY(textObject->textFormat() == QmlGraphicsText::RichText); + } + { + QmlComponent textComponent(&engine, "import Qt 4.6\nText { text: \"<b>Hello</b>\"; textFormat: Text.PlainText }", QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QVERIFY(textObject->textFormat() == QmlGraphicsText::PlainText); + } +} + //the alignment tests may be trivial o.oa void tst_qmlgraphicstext::horizontalAlignment() { @@ -320,6 +367,8 @@ void tst_qmlgraphicstext::verticalAlignment() QString componentStr = "import Qt 4.6\nText { verticalAlignment: \"" + verticalAlignmentmentStrings.at(j) + "\"; text: \"" + standard.at(i) + "\" }"; QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); QCOMPARE((int)textObject->vAlign(), (int)verticalAlignmentments.at(j)); } } @@ -332,6 +381,7 @@ void tst_qmlgraphicstext::verticalAlignment() QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + QVERIFY(textObject != 0); QCOMPARE((int)textObject->vAlign(), (int)verticalAlignmentments.at(j)); } } @@ -469,13 +519,13 @@ void tst_qmlgraphicstext::smooth() QString componentStr = "import Qt 4.6\nText { smooth: true; text: \"" + standard.at(i) + "\" }"; QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); - QCOMPARE(textObject->smoothTransform(), true); + QCOMPARE(textObject->smooth(), true); } { QString componentStr = "import Qt 4.6\nText { text: \"" + standard.at(i) + "\" }"; QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); - QCOMPARE(textObject->smoothTransform(), false); + QCOMPARE(textObject->smooth(), false); } } for (int i = 0; i < richText.size(); i++) @@ -484,17 +534,197 @@ void tst_qmlgraphicstext::smooth() QString componentStr = "import Qt 4.6\nText { smooth: true; text: \"" + richText.at(i) + "\" }"; QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); - QCOMPARE(textObject->smoothTransform(), true); + QCOMPARE(textObject->smooth(), true); } { QString componentStr = "import Qt 4.6\nText { text: \"" + richText.at(i) + "\" }"; QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); - QCOMPARE(textObject->smoothTransform(), false); + QCOMPARE(textObject->smooth(), false); } } } +void tst_qmlgraphicstext::weight() +{ + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE((int)textObject->font().weight(), (int)QmlFontValueType::Normal); + } + { + QString componentStr = "import Qt 4.6\nText { font.weight: \"Bold\"; text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE((int)textObject->font().weight(), (int)QmlFontValueType::Bold); + } +} + +void tst_qmlgraphicstext::underline() +{ + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().underline(), false); + } + { + QString componentStr = "import Qt 4.6\nText { font.underline: true; text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().underline(), true); + } +} + +void tst_qmlgraphicstext::overline() +{ + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().overline(), false); + } + { + QString componentStr = "import Qt 4.6\nText { font.overline: true; text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().overline(), true); + } +} + +void tst_qmlgraphicstext::strikeout() +{ + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().strikeOut(), false); + } + { + QString componentStr = "import Qt 4.6\nText { font.strikeout: true; text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().strikeOut(), true); + } +} + +void tst_qmlgraphicstext::capitalization() +{ + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::MixedCase); + } + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.capitalization: \"AllUppercase\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::AllUppercase); + } + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.capitalization: \"AllLowercase\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::AllLowercase); + } + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.capitalization: \"SmallCaps\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::SmallCaps); + } + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.capitalization: \"Capitalize\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE((int)textObject->font().capitalization(), (int)QmlFontValueType::Capitalize); + } +} + +void tst_qmlgraphicstext::letterSpacing() +{ + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().letterSpacing(), 0.0); + } + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.letterSpacing: -50 }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().letterSpacing(), -50.); + } + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.letterSpacing: 200 }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().letterSpacing(), 200.); + } +} + +void tst_qmlgraphicstext::wordSpacing() +{ + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\" }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().wordSpacing(), 0.0); + } + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.wordSpacing: -50 }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().wordSpacing(), -50.); + } + { + QString componentStr = "import Qt 4.6\nText { text: \"Hello world!\"; font.wordSpacing: 200 }"; + QmlComponent textComponent(&engine, componentStr.toLatin1(), QUrl("file://")); + QmlGraphicsText *textObject = qobject_cast<QmlGraphicsText*>(textComponent.create()); + + QVERIFY(textObject != 0); + QCOMPARE(textObject->font().wordSpacing(), 200.); + } +} + QTEST_MAIN(tst_qmlgraphicstext) #include "tst_qmlgraphicstext.moc" diff --git a/tests/auto/declarative/qmllanguage/data/NestedErrorsType.qml b/tests/auto/declarative/qmllanguage/data/NestedErrorsType.qml new file mode 100644 index 0000000..5cc8d20 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/NestedErrorsType.qml @@ -0,0 +1,5 @@ +import Qt 4.6 + +Item { + x: "You can't assign a string to a real!" +} diff --git a/tests/auto/declarative/qmllanguage/data/assignBasicTypes.qml b/tests/auto/declarative/qmllanguage/data/assignBasicTypes.qml index cef9f8d..50723a3 100644 --- a/tests/auto/declarative/qmllanguage/data/assignBasicTypes.qml +++ b/tests/auto/declarative/qmllanguage/data/assignBasicTypes.qml @@ -7,6 +7,7 @@ MyTypeObject { intProperty: -19 realProperty: 23.2 doubleProperty: -19.7 + floatProperty: 8.5 colorProperty: "red" dateProperty: "1982-11-25" timeProperty: "11:11:31" @@ -21,6 +22,7 @@ MyTypeObject { rectFProperty: "1000.1,-10.9,400x90.99" boolProperty: true variantProperty: "Hello World!" + vectorProperty: "10,1,2.2" objectProperty: MyTypeObject { intProperty: 8 } } diff --git a/tests/auto/declarative/qmllanguage/data/component.1.errors.txt b/tests/auto/declarative/qmllanguage/data/component.1.errors.txt new file mode 100644 index 0000000..091aad6 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.1.errors.txt @@ -0,0 +1 @@ +3:1:Cannot create empty component specification diff --git a/tests/auto/declarative/qmllanguage/data/component.1.qml b/tests/auto/declarative/qmllanguage/data/component.1.qml new file mode 100644 index 0000000..07e463a --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.1.qml @@ -0,0 +1,4 @@ +import Qt 4.6 + +Component { +} diff --git a/tests/auto/declarative/qmllanguage/data/component.2.errors.txt b/tests/auto/declarative/qmllanguage/data/component.2.errors.txt new file mode 100644 index 0000000..76e7656 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.2.errors.txt @@ -0,0 +1 @@ +6:9:id is not unique diff --git a/tests/auto/declarative/qmllanguage/data/component.2.qml b/tests/auto/declarative/qmllanguage/data/component.2.qml new file mode 100644 index 0000000..74a4f89 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.2.qml @@ -0,0 +1,9 @@ +import Qt 4.6 + +Item { + id: myId + Component { + id: myId + Object {} + } +} diff --git a/tests/auto/declarative/qmllanguage/data/component.3.errors.txt b/tests/auto/declarative/qmllanguage/data/component.3.errors.txt new file mode 100644 index 0000000..9a13142 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.3.errors.txt @@ -0,0 +1 @@ +6:9:Invalid component id specification diff --git a/tests/auto/declarative/qmllanguage/data/component.3.qml b/tests/auto/declarative/qmllanguage/data/component.3.qml new file mode 100644 index 0000000..043cb6b --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.3.qml @@ -0,0 +1,9 @@ +import Qt 4.6 + +Item { + Component { + id: myId + id: myId2 + Object {} + } +} diff --git a/tests/auto/declarative/qmllanguage/data/component.4.errors.txt b/tests/auto/declarative/qmllanguage/data/component.4.errors.txt new file mode 100644 index 0000000..2ab18685 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.4.errors.txt @@ -0,0 +1 @@ +3:1:Invalid component body specification diff --git a/tests/auto/declarative/qmllanguage/data/component.4.qml b/tests/auto/declarative/qmllanguage/data/component.4.qml new file mode 100644 index 0000000..3d115ba --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.4.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Component { + Object {} + Object {} +} diff --git a/tests/auto/declarative/qmllanguage/data/component.5.errors.txt b/tests/auto/declarative/qmllanguage/data/component.5.errors.txt new file mode 100644 index 0000000..5e88900 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.5.errors.txt @@ -0,0 +1 @@ +4:5:Invalid component specification diff --git a/tests/auto/declarative/qmllanguage/data/component.5.qml b/tests/auto/declarative/qmllanguage/data/component.5.qml new file mode 100644 index 0000000..ab57622 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.5.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Component { + x: 10 + Object {} +} diff --git a/tests/auto/declarative/qmllanguage/data/component.6.errors.txt b/tests/auto/declarative/qmllanguage/data/component.6.errors.txt new file mode 100644 index 0000000..2b1c6ca --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.6.errors.txt @@ -0,0 +1 @@ +4:5:Invalid component id specification diff --git a/tests/auto/declarative/qmllanguage/data/component.6.qml b/tests/auto/declarative/qmllanguage/data/component.6.qml new file mode 100644 index 0000000..6adaf0d --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/component.6.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Component { + id: Object {} + Object {} +} diff --git a/tests/auto/declarative/qmllanguage/data/defaultGrouped.errors.txt b/tests/auto/declarative/qmllanguage/data/defaultGrouped.errors.txt new file mode 100644 index 0000000..945d51b --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/defaultGrouped.errors.txt @@ -0,0 +1 @@ +7:9:Invalid value in grouped property diff --git a/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml b/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml new file mode 100644 index 0000000..39ac5e0 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/defaultGrouped.qml @@ -0,0 +1,10 @@ +import Test 1.0 +import Qt 4.6 + +MyTypeObject { + grouped { + script: print(1921) + Object {} + } +} + diff --git a/tests/auto/declarative/qmllanguage/data/doubleSignal.errors.txt b/tests/auto/declarative/qmllanguage/data/doubleSignal.errors.txt new file mode 100644 index 0000000..2aea251 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/doubleSignal.errors.txt @@ -0,0 +1 @@ +5:5:Incorrectly specified signal diff --git a/tests/auto/declarative/qmllanguage/data/doubleSignal.qml b/tests/auto/declarative/qmllanguage/data/doubleSignal.qml new file mode 100644 index 0000000..ec813c9 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/doubleSignal.qml @@ -0,0 +1,7 @@ +import Test 1.0 + +MyQmlObject { + onBasicSignal: print(1921) + onBasicSignal: print(1921) +} + diff --git a/tests/auto/declarative/qmllanguage/data/emptySignal.errors.txt b/tests/auto/declarative/qmllanguage/data/emptySignal.errors.txt new file mode 100644 index 0000000..353bbf5 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/emptySignal.errors.txt @@ -0,0 +1 @@ +4:5:Empty signal assignment diff --git a/tests/auto/declarative/qmllanguage/data/emptySignal.qml b/tests/auto/declarative/qmllanguage/data/emptySignal.qml new file mode 100644 index 0000000..4c5a122 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/emptySignal.qml @@ -0,0 +1,6 @@ +import Test 1.0 + +MyQmlObject { + onBasicSignal: " " +} + diff --git a/tests/auto/declarative/qmllanguage/data/nestedErrors.errors.txt b/tests/auto/declarative/qmllanguage/data/nestedErrors.errors.txt new file mode 100644 index 0000000..886da55 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/nestedErrors.errors.txt @@ -0,0 +1,2 @@ +4:5:Unable to create type NestedErrorsType +4:8:Invalid property assignment: double expected diff --git a/tests/auto/declarative/qmllanguage/data/nestedErrors.qml b/tests/auto/declarative/qmllanguage/data/nestedErrors.qml new file mode 100644 index 0000000..c0d755a --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/nestedErrors.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +Item { + NestedErrorsType {} +} + diff --git a/tests/auto/declarative/qmllanguage/data/script.1.errors.txt b/tests/auto/declarative/qmllanguage/data/script.1.errors.txt new file mode 100644 index 0000000..50518cc --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.1.errors.txt @@ -0,0 +1 @@ +3:1:Invalid use of Script block diff --git a/tests/auto/declarative/qmllanguage/data/script.1.qml b/tests/auto/declarative/qmllanguage/data/script.1.qml new file mode 100644 index 0000000..8dac8b7 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.1.qml @@ -0,0 +1,4 @@ +import Qt 4.6 + +Script { +} diff --git a/tests/auto/declarative/qmllanguage/data/script.10.errors.txt b/tests/auto/declarative/qmllanguage/data/script.10.errors.txt new file mode 100644 index 0000000..8299d23 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.10.errors.txt @@ -0,0 +1 @@ +6:9:Invalid component specification diff --git a/tests/auto/declarative/qmllanguage/data/script.10.qml b/tests/auto/declarative/qmllanguage/data/script.10.qml new file mode 100644 index 0000000..516e878 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.10.qml @@ -0,0 +1,9 @@ +import Qt 4.6 + +Item { + Component { + Item {} + Script {} + } +} + diff --git a/tests/auto/declarative/qmllanguage/data/script.11.errors.txt b/tests/auto/declarative/qmllanguage/data/script.11.errors.txt new file mode 100644 index 0000000..a664203 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.11.errors.txt @@ -0,0 +1 @@ +5:9:Invalid Script block diff --git a/tests/auto/declarative/qmllanguage/data/script.11.qml b/tests/auto/declarative/qmllanguage/data/script.11.qml new file mode 100644 index 0000000..d8313a3 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.11.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Object { + Script { + Object {} + } +} diff --git a/tests/auto/declarative/qmllanguage/data/script.2.errors.txt b/tests/auto/declarative/qmllanguage/data/script.2.errors.txt new file mode 100644 index 0000000..8fb3bbd --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.2.errors.txt @@ -0,0 +1 @@ +5:9:Properties cannot be set on Script block diff --git a/tests/auto/declarative/qmllanguage/data/script.2.qml b/tests/auto/declarative/qmllanguage/data/script.2.qml new file mode 100644 index 0000000..18bb7c8 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.2.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Object { + Script { + id: myScript + } +} diff --git a/tests/auto/declarative/qmllanguage/data/script.3.errors.txt b/tests/auto/declarative/qmllanguage/data/script.3.errors.txt new file mode 100644 index 0000000..8fb3bbd --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.3.errors.txt @@ -0,0 +1 @@ +5:9:Properties cannot be set on Script block diff --git a/tests/auto/declarative/qmllanguage/data/script.3.qml b/tests/auto/declarative/qmllanguage/data/script.3.qml new file mode 100644 index 0000000..c2296ff --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.3.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Object { + Script { + hello: world + } +} diff --git a/tests/auto/declarative/qmllanguage/data/script.4.errors.txt b/tests/auto/declarative/qmllanguage/data/script.4.errors.txt new file mode 100644 index 0000000..49a507f --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.4.errors.txt @@ -0,0 +1 @@ +5:9:Invalid Script source value diff --git a/tests/auto/declarative/qmllanguage/data/script.4.qml b/tests/auto/declarative/qmllanguage/data/script.4.qml new file mode 100644 index 0000000..08115c2 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.4.qml @@ -0,0 +1,8 @@ +import Qt 4.6 + +Object { + Script { + source: 10 + } +} + diff --git a/tests/auto/declarative/qmllanguage/data/script.5.errors.txt b/tests/auto/declarative/qmllanguage/data/script.5.errors.txt new file mode 100644 index 0000000..49a507f --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.5.errors.txt @@ -0,0 +1 @@ +5:9:Invalid Script source value diff --git a/tests/auto/declarative/qmllanguage/data/script.5.qml b/tests/auto/declarative/qmllanguage/data/script.5.qml new file mode 100644 index 0000000..a3b1a15 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.5.qml @@ -0,0 +1,9 @@ +import Qt 4.6 + +Object { + Script { + source: "hello" + ".js" + } +} + + diff --git a/tests/auto/declarative/qmllanguage/data/script.6.errors.txt b/tests/auto/declarative/qmllanguage/data/script.6.errors.txt new file mode 100644 index 0000000..4e53b6b --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.6.errors.txt @@ -0,0 +1 @@ +5:9:Invalid Script block. Specify either the source property or inline script diff --git a/tests/auto/declarative/qmllanguage/data/script.6.qml b/tests/auto/declarative/qmllanguage/data/script.6.qml new file mode 100644 index 0000000..e578629 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.6.qml @@ -0,0 +1,11 @@ +import Qt 4.6 + +Object { + Script { + source: "test.js" + function helloWorld() {} + } +} + + + diff --git a/tests/auto/declarative/qmllanguage/data/script.7.errors.txt b/tests/auto/declarative/qmllanguage/data/script.7.errors.txt new file mode 100644 index 0000000..dc15ddf --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.7.errors.txt @@ -0,0 +1 @@ +5:9:Variable declarations not allow in inline Script blocks diff --git a/tests/auto/declarative/qmllanguage/data/script.7.qml b/tests/auto/declarative/qmllanguage/data/script.7.qml new file mode 100644 index 0000000..6bee3f9 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.7.qml @@ -0,0 +1,11 @@ +import Qt 4.6 + +Object { + Script { + var a = 10; + } +} + + + + diff --git a/tests/auto/declarative/qmllanguage/data/script.8.errors.txt b/tests/auto/declarative/qmllanguage/data/script.8.errors.txt new file mode 100644 index 0000000..b5bf1a8 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.8.errors.txt @@ -0,0 +1 @@ +6:9:Invalid Script source value diff --git a/tests/auto/declarative/qmllanguage/data/script.8.qml b/tests/auto/declarative/qmllanguage/data/script.8.qml new file mode 100644 index 0000000..55bc05c --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.8.qml @@ -0,0 +1,9 @@ +import Qt 4.6 + +Object { + Script { + source: "test.js" + source: "test2.js" + } +} + diff --git a/tests/auto/declarative/qmllanguage/data/script.9.errors.txt b/tests/auto/declarative/qmllanguage/data/script.9.errors.txt new file mode 100644 index 0000000..dc1eb53 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.9.errors.txt @@ -0,0 +1 @@ +5:9:Invalid component specification diff --git a/tests/auto/declarative/qmllanguage/data/script.9.qml b/tests/auto/declarative/qmllanguage/data/script.9.qml new file mode 100644 index 0000000..79aa504 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/script.9.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Item { + Component { + Script {} + } +} diff --git a/tests/auto/declarative/qmllanguage/data/test.js b/tests/auto/declarative/qmllanguage/data/test.js new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/test.js diff --git a/tests/auto/declarative/qmllanguage/data/test2.js b/tests/auto/declarative/qmllanguage/data/test2.js new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/tests/auto/declarative/qmllanguage/data/test2.js diff --git a/tests/auto/declarative/qmllanguage/qmllanguage.pro b/tests/auto/declarative/qmllanguage/qmllanguage.pro index 80228a9..e45d73a 100644 --- a/tests/auto/declarative/qmllanguage/qmllanguage.pro +++ b/tests/auto/declarative/qmllanguage/qmllanguage.pro @@ -1,5 +1,6 @@ load(qttest_p4) contains(QT_CONFIG,declarative): QT += declarative +QT += script macx:CONFIG -= app_bundle SOURCES += tst_qmllanguage.cpp \ diff --git a/tests/auto/declarative/qmllanguage/testtypes.h b/tests/auto/declarative/qmllanguage/testtypes.h index 91c6e2e..e654faa 100644 --- a/tests/auto/declarative/qmllanguage/testtypes.h +++ b/tests/auto/declarative/qmllanguage/testtypes.h @@ -46,6 +46,7 @@ #include <QtCore/qdatetime.h> #include <QtGui/qmatrix.h> #include <QtGui/qcolor.h> +#include <QtGui/qvector3d.h> #include <QtDeclarative/qml.h> #include <QtDeclarative/qmlcomponent.h> #include <QtDeclarative/qmlparserstatus.h> @@ -185,6 +186,7 @@ class MyTypeObject : public QObject Q_PROPERTY(int intProperty READ intProperty WRITE setIntProperty); Q_PROPERTY(qreal realProperty READ realProperty WRITE setRealProperty); Q_PROPERTY(double doubleProperty READ doubleProperty WRITE setDoubleProperty); + Q_PROPERTY(float floatProperty READ floatProperty WRITE setFloatProperty); Q_PROPERTY(QColor colorProperty READ colorProperty WRITE setColorProperty); Q_PROPERTY(QDate dateProperty READ dateProperty WRITE setDateProperty); Q_PROPERTY(QTime timeProperty READ timeProperty WRITE setTimeProperty); @@ -198,6 +200,7 @@ class MyTypeObject : public QObject Q_PROPERTY(QRectF rectFProperty READ rectFProperty WRITE setRectFProperty); Q_PROPERTY(bool boolProperty READ boolProperty WRITE setBoolProperty); Q_PROPERTY(QVariant variantProperty READ variantProperty WRITE setVariantProperty); + Q_PROPERTY(QVector3D vectorProperty READ vectorProperty WRITE setVectorProperty); Q_PROPERTY(QmlScriptString scriptProperty READ scriptProperty WRITE setScriptProperty); Q_PROPERTY(MyGroupedObject *grouped READ grouped CONSTANT); @@ -289,6 +292,14 @@ public: doublePropertyValue = v; } + float floatPropertyValue; + float floatProperty() const { + return floatPropertyValue; + } + void setFloatProperty(const float &v) { + floatPropertyValue = v; + } + QColor colorPropertyValue; QColor colorProperty() const { return colorPropertyValue; @@ -394,6 +405,14 @@ public: variantPropertyValue = v; } + QVector3D vectorPropertyValue; + QVector3D vectorProperty() const { + return vectorPropertyValue; + } + void setVectorProperty(const QVector3D &v) { + vectorPropertyValue = v; + } + QmlScriptString scriptPropertyValue; QmlScriptString scriptProperty() const { return scriptPropertyValue; diff --git a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp index da586d9..c82aa4d 100644 --- a/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp +++ b/tests/auto/declarative/qmllanguage/tst_qmllanguage.cpp @@ -45,6 +45,7 @@ #include <QtCore/qdebug.h> #include <QtCore/qfileinfo.h> #include <QtCore/qdir.h> +#include <private/qmlmetaproperty_p.h> #include "testtypes.h" #include "../../../shared/util.h" @@ -246,8 +247,29 @@ void tst_qmllanguage::errors_data() QTest::newRow("importVersionMissing (builtin)") << "importVersionMissingBuiltIn.qml" << "importVersionMissingBuiltIn.errors.txt" << false; QTest::newRow("importVersionMissing (installed)") << "importVersionMissingInstalled.qml" << "importVersionMissingInstalled.errors.txt" << false; - - + QTest::newRow("Script.1") << "script.1.qml" << "script.1.errors.txt" << false; + QTest::newRow("Script.2") << "script.2.qml" << "script.2.errors.txt" << false; + QTest::newRow("Script.3") << "script.3.qml" << "script.3.errors.txt" << false; + QTest::newRow("Script.4") << "script.4.qml" << "script.4.errors.txt" << false; + QTest::newRow("Script.5") << "script.5.qml" << "script.5.errors.txt" << false; + QTest::newRow("Script.6") << "script.6.qml" << "script.6.errors.txt" << false; + QTest::newRow("Script.7") << "script.7.qml" << "script.7.errors.txt" << false; + QTest::newRow("Script.8") << "script.8.qml" << "script.8.errors.txt" << false; + QTest::newRow("Script.9") << "script.9.qml" << "script.9.errors.txt" << false; + QTest::newRow("Script.10") << "script.10.qml" << "script.10.errors.txt" << false; + QTest::newRow("Script.11") << "script.11.qml" << "script.11.errors.txt" << false; + + QTest::newRow("Component.1") << "component.1.qml" << "component.1.errors.txt" << false; + QTest::newRow("Component.2") << "component.2.qml" << "component.2.errors.txt" << false; + QTest::newRow("Component.3") << "component.3.qml" << "component.3.errors.txt" << false; + QTest::newRow("Component.4") << "component.4.qml" << "component.4.errors.txt" << false; + QTest::newRow("Component.5") << "component.5.qml" << "component.5.errors.txt" << false; + QTest::newRow("Component.6") << "component.6.qml" << "component.6.errors.txt" << false; + + QTest::newRow("nestedErrors") << "nestedErrors.qml" << "nestedErrors.errors.txt" << false; + QTest::newRow("defaultGrouped") << "defaultGrouped.qml" << "defaultGrouped.errors.txt" << false; + QTest::newRow("emptySignal") << "emptySignal.qml" << "emptySignal.errors.txt" << false; + QTest::newRow("doubleSignal") << "doubleSignal.qml" << "doubleSignal.errors.txt" << false; } void tst_qmllanguage::errors() @@ -371,6 +393,7 @@ void tst_qmllanguage::assignBasicTypes() QCOMPARE(object->intProperty(), -19); QCOMPARE((float)object->realProperty(), float(23.2)); QCOMPARE((float)object->doubleProperty(), float(-19.7)); + QCOMPARE((float)object->floatProperty(), float(8.5)); QCOMPARE(object->colorProperty(), QColor("red")); QCOMPARE(object->dateProperty(), QDate(1982, 11, 25)); QCOMPARE(object->timeProperty(), QTime(11, 11, 32)); @@ -383,6 +406,7 @@ void tst_qmllanguage::assignBasicTypes() QCOMPARE(object->rectFProperty(), QRectF((float)1000.1, (float)-10.9, (float)400, (float)90.99)); QCOMPARE(object->boolProperty(), true); QCOMPARE(object->variantProperty(), QVariant("Hello World!")); + QCOMPARE(object->vectorProperty(), QVector3D(10, 1, 2.2)); QVERIFY(object->objectProperty() != 0); MyTypeObject *child = qobject_cast<MyTypeObject *>(object->objectProperty()); QVERIFY(child != 0); @@ -615,9 +639,9 @@ void tst_qmllanguage::valueTypes() p.write(13); QCOMPARE(p.read(), QVariant(13)); - quint32 r = p.save(); + quint32 r = QmlMetaPropertyPrivate::saveValueType(p.coreIndex(), p.valueTypeCoreIndex()); QmlMetaProperty p2; - p2.restore(r, object); + QmlMetaPropertyPrivate::restore(p2, r, object); QCOMPARE(p2.read(), QVariant(13)); } diff --git a/tests/auto/declarative/qmlmetaproperty/tst_qmlmetaproperty.cpp b/tests/auto/declarative/qmlmetaproperty/tst_qmlmetaproperty.cpp index 52c673f..7fbffdb 100644 --- a/tests/auto/declarative/qmlmetaproperty/tst_qmlmetaproperty.cpp +++ b/tests/auto/declarative/qmlmetaproperty/tst_qmlmetaproperty.cpp @@ -42,6 +42,8 @@ #include <QtDeclarative/qmlengine.h> #include <QtDeclarative/qmlcomponent.h> #include <QtDeclarative/qmlmetaproperty.h> +#include <private/qguard_p.h> +#include <QtDeclarative/qmlbinding.h> #include <QtGui/QLineEdit> class MyQmlObject : public QObject @@ -73,13 +75,27 @@ private: QML_DECLARE_TYPE(MyContainer); QML_DEFINE_TYPE(Test,1,0,0,MyContainer,MyContainer); -class tst_QmlMetaProperty : public QObject +class tst_qmlmetaproperty : public QObject { Q_OBJECT public: - tst_QmlMetaProperty() {} + tst_qmlmetaproperty() {} private slots: + + // Constructors + void qmlmetaproperty(); + void qmlmetaproperty_object(); + void qmlmetaproperty_object_string(); + void qmlmetaproperty_object_context(); + void qmlmetaproperty_object_string_context(); + + // Methods + void name(); + void read(); + void write(); + + // Functionality void writeObjectToList(); void writeListToList(); void writeObjectToQmlList(); @@ -90,7 +106,799 @@ private: QmlEngine engine; }; -void tst_QmlMetaProperty::writeObjectToList() +void tst_qmlmetaproperty::qmlmetaproperty() +{ + QmlMetaProperty prop; + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString()); + QCOMPARE(prop.read(), QVariant()); + QCOMPARE(prop.write(QVariant()), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), false); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QVERIFY(prop.method().signature() == 0); + QCOMPARE(prop.type(), QmlMetaProperty::Invalid); + QCOMPARE(prop.isProperty(), false); + QCOMPARE(prop.isDefault(), false); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), false); + QCOMPARE(prop.isValid(), false); + QCOMPARE(prop.object(), (QObject *)0); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty); + QCOMPARE(prop.propertyType(), 0); + QCOMPARE(prop.propertyTypeName(), (const char *)0); + QVERIFY(prop.property().name() == 0); + QVERIFY(prop.binding() == 0); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding == 0); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression == 0); + QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; +} + +class PropertyObject : public QObject +{ + Q_OBJECT + Q_PROPERTY(int defaultProperty READ defaultProperty); + Q_PROPERTY(QRect rectProperty READ rectProperty); + Q_PROPERTY(QRect wrectProperty READ wrectProperty WRITE setWRectProperty); + Q_PROPERTY(QUrl url READ url WRITE setUrl); + + Q_CLASSINFO("DefaultProperty", "defaultProperty"); +public: + int defaultProperty() { return 10; } + QRect rectProperty() { return QRect(10, 10, 1, 209); } + + QRect wrectProperty() { return m_rect; } + void setWRectProperty(const QRect &r) { m_rect = r; } + + QUrl url() { return m_url; } + void setUrl(const QUrl &u) { m_url = u; } + +signals: + void clicked(); + +private: + QRect m_rect; + QUrl m_url; +}; + +void tst_qmlmetaproperty::qmlmetaproperty_object() +{ + QObject object; // Has no default property + PropertyObject dobject; // Has default property + + { + QmlMetaProperty prop(&object); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString()); + QCOMPARE(prop.read(), QVariant()); + QCOMPARE(prop.write(QVariant()), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), false); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QVERIFY(prop.method().signature() == 0); + QCOMPARE(prop.type(), QmlMetaProperty::Invalid); + QCOMPARE(prop.isProperty(), false); + QCOMPARE(prop.isDefault(), false); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), false); + QCOMPARE(prop.isValid(), false); + QCOMPARE(prop.object(), (QObject *)0); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty); + QCOMPARE(prop.propertyType(), 0); + QCOMPARE(prop.propertyTypeName(), (const char *)0); + QVERIFY(prop.property().name() == 0); + QVERIFY(prop.binding() == 0); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding == 0); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression == 0); + QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } + + { + QmlMetaProperty prop(&dobject); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + binding->setTarget(prop); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString("defaultProperty")); + QCOMPARE(prop.read(), QVariant(10)); + QCOMPARE(prop.write(QVariant()), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), true); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QVERIFY(prop.method().signature() == 0); + QCOMPARE(prop.type(), (QmlMetaProperty::Type)(QmlMetaProperty::Property | QmlMetaProperty::Default)); + QCOMPARE(prop.isProperty(), true); + QCOMPARE(prop.isDefault(), true); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), true); + QCOMPARE(prop.isValid(), true); + QCOMPARE(prop.object(), &dobject); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::Normal); + QCOMPARE(prop.propertyType(), (int)QVariant::Int); + QCOMPARE(prop.propertyTypeName(), "int"); + QCOMPARE(QString(prop.property().name()), QString("defaultProperty")); + QVERIFY(prop.binding() == 0); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int"); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding != 0); + QVERIFY(prop.binding() == binding); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression == 0); + QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty")); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } +} + +void tst_qmlmetaproperty::qmlmetaproperty_object_string() +{ + QObject object; + PropertyObject dobject; + + { + QmlMetaProperty prop(&object, QString("defaultProperty")); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString()); + QCOMPARE(prop.read(), QVariant()); + QCOMPARE(prop.write(QVariant()), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), false); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QVERIFY(prop.method().signature() == 0); + QCOMPARE(prop.type(), QmlMetaProperty::Invalid); + QCOMPARE(prop.isProperty(), false); + QCOMPARE(prop.isDefault(), false); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), false); + QCOMPARE(prop.isValid(), false); + QCOMPARE(prop.object(), (QObject *)0); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty); + QCOMPARE(prop.propertyType(), 0); + QCOMPARE(prop.propertyTypeName(), (const char *)0); + QVERIFY(prop.property().name() == 0); + QVERIFY(prop.binding() == 0); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding == 0); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression == 0); + QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } + + { + QmlMetaProperty prop(&dobject, QString("defaultProperty")); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + binding->setTarget(prop); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString("defaultProperty")); + QCOMPARE(prop.read(), QVariant(10)); + QCOMPARE(prop.write(QVariant()), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), true); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QVERIFY(prop.method().signature() == 0); + QCOMPARE(prop.type(), QmlMetaProperty::Property); + QCOMPARE(prop.isProperty(), true); + QCOMPARE(prop.isDefault(), false); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), true); + QCOMPARE(prop.isValid(), true); + QCOMPARE(prop.object(), &dobject); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::Normal); + QCOMPARE(prop.propertyType(), (int)QVariant::Int); + QCOMPARE(prop.propertyTypeName(), "int"); + QCOMPARE(QString(prop.property().name()), QString("defaultProperty")); + QVERIFY(prop.binding() == 0); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int"); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding != 0); + QVERIFY(prop.binding() == binding); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression == 0); + QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty")); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } + + { + QmlMetaProperty prop(&dobject, QString("onClicked")); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + binding->setTarget(prop); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString("onClicked")); + QCOMPARE(prop.read(), QVariant()); + QCOMPARE(prop.write(QVariant("Hello")), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), false); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(QString(prop.method().signature()), QString("clicked()")); + QCOMPARE(prop.type(), QmlMetaProperty::SignalProperty); + QCOMPARE(prop.isProperty(), false); + QCOMPARE(prop.isDefault(), false); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), false); + QCOMPARE(prop.isValid(), true); + QCOMPARE(prop.object(), &dobject); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty); + QCOMPARE(prop.propertyType(), 0); + QCOMPARE(prop.propertyTypeName(), (const char *)0); + QCOMPARE(prop.property().name(), (const char *)0); + QVERIFY(prop.binding() == 0); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding == 0); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression != 0); + QVERIFY(prop.signalExpression() == expression); + QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfMethod("clicked()")); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } +} + +void tst_qmlmetaproperty::qmlmetaproperty_object_context() +{ + QObject object; // Has no default property + PropertyObject dobject; // Has default property + + { + QmlMetaProperty prop(&object, engine.rootContext()); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString()); + QCOMPARE(prop.read(), QVariant()); + QCOMPARE(prop.write(QVariant()), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), false); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QVERIFY(prop.method().signature() == 0); + QCOMPARE(prop.type(), QmlMetaProperty::Invalid); + QCOMPARE(prop.isProperty(), false); + QCOMPARE(prop.isDefault(), false); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), false); + QCOMPARE(prop.isValid(), false); + QCOMPARE(prop.object(), (QObject *)0); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty); + QCOMPARE(prop.propertyType(), 0); + QCOMPARE(prop.propertyTypeName(), (const char *)0); + QVERIFY(prop.property().name() == 0); + QVERIFY(prop.binding() == 0); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding == 0); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression == 0); + QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } + + { + QmlMetaProperty prop(&dobject, engine.rootContext()); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + binding->setTarget(prop); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString("defaultProperty")); + QCOMPARE(prop.read(), QVariant(10)); + QCOMPARE(prop.write(QVariant()), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), true); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QVERIFY(prop.method().signature() == 0); + QCOMPARE(prop.type(), (QmlMetaProperty::Type)(QmlMetaProperty::Property | QmlMetaProperty::Default)); + QCOMPARE(prop.isProperty(), true); + QCOMPARE(prop.isDefault(), true); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), true); + QCOMPARE(prop.isValid(), true); + QCOMPARE(prop.object(), &dobject); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::Normal); + QCOMPARE(prop.propertyType(), (int)QVariant::Int); + QCOMPARE(prop.propertyTypeName(), "int"); + QCOMPARE(QString(prop.property().name()), QString("defaultProperty")); + QVERIFY(prop.binding() == 0); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int"); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding != 0); + QVERIFY(prop.binding() == binding); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression == 0); + QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty")); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } +} + +void tst_qmlmetaproperty::qmlmetaproperty_object_string_context() +{ + QObject object; + PropertyObject dobject; + + { + QmlMetaProperty prop(&object, QString("defaultProperty"), engine.rootContext()); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString()); + QCOMPARE(prop.read(), QVariant()); + QCOMPARE(prop.write(QVariant()), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), false); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QVERIFY(prop.method().signature() == 0); + QCOMPARE(prop.type(), QmlMetaProperty::Invalid); + QCOMPARE(prop.isProperty(), false); + QCOMPARE(prop.isDefault(), false); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), false); + QCOMPARE(prop.isValid(), false); + QCOMPARE(prop.object(), (QObject *)0); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty); + QCOMPARE(prop.propertyType(), 0); + QCOMPARE(prop.propertyTypeName(), (const char *)0); + QVERIFY(prop.property().name() == 0); + QVERIFY(prop.binding() == 0); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding == 0); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression == 0); + QCOMPARE(prop.coreIndex(), -1); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } + + { + QmlMetaProperty prop(&dobject, QString("defaultProperty"), engine.rootContext()); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + binding->setTarget(prop); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString("defaultProperty")); + QCOMPARE(prop.read(), QVariant(10)); + QCOMPARE(prop.write(QVariant()), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), true); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QVERIFY(prop.method().signature() == 0); + QCOMPARE(prop.type(), QmlMetaProperty::Property); + QCOMPARE(prop.isProperty(), true); + QCOMPARE(prop.isDefault(), false); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), true); + QCOMPARE(prop.isValid(), true); + QCOMPARE(prop.object(), &dobject); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::Normal); + QCOMPARE(prop.propertyType(), (int)QVariant::Int); + QCOMPARE(prop.propertyTypeName(), "int"); + QCOMPARE(QString(prop.property().name()), QString("defaultProperty")); + QVERIFY(prop.binding() == 0); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int"); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding != 0); + QVERIFY(prop.binding() == binding); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression == 0); + QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfProperty("defaultProperty")); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } + + { + QmlMetaProperty prop(&dobject, QString("onClicked"), engine.rootContext()); + + QGuard<QmlBinding> binding(new QmlBinding(QString(), 0, 0)); + binding->setTarget(prop); + QVERIFY(binding != 0); + QGuard<QmlExpression> expression(new QmlExpression()); + QVERIFY(expression != 0); + + QObject *obj = new QObject; + + QCOMPARE(prop.name(), QString("onClicked")); + QCOMPARE(prop.read(), QVariant()); + QCOMPARE(prop.write(QVariant("Hello")), false); + QCOMPARE(prop.hasChangedNotifier(), false); + QCOMPARE(prop.needsChangedNotifier(), false); + QCOMPARE(prop.connectNotifier(0, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, SLOT(deleteLater())), false); + QCOMPARE(prop.connectNotifier(obj, 0), false); + QCOMPARE(prop.connectNotifier(0, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, obj->metaObject()->indexOfMethod("deleteLater()")), false); + QCOMPARE(prop.connectNotifier(obj, -1), false); + QCOMPARE(QString(prop.method().signature()), QString("clicked()")); + QCOMPARE(prop.type(), QmlMetaProperty::SignalProperty); + QCOMPARE(prop.isProperty(), false); + QCOMPARE(prop.isDefault(), false); + QCOMPARE(prop.isWritable(), false); + QCOMPARE(prop.isDesignable(), false); + QCOMPARE(prop.isValid(), true); + QCOMPARE(prop.object(), &dobject); + QCOMPARE(prop.propertyCategory(), QmlMetaProperty::InvalidProperty); + QCOMPARE(prop.propertyType(), 0); + QCOMPARE(prop.propertyTypeName(), (const char *)0); + QCOMPARE(prop.property().name(), (const char *)0); + QVERIFY(prop.binding() == 0); + QVERIFY(prop.setBinding(binding) == 0); + QVERIFY(binding == 0); + QVERIFY(prop.signalExpression() == 0); + QVERIFY(prop.setSignalExpression(expression) == 0); + QVERIFY(expression != 0); + QVERIFY(prop.signalExpression() == expression); + QCOMPARE(prop.coreIndex(), dobject.metaObject()->indexOfMethod("clicked()")); + QCOMPARE(prop.valueTypeCoreIndex(), -1); + + delete obj; + } +} + +void tst_qmlmetaproperty::name() +{ + { + QmlMetaProperty p; + QCOMPARE(p.name(), QString()); + } + + { + PropertyObject o; + QmlMetaProperty p(&o); + QCOMPARE(p.name(), QString("defaultProperty")); + } + + { + QObject o; + QmlMetaProperty p(&o, QString("objectName")); + QCOMPARE(p.name(), QString("objectName")); + } + + { + PropertyObject o; + QmlMetaProperty p(&o, "onClicked"); + QCOMPARE(p.name(), QString("onClicked")); + } + + { + QObject o; + QmlMetaProperty p(&o, "onClicked"); + QCOMPARE(p.name(), QString()); + } + + { + QObject o; + QmlMetaProperty p(&o, "foo"); + QCOMPARE(p.name(), QString()); + } + + { + QmlMetaProperty p(0, "foo"); + QCOMPARE(p.name(), QString()); + } + + { + PropertyObject o; + QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty"); + QCOMPARE(p.name(), QString("rectProperty")); + } + + { + PropertyObject o; + QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty.x"); + QCOMPARE(p.name(), QString("rectProperty.x")); + } + + { + PropertyObject o; + QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty.foo"); + QCOMPARE(p.name(), QString()); + } +} + +void tst_qmlmetaproperty::read() +{ + // Invalid + { + QmlMetaProperty p; + QCOMPARE(p.read(), QVariant()); + } + + // Default prop + { + PropertyObject o; + QmlMetaProperty p(&o); + QCOMPARE(p.read(), QVariant(10)); + } + + // Invalid default prop + { + QObject o; + QmlMetaProperty p(&o); + QCOMPARE(p.read(), QVariant()); + } + + // Value prop by name + { + QObject o; + + QmlMetaProperty p(&o, "objectName"); + QCOMPARE(p.read(), QVariant(QString())); + + o.setObjectName("myName"); + + QCOMPARE(p.read(), QVariant("myName")); + } + + // Value-type prop + { + PropertyObject o; + QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty.x"); + QCOMPARE(p.read(), QVariant(10)); + } + + // Invalid value-type prop + { + PropertyObject o; + QmlMetaProperty p = QmlMetaProperty::createProperty(&o, "rectProperty.foo"); + QCOMPARE(p.read(), QVariant()); + } + + // Signal property + { + PropertyObject o; + QmlMetaProperty p(&o, "onClicked"); + QCOMPARE(p.read(), QVariant()); + + QVERIFY(0 == p.setSignalExpression(new QmlExpression())); + QVERIFY(0 != p.signalExpression()); + + QCOMPARE(p.read(), QVariant()); + } + + // Deleted object + { + PropertyObject *o = new PropertyObject; + QmlMetaProperty p = QmlMetaProperty::createProperty(o, "rectProperty.x"); + QCOMPARE(p.read(), QVariant(10)); + delete o; + QCOMPARE(p.read(), QVariant()); + } +} + +void tst_qmlmetaproperty::write() +{ + // Invalid + { + QmlMetaProperty p; + QCOMPARE(p.write(QVariant(10)), false); + } + + // Read-only default prop + { + PropertyObject o; + QmlMetaProperty p(&o); + QCOMPARE(p.write(QVariant(10)), false); + } + + // Invalid default prop + { + QObject o; + QmlMetaProperty p(&o); + QCOMPARE(p.write(QVariant(10)), false); + } + + // Read-only prop by name + { + PropertyObject o; + QmlMetaProperty p(&o, QString("defaultProperty")); + QCOMPARE(p.write(QVariant(10)), false); + } + + // Writable prop by name + { + PropertyObject o; + QmlMetaProperty p(&o, QString("objectName")); + QCOMPARE(o.objectName(), QString()); + QCOMPARE(p.write(QVariant(QString("myName"))), true); + QCOMPARE(o.objectName(), QString("myName")); + } + + // Deleted object + { + PropertyObject *o = new PropertyObject; + QmlMetaProperty p(o, QString("objectName")); + QCOMPARE(p.write(QVariant(QString("myName"))), true); + QCOMPARE(o->objectName(), QString("myName")); + + delete o; + + QCOMPARE(p.write(QVariant(QString("myName"))), false); + } + + // Signal property + { + PropertyObject o; + QmlMetaProperty p(&o, "onClicked"); + QCOMPARE(p.write(QVariant("print(1921)")), false); + + QVERIFY(0 == p.setSignalExpression(new QmlExpression())); + QVERIFY(0 != p.signalExpression()); + + QCOMPARE(p.write(QVariant("print(1921)")), false); + + QVERIFY(0 != p.signalExpression()); + } + + // Value-type property + { + PropertyObject o; + QmlMetaProperty p(&o, "wrectProperty"); + + QCOMPARE(o.wrectProperty(), QRect()); + QCOMPARE(p.write(QRect(1, 13, 99, 8)), true); + QCOMPARE(o.wrectProperty(), QRect(1, 13, 99, 8)); + + QmlMetaProperty p2 = QmlMetaProperty::createProperty(&o, "wrectProperty.x"); + QCOMPARE(p2.read(), QVariant(1)); + QCOMPARE(p2.write(QVariant(6)), true); + QCOMPARE(p2.read(), QVariant(6)); + QCOMPARE(o.wrectProperty(), QRect(6, 13, 99, 8)); + } + + // URL-property + { + PropertyObject o; + QmlMetaProperty p(&o, "url"); + + QCOMPARE(p.write(QUrl("main.qml")), true); + QCOMPARE(o.url(), QUrl("main.qml")); + + QmlMetaProperty p2(&o, "url", engine.rootContext()); + + QUrl result = engine.baseUrl().resolved(QUrl("main.qml")); + QVERIFY(result != QUrl("main.qml")); + + QCOMPARE(p2.write(QUrl("main.qml")), true); + QCOMPARE(o.url(), result); + } +} + +void tst_qmlmetaproperty::writeObjectToList() { QmlComponent containerComponent(&engine, "import Test 1.0\nMyContainer { children: MyQmlObject {} }", QUrl()); MyContainer *container = qobject_cast<MyContainer*>(containerComponent.create()); @@ -105,7 +913,7 @@ void tst_QmlMetaProperty::writeObjectToList() } Q_DECLARE_METATYPE(QList<QObject *>); -void tst_QmlMetaProperty::writeListToList() +void tst_qmlmetaproperty::writeListToList() { QmlComponent containerComponent(&engine, "import Test 1.0\nMyContainer { children: MyQmlObject {} }", QUrl()); MyContainer *container = qobject_cast<MyContainer*>(containerComponent.create()); @@ -125,7 +933,7 @@ void tst_QmlMetaProperty::writeListToList() QCOMPARE(container->children()->size(), 1);*/ } -void tst_QmlMetaProperty::writeObjectToQmlList() +void tst_qmlmetaproperty::writeObjectToQmlList() { QmlComponent containerComponent(&engine, "import Test 1.0\nMyContainer { qmlChildren: MyQmlObject {} }", QUrl()); MyContainer *container = qobject_cast<MyContainer*>(containerComponent.create()); @@ -139,6 +947,6 @@ void tst_QmlMetaProperty::writeObjectToQmlList() QCOMPARE(container->qmlChildren()->at(1), object); } -QTEST_MAIN(tst_QmlMetaProperty) +QTEST_MAIN(tst_qmlmetaproperty) #include "tst_qmlmetaproperty.moc" diff --git a/tests/auto/declarative/qfxpixmapcache/data/exists.png b/tests/auto/declarative/qmlpixmapcache/data/exists.png Binary files differindex 399bd0b..399bd0b 100644 --- a/tests/auto/declarative/qfxpixmapcache/data/exists.png +++ b/tests/auto/declarative/qmlpixmapcache/data/exists.png diff --git a/tests/auto/declarative/qfxpixmapcache/data/exists1.png b/tests/auto/declarative/qmlpixmapcache/data/exists1.png Binary files differindex 399bd0b..399bd0b 100644 --- a/tests/auto/declarative/qfxpixmapcache/data/exists1.png +++ b/tests/auto/declarative/qmlpixmapcache/data/exists1.png diff --git a/tests/auto/declarative/qfxpixmapcache/data/exists2.png b/tests/auto/declarative/qmlpixmapcache/data/exists2.png Binary files differindex 399bd0b..399bd0b 100644 --- a/tests/auto/declarative/qfxpixmapcache/data/exists2.png +++ b/tests/auto/declarative/qmlpixmapcache/data/exists2.png diff --git a/tests/auto/declarative/qfxpixmapcache/qfxpixmapcache.pro b/tests/auto/declarative/qmlpixmapcache/qmlpixmapcache.pro index 218eeff..423fa2f 100644 --- a/tests/auto/declarative/qfxpixmapcache/qfxpixmapcache.pro +++ b/tests/auto/declarative/qmlpixmapcache/qmlpixmapcache.pro @@ -3,7 +3,7 @@ contains(QT_CONFIG,declarative): QT += declarative QT += network macx:CONFIG -= app_bundle -SOURCES += tst_qfxpixmapcache.cpp +SOURCES += tst_qmlpixmapcache.cpp # QMAKE_CXXFLAGS = -fprofile-arcs -ftest-coverage # LIBS += -lgcov diff --git a/tests/auto/declarative/qfxpixmapcache/tst_qfxpixmapcache.cpp b/tests/auto/declarative/qmlpixmapcache/tst_qmlpixmapcache.cpp index 88fbdab..88d9df5 100644 --- a/tests/auto/declarative/qfxpixmapcache/tst_qfxpixmapcache.cpp +++ b/tests/auto/declarative/qmlpixmapcache/tst_qmlpixmapcache.cpp @@ -40,18 +40,18 @@ ****************************************************************************/ #include <qtest.h> #include <QtTest/QtTest> -#include <private/qmlgraphicspixmapcache_p.h> +#include <private/qmlpixmapcache_p.h> #include <QtDeclarative/qmlengine.h> #include <QNetworkReply> // These don't let normal people run tests! //#include "../network-settings.h" -class tst_qfxpixmapcache : public QObject +class tst_qmlpixmapcache : public QObject { Q_OBJECT public: - tst_qfxpixmapcache() : + tst_qmlpixmapcache() : thisfile("file://" __FILE__) { } @@ -97,9 +97,9 @@ static const bool localfile_optimized = true; static const bool localfile_optimized = false; #endif -void tst_qfxpixmapcache::single_data() +void tst_qmlpixmapcache::single_data() { - // Note, since QmlGraphicsPixmapCache is shared, tests affect each other! + // Note, since QmlPixmapCache is shared, tests affect each other! // so use different files fore all test functions. QTest::addColumn<QUrl>("target"); @@ -114,7 +114,7 @@ void tst_qfxpixmapcache::single_data() QTest::newRow("remote") << QUrl("http://qt.nokia.com/thereisnologo.png") << false << false << true; } -void tst_qfxpixmapcache::single() +void tst_qmlpixmapcache::single() { QFETCH(QUrl, target); QFETCH(bool, incache); @@ -130,7 +130,7 @@ void tst_qfxpixmapcache::single() QPixmap pixmap; QVERIFY(pixmap.width() <= 0); // Check Qt assumption - QNetworkReply *reply= QmlGraphicsPixmapCache::get(&engine, target, &pixmap); + QNetworkReply *reply= QmlPixmapCache::get(&engine, target, &pixmap); if (incache) { QVERIFY(!reply); @@ -148,20 +148,20 @@ void tst_qfxpixmapcache::single() QVERIFY(!QTestEventLoop::instance().timeout()); QVERIFY(getter.gotslot); if (exists) { - QVERIFY(QmlGraphicsPixmapCache::find(target, &pixmap)); + QVERIFY(QmlPixmapCache::find(target, &pixmap)); QVERIFY(pixmap.width() > 0); } else { - QVERIFY(!QmlGraphicsPixmapCache::find(target, &pixmap)); + QVERIFY(!QmlPixmapCache::find(target, &pixmap)); QVERIFY(pixmap.width() <= 0); } } - QCOMPARE(QmlGraphicsPixmapCache::pendingRequests(), 0); + QCOMPARE(QmlPixmapCache::pendingRequests(), 0); } -void tst_qfxpixmapcache::parallel_data() +void tst_qmlpixmapcache::parallel_data() { - // Note, since QmlGraphicsPixmapCache is shared, tests affect each other! + // Note, since QmlPixmapCache is shared, tests affect each other! // so use different files fore all test functions. QTest::addColumn<QUrl>("target1"); @@ -211,7 +211,7 @@ void tst_qfxpixmapcache::parallel_data() ; } -void tst_qfxpixmapcache::parallel() +void tst_qmlpixmapcache::parallel() { QFETCH(QUrl, target1); QFETCH(QUrl, target2); @@ -227,7 +227,7 @@ void tst_qfxpixmapcache::parallel() for (int i=0; i<targets.count(); ++i) { QUrl target = targets.at(i); QPixmap pixmap; - QNetworkReply *reply = QmlGraphicsPixmapCache::get(&engine, target, &pixmap); + QNetworkReply *reply = QmlPixmapCache::get(&engine, target, &pixmap); replies.append(reply); if (!reply) { QVERIFY(pixmap.width() > 0); @@ -240,10 +240,10 @@ void tst_qfxpixmapcache::parallel() } QCOMPARE(incache+slotters, targets.count()); - QCOMPARE(QmlGraphicsPixmapCache::pendingRequests(), requests); + QCOMPARE(QmlPixmapCache::pendingRequests(), requests); if (cancel >= 0) { - QmlGraphicsPixmapCache::cancelGet(targets.at(cancel), getters[cancel]); + QmlPixmapCache::cancelGet(targets.at(cancel), getters[cancel]); slotters--; } @@ -260,16 +260,16 @@ void tst_qfxpixmapcache::parallel() } else { QVERIFY(getters[i]->gotslot); QPixmap pixmap; - QVERIFY(QmlGraphicsPixmapCache::find(targets[i], &pixmap)); + QVERIFY(QmlPixmapCache::find(targets[i], &pixmap)); QVERIFY(pixmap.width() > 0); } delete getters[i]; } } - QCOMPARE(QmlGraphicsPixmapCache::pendingRequests(), 0); + QCOMPARE(QmlPixmapCache::pendingRequests(), 0); } -QTEST_MAIN(tst_qfxpixmapcache) +QTEST_MAIN(tst_qmlpixmapcache) -#include "tst_qfxpixmapcache.moc" +#include "tst_qmlpixmapcache.moc" diff --git a/tests/auto/declarative/qmlpropertymap/tst_qmlpropertymap.cpp b/tests/auto/declarative/qmlpropertymap/tst_qmlpropertymap.cpp index a7211bd..9be77e8 100644 --- a/tests/auto/declarative/qmlpropertymap/tst_qmlpropertymap.cpp +++ b/tests/auto/declarative/qmlpropertymap/tst_qmlpropertymap.cpp @@ -55,6 +55,7 @@ public: private slots: void insert(); void operatorInsert(); + void operatorValue(); void clear(); void changed(); void count(); @@ -66,6 +67,7 @@ void tst_QmlPropertyMap::insert() map.insert(QLatin1String("key1"),100); map.insert(QLatin1String("key2"),200); QVERIFY(map.keys().count() == 2); + QVERIFY(map.contains(QLatin1String("key1"))); QCOMPARE(map.value(QLatin1String("key1")), QVariant(100)); QCOMPARE(map.value(QLatin1String("key2")), QVariant(200)); @@ -88,6 +90,20 @@ void tst_QmlPropertyMap::operatorInsert() QCOMPARE(map.value(QLatin1String("key1")), QVariant("Hello World")); } +void tst_QmlPropertyMap::operatorValue() +{ + QmlPropertyMap map; + map.insert(QLatin1String("key1"),100); + map.insert(QLatin1String("key2"),200); + QVERIFY(map.keys().count() == 2); + QVERIFY(map.contains(QLatin1String("key1"))); + + QCOMPARE(map.value(QLatin1String("key1")), QVariant(100)); + QCOMPARE(map.value(QLatin1String("key2")), QVariant(200)); + QCOMPARE(map[QLatin1String("key1")], map.value(QLatin1String("key1"))); + QCOMPARE(map[QLatin1String("key2")], map.value(QLatin1String("key2"))); +} + void tst_QmlPropertyMap::clear() { QmlPropertyMap map; @@ -98,6 +114,7 @@ void tst_QmlPropertyMap::clear() map.clear(QLatin1String("key1")); QVERIFY(map.keys().count() == 1); + QVERIFY(map.contains(QLatin1String("key1"))); QCOMPARE(map.value(QLatin1String("key1")), QVariant()); } @@ -143,6 +160,7 @@ void tst_QmlPropertyMap::count() //clearing doesn't remove the key map.clear(QLatin1String("key3")); QCOMPARE(map.count(), 3); + QCOMPARE(map.size(), map.count()); } QTEST_MAIN(tst_QmlPropertyMap) diff --git a/tests/auto/declarative/qmlqt/data/closestangle.qml b/tests/auto/declarative/qmlqt/data/closestangle.qml new file mode 100644 index 0000000..8f999e3 --- /dev/null +++ b/tests/auto/declarative/qmlqt/data/closestangle.qml @@ -0,0 +1,12 @@ +import Qt 4.6 + +Object { + property var testSame: Qt.closestAngle(0,1) + property var testLess: Qt.closestAngle(0,-359) + property var testMore: Qt.closestAngle(0,361) + property var testFail: Qt.closestAngle(0) + property var test5: Qt.closestAngle(0,1,2) + property var test6: Qt.closestAngle(123.45465768,1.11) + property var test7: Qt.closestAngle(-3.1415,1.11) +} + diff --git a/tests/auto/declarative/qmlqt/tst_qmlqt.cpp b/tests/auto/declarative/qmlqt/tst_qmlqt.cpp index 10402ae..cc9b94d 100644 --- a/tests/auto/declarative/qmlqt/tst_qmlqt.cpp +++ b/tests/auto/declarative/qmlqt/tst_qmlqt.cpp @@ -64,6 +64,7 @@ private slots: void lighter(); void darker(); void tint(); + void closestAngle(); void playSound(); void openUrlExternally(); @@ -249,6 +250,23 @@ void tst_qmlqt::tint() delete object; } +void tst_qmlqt::closestAngle() +{ + QmlComponent component(&engine, TEST_FILE("closestangle.qml")); + QObject *object = component.create(); + QVERIFY(object != 0); + + QCOMPARE(qvariant_cast<qreal>(object->property("testSame")), 1.0); + QCOMPARE(qvariant_cast<qreal>(object->property("testLess")), 1.0); + QCOMPARE(qvariant_cast<qreal>(object->property("testMore")), 1.0); + QCOMPARE(qvariant_cast<qreal>(object->property("testFail")), 0.0); + QCOMPARE(qvariant_cast<qreal>(object->property("test5")), 1.0); + QCOMPARE(qvariant_cast<qreal>(object->property("test6")), 1.11); + QCOMPARE(qvariant_cast<qreal>(object->property("test7")), 1.11); + + delete object; +} + void tst_qmlqt::playSound() { QEXPECT_FAIL("", "How do we test this?", Abort); diff --git a/tests/auto/declarative/qmlxmllistmodel/data/model.qml b/tests/auto/declarative/qmlxmllistmodel/data/model.qml new file mode 100644 index 0000000..2cbb027 --- /dev/null +++ b/tests/auto/declarative/qmlxmllistmodel/data/model.qml @@ -0,0 +1,10 @@ +import Qt 4.6 + +XmlListModel { + source: "model.xml" + query: "/Pets/Pet" + XmlRole { name: "name"; query: "name/string()" } + XmlRole { name: "type"; query: "type/string()" } + XmlRole { name: "age"; query: "age/number()" } + XmlRole { name: "size"; query: "size/string()" } +} diff --git a/tests/auto/declarative/qmlxmllistmodel/data/model.xml b/tests/auto/declarative/qmlxmllistmodel/data/model.xml new file mode 100644 index 0000000..40cd6d0 --- /dev/null +++ b/tests/auto/declarative/qmlxmllistmodel/data/model.xml @@ -0,0 +1,54 @@ +<Pets> + <Pet> + <name>Polly</name> + <type>Parrot</type> + <age>12</age> + <size>Small</size> + </Pet> + <Pet> + <name>Penny</name> + <type>Turtle</type> + <age>4</age> + <size>Small</size> + </Pet> + <Pet> + <name>Warren</name> + <type>Rabbit</type> + <age>2</age> + <size>Small</size> + </Pet> + <Pet> + <name>Spot</name> + <type>Dog</type> + <age>9</age> + <size>Medium</size> + </Pet> + <Pet> + <name>Whiskers</name> + <type>Cat</type> + <age>2</age> + <size>Medium</size> + </Pet> + <Pet> + <name>Joey</name> + <type>Kangaroo</type> + <age>1</age> + </Pet> + <Pet> + <name>Kimba</name> + <type>Bunny</type> + <age>65</age> + <size>Large</size> + </Pet> + <Pet> + <name>Rover</name> + <type>Dog</type> + <size>Large</size> + </Pet> + <Pet> + <name>Tiny</name> + <type>Elephant</type> + <age>15</age> + <size>Large</size> + </Pet> +</Pets> diff --git a/tests/auto/declarative/qmlxmllistmodel/data/model2.qml b/tests/auto/declarative/qmlxmllistmodel/data/model2.qml new file mode 100644 index 0000000..140e0ad --- /dev/null +++ b/tests/auto/declarative/qmlxmllistmodel/data/model2.qml @@ -0,0 +1,11 @@ +import Qt 4.6 + +XmlListModel { + source: "model.xml" + query: "/Pets/Pet" + XmlRole { name: "name"; query: "name/string()" } + XmlRole { name: "type"; query: "type/string()" } + XmlRole { name: "age"; query: "age/number()" } + XmlRole { name: "size"; query: "size/string()" } + XmlRole { name: "tricks"; query: "tricks/string()" } +} diff --git a/tests/auto/declarative/qmlxmllistmodel/data/recipes.qml b/tests/auto/declarative/qmlxmllistmodel/data/recipes.qml new file mode 100644 index 0000000..13dea91 --- /dev/null +++ b/tests/auto/declarative/qmlxmllistmodel/data/recipes.qml @@ -0,0 +1,10 @@ +import Qt 4.6 + +XmlListModel { + source: "recipes.xml" + query: "/recipes/recipe" + XmlRole { name: "title"; query: "@title/string()" } + XmlRole { name: "picture"; query: "picture/string()" } + XmlRole { name: "ingredients"; query: "ingredients/string()" } + XmlRole { name: "preparation"; query: "method/string()" } +} diff --git a/tests/auto/declarative/qmlxmllistmodel/data/recipes.xml b/tests/auto/declarative/qmlxmllistmodel/data/recipes.xml new file mode 100644 index 0000000..d71de60 --- /dev/null +++ b/tests/auto/declarative/qmlxmllistmodel/data/recipes.xml @@ -0,0 +1,90 @@ +<recipes> + <recipe title="Pancakes"> + <picture>content/pics/pancakes.jpg</picture> + <ingredients><![CDATA[<html> + <ul> + <li> 1 cup (150g) self-raising flour + <li> 1 tbs caster sugar + <li> 3/4 cup (185ml) milk + <li> 1 egg + </ul> + </html> + ]]></ingredients> + <method><![CDATA[<html> + <ol> + <li> Sift flour and sugar together into a bowl. Add a pinch of salt. + <li> Beat milk and egg together, then add to dry ingredients. Beat until smooth. + <li> Pour mixture into a pan on medium heat and cook until bubbles appear on the surface. + <li> Turn over and cook other side until golden. + </ol> + </html> + ]]></method> + </recipe> + <recipe title="Fruit Salad"> + <picture>content/pics/fruit-salad.jpg</picture> + <ingredients><![CDATA[* Seasonal Fruit]]></ingredients> + <method><![CDATA[* Chop fruit and place in a bowl.]]></method> + </recipe> + <recipe title="Vegetable Soup"> + <picture>content/pics/vegetable-soup.jpg</picture> + <ingredients><![CDATA[<html> + <ul> + <li> 1 onion + <li> 1 turnip + <li> 1 potato + <li> 1 carrot + <li> 1 head of celery + <li> 1 1/2 litres of water + </ul> + </html> + ]]></ingredients> + <method><![CDATA[<html> + <ol> + <li> Chop vegetables. + <li> Boil in water until vegetables soften. + <li> Season with salt and pepper to taste. + </ol> + </html> + ]]></method> + </recipe> + <recipe title="Hamburger"> + <picture>content/pics/hamburger.jpg</picture> + <ingredients><![CDATA[<html> + <ul> + <li> 500g minced beef + <li> Seasoning + <li> lettuce, tomato, onion, cheese + <li> 1 hamburger bun for each burger + </ul> + </html> + ]]></ingredients> + <method><![CDATA[<html> + <ol> + <li> Mix the beef, together with seasoning, in a food processor. + <li> Shape the beef into burgers. + <li> Grill the burgers for about 5 mins on each side (until cooked through) + <li> Serve each burger on a bun with ketchup, cheese, lettuce, tomato and onion. + </ol> + </html> + ]]></method> + </recipe> + <recipe title="Lemonade"> + <picture>content/pics/lemonade.jpg</picture> + <ingredients><![CDATA[<html> + <ul> + <li> 1 cup Lemon Juice + <li> 1 cup Sugar + <li> 6 Cups of Water (2 cups warm water, 4 cups cold water) + </ul> + </html> + ]]></ingredients> + <method><![CDATA[<html> + <ol> + <li> Pour 2 cups of warm water into a pitcher and stir in sugar until it dissolves. + <li> Pour in lemon juice, stir again, and add 4 cups of cold water. + <li> Chill or serve over ice cubes. + </ol> + </html> + ]]></method> + </recipe> +</recipes> diff --git a/tests/auto/declarative/qmlxmllistmodel/qmlxmllistmodel.pro b/tests/auto/declarative/qmlxmllistmodel/qmlxmllistmodel.pro new file mode 100644 index 0000000..462723e --- /dev/null +++ b/tests/auto/declarative/qmlxmllistmodel/qmlxmllistmodel.pro @@ -0,0 +1,7 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui +macx:CONFIG -= app_bundle + +SOURCES += tst_qmlxmllistmodel.cpp + +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlxmllistmodel/tst_qmlxmllistmodel.cpp b/tests/auto/declarative/qmlxmllistmodel/tst_qmlxmllistmodel.cpp new file mode 100644 index 0000000..4898686 --- /dev/null +++ b/tests/auto/declarative/qmlxmllistmodel/tst_qmlxmllistmodel.cpp @@ -0,0 +1,131 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (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 Technology Preview License Agreement accompanying +** this package. +** +** 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.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ +#include <qtest.h> +#include <QtDeclarative/qmlengine.h> +#include <QtDeclarative/qmlcomponent.h> +#include <private/qmlxmllistmodel_p.h> +#include "../../../shared/util.h" + +class tst_qmlxmllistmodel : public QObject + +{ + Q_OBJECT +public: + tst_qmlxmllistmodel() {} + +private slots: + void buildModel(); + void missingFields(); + void cdata(); + void attributes(); + +private: + QmlEngine engine; +}; + +void tst_qmlxmllistmodel::buildModel() +{ + QmlComponent component(&engine, QUrl("file://" SRCDIR "/data/model.qml")); + QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create()); + QVERIFY(listModel != 0); + QTRY_COMPARE(listModel->count(), 9); + + QList<int> roles; + roles << Qt::UserRole << Qt::UserRole + 1 << Qt::UserRole + 2 << Qt::UserRole + 3; + QHash<int, QVariant> data = listModel->data(3, roles); + QVERIFY(data.count() == 4); + QCOMPARE(data.value(Qt::UserRole).toString(), QLatin1String("Spot")); + QCOMPARE(data.value(Qt::UserRole+1).toString(), QLatin1String("Dog")); + QCOMPARE(data.value(Qt::UserRole+2).toInt(), 9); + QCOMPARE(data.value(Qt::UserRole+3).toString(), QLatin1String("Medium")); +} + +void tst_qmlxmllistmodel::missingFields() +{ + QmlComponent component(&engine, QUrl("file://" SRCDIR "/data/model2.qml")); + QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create()); + QVERIFY(listModel != 0); + QTRY_COMPARE(listModel->count(), 9); + + QList<int> roles; + roles << Qt::UserRole << Qt::UserRole + 1 << Qt::UserRole + 2 << Qt::UserRole + 3 << Qt::UserRole + 4; + QHash<int, QVariant> data = listModel->data(5, roles); + QVERIFY(data.count() == 5); + QCOMPARE(data.value(Qt::UserRole+3).toString(), QLatin1String("")); + QCOMPARE(data.value(Qt::UserRole+4).toString(), QLatin1String("")); + + data = listModel->data(7, roles); + QVERIFY(data.count() == 5); + QCOMPARE(data.value(Qt::UserRole+2).toString(), QLatin1String("")); +} + +void tst_qmlxmllistmodel::cdata() +{ + QmlComponent component(&engine, QUrl("file://" SRCDIR "/data/recipes.qml")); + QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create()); + QVERIFY(listModel != 0); + QTRY_COMPARE(listModel->count(), 5); + + QList<int> roles; + roles << Qt::UserRole + 2; + QHash<int, QVariant> data = listModel->data(2, roles); + QVERIFY(data.count() == 1); + QVERIFY(data.value(Qt::UserRole+2).toString().startsWith(QLatin1String("<html>"))); +} + +void tst_qmlxmllistmodel::attributes() +{ + QmlComponent component(&engine, QUrl("file://" SRCDIR "/data/recipes.qml")); + QmlXmlListModel *listModel = qobject_cast<QmlXmlListModel*>(component.create()); + QVERIFY(listModel != 0); + QTRY_COMPARE(listModel->count(), 5); + + QList<int> roles; + roles << Qt::UserRole; + QHash<int, QVariant> data = listModel->data(2, roles); + QVERIFY(data.count() == 1); + QCOMPARE(data.value(Qt::UserRole).toString(), QLatin1String("Vegetable Soup")); +} + + +QTEST_MAIN(tst_qmlxmllistmodel) + +#include "tst_qmlxmllistmodel.moc" diff --git a/tests/auto/declarative/states/data/anchorChanges.qml b/tests/auto/declarative/states/data/anchorChanges.qml new file mode 100644 index 0000000..bb17840 --- /dev/null +++ b/tests/auto/declarative/states/data/anchorChanges.qml @@ -0,0 +1,22 @@ +import Qt 4.6 + +Rectangle { + id: container + width: 200; height: 200 + Rectangle { + id: myRect + objectName: "MyRect" + width: 50; height: 50 + color: "green"; + anchors.left: parent.left + anchors.leftMargin: 5 + } + states: State { + name: "right" + AnchorChanges { + target: myRect; + reset: "left" + right: container.right + } + } +} diff --git a/tests/auto/declarative/states/data/anchorChanges2.qml b/tests/auto/declarative/states/data/anchorChanges2.qml new file mode 100644 index 0000000..545345e --- /dev/null +++ b/tests/auto/declarative/states/data/anchorChanges2.qml @@ -0,0 +1,21 @@ +import Qt 4.6 + +Rectangle { + width: 200; height: 200 + Rectangle { + id: myRect + objectName: "MyRect" + width: 50; height: 50 + color: "green"; + anchors.left: parent.left + anchors.leftMargin: 5 + } + states: State { + name: "right" + AnchorChanges { + target: myRect; + reset: "left" + right: parent.right + } + } +} diff --git a/tests/auto/declarative/states/data/parentChange.qml b/tests/auto/declarative/states/data/parentChange.qml new file mode 100644 index 0000000..94fbd69 --- /dev/null +++ b/tests/auto/declarative/states/data/parentChange.qml @@ -0,0 +1,36 @@ +import Qt 4.6 + +Rectangle { + width: 400; height: 400 + Item { + x: 10; y: 10 + Rectangle { + id: myRect + objectName: "MyRect" + x: 5 + width: 100; height: 100 + color: "red" + } + } + MouseRegion { + id: Clickable + anchors.fill: parent + } + + Item { + x: -100; y: -50 + Item { + id: newParent + x: 248; y: 360 + } + } + + states: State { + name: "reparented" + when: Clickable.pressed + ParentChange { + target: myRect + parent: newParent + } + } +} diff --git a/tests/auto/declarative/states/data/parentChange2.qml b/tests/auto/declarative/states/data/parentChange2.qml new file mode 100644 index 0000000..d1c6d6a --- /dev/null +++ b/tests/auto/declarative/states/data/parentChange2.qml @@ -0,0 +1,31 @@ +import Qt 4.6 + +Rectangle { + id: newParent + width: 400; height: 400 + Item { + scale: .5 + rotation: 15 + x: 10; y: 10 + Rectangle { + id: myRect + objectName: "MyRect" + x: 5 + width: 100; height: 100 + color: "red" + } + } + MouseRegion { + id: Clickable + anchors.fill: parent + } + + states: State { + name: "reparented" + when: Clickable.pressed + ParentChange { + target: myRect + parent: newParent + } + } +} diff --git a/tests/auto/declarative/states/data/parentChange3.qml b/tests/auto/declarative/states/data/parentChange3.qml new file mode 100644 index 0000000..c7b7bee --- /dev/null +++ b/tests/auto/declarative/states/data/parentChange3.qml @@ -0,0 +1,42 @@ +import Qt 4.6 + +Rectangle { + width: 400; height: 400 + Item { + scale: .5 + rotation: 15 + transformOrigin: "Center" + x: 10; y: 10 + Rectangle { + id: myRect + objectName: "MyRect" + x: 5 + width: 100; height: 100 + transformOrigin: "BottomLeft" + color: "red" + } + } + MouseRegion { + id: Clickable + anchors.fill: parent + } + + Item { + x: 200; y: 200 + rotation: 52; + scale: 2 + Item { + id: newParent + x: 100; y: 100 + } + } + + states: State { + name: "reparented" + when: Clickable.pressed + ParentChange { + target: myRect + parent: newParent + } + } +} diff --git a/tests/auto/declarative/states/data/script.qml b/tests/auto/declarative/states/data/script.qml new file mode 100644 index 0000000..6983419 --- /dev/null +++ b/tests/auto/declarative/states/data/script.qml @@ -0,0 +1,10 @@ +import Qt 4.6 +Rectangle { + id: MyRectangle + width: 100; height: 100 + color: "red" + states: State { + name: "blue" + StateChangeScript { script: MyRectangle.color = "blue"; } + } +} diff --git a/tests/auto/declarative/states/tst_states.cpp b/tests/auto/declarative/states/tst_states.cpp index 89e755e..a215ed8 100644 --- a/tests/auto/declarative/states/tst_states.cpp +++ b/tests/auto/declarative/states/tst_states.cpp @@ -54,6 +54,9 @@ private slots: void basicExtension(); void basicBinding(); void signalOverride(); + void parentChange(); + void anchorChanges(); + void script(); }; void tst_states::basicChanges() @@ -353,6 +356,116 @@ void tst_states::signalOverride() } } +void tst_states::parentChange() +{ + QmlEngine engine; + + { + QmlComponent rectComponent(&engine, SRCDIR "/data/parentChange.qml"); + QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + + QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect")); + QVERIFY(innerRect != 0); + + rect->setState("reparented"); + QCOMPARE(innerRect->rotation(), qreal(0)); + QCOMPARE(innerRect->scale(), qreal(1)); + QCOMPARE(innerRect->x(), qreal(-133)); + QCOMPARE(innerRect->y(), qreal(-300)); + } + + { + QmlComponent rectComponent(&engine, SRCDIR "/data/parentChange2.qml"); + QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + + QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect")); + QVERIFY(innerRect != 0); + + rect->setState("reparented"); + QCOMPARE(innerRect->rotation(), qreal(15)); + QCOMPARE(innerRect->scale(), qreal(.5)); + QCOMPARE(QString("%1").arg(innerRect->x()), QString("%1").arg(12.4148145657)); + QCOMPARE(QString("%1").arg(innerRect->y()), QString("%1").arg(10.6470476128)); + } + + { + QmlComponent rectComponent(&engine, SRCDIR "/data/parentChange3.qml"); + QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + + QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect")); + QVERIFY(innerRect != 0); + + rect->setState("reparented"); + QCOMPARE(innerRect->rotation(), qreal(-37)); + QCOMPARE(innerRect->scale(), qreal(.25)); + QCOMPARE(QString("%1").arg(innerRect->x()), QString("%1").arg(-217.305)); + QCOMPARE(QString("%1").arg(innerRect->y()), QString("%1").arg(-164.413)); + + rect->setState(""); + QCOMPARE(innerRect->rotation(), qreal(0)); + QCOMPARE(innerRect->scale(), qreal(1)); + QCOMPARE(innerRect->x(), qreal(5)); + QCOMPARE(innerRect->y(), qreal(0)); + } +} + +void tst_states::anchorChanges() +{ + QmlEngine engine; + + { + QmlComponent rectComponent(&engine, SRCDIR "/data/anchorChanges.qml"); + QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + + QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect")); + QVERIFY(innerRect != 0); + + rect->setState("right"); + QCOMPARE(innerRect->x(), qreal(150)); + + rect->setState(""); + QCOMPARE(innerRect->x(), qreal(5)); + } + + { + QmlComponent rectComponent(&engine, SRCDIR "/data/anchorChanges2.qml"); + QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + + QmlGraphicsRectangle *innerRect = qobject_cast<QmlGraphicsRectangle*>(rect->findChild<QmlGraphicsRectangle*>("MyRect")); + QVERIFY(innerRect != 0); + + rect->setState("right"); + QCOMPARE(innerRect->x(), qreal(150)); + + rect->setState(""); + QCOMPARE(innerRect->x(), qreal(5)); + } +} + +void tst_states::script() +{ + QmlEngine engine; + + { + QmlComponent rectComponent(&engine, SRCDIR "/data/script.qml"); + QmlGraphicsRectangle *rect = qobject_cast<QmlGraphicsRectangle*>(rectComponent.create()); + QVERIFY(rect != 0); + + QCOMPARE(rect->color(),QColor("red")); + + rect->setState("blue"); + QCOMPARE(rect->color(),QColor("blue")); + + rect->setState(""); + QCOMPARE(rect->color(),QColor("blue")); // a script isn't reverted + } +} + QTEST_MAIN(tst_states) #include "tst_states.moc" diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.0.png b/tests/auto/declarative/visual/focusscope/data-X11/test.0.png Binary files differindex d0fb8a0..f68f7dc 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test.0.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.0.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.1.png b/tests/auto/declarative/visual/focusscope/data-X11/test.1.png Binary files differindex d0fb8a0..f68f7dc 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test.1.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.1.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.2.png b/tests/auto/declarative/visual/focusscope/data-X11/test.2.png Binary files differindex f25f27c..e26c028 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test.2.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.2.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.3.png b/tests/auto/declarative/visual/focusscope/data-X11/test.3.png Binary files differindex 74a9b3f..9c4b2f2 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test.3.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.3.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.4.png b/tests/auto/declarative/visual/focusscope/data-X11/test.4.png Binary files differindex 74a9b3f..9c4b2f2 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test.4.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.4.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.5.png b/tests/auto/declarative/visual/focusscope/data-X11/test.5.png Binary files differindex 74a9b3f..9c4b2f2 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test.5.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.5.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test.qml b/tests/auto/declarative/visual/focusscope/data-X11/test.qml index 5c66034..93189fa 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test.qml +++ b/tests/auto/declarative/visual/focusscope/data-X11/test.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 32 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 48 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 64 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 80 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 96 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 112 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 128 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 144 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 160 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 176 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 192 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 208 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 224 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 240 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 256 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 272 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 288 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 304 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 320 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 336 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 352 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 368 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 384 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 400 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 416 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 432 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 448 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 464 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 480 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 496 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 512 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 528 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 544 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 560 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 576 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 592 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 608 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 624 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 640 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 656 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 672 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 688 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 704 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 720 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 736 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 752 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 768 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 784 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 800 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 816 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 832 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 848 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 864 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 880 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 896 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 912 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 928 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 944 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 960 @@ -246,75 +246,75 @@ VisualTest { } Frame { msec: 976 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 992 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1008 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1024 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1040 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1056 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1072 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1088 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1104 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1120 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1136 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1152 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1168 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1184 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1200 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1216 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1232 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1248 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Key { type: 6 @@ -326,23 +326,23 @@ VisualTest { } Frame { msec: 1264 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1280 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1296 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1312 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1328 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Key { type: 7 @@ -354,123 +354,123 @@ VisualTest { } Frame { msec: 1344 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1360 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1376 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1392 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1408 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1424 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1440 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1456 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1472 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1488 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1504 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1520 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1536 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1552 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1568 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1584 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1600 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1616 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1632 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1648 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1664 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1680 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1696 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1712 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1728 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1744 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1760 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1776 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1792 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 1808 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Key { type: 6 @@ -482,27 +482,27 @@ VisualTest { } Frame { msec: 1824 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1840 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1856 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1872 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1888 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1904 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1920 @@ -510,11 +510,11 @@ VisualTest { } Frame { msec: 1936 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1952 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Key { type: 7 @@ -526,103 +526,103 @@ VisualTest { } Frame { msec: 1968 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 1984 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2000 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2016 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2032 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2048 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2064 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2080 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2096 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2112 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2128 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2144 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2160 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2176 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2192 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2208 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2224 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2240 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2256 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2272 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2288 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2304 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2320 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2336 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 2352 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Key { type: 6 @@ -634,31 +634,31 @@ VisualTest { } Frame { msec: 2368 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2384 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2400 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2416 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2432 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2448 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2464 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Key { type: 7 @@ -670,103 +670,103 @@ VisualTest { } Frame { msec: 2480 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2496 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2512 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2528 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2544 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2560 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2576 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2592 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2608 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2624 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2640 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2656 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2672 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2688 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2704 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2720 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2736 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2752 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2768 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2784 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2800 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2816 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2832 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2848 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2864 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2880 @@ -774,27 +774,27 @@ VisualTest { } Frame { msec: 2896 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2912 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2928 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2944 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2960 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 2976 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Key { type: 6 @@ -806,31 +806,31 @@ VisualTest { } Frame { msec: 2992 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3008 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3024 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3040 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3056 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3072 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3088 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Key { type: 7 @@ -842,115 +842,115 @@ VisualTest { } Frame { msec: 3104 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3120 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3136 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3152 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3168 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3184 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3200 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3216 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3232 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3248 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3264 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3280 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3296 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3312 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3328 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3344 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3360 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3376 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3392 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3408 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3424 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3440 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3456 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3472 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3488 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3504 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3520 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Frame { msec: 3536 - hash: "e608f3483071562580bf492da25a4104" + hash: "cd2aced96da9032ddd5e2cacf27d045d" } Key { type: 6 @@ -962,31 +962,31 @@ VisualTest { } Frame { msec: 3552 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3568 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3584 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3600 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3616 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3632 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3648 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Key { type: 7 @@ -998,47 +998,47 @@ VisualTest { } Frame { msec: 3664 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3680 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3696 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3712 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3728 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3744 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3760 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3776 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3792 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3808 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3824 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3840 @@ -1046,87 +1046,87 @@ VisualTest { } Frame { msec: 3856 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3872 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3888 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3904 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3920 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3936 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3952 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3968 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 3984 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4000 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4016 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4032 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4048 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4064 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4080 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4096 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4112 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4128 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4144 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4160 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4176 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Key { type: 6 @@ -1138,27 +1138,27 @@ VisualTest { } Frame { msec: 4192 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4208 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4224 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4240 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4256 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4272 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Key { type: 7 @@ -1170,131 +1170,131 @@ VisualTest { } Frame { msec: 4288 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4304 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4320 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4336 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4352 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4368 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4384 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4400 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4416 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4432 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4448 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4464 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4480 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4496 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4512 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4528 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4544 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4560 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4576 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4592 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4608 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4624 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4640 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4656 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4672 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4688 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4704 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4720 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4736 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4752 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4768 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Frame { msec: 4784 - hash: "231a20ad55d5ba3be9baf46a80ec86f4" + hash: "9157e592069482e801a091aa69758d26" } Key { type: 6 @@ -1310,27 +1310,27 @@ VisualTest { } Frame { msec: 4816 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4832 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4848 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4864 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4880 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4896 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Key { type: 7 @@ -1342,215 +1342,215 @@ VisualTest { } Frame { msec: 4912 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4928 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4944 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4960 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4976 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 4992 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5008 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5024 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5040 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5056 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5072 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5088 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5104 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5120 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5136 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5152 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5168 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5184 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5200 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5216 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5232 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5248 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5264 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5280 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5296 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5312 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5328 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5344 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5360 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5376 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5392 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5408 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5424 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5440 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5456 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5472 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5488 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5504 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5520 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5536 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5552 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5568 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5584 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5600 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5616 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5632 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5648 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5664 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5680 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5696 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5712 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5728 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5744 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5760 @@ -1558,42 +1558,42 @@ VisualTest { } Frame { msec: 5776 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5792 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Key { type: 6 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { msec: 5808 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5824 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5840 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5856 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5872 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } Frame { msec: 5888 - hash: "383edfe8be8621d456162cc1cd88ae1a" + hash: "0de58b2460574baf17912e90ba8a89b2" } } diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.0.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.0.png Binary files differindex 2821112..5f93c67 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.0.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.0.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png Binary files differindex d3aeb93..3b4e0e6 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.1.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png Binary files differindex d7b647f..54a3934 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.2.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png Binary files differindex 551efc8..4f08fd2 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.3.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png Binary files differindex 5e59cbe..9aee1f8 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.4.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png Binary files differindex 622c768..04eb05c 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.5.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png Binary files differindex d7b647f..54a3934 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.6.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png Binary files differindex d3aeb93..3b4e0e6 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.7.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png Binary files differindex 891a10a..2df55df 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.8.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png b/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png Binary files differindex c346260..91816fd 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.9.png diff --git a/tests/auto/declarative/visual/focusscope/data-X11/test3.qml b/tests/auto/declarative/visual/focusscope/data-X11/test3.qml index e7cb67c..b1f628f 100644 --- a/tests/auto/declarative/visual/focusscope/data-X11/test3.qml +++ b/tests/auto/declarative/visual/focusscope/data-X11/test3.qml @@ -6,151 +6,151 @@ VisualTest { } Frame { msec: 16 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 32 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 48 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 64 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 80 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 96 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 112 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 128 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 144 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 160 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 176 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 192 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 208 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 224 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 240 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 256 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 272 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 288 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 304 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 320 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 336 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 352 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 368 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 384 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 400 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 416 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 432 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 448 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 464 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 480 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 496 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 512 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 528 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 544 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 560 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 576 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 592 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Key { type: 6 @@ -162,27 +162,27 @@ VisualTest { } Frame { msec: 608 - hash: "70404a8e19cee8dad4a7dc16b3b018e2" + hash: "ed71dfbe146870d1a0869d60c35ff9d7" } Frame { msec: 624 - hash: "70404a8e19cee8dad4a7dc16b3b018e2" + hash: "ed71dfbe146870d1a0869d60c35ff9d7" } Frame { msec: 640 - hash: "42ede0774612c5ce72bcb17c1f8c53fb" + hash: "34796cef9feb92f7f0e2e8d837d87d34" } Frame { msec: 656 - hash: "acbf5d05e87e456b49636a8e533b8819" + hash: "64fa8f195b57077aa03ca264fec9554a" } Frame { msec: 672 - hash: "1c3adf6475d5bbf23c83dda77614834f" + hash: "ae33318904415e937363787273ecb566" } Frame { msec: 688 - hash: "b047088d7d135614c7de5d6b1fe6447c" + hash: "67c3e1c8c728e7677a3554aadd9795c9" } Key { type: 7 @@ -194,67 +194,67 @@ VisualTest { } Frame { msec: 704 - hash: "59393e79f5571c1b0b54ceb96c570afd" + hash: "1857db7aa9eefe429d50e5b2ad87064b" } Frame { msec: 720 - hash: "2657a9db93dab4180ddf5a3d928fa83c" + hash: "507883a03bef0bc20755da1474731fdf" } Frame { msec: 736 - hash: "bd012a5b982553780ef81ea273381988" + hash: "dafe7464394460e04d482c1f7a1e9ad0" } Frame { msec: 752 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 768 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 784 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 800 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 816 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 832 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 848 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 864 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 880 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 896 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 912 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 928 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 944 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 960 @@ -262,35 +262,35 @@ VisualTest { } Frame { msec: 976 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 992 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 1008 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 1024 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 1040 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 1056 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 1072 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 1088 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Key { type: 6 @@ -302,35 +302,35 @@ VisualTest { } Frame { msec: 1104 - hash: "3ba7daa96383cc7fcd2f3e15b9b46bea" + hash: "7fb8cb07b6bca30912706cec43984d92" } Frame { msec: 1120 - hash: "3ba7daa96383cc7fcd2f3e15b9b46bea" + hash: "7fb8cb07b6bca30912706cec43984d92" } Frame { msec: 1136 - hash: "c097e88ae5cea1203735aba2de753b35" + hash: "c1915978cda982f6062790b2a583211b" } Frame { msec: 1152 - hash: "309058119191341625c797e14b1d68fd" + hash: "afdb50d740b3dc7be44021d826be4302" } Frame { msec: 1168 - hash: "d2d44135892d56e556b6343e0d2177df" + hash: "4682717b9375b4b02a70378ddca30885" } Frame { msec: 1184 - hash: "8f77166dfb871d1ad3c4b21e9626dcf8" + hash: "aede0eebb3948a4a764e255b892b09be" } Frame { msec: 1200 - hash: "b6bd7476decc62d295414eea18f21ffb" + hash: "b42a147daec14a3da2548fd4de3a9a44" } Frame { msec: 1216 - hash: "8ca06a6b2787a3e684b6a0614baf057f" + hash: "2ff70f916f78fe3c199eb96ceb44ce4e" } Key { type: 7 @@ -342,79 +342,79 @@ VisualTest { } Frame { msec: 1232 - hash: "119130d0bde37eb6038e4fbcea54d619" + hash: "707ac8e58d317b97113903b45a482f6b" } Frame { msec: 1248 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1264 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1280 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1296 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1312 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1328 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1344 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1360 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1376 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1392 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1408 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1424 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1440 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1456 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1472 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1488 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1504 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 1520 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Key { type: 6 @@ -426,35 +426,35 @@ VisualTest { } Frame { msec: 1536 - hash: "d36e8e689b999046f5671cce03ec98b9" + hash: "91525556fe23764f58b3a3f38a29cd76" } Frame { msec: 1552 - hash: "d36e8e689b999046f5671cce03ec98b9" + hash: "91525556fe23764f58b3a3f38a29cd76" } Frame { msec: 1568 - hash: "1ae470df65b1637dfed5ed330bf6f2cc" + hash: "d1dc625bbf46fc51aaf47969ad27a8a4" } Frame { msec: 1584 - hash: "fd98bff5f8c97cf0644aca6d205720b3" + hash: "7d868176c7a8363a79ef8b8f4da56867" } Frame { msec: 1600 - hash: "6c97607356ec22d77da6170de94ed1b8" + hash: "d239e0b0e118d351680c6b4b2bc5d3b2" } Frame { msec: 1616 - hash: "ee49691989ffada50e3b82df960ec1cb" + hash: "8f6d1640dbc655eb3b326c66fcb97d3c" } Frame { msec: 1632 - hash: "fba046a966f5ebdc17a73c33fb2fb1af" + hash: "d52b623b8449d71734f72c7bd661a1c4" } Frame { msec: 1648 - hash: "5031c1c466e14e7daf39be6af1a9c402" + hash: "f7c0c77f3b5ed71321edd6bc7b605512" } Key { type: 7 @@ -466,67 +466,67 @@ VisualTest { } Frame { msec: 1664 - hash: "508c31a76bbb9ae50ec44484ea889289" + hash: "8b26397ff1a83baa894f82594a12a190" } Frame { msec: 1680 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1696 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1712 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1728 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1744 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1760 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1776 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1792 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1808 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1824 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1840 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1856 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1872 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1888 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1904 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1920 @@ -534,23 +534,23 @@ VisualTest { } Frame { msec: 1936 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1952 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1968 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 1984 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 2000 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Key { type: 6 @@ -562,35 +562,35 @@ VisualTest { } Frame { msec: 2016 - hash: "c79134dc4b03885c0c2139e9f1949968" + hash: "f63308a7cd48a8cb4d413d17120f5a26" } Frame { msec: 2032 - hash: "c79134dc4b03885c0c2139e9f1949968" + hash: "f63308a7cd48a8cb4d413d17120f5a26" } Frame { msec: 2048 - hash: "6f29381e25034bcb9177033fdaf1ee4c" + hash: "2e97db8ed93524dc197e76cc2d270999" } Frame { msec: 2064 - hash: "e9668338280735ed6cf1e71f02d28f04" + hash: "2b135d90684c0f94b8219c4b835b6da9" } Frame { msec: 2080 - hash: "ecd5a887981d564c6e40c215ebb867d2" + hash: "c700a76932bb3bf72868b9e95d095db2" } Frame { msec: 2096 - hash: "0960f7192633036319aa3500dbf38d2b" + hash: "08136d3c3de44ddab23d2d136ba1f310" } Frame { msec: 2112 - hash: "22ececdfdd7eb5a8999df153de47c2e6" + hash: "de701d641e004b61a3c0609556f52fe0" } Frame { msec: 2128 - hash: "f77abe52bd76bca4b728415c4dfd52dc" + hash: "4f7acd87f4de119ad88a53d2c9881037" } Key { type: 7 @@ -602,99 +602,99 @@ VisualTest { } Frame { msec: 2144 - hash: "6d19c9df56ed8037dd5a123945b6fea0" + hash: "deaf3c8a4680ef6f52cb4674a97e0767" } Frame { msec: 2160 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2176 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2192 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2208 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2224 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2240 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2256 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2272 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2288 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2304 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2320 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2336 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2352 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2368 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2384 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2400 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2416 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2432 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2448 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2464 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2480 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2496 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 2512 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Key { type: 6 @@ -706,27 +706,27 @@ VisualTest { } Frame { msec: 2528 - hash: "3e0fa3d0d36a4ea51e9e89933d91e58a" + hash: "fe67b3a48a8a074377be64f619d5922a" } Frame { msec: 2544 - hash: "3e0fa3d0d36a4ea51e9e89933d91e58a" + hash: "fe67b3a48a8a074377be64f619d5922a" } Frame { msec: 2560 - hash: "eea826901b19fb3c7aff8594d8030acb" + hash: "088691f4f46f7a8c9a3b8ea766d9a437" } Frame { msec: 2576 - hash: "a673c5dbc0b1b7bf585319a923db6478" + hash: "bd747ea04c3b36378374f8ea1031458f" } Frame { msec: 2592 - hash: "c9fa9bdb8c8ad8c1144feb4a7f9ae96e" + hash: "2ebd0e3373eb75a3ad986e203952f78a" } Frame { msec: 2608 - hash: "646601d0aabe76467c3317fb12e785e5" + hash: "b4d89e4f3aef9f351facd13bd83f3022" } Key { type: 7 @@ -738,67 +738,67 @@ VisualTest { } Frame { msec: 2624 - hash: "a88500a959cd4127528a74af4979d83a" + hash: "091de1bd1719e1fa6d914cf9708f4ac6" } Frame { msec: 2640 - hash: "ab288556e0bff85a48be364ee7a61b18" + hash: "0097d8ed156cb0c78c48dfacc557cba8" } Frame { msec: 2656 - hash: "db5d053fd16f3bd6e3048f1d7f123027" + hash: "faeb379e01283cb21ea695e96727918d" } Frame { msec: 2672 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2688 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2704 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2720 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2736 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2752 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2768 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2784 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2800 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2816 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2832 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2848 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2864 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2880 @@ -806,27 +806,27 @@ VisualTest { } Frame { msec: 2896 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2912 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2928 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2944 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2960 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 2976 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Key { type: 6 @@ -838,39 +838,39 @@ VisualTest { } Frame { msec: 2992 - hash: "dfc6df49c4340429529e88e877940158" + hash: "b00a29d67edc26e75f5298b2836d4e47" } Frame { msec: 3008 - hash: "dfc6df49c4340429529e88e877940158" + hash: "b00a29d67edc26e75f5298b2836d4e47" } Frame { msec: 3024 - hash: "e44644da7159bfde1a1cf6148d268c53" + hash: "6e47c87b5063877a609e8d23ddf2d314" } Frame { msec: 3040 - hash: "f0045733c7f4e799c4ca49ec28c7c652" + hash: "06f147a69c3e903905376ef1229290bf" } Frame { msec: 3056 - hash: "8b0ded24c343556849ea67d191c03a17" + hash: "5f02ff1a1207f17efd224ccc800b0057" } Frame { msec: 3072 - hash: "0c50a579850c3eb43c4824bf7e8b1d12" + hash: "6c0860fdb216bb79fd2da4647792628d" } Frame { msec: 3088 - hash: "747d2205db14cf72dc5989e92b8076ab" + hash: "eb579f67620adb762722428d44a1d841" } Frame { msec: 3104 - hash: "a0a9196cb896eadf411cbcccaa069f10" + hash: "c579017a82e34a471a95f8a116a20b9e" } Frame { msec: 3120 - hash: "c682ad7747f7245b4e213fc078d51e8f" + hash: "bb5c08ff104b230829579dfb8015bdcc" } Key { type: 7 @@ -882,95 +882,95 @@ VisualTest { } Frame { msec: 3136 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3152 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3168 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3184 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3200 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3216 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3232 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3248 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3264 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3280 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3296 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3312 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3328 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3344 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3360 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3376 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3392 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3408 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3424 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3440 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3456 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3472 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 3488 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Key { type: 6 @@ -982,35 +982,35 @@ VisualTest { } Frame { msec: 3504 - hash: "115b81c715a58e66c3d1f09bb03fe97f" + hash: "5aa664f268433f2724a1ab2cea1d6d25" } Frame { msec: 3520 - hash: "115b81c715a58e66c3d1f09bb03fe97f" + hash: "5aa664f268433f2724a1ab2cea1d6d25" } Frame { msec: 3536 - hash: "a994e45c41afe0a4ab7d65c27139f3d8" + hash: "9e4854fd0c533efa75aec7d9a8bc41dd" } Frame { msec: 3552 - hash: "b02ecf8c3413752aa1d2bfa6e08184ca" + hash: "c4eee4eca804007dca6e6d9379cbfb1b" } Frame { msec: 3568 - hash: "85ef0bedcb66676ca658068561d8df8e" + hash: "c59774f00d54c0353b41202a39fc0dbd" } Frame { msec: 3584 - hash: "435bce6119a6542ce9ad743baa70ceb0" + hash: "910e6b5b05530c60874eee00df0d62cf" } Frame { msec: 3600 - hash: "5918c9c068ca62795d7b97ac818d79d5" + hash: "5b606a7a697c6d53fbe42e33333f96cc" } Frame { msec: 3616 - hash: "ff3ebc0c6f7eb39bbc10fad07b671d82" + hash: "e1fce42312e8a31d74add4a447dd3df9" } Key { type: 7 @@ -1022,55 +1022,55 @@ VisualTest { } Frame { msec: 3632 - hash: "0426b9666ccd84aa0d095e47a9379bd7" + hash: "6250cb9ea51309922cf0a6647593bfee" } Frame { msec: 3648 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3664 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3680 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3696 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3712 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3728 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3744 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3760 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3776 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3792 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3808 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3824 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3840 @@ -1078,39 +1078,39 @@ VisualTest { } Frame { msec: 3856 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3872 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3888 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3904 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3920 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3936 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3952 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3968 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 3984 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Key { type: 6 @@ -1122,35 +1122,35 @@ VisualTest { } Frame { msec: 4000 - hash: "30901e72d40975b92c9d96c0f52b458c" + hash: "d6eecfb695deacae4bb2fe5adb2d5c3d" } Frame { msec: 4016 - hash: "30901e72d40975b92c9d96c0f52b458c" + hash: "d6eecfb695deacae4bb2fe5adb2d5c3d" } Frame { msec: 4032 - hash: "f4f84cb8e42e269b121b2ffa9204db38" + hash: "b48f481a8149c03139e29b619dbb3f3c" } Frame { msec: 4048 - hash: "41e9198277d0d590d176fd9972bfbf58" + hash: "994ba7fc208bbf081d54384d82d0fc07" } Frame { msec: 4064 - hash: "664bddf12068363afc89f8fc52d133c0" + hash: "05d30293c12eb6a3e21cebd42bb1f383" } Frame { msec: 4080 - hash: "18a12504f09551bd6e3013ef1bbf40f9" + hash: "f2b4140a5d26f241a27e2a3027785559" } Frame { msec: 4096 - hash: "95717e24255e442d955d3c64691576e0" + hash: "1189e519fd1611c5603e598fbcadca44" } Frame { msec: 4112 - hash: "7cb9b9a71bfb1cd3061efde86e57ff34" + hash: "ee98893d95e55cb76966c0cfe29d237b" } Key { type: 7 @@ -1162,171 +1162,171 @@ VisualTest { } Frame { msec: 4128 - hash: "a090d2c37080361240769198f1032b7a" + hash: "9ff3010efeb8707c864def782405ad4c" } Frame { msec: 4144 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4160 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4176 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4192 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4208 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4224 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4240 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4256 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4272 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4288 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4304 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4320 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4336 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4352 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4368 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4384 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4400 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4416 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4432 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4448 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4464 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4480 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4496 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4512 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4528 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4544 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4560 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4576 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4592 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4608 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4624 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4640 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4656 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4672 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4688 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4704 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4720 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4736 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4752 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4768 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4784 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4800 @@ -1334,79 +1334,79 @@ VisualTest { } Frame { msec: 4816 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4832 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4848 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4864 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4880 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4896 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4912 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4928 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4944 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4960 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4976 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 4992 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 5008 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 5024 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 5040 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 5056 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 5072 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 5088 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Frame { msec: 5104 - hash: "c37a8dc01901eb4a1fb0d6ac3c91fca0" + hash: "c842d544f87332bc133833e8966240ee" } Key { type: 6 @@ -1418,35 +1418,35 @@ VisualTest { } Frame { msec: 5120 - hash: "0a524f53903aa1651152fd4a6068c14c" + hash: "a857238777462319fcedd4f359ce1a04" } Frame { msec: 5136 - hash: "0a524f53903aa1651152fd4a6068c14c" + hash: "a857238777462319fcedd4f359ce1a04" } Frame { msec: 5152 - hash: "bbef86b80161702653b88f6cfa88528c" + hash: "d9248d1257bf0232dcdf29fca7536ad1" } Frame { msec: 5168 - hash: "26de302dde8fb22e509c0b3c8cb37abd" + hash: "0405e029cc4b2fa80761c06fb8898b0d" } Frame { msec: 5184 - hash: "9f3ec01bf5ae12383a58a716d462d479" + hash: "a36fb7e32e6aafbb84b62ef56be3cf70" } Frame { msec: 5200 - hash: "cbfa90ccd871ba1ab12f75e8e5f2e11e" + hash: "9846c73bbe57277bd36bbca1c489e644" } Frame { msec: 5216 - hash: "c5ba4fd178429a1cb44ec96da8a1a404" + hash: "8f4840715082c48d520ddb55501cf8eb" } Frame { msec: 5232 - hash: "fb87133ef012abe68491be1cc627d580" + hash: "478fde3a6fd8cecc222b8c16743d231f" } Key { type: 7 @@ -1458,123 +1458,123 @@ VisualTest { } Frame { msec: 5248 - hash: "0f8147bf9cd92eec88ea6f8b9f2ad5eb" + hash: "b2bb760c93d26c6db21ce6beccd36b66" } Frame { msec: 5264 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5280 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5296 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5312 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5328 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5344 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5360 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5376 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5392 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5408 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5424 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5440 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5456 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5472 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5488 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5504 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5520 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5536 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5552 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5568 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5584 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5600 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5616 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5632 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5648 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5664 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5680 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5696 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Frame { msec: 5712 - hash: "f2ca9897c874faa97f2d959964da4bd1" + hash: "1ef605e1a68ff993f4f971a85a6bee97" } Key { type: 6 @@ -1586,11 +1586,11 @@ VisualTest { } Frame { msec: 5728 - hash: "f78a62f7143dbf86e0b153fe08a9bf6e" + hash: "4780d8094833831f27d1aff3e0f9689f" } Frame { msec: 5744 - hash: "f78a62f7143dbf86e0b153fe08a9bf6e" + hash: "4780d8094833831f27d1aff3e0f9689f" } Frame { msec: 5760 @@ -1598,27 +1598,27 @@ VisualTest { } Frame { msec: 5776 - hash: "e89f6d4727cf92ce87e4c48eb34074a6" + hash: "93c8d7980de378a055b7ca824882ae4e" } Frame { msec: 5792 - hash: "eb7761ac018dbb93b72acd3126a7eace" + hash: "e0abe402f89c5d84e5a02f0e4bcbd5e3" } Frame { msec: 5808 - hash: "a70638789eeaada677afa68a7dcc1f97" + hash: "067ca20bcfab459a28af7e8dc2830032" } Frame { msec: 5824 - hash: "bb709f17058d1f41b34831d1055195cc" + hash: "d27dc1a08c66cf5f4a84efe3be522ec3" } Frame { msec: 5840 - hash: "3b459f10eb299712180fed277c75ca22" + hash: "639f7555adc7958e807c2e774694fe25" } Frame { msec: 5856 - hash: "8f77a04a3690f7cbfae4858c8fff1a24" + hash: "b55f5fcbc2284736695049b2cdc9c8ce" } Key { type: 7 @@ -1630,107 +1630,107 @@ VisualTest { } Frame { msec: 5872 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 5888 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 5904 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 5920 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 5936 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 5952 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 5968 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 5984 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6000 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6016 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6032 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6048 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6064 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6080 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6096 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6112 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6128 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6144 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6160 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6176 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6192 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6208 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6224 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6240 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6256 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Frame { msec: 6272 - hash: "0d20e56256c2aa305c487c7875249c45" + hash: "f209867bbf74dbe0385655a522e322f1" } Key { type: 6 @@ -1742,39 +1742,39 @@ VisualTest { } Frame { msec: 6288 - hash: "80a729efc25a86d09977f6abe4b96e77" + hash: "48910947dd160b33251c54ff45f6a0db" } Frame { msec: 6304 - hash: "80a729efc25a86d09977f6abe4b96e77" + hash: "48910947dd160b33251c54ff45f6a0db" } Frame { msec: 6320 - hash: "75e57461badc3fd9c38548c751a86b62" + hash: "20b0f988a1517d67a0d3c78ae8af4e5a" } Frame { msec: 6336 - hash: "b0f49c8a67bdf1285334514d78a6b613" + hash: "355b5b161176c31bcbae198b1581f59b" } Frame { msec: 6352 - hash: "564bca050cfc30f19b77989a1e3a26d8" + hash: "19cbb853a93bd062a53d7908df54bfbd" } Frame { msec: 6368 - hash: "caca4855c581f42b26623bf717302884" + hash: "13fbe723f288cffd09f0a86b71457161" } Frame { msec: 6384 - hash: "89db7709fcec729023c910608b504665" + hash: "0014ed3b1a868cf75bfffedb52674c5c" } Frame { msec: 6400 - hash: "5501f75f4b8b3229a7db38df4e9cc938" + hash: "a1c444be02b90e69319096b8a508947d" } Frame { msec: 6416 - hash: "505d12f5900fa920f47c650d24745ec5" + hash: "b88a3f2f3290e4262757b1f5741cb5ce" } Key { type: 7 @@ -1786,75 +1786,75 @@ VisualTest { } Frame { msec: 6432 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6448 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6464 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6480 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6496 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6512 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6528 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6544 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6560 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6576 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6592 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6608 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6624 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6640 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6656 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6672 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6688 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6704 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6720 @@ -1862,35 +1862,35 @@ VisualTest { } Frame { msec: 6736 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6752 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6768 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6784 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6800 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6816 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6832 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Frame { msec: 6848 - hash: "4e9b6719737e92ef409b76772a9d6b4a" + hash: "dc708a762ba7f1120eb14105571943f8" } Key { type: 6 @@ -1902,39 +1902,39 @@ VisualTest { } Frame { msec: 6864 - hash: "240f48d1c5aa1c23bf1c660a0a468283" + hash: "a44bb76233c69780c178dddd79cc1968" } Frame { msec: 6880 - hash: "240f48d1c5aa1c23bf1c660a0a468283" + hash: "a44bb76233c69780c178dddd79cc1968" } Frame { msec: 6896 - hash: "e1ba9a4edfd19acffdf25e51dbbc94a5" + hash: "154b11fd0468aa18d1ef1895f2e2923c" } Frame { msec: 6912 - hash: "e40877ef6876be3f44db947af54287bc" + hash: "fe7ecb02e63fbb7584405e7162f0ee21" } Frame { msec: 6928 - hash: "a72d66c4691d03e7b9a12df9df3d4b4d" + hash: "90b6fea69d106c628a9c7ff23a97e6c2" } Frame { msec: 6944 - hash: "26cda82027725475f2be660a8e8b2463" + hash: "3e233e837e24976d441b6cabc3b74098" } Frame { msec: 6960 - hash: "233e9b1c58cc338d22e3d3ca8669a33a" + hash: "7a490f7be5c4c0ae09421f884e9adadb" } Frame { msec: 6976 - hash: "316788ce1340cb0e151d12d244a48068" + hash: "462d44603dd661ccf126c81197608056" } Frame { msec: 6992 - hash: "6213c8fde998ae5b819f9e3f7f7ea857" + hash: "0b7ca73497c37255bccad6787d690236" } Key { type: 7 @@ -1946,115 +1946,115 @@ VisualTest { } Frame { msec: 7008 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7024 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7040 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7056 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7072 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7088 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7104 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7120 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7136 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7152 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7168 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7184 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7200 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7216 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7232 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7248 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7264 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7280 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7296 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7312 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7328 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7344 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7360 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7376 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7392 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7408 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7424 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Frame { msec: 7440 - hash: "316d165df776e906015714372e67f452" + hash: "224ade5c942415100b5418a11d043611" } Key { type: 6 @@ -2066,31 +2066,31 @@ VisualTest { } Frame { msec: 7456 - hash: "37bfd610be786be852b78bdb933b9a01" + hash: "95ff2a535a13fcdded94229d53848f7c" } Frame { msec: 7472 - hash: "37bfd610be786be852b78bdb933b9a01" + hash: "95ff2a535a13fcdded94229d53848f7c" } Frame { msec: 7488 - hash: "05b41d669cdb7821d3db181c444f9667" + hash: "d2386e4137632f15aa5ba9dd1a138a67" } Frame { msec: 7504 - hash: "2ddf3b590860a1db12d04ab4dde830a3" + hash: "9f2c40191c1a81f37543f5bfcb852bdf" } Frame { msec: 7520 - hash: "ecc85633bf413d41da38b87d21c92653" + hash: "5facdbcc9d7ab0adfcb2ca9d1812a3f5" } Frame { msec: 7536 - hash: "829b18a6568680d9fbf720926ec65954" + hash: "7bbb08470e4f3eeabe710e0ea327c467" } Frame { msec: 7552 - hash: "04f844fe5b2f944d435a9c66d93d2907" + hash: "630abf60d09d3a685d79e6da627b3aa2" } Key { type: 7 @@ -2102,31 +2102,31 @@ VisualTest { } Frame { msec: 7568 - hash: "49680fff1a16c74de135a72c6b13d156" + hash: "d8aed706508814cdbd1ef0984f112b94" } Frame { msec: 7584 - hash: "a4b4e3a49ce12e8a8a1a43a808555243" + hash: "d191c2dc3e2edd05bfd649dcfa51029e" } Frame { msec: 7600 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7616 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7632 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7648 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7664 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7680 @@ -2134,75 +2134,75 @@ VisualTest { } Frame { msec: 7696 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7712 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7728 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7744 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7760 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7776 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7792 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7808 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7824 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7840 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7856 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7872 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7888 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7904 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7920 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7936 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7952 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Frame { msec: 7968 - hash: "aa35e3c7afbb686aca85da5f4d3dc17b" + hash: "7ee37281a3f5788305f779bdd33852e5" } Key { type: 6 @@ -2214,39 +2214,39 @@ VisualTest { } Frame { msec: 7984 - hash: "0211b4e4fe18757e34bec35eab5fde3b" + hash: "fb386abfd73a3feb05b573d16ffa93f9" } Frame { msec: 8000 - hash: "0211b4e4fe18757e34bec35eab5fde3b" + hash: "fb386abfd73a3feb05b573d16ffa93f9" } Frame { msec: 8016 - hash: "abbd3f1a519e8f667b2eebe75c9b4cb3" + hash: "fa1374155fc5427c72bd09ec5a315172" } Frame { msec: 8032 - hash: "803607ec60ef51b54444a184462beb0f" + hash: "ee35a3edf91865e28b16b9fcab8b4c1c" } Frame { msec: 8048 - hash: "e0b670a80137b3fa8ca9ae8fab5aa123" + hash: "10f2677f7c8efe9f64e401940dec3ef7" } Frame { msec: 8064 - hash: "a291881f5d7a42973ac4a6054418259a" + hash: "b2c53bb14a8a6643e69cad2bbb4aacf4" } Frame { msec: 8080 - hash: "c5ed7f0b91af1bf0eba6c149bccb72ab" + hash: "7b7c7d167aca55464d1874ed726ec646" } Frame { msec: 8096 - hash: "25b094fc7f6e8442ae672439a5b10a79" + hash: "19a828ca70133801f1f470f6e348857b" } Frame { msec: 8112 - hash: "9bc4a4dc68228a400b9e87d645e29828" + hash: "bc829873ea3cf8ca8484d990d4b80aa2" } Key { type: 7 @@ -2258,99 +2258,99 @@ VisualTest { } Frame { msec: 8128 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8144 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8160 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8176 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8192 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8208 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8224 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8240 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8256 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8272 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8288 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8304 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8320 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8336 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8352 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8368 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8384 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8400 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8416 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8432 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8448 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8464 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8480 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Frame { msec: 8496 - hash: "4baf177df487bf872c7edd4ab4561120" + hash: "201b90bc27073e945bb00c85501f4dc8" } Key { type: 6 @@ -2362,35 +2362,35 @@ VisualTest { } Frame { msec: 8512 - hash: "2eabf99cadf1ded6a355bdf39715ad57" + hash: "d0d487fd66bcf4177188d4862bd74bc0" } Frame { msec: 8528 - hash: "2eabf99cadf1ded6a355bdf39715ad57" + hash: "d0d487fd66bcf4177188d4862bd74bc0" } Frame { msec: 8544 - hash: "7e70fd7a53929ef47f69c63273818ee1" + hash: "4a4c2e49e4852748916a4d68710e4ae6" } Frame { msec: 8560 - hash: "e76066a86a120d7abf0d645c804c9e69" + hash: "0135092d8a296b7121495cc3994a0f9d" } Frame { msec: 8576 - hash: "e79a0e6badc18ded04e07ce6b805b493" + hash: "7e004aae70236568d635ba929e085b2b" } Frame { msec: 8592 - hash: "67891f5078a0c34a3fb17bbc325b9011" + hash: "3e6a4f60a57515a6bfe4d803c7c22da8" } Frame { msec: 8608 - hash: "6533d214e86aa581da50d26cc1bcd34e" + hash: "142b866861f539837b0bdabaf48028e7" } Frame { msec: 8624 - hash: "c649e873c3ce3fe5639e8d9b9912eafe" + hash: "32a4757602c923366566d9005c78f6cf" } Key { type: 7 @@ -2406,107 +2406,107 @@ VisualTest { } Frame { msec: 8656 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8672 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8688 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8704 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8720 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8736 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8752 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8768 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8784 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8800 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8816 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8832 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8848 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8864 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8880 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8896 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8912 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8928 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8944 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8960 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8976 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 8992 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 9008 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 9024 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 9040 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Frame { msec: 9056 - hash: "3b0e8ae88404e6c12e7918bfc30dc49e" + hash: "358a3fbfa70526a40f2179cb2fd100d4" } Key { type: 6 @@ -2518,39 +2518,39 @@ VisualTest { } Frame { msec: 9072 - hash: "72494522826c29edd9a763342d8ee909" + hash: "b1dc330f31b064f1e3ff4e913773cde8" } Frame { msec: 9088 - hash: "72494522826c29edd9a763342d8ee909" + hash: "b1dc330f31b064f1e3ff4e913773cde8" } Frame { msec: 9104 - hash: "ecba7d108741a940d77920db52f6bc47" + hash: "a0419dede71451f36c93960c8ef8c00c" } Frame { msec: 9120 - hash: "6aa456342c3bb8b6071c28c5d550929e" + hash: "b8141758fc93aa1b286fd60f91e6fa7e" } Frame { msec: 9136 - hash: "bd94dbfa0651b9060cacdbe9a9adc38c" + hash: "8b0d786f239c545be3f51622c336f1e1" } Frame { msec: 9152 - hash: "bb6e75073be7b1e9f3c66761b72611b2" + hash: "25ec52efac83de4f8cade8f257b93b8e" } Frame { msec: 9168 - hash: "11bfc218dd57a9909b1fd7f021577cfa" + hash: "5a1476841b9aaa0e85c397c0447be352" } Frame { msec: 9184 - hash: "d2fbc4d380862423ad2d3a33468b417d" + hash: "d648b0911e6ab78e53121fde8b66b50b" } Frame { msec: 9200 - hash: "0ca09d4275b1c36575e484d79a7d8d2a" + hash: "f552863ff4b76286d03240409c0a928b" } Key { type: 7 @@ -2562,99 +2562,99 @@ VisualTest { } Frame { msec: 9216 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9232 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9248 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9264 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9280 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9296 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9312 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9328 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9344 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9360 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9376 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9392 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9408 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9424 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9440 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9456 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9472 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9488 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9504 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9520 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9536 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9552 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9568 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9584 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9600 @@ -2662,218 +2662,218 @@ VisualTest { } Frame { msec: 9616 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9632 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9648 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9664 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9680 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9696 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9712 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9728 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9744 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9760 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9776 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9792 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9808 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9824 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9840 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9856 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9872 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9888 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9904 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9920 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9936 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9952 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9968 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 9984 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10000 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10016 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10032 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10048 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10064 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10080 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10096 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10112 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10128 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10144 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10160 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10176 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10192 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10208 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10224 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10240 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10256 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10272 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10288 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10304 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10320 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10336 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10352 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10368 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Key { type: 6 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { msec: 10384 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10400 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10416 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } Frame { msec: 10432 - hash: "d157fdaf13170250e66768364e90e820" + hash: "f3b4cab7975190f756c923f16ce4c298" } } diff --git a/tests/auto/declarative/visual/focusscope/test3.qml b/tests/auto/declarative/visual/focusscope/test3.qml index af06469..b5feeb5 100644 --- a/tests/auto/declarative/visual/focusscope/test3.qml +++ b/tests/auto/declarative/visual/focusscope/test3.qml @@ -41,7 +41,7 @@ Rectangle { delegate: VerticalDelegate preferredHighlightBegin: 100 preferredHighlightEnd: 101 - strictlyEnforceHighlightRange: true + highlightRangeMode: ListView.StrictlyEnforceRange } diff --git a/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.0.png b/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.0.png Binary files differindex b2734e4..5631a46 100644 --- a/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.0.png +++ b/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.0.png diff --git a/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.qml b/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.qml index d5f1cff..cfd832e 100644 --- a/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.qml +++ b/tests/auto/declarative/visual/qfxtext/elide/data-X11/elide.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 32 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 48 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 64 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 80 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 96 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 112 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 128 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 144 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 160 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 176 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 192 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 208 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 224 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 240 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 256 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 272 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 288 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 304 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 320 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 336 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 352 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 368 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 384 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 400 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 416 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 432 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 448 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 464 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 480 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 496 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 512 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 528 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 544 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 560 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 576 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 592 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 608 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 624 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 640 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 656 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 672 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 688 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 704 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 720 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 736 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 752 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 768 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 784 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 800 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 816 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 832 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 848 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 864 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 880 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 896 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 912 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 928 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 944 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 960 @@ -246,34 +246,34 @@ VisualTest { } Frame { msec: 976 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Key { type: 6 key: 16777249 - modifiers: 0 + modifiers: 67108864 text: "" autorep: false count: 1 } Frame { msec: 992 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 1008 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 1024 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 1040 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } Frame { msec: 1056 - hash: "dd213807dd517c25972f0f6f42b01c17" + hash: "48e2da07fd229d9db6afc0eda494cd11" } } diff --git a/tests/auto/declarative/visual/qfxtext/elide/data-X11/multilength.0.png b/tests/auto/declarative/visual/qfxtext/elide/data-X11/multilength.0.png Binary files differindex 6d3931c..6e2b625 100644 --- a/tests/auto/declarative/visual/qfxtext/elide/data-X11/multilength.0.png +++ b/tests/auto/declarative/visual/qfxtext/elide/data-X11/multilength.0.png diff --git a/tests/auto/declarative/visual/qfxtext/elide/data-X11/multilength.qml b/tests/auto/declarative/visual/qfxtext/elide/data-X11/multilength.qml index a43fcdd..0c06196 100644 --- a/tests/auto/declarative/visual/qfxtext/elide/data-X11/multilength.qml +++ b/tests/auto/declarative/visual/qfxtext/elide/data-X11/multilength.qml @@ -6,239 +6,239 @@ VisualTest { } Frame { msec: 16 - hash: "0d036aed3200afec73b1fc10cda324af" + hash: "873e914454b7a040b05649ebd1a2f8c5" } Frame { msec: 32 - hash: "e117576c30a5bebb866ee8e0d596f510" + hash: "7682a4f1e361ca252da9713734a598e8" } Frame { msec: 48 - hash: "2a00d57edee71da236ef9a041e7ed0d6" + hash: "fa8884b550c8df872f96b61557163bcf" } Frame { msec: 64 - hash: "fa326ddfc21828d98dd38964c6e9b09b" + hash: "b84ecf9e38f126c3e32defee831d9462" } Frame { msec: 80 - hash: "02d3d8f626f0a3afd57affce32f10cff" + hash: "21cc08f22d1f1fcb38b27a3a4259debe" } Frame { msec: 96 - hash: "81abd357826e75917f5cb3758c0cdd4a" + hash: "93bdfeab813e25e85917f49c0d5f1314" } Frame { msec: 112 - hash: "3c544d599c735224bda95a3a9cbf413f" + hash: "5f03c252602e60fe19879945fa77c203" } Frame { msec: 128 - hash: "59ef105daf3d509ab17b618fc761b4dc" + hash: "f0b2079f6c512bf80989ebfdbec4cfd8" } Frame { msec: 144 - hash: "f61d62a092cc1adf7576992d285eb60a" + hash: "9e7bb12d5b7605fc1d78ed9b2a549527" } Frame { msec: 160 - hash: "8c0f2f793ea61df2dff38ac609365da1" + hash: "242bbbe6da87708c92fd47607ecb789d" } Frame { msec: 176 - hash: "28f9372f9ecfd6c33e5578ea2b8bd202" + hash: "f1db5c3a230b4d3e2e1dfefe6bf032a1" } Frame { msec: 192 - hash: "129757726f161c58ad52c8a2bb8ff54d" + hash: "a416e820efd8e173cc52372218513e33" } Frame { msec: 208 - hash: "517aa84afac3efea0b21fff497951e69" + hash: "df711ab70c6087f8138fded16167f069" } Frame { msec: 224 - hash: "fce8967bf12f6525b21c644aaca2fffd" + hash: "fb28eb2eeccfab28299640ef996c1115" } Frame { msec: 240 - hash: "926108bca8cb3a21b29207e0dca29d9d" + hash: "c72c6d79a50dd7147f6b33784880eb36" } Frame { msec: 256 - hash: "41c0d7a87ad0995c3343f9e2bee558a4" + hash: "4421027e65e95f98499ca53c57220ede" } Frame { msec: 272 - hash: "7992a2eb7a561aa28a9a2f693dab0d5f" + hash: "b7fbfb90d8cc167809e8e846d9021b4b" } Frame { msec: 288 - hash: "b2712c6162cea59cfd18966713252512" + hash: "004614b1bf18e9aa78e78509c4f289aa" } Frame { msec: 304 - hash: "1fa71faa48d7f414a4a6b93214a39a44" + hash: "1792bbd8b69bae1d92fed2a6bcfe0187" } Frame { msec: 320 - hash: "f1ffc3a012ae78f88a5f698944f605a2" + hash: "957a8b95d6e85885d854b8eb1db10b04" } Frame { msec: 336 - hash: "62dfc0e3846e7641453f6bf077bb0671" + hash: "d00c3e4d6d8e8d04b949840c28d73a33" } Frame { msec: 352 - hash: "167f30be62b60eb0e08af046fe18fbb7" + hash: "2b79feaa62d773d92d8a684685b2004c" } Frame { msec: 368 - hash: "1e441db0c591642ce9c0457436708d13" + hash: "ef2f11b187028de0c56b23db3168fbc8" } Frame { msec: 384 - hash: "f4400c089b8e4391c6827323333ef733" + hash: "3a489a96aaeca80355313198b935691d" } Frame { msec: 400 - hash: "6b4e44cb73c62dd833cf52391e8b55a2" + hash: "389f1798f900795a8686c38ace755974" } Frame { msec: 416 - hash: "12286364840fa446009a9005ca0b25fe" + hash: "34fc20be52fe3843420819b9adb90b22" } Frame { msec: 432 - hash: "67971a61bfe3113dcf7404137d58cc65" + hash: "fa715c5b6640eafe204bf3b8095c74b9" } Frame { msec: 448 - hash: "3ff170f552466fa3a0494fc489363f68" + hash: "8e8315edcf23167ac58228b8c28b43e6" } Frame { msec: 464 - hash: "c946293a166077db9426757b2e393006" + hash: "c18e82038f57dd869112cb1be14e4cfe" } Frame { msec: 480 - hash: "14d716e18c7fa7d27b69c93d815df9b9" + hash: "3f07e95b09e39f2e5d93216850f4a4d9" } Frame { msec: 496 - hash: "7bc490a27378ab400658bff0334cb7dd" + hash: "20f0e6eaeac04d6f93565adfab485218" } Frame { msec: 512 - hash: "2a3bd86f88aeb8f09f6feea8ba282942" + hash: "e3f66d1dfe88dd868a54a8493828ef5f" } Frame { msec: 528 - hash: "1ad04b814df09f9a1c672da659ff7390" + hash: "d39d34f63e1b29c187249cb388552b38" } Frame { msec: 544 - hash: "05a4b8bf3ceb70a01d33a5692467bd7e" + hash: "5d2e8df5003732f3b53fff4aaddea06c" } Frame { msec: 560 - hash: "aca0effde610ed1c216b138a7dfe407f" + hash: "35c3aa2dae481a8f817d849b3f3151f2" } Frame { msec: 576 - hash: "296b234ae49eaae3548c7d31447c0765" + hash: "966b78018879224948b4d85fe73d7985" } Frame { msec: 592 - hash: "1254ac81bb961f210dd14cfa650da680" + hash: "0db067bf9debc3f36dd539cf83652fb8" } Frame { msec: 608 - hash: "2b6a03813152cd87469b351339690736" + hash: "ea1c3249ffd2439533907ceaeaafbc56" } Frame { msec: 624 - hash: "12080186fcdd5b9e73720f267cdf1065" + hash: "da85c0e14b95ca9a729984b67ebd52ad" } Frame { msec: 640 - hash: "0cf99a1742df091f0715489d7a54bcd8" + hash: "5c26ae844ac52dbe131fed0638787aac" } Frame { msec: 656 - hash: "bbbde5370000d3bec9872eab0d2c0bd0" + hash: "4b09c23ad624db80afcb2a6c1d5ddb96" } Frame { msec: 672 - hash: "32cb6332b3028ef515ce328450769bd7" + hash: "9995deb3d22b418a19093b4b988b3fcc" } Frame { msec: 688 - hash: "9696c6ea620e833cc1290710895d164f" + hash: "77e53358f2d4392d0ba988187e7e272c" } Frame { msec: 704 - hash: "cce4fc1f40467d22a1a05ec005cad93a" + hash: "3fbbb73e790cf4a0583531fe1580f761" } Frame { msec: 720 - hash: "5466c6bec6b3b0eee159ffcb5ad1130c" + hash: "9d562e141095a258ee61463e644d9889" } Frame { msec: 736 - hash: "2d8ccdca543eb52b1f5f947490d284c5" + hash: "d05633ca49f96bf327bed5c9c0f6ac98" } Frame { msec: 752 - hash: "a72cf61a2e5c70cbdb2b9e99d588ffe1" + hash: "34c38e40e831dbede8fa83de31ed76aa" } Frame { msec: 768 - hash: "2885a4a60d231b8bed4f444f110cd735" + hash: "288e52c8be54f4914f687cef4ce1f24a" } Frame { msec: 784 - hash: "4167cbe045e6f922797eeed9378e96b6" + hash: "0b8b744aaf67e8b17fa459bb0ffb6db5" } Frame { msec: 800 - hash: "2a903361ed6c58659741274eac6c19f4" + hash: "273dbe3e8c21bfeafa516d07778928c8" } Frame { msec: 816 - hash: "e98ad2f87ebb183832efba5954228bea" + hash: "ef94ee1885287c72fa78038547d98b96" } Frame { msec: 832 - hash: "e875b1d4412fd8a86a6e71b08c078fe0" + hash: "965e6387672319ac04fdc42768e581f1" } Frame { msec: 848 - hash: "6fb0d9e4237a74552b9067c288e0d5dd" + hash: "95553d8aaece94c7017e57b03cd46c9a" } Frame { msec: 864 - hash: "a64b5a60fe0184b4e439b157409f7567" + hash: "bdaf35b920e5b08b8639d452afd2d51e" } Frame { msec: 880 - hash: "102d5f88cf9ae13af9983936dbc2ecae" + hash: "0ed16f00e89327dc8679bec42179c4ce" } Frame { msec: 896 - hash: "e1d58edd9cdc3902af02c263b9b357a1" + hash: "8c93e0ac399e09e98e34b90654e0e42a" } Frame { msec: 912 - hash: "d8a934c488f1e80ed49108b360022576" + hash: "93798fbb33adb6c813018757cfa34017" } Frame { msec: 928 - hash: "d918eae34d503a0c3669fa0b5fbd7dad" + hash: "db4d7581e9a1f082a2c29ef7482a7893" } Frame { msec: 944 - hash: "bba616d8933bb054735e235782689c95" + hash: "67e074c1e083334de84a3549f4ee9ca4" } Frame { msec: 960 @@ -246,58 +246,58 @@ VisualTest { } Frame { msec: 976 - hash: "12b8f8889033ecddabf0b20585157a5e" + hash: "b1122c815a755c9988bcf03a3f7d7d6d" } Frame { msec: 992 - hash: "afe7a8d6184f9ebef435e1857a7f08b2" + hash: "31148bae6653bdc3f1827d06de845663" } Frame { msec: 1008 - hash: "d222b51d852e63a9e2401c57b86c17f7" + hash: "812428a944086ca46e102891964dac69" } Frame { msec: 1024 - hash: "36196bcde10012a2e0624ae062da5fdb" + hash: "ee7bb66bd7e8623325200ac994f8b41a" } Frame { msec: 1040 - hash: "e4cb79b57774c652c3bcf86b7e8cbce9" + hash: "6bd21a98e5c373a2c78334a0255e7750" } Frame { msec: 1056 - hash: "79c040be179aa486c6a3e2a5198944af" + hash: "2e8e1eea14068b0e82464ed52ec1ab7a" } Frame { msec: 1072 - hash: "4334a272bed3fdaa1e44bb81c55d3e3a" + hash: "6dca5756e20eeb778e31d7b602ce77d7" } Frame { msec: 1088 - hash: "5aeebf849fb7101b87ec699c4590a348" + hash: "3cbb6700b9e30864a2b1e3d4d71d2a78" } Frame { msec: 1104 - hash: "c18780619ee3069f2ba17d00b85d6941" + hash: "c4d0230d2c4f73191a514e5df4c0b083" } Frame { msec: 1120 - hash: "ef17d1d1b566fc0e51cef54e3f460b91" + hash: "a33df967fe43151dfc503d2ac78f8ca8" } Frame { msec: 1136 - hash: "2c76668596c354dadea513325b79d14e" + hash: "0c7ff101efe60b600cacaf8d04d79053" } Frame { msec: 1152 - hash: "6055f676c9fa2a3333301e6dac958b34" + hash: "d246cfb75d89b9666877860aaf45ba60" } Frame { msec: 1168 - hash: "3fc9e199eac26907d95381e064c0e5cd" + hash: "1130998aa2618a29ec6bc4b9219eedfa" } Frame { msec: 1184 - hash: "60edfb3a25700ead1795e226015eb229" + hash: "741dd83003633bbf8d28c2d4ddd8a2d0" } } diff --git a/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.0.png b/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.0.png Binary files differnew file mode 100644 index 0000000..1f28b9a --- /dev/null +++ b/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.0.png diff --git a/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.qml b/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.qml new file mode 100644 index 0000000..d920a4c --- /dev/null +++ b/tests/auto/declarative/visual/qfxwebview/autosize/data-X11/autosize.qml @@ -0,0 +1,83 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 32 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 48 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 64 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 80 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 96 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 112 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 128 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 144 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 160 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 176 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 192 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 208 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 224 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 240 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 256 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 272 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 288 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } + Frame { + msec: 304 + hash: "0c70d855adc847fe33d7959ccb98bb8b" + } +} diff --git a/tests/auto/declarative/visual/rect/GradientRect.qml b/tests/auto/declarative/visual/rect/GradientRect.qml index ed56418..1d3ec98 100644 --- a/tests/auto/declarative/visual/rect/GradientRect.qml +++ b/tests/auto/declarative/visual/rect/GradientRect.qml @@ -2,8 +2,8 @@ import Qt 4.6 Item { id: rect - property string color - property string border : "" + property color color + property color border : Qt.rgba(0,0,0,0) property int rotation property int radius property int borderWidth @@ -14,7 +14,7 @@ Item { anchors.centerIn: parent; rotation: rect.rotation; Rectangle { anchors.centerIn: parent; width: 80; height: 80 - border.color: rect.border; border.width: rect.border != "" ? 2 : 0 + border.color: rect.border; border.width: rect.border != Qt.rgba(0,0,0,0) ? 2 : 0 radius: rect.radius; smooth: rect.smooth gradient: Gradient { GradientStop { position: 0.0; color: rect.color } diff --git a/tests/auto/declarative/visual/rect/MyRect.qml b/tests/auto/declarative/visual/rect/MyRect.qml index 9b6c3ae..22e0948 100644 --- a/tests/auto/declarative/visual/rect/MyRect.qml +++ b/tests/auto/declarative/visual/rect/MyRect.qml @@ -2,8 +2,8 @@ import Qt 4.6 Item { id: rect - property string color - property string border : "" + property color color + property color border : Qt.rgba(0,0,0,0) property int rotation property int radius property int borderWidth @@ -14,7 +14,7 @@ Item { anchors.centerIn: parent; rotation: rect.rotation; Rectangle { anchors.centerIn: parent; width: 80; height: 80 - color: rect.color; border.color: rect.border; border.width: rect.border != "" ? 2 : 0 + color: rect.color; border.color: rect.border; border.width: rect.border != Qt.rgba(0,0,0,0) ? 2 : 0 radius: rect.radius; smooth: rect.smooth } } diff --git a/tests/auto/declarative/visual/rect/data-X11/rect-painting.0.png b/tests/auto/declarative/visual/rect/data-X11/rect-painting.0.png Binary files differnew file mode 100644 index 0000000..9af5b68 --- /dev/null +++ b/tests/auto/declarative/visual/rect/data-X11/rect-painting.0.png diff --git a/tests/auto/declarative/visual/rect/data-X11/rect-painting.qml b/tests/auto/declarative/visual/rect/data-X11/rect-painting.qml new file mode 100644 index 0000000..8f780e1 --- /dev/null +++ b/tests/auto/declarative/visual/rect/data-X11/rect-painting.qml @@ -0,0 +1,355 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 32 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 48 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 64 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 80 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 96 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 112 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 128 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 144 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 160 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 176 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 192 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 208 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 224 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 240 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 256 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 272 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 288 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 304 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 320 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 336 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 352 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 368 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 384 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 400 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 416 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 432 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 448 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 464 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 480 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 496 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 512 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 528 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 544 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 560 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 576 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 592 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 608 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 624 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 640 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 656 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 672 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 688 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 704 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 720 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 736 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 752 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 768 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 784 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 800 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 816 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 832 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 848 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 864 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 880 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 896 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 912 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 928 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 944 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 960 + image: "rect-painting.0.png" + } + Frame { + msec: 976 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 992 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1008 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1024 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1040 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1056 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1072 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1088 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1104 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1120 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1136 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1152 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1168 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1184 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1200 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1216 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1232 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1248 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1264 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1280 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1296 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1312 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 1328 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1344 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } + Frame { + msec: 1360 + hash: "8a4f7a3d55b1b19fb1b8c211c00a7ba7" + } +} diff --git a/tests/auto/declarative/visual/tst_visual.cpp b/tests/auto/declarative/visual/tst_visual.cpp index 0cd712b..e40dec7 100644 --- a/tests/auto/declarative/visual/tst_visual.cpp +++ b/tests/auto/declarative/visual/tst_visual.cpp @@ -258,10 +258,39 @@ void usage() fprintf(stderr, "\n"); fprintf(stderr, "QML related options\n"); fprintf(stderr, " -record file : record new test data for file\n"); + fprintf(stderr, " -recordnovisuals file : record new test data for file, but ignore visuals\n"); fprintf(stderr, " -play file : playback test data for file, printing errors\n"); fprintf(stderr, " -testvisuals file : playback test data for file, without errors\n"); fprintf(stderr, " -updatevisuals file : playback test data for file, accept new visuals for file\n"); fprintf(stderr, " -updateplatformvisuals file : playback test data for file, accept new visuals for file only on current platform (MacOSX/Win32/X11/QWS/S60)\n"); + fprintf(stderr, "\n" + "Visual tests are recordings of manual interactions with a QML test,\n" + "that can then be run automatically. To record a new test, run:\n" + "\n" + " tst_visuals -record yourtestdir/yourtest # Note, no .qml extension\n" + "\n" + "This records everything you do (try to keep it short).\n" + "To play back a test, run:\n" + "\n" + " tst_visuals -play yourtestdir/yourtest\n" + "\n" + "Your test may include QML code to test itself, reporting any error to an\n" + "'error' property on the root object - the test will fail if this property\n" + "gets set to anything non-empty.\n" + "\n" + "If your test changes slightly but is still correct (check with -play), you\n" + "can update the visuals by running:\n" + "\n" + " tst_visuals -updatevisuals yourtestdir/yourtest\n" + "\n" + "If your test includes platform-sensitive visuals (eg. text in system fonts),\n" + "you should create platform-specific visuals, using -updateplatformvisuals\n" + "instead.\n" + "\n" + "If you ONLY wish to use the 'error' property, you can record your test with\n" + "-recordnovisuals, or discard existing visuals with -removevisuals; the test\n" + "will then only fail on a syntax error, crash, or non-empty 'error' property.\n" + ); } int main(int argc, char **argv) @@ -303,7 +332,7 @@ int main(int argc, char **argv) newArgv[newArgc++] = argv[ii]; } - if (arg == "-help") { + if (arg == "-help" || arg == "-?") { atexit(usage); showHelp = true; } diff --git a/tests/auto/gestures/tst_gestures.cpp b/tests/auto/gestures/tst_gestures.cpp index 92f979f..02c8232 100644 --- a/tests/auto/gestures/tst_gestures.cpp +++ b/tests/auto/gestures/tst_gestures.cpp @@ -103,6 +103,8 @@ int CustomEvent::EventType = 0; class CustomGestureRecognizer : public QGestureRecognizer { public: + static bool ConsumeEvents; + CustomGestureRecognizer() { if (!CustomEvent::EventType) @@ -117,7 +119,9 @@ public: QGestureRecognizer::Result filterEvent(QGesture *state, QObject*, QEvent *event) { if (event->type() == CustomEvent::EventType) { - QGestureRecognizer::Result result = QGestureRecognizer::ConsumeEventHint; + QGestureRecognizer::Result result = 0; + if (CustomGestureRecognizer::ConsumeEvents) + result |= QGestureRecognizer::ConsumeEventHint; CustomGesture *g = static_cast<CustomGesture*>(state); CustomEvent *e = static_cast<CustomEvent*>(event); g->serial = e->serial; @@ -143,6 +147,7 @@ public: QGestureRecognizer::reset(state); } }; +bool CustomGestureRecognizer::ConsumeEvents = false; // same as CustomGestureRecognizer but triggers early without the maybe state class CustomContinuousGestureRecognizer : public QGestureRecognizer @@ -280,6 +285,7 @@ protected: } }; +// TODO rename to sendGestureSequence static void sendCustomGesture(CustomEvent *event, QObject *object, QGraphicsScene *scene = 0) { for (int i = CustomGesture::SerialMaybeThreshold; @@ -322,6 +328,10 @@ private slots: void multipleGesturesInTree(); void multipleGesturesInComplexTree(); void testMapToScene(); + void ungrabGesture(); + void consumeEventHint(); + void unregisterRecognizer(); + void autoCancelGestures(); }; tst_Gestures::tst_Gestures() @@ -334,13 +344,14 @@ tst_Gestures::~tst_Gestures() void tst_Gestures::initTestCase() { - CustomGesture::GestureType = qApp->registerGestureRecognizer(new CustomGestureRecognizer); + CustomGesture::GestureType = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); QVERIFY(CustomGesture::GestureType != Qt::GestureType(0)); QVERIFY(CustomGesture::GestureType != Qt::CustomGesture); } void tst_Gestures::cleanupTestCase() { + QApplication::unregisterGestureRecognizer(CustomGesture::GestureType); } void tst_Gestures::init() @@ -372,6 +383,19 @@ void tst_Gestures::customGesture() QCOMPARE(widget.events.canceled.size(), 0); } +void tst_Gestures::consumeEventHint() +{ + GestureWidget widget; + widget.grabGesture(CustomGesture::GestureType, Qt::WidgetGesture); + + CustomGestureRecognizer::ConsumeEvents = true; + CustomEvent event; + sendCustomGesture(&event, &widget); + CustomGestureRecognizer::ConsumeEvents = false; + + QCOMPARE(widget.customEventsReceived, 0); +} + void tst_Gestures::autoCancelingGestures() { GestureWidget widget; @@ -534,7 +558,7 @@ void tst_Gestures::conflictingGestures() parent.reset(); child->reset(); - Qt::GestureType ContinuousGesture = qApp->registerGestureRecognizer(new CustomContinuousGestureRecognizer); + Qt::GestureType ContinuousGesture = QApplication::registerGestureRecognizer(new CustomContinuousGestureRecognizer); static const int ContinuousGestureEventsCount = CustomGesture::SerialFinishedThreshold - CustomGesture::SerialMaybeThreshold + 1; child->grabGesture(ContinuousGesture); // child accepts override. And it also receives another custom gesture. @@ -547,6 +571,8 @@ void tst_Gestures::conflictingGestures() QCOMPARE(child->events.all.count(), TotalGestureEventsCount + ContinuousGestureEventsCount); QCOMPARE(parent.gestureOverrideEventsReceived, 0); QCOMPARE(parent.gestureEventsReceived, 0); + + QApplication::unregisterGestureRecognizer(ContinuousGesture); } void tst_Gestures::finishedWithoutStarted() @@ -710,6 +736,7 @@ void tst_Gestures::graphicsItemGesture() { QGraphicsScene scene; QGraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); GestureItem *item = new GestureItem("item"); scene.addItem(item); @@ -772,6 +799,7 @@ void tst_Gestures::graphicsItemTreeGesture() { QGraphicsScene scene; QGraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); GestureItem *item1 = new GestureItem("item1"); item1->setPos(100, 100); @@ -829,6 +857,7 @@ void tst_Gestures::explicitGraphicsObjectTarget() { QGraphicsScene scene; QGraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); GestureItem *item1 = new GestureItem("item1"); scene.addItem(item1); @@ -882,6 +911,7 @@ void tst_Gestures::gestureOverChildGraphicsItem() { QGraphicsScene scene; QGraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); GestureItem *item0 = new GestureItem("item0"); scene.addItem(item0); @@ -951,7 +981,7 @@ void tst_Gestures::twoGesturesOnDifferentLevel() GestureWidget *child = new GestureWidget("child"); l->addWidget(child); - Qt::GestureType SecondGesture = qApp->registerGestureRecognizer(new CustomGestureRecognizer); + Qt::GestureType SecondGesture = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); parent.grabGesture(CustomGesture::GestureType, Qt::WidgetWithChildrenGesture); child->grabGesture(SecondGesture, Qt::WidgetWithChildrenGesture); @@ -978,6 +1008,8 @@ void tst_Gestures::twoGesturesOnDifferentLevel() QCOMPARE(parent.events.all.size(), TotalGestureEventsCount); for(int i = 0; i < child->events.all.size(); ++i) QCOMPARE(parent.events.all.at(i), CustomGesture::GestureType); + + QApplication::unregisterGestureRecognizer(SecondGesture); } void tst_Gestures::multipleGesturesInTree() @@ -989,8 +1021,8 @@ void tst_Gestures::multipleGesturesInTree() GestureWidget *D = new GestureWidget("D", C); Qt::GestureType FirstGesture = CustomGesture::GestureType; - Qt::GestureType SecondGesture = qApp->registerGestureRecognizer(new CustomGestureRecognizer); - Qt::GestureType ThirdGesture = qApp->registerGestureRecognizer(new CustomGestureRecognizer); + Qt::GestureType SecondGesture = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); + Qt::GestureType ThirdGesture = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); A->grabGesture(FirstGesture, Qt::WidgetWithChildrenGesture); // A [1 3] A->grabGesture(ThirdGesture, Qt::WidgetWithChildrenGesture); // | @@ -1046,6 +1078,9 @@ void tst_Gestures::multipleGesturesInTree() QCOMPARE(A->events.all.count(FirstGesture), TotalGestureEventsCount); QCOMPARE(A->events.all.count(SecondGesture), 0); QCOMPARE(A->events.all.count(ThirdGesture), TotalGestureEventsCount); + + QApplication::unregisterGestureRecognizer(SecondGesture); + QApplication::unregisterGestureRecognizer(ThirdGesture); } void tst_Gestures::multipleGesturesInComplexTree() @@ -1057,12 +1092,12 @@ void tst_Gestures::multipleGesturesInComplexTree() GestureWidget *D = new GestureWidget("D", C); Qt::GestureType FirstGesture = CustomGesture::GestureType; - Qt::GestureType SecondGesture = qApp->registerGestureRecognizer(new CustomGestureRecognizer); - Qt::GestureType ThirdGesture = qApp->registerGestureRecognizer(new CustomGestureRecognizer); - Qt::GestureType FourthGesture = qApp->registerGestureRecognizer(new CustomGestureRecognizer); - Qt::GestureType FifthGesture = qApp->registerGestureRecognizer(new CustomGestureRecognizer); - Qt::GestureType SixthGesture = qApp->registerGestureRecognizer(new CustomGestureRecognizer); - Qt::GestureType SeventhGesture = qApp->registerGestureRecognizer(new CustomGestureRecognizer); + Qt::GestureType SecondGesture = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); + Qt::GestureType ThirdGesture = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); + Qt::GestureType FourthGesture = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); + Qt::GestureType FifthGesture = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); + Qt::GestureType SixthGesture = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); + Qt::GestureType SeventhGesture = QApplication::registerGestureRecognizer(new CustomGestureRecognizer); A->grabGesture(FirstGesture, Qt::WidgetWithChildrenGesture); // A [1,3,4] A->grabGesture(ThirdGesture, Qt::WidgetWithChildrenGesture); // | @@ -1139,6 +1174,13 @@ void tst_Gestures::multipleGesturesInComplexTree() QCOMPARE(A->events.all.count(FifthGesture), 0); QCOMPARE(A->events.all.count(SixthGesture), 0); QCOMPARE(A->events.all.count(SeventhGesture), 0); + + QApplication::unregisterGestureRecognizer(SecondGesture); + QApplication::unregisterGestureRecognizer(ThirdGesture); + QApplication::unregisterGestureRecognizer(FourthGesture); + QApplication::unregisterGestureRecognizer(FifthGesture); + QApplication::unregisterGestureRecognizer(SixthGesture); + QApplication::unregisterGestureRecognizer(SeventhGesture); } void tst_Gestures::testMapToScene() @@ -1151,6 +1193,7 @@ void tst_Gestures::testMapToScene() QGraphicsScene scene; QGraphicsView view(&scene); + view.setWindowFlags(Qt::X11BypassWindowManagerHint); GestureItem *item0 = new GestureItem; scene.addItem(item0); @@ -1166,5 +1209,150 @@ void tst_Gestures::testMapToScene() QCOMPARE(event.mapToScene(origin + QPoint(100, 200)), view.mapToScene(QPoint(100, 200))); } +void tst_Gestures::ungrabGesture() // a method on QWidget +{ + class MockGestureWidget : public GestureWidget { + public: + MockGestureWidget(const char *name = 0, QWidget *parent = 0) + : GestureWidget(name, parent) { } + + + QSet<QGesture*> gestures; + protected: + bool event(QEvent *event) + { + if (event->type() == QEvent::Gesture) { + QGestureEvent *gestureEvent = static_cast<QGestureEvent*>(event); + if (gestureEvent) + foreach (QGesture *g, gestureEvent->allGestures()) + gestures.insert(g); + } + return GestureWidget::event(event); + } + }; + + MockGestureWidget parent("A"); + MockGestureWidget *a = &parent; + MockGestureWidget *b = new MockGestureWidget("B", a); + + a->grabGesture(CustomGesture::GestureType, Qt::WidgetGesture); + b->grabGesture(CustomGesture::GestureType, Qt::WidgetWithChildrenGesture); + b->ignoredGestures << CustomGesture::GestureType; + + CustomEvent event; + // sending an event will cause the QGesture objects to be instantiated for the widgets + sendCustomGesture(&event, b); + + QCOMPARE(a->gestures.count(), 1); + QPointer<QGesture> customGestureA; + customGestureA = *(a->gestures.begin()); + QVERIFY(!customGestureA.isNull()); + QCOMPARE(customGestureA->gestureType(), CustomGesture::GestureType); + + QCOMPARE(b->gestures.count(), 1); + QPointer<QGesture> customGestureB; + customGestureB = *(b->gestures.begin()); + QVERIFY(!customGestureB.isNull()); + QVERIFY(customGestureA.data() == customGestureB.data()); + QCOMPARE(customGestureB->gestureType(), CustomGesture::GestureType); + + a->gestures.clear(); + // sending an event will cause the QGesture objects to be instantiated for the widget + sendCustomGesture(&event, a); + + QCOMPARE(a->gestures.count(), 1); + customGestureA = *(a->gestures.begin()); + QVERIFY(!customGestureA.isNull()); + QCOMPARE(customGestureA->gestureType(), CustomGesture::GestureType); + QVERIFY(customGestureA.data() != customGestureB.data()); + + a->ungrabGesture(CustomGesture::GestureType); + QVERIFY(customGestureA.isNull()); + QVERIFY(!customGestureB.isNull()); + + a->gestures.clear(); + a->reset(); + // send again to 'b' and make sure a never gets it. + sendCustomGesture(&event, b); + QCOMPARE(a->gestureEventsReceived, 0); + QCOMPARE(a->gestureOverrideEventsReceived, 0); +} + +void tst_Gestures::unregisterRecognizer() // a method on QApplication +{ + /* + The hardest usecase to get right is when we remove a recognizer while several + of the gestures it created are in active state and we immediately add a new recognizer + for the same type (thus replacing the old one). + The expected result is that all old gestures continue till they are finished/cancelled + and the new recognizer starts creating gestures immediately at registration. + + This implies that deleting of the recognizer happens only when there are no more gestures + that it created. (since gestures might have a pointer to the recognizer) + */ + +} + +void tst_Gestures::autoCancelGestures() +{ + class MockRecognizer : public QGestureRecognizer { + public: + QGestureRecognizer::Result filterEvent(QGesture *gesture, QObject *watched, QEvent *event) + { + Q_UNUSED(gesture); + Q_UNUSED(watched); + if (event->type() == QEvent::MouseButtonPress) + return QGestureRecognizer::GestureTriggered; + if (event->type() == QEvent::MouseButtonRelease) + return QGestureRecognizer::GestureFinished; + return QGestureRecognizer::Ignore; + } + }; + + class MockWidget : public GestureWidget { + public: + MockWidget(const char *name) : GestureWidget(name) { } + + bool event(QEvent *event) + { + if (event->type() == QEvent::Gesture) { + QGestureEvent *ge = static_cast<QGestureEvent*>(event); + Q_ASSERT(ge->allGestures().count() == 1); // can't use QCOMPARE here... + ge->allGestures().first()->setGestureCancelPolicy(QGesture::CancelAllInContext); + } + return GestureWidget::event(event); + } + }; + + MockWidget parent("parent"); // this one sets the cancel policy to CancelAllInContext + parent.resize(300, 100); + GestureWidget *child = new GestureWidget("child", &parent); + child->setGeometry(10, 10, 100, 80); + + Qt::GestureType type = QApplication::registerGestureRecognizer(new MockRecognizer()); + parent.grabGesture(type, Qt::WidgetWithChildrenGesture); + child->grabGesture(type, Qt::WidgetWithChildrenGesture); + + /* + An event is send to both the child and the parent, when the child gets it a gesture is triggered + and send to the child. + When the parent gets the event a new gesture is triggered and delivered to the parent. When the + parent gets it he accepts it and that causes the cancel policy to activate. + The cause of that is the gesture for the child is cancelled and send to the child as such. + */ + QMouseEvent event(QEvent::MouseButtonPress, QPoint(20,20), Qt::LeftButton, Qt::LeftButton, Qt::NoModifier); + QApplication::sendEvent(child, &event); + QCOMPARE(child->events.started.count(), 1); + QCOMPARE(child->events.all.count(), 1); + QCOMPARE(parent.events.all.count(), 0); + child->reset(); + QApplication::sendEvent(&parent, &event); + QCOMPARE(parent.events.all.count(), 1); + QCOMPARE(parent.events.started.count(), 1); + QCOMPARE(child->events.started.count(), 0); + QCOMPARE(child->events.all.count(), 1); + QCOMPARE(child->events.canceled.count(), 1); +} + QTEST_MAIN(tst_Gestures) #include "tst_gestures.moc" diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp index 8201add..e243e66 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp +++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/main.cpp @@ -228,3 +228,22 @@ QT_TRID_NOOP("this_a_id") //~ some thing //% "This needs to be here. Really." QString test = qtTrId("this_another_id", n); + + + +class YetAnotherTest : QObject { + Q_OBJECT + + int function(void) + { + // + //: + //= + //~ + //# + //============= + //~~~~~~~~~~~~~ + //::::::::::::: + tr("nothing"); + } +}; diff --git a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result index d63c7c3..26e5a65 100644 --- a/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result +++ b/tests/auto/linguist/lupdate/testdata/good/parsecpp/project.ts.result @@ -278,6 +278,14 @@ backslashed \ stuff.</source> </message> </context> <context> + <name>YetAnotherTest</name> + <message> + <location filename="main.cpp" line="247"/> + <source>nothing</source> + <translation type="unfinished"></translation> + </message> +</context> +<context> <name>scope</name> <message numerus="yes"> <location filename="main.cpp" line="187"/> diff --git a/tests/auto/qactiongroup/tst_qactiongroup.cpp b/tests/auto/qactiongroup/tst_qactiongroup.cpp index 2d215a0..7259479 100644 --- a/tests/auto/qactiongroup/tst_qactiongroup.cpp +++ b/tests/auto/qactiongroup/tst_qactiongroup.cpp @@ -70,6 +70,7 @@ private slots: void separators(); void testActionInTwoQActionGroup(); + void unCheckCurrentAction(); }; tst_QActionGroup::tst_QActionGroup() @@ -278,5 +279,25 @@ void tst_QActionGroup::testActionInTwoQActionGroup() QCOMPARE(group1.actions().isEmpty(), true); } +void tst_QActionGroup::unCheckCurrentAction() +{ + QActionGroup group(0); + QAction action1(&group) ,action2(&group); + action1.setCheckable(true); + action2.setCheckable(true); + QVERIFY(!action1.isChecked()); + QVERIFY(!action2.isChecked()); + action1.setChecked(true); + QVERIFY(action1.isChecked()); + QVERIFY(!action2.isChecked()); + QAction *current = group.checkedAction(); + QCOMPARE(current, &action1); + current->setChecked(false); + QVERIFY(!action1.isChecked()); + QVERIFY(!action2.isChecked()); + QVERIFY(group.checkedAction() == 0); +} + + QTEST_MAIN(tst_QActionGroup) #include "tst_qactiongroup.moc" diff --git a/tests/auto/qapplication/tst_qapplication.cpp b/tests/auto/qapplication/tst_qapplication.cpp index 675e559..5888866 100644 --- a/tests/auto/qapplication/tst_qapplication.cpp +++ b/tests/auto/qapplication/tst_qapplication.cpp @@ -129,6 +129,7 @@ private slots: void style(); void allWidgets(); + void topLevelWidgets(); void setAttribute(); @@ -1795,6 +1796,27 @@ void tst_QApplication::allWidgets() QVERIFY(!app.allWidgets().contains(w)); // removal test } +void tst_QApplication::topLevelWidgets() +{ + int argc = 1; + QApplication app(argc, &argv0, QApplication::GuiServer); + QWidget *w = new QWidget; + w->show(); +#ifndef QT_NO_CLIPBOARD + QClipboard *clipboard = QApplication::clipboard(); + QString originalText = clipboard->text(); + clipboard->setText(QString("newText")); +#endif + app.processEvents(); + QVERIFY(QApplication::topLevelWidgets().contains(w)); + QCOMPARE(QApplication::topLevelWidgets().count(), 1); + delete w; + w = 0; + app.processEvents(); + QCOMPARE(QApplication::topLevelWidgets().count(), 0); +} + + void tst_QApplication::setAttribute() { diff --git a/tests/auto/qboxlayout/tst_qboxlayout.cpp b/tests/auto/qboxlayout/tst_qboxlayout.cpp index 7ff444b..8887288 100644 --- a/tests/auto/qboxlayout/tst_qboxlayout.cpp +++ b/tests/auto/qboxlayout/tst_qboxlayout.cpp @@ -211,7 +211,6 @@ void tst_QBoxLayout::setGeometry() QRect newGeom(0, 0, 70, 70); lay2->setGeometry(newGeom); - QApplication::processEvents(); QVERIFY2(newGeom.contains(dial->geometry()), "dial->geometry() should be smaller and within newGeom"); } diff --git a/tests/auto/qcombobox/tst_qcombobox.cpp b/tests/auto/qcombobox/tst_qcombobox.cpp index 8acae7a..51a7ff8 100644 --- a/tests/auto/qcombobox/tst_qcombobox.cpp +++ b/tests/auto/qcombobox/tst_qcombobox.cpp @@ -153,6 +153,7 @@ private slots: void task260974_menuItemRectangleForComboBoxPopup(); void removeItem(); void resetModel(); + void keyBoardNavigationWithMouse(); protected slots: void onEditTextChanged( const QString &newString ); @@ -2448,6 +2449,57 @@ void tst_QComboBox::resetModel() } +void tst_QComboBox::keyBoardNavigationWithMouse() +{ + QComboBox combo; + combo.setEditable(false); + for (int i = 0; i < 80; i++) + combo.addItem( QString::number(i)); + combo.show(); + QApplication::setActiveWindow(&combo); + QTest::qWaitForWindowShown(&combo); + QTRY_COMPARE(QApplication::activeWindow(), static_cast<QWidget *>(&combo)); + + QCOMPARE(combo.currentText(), QLatin1String("0")); + + combo.setFocus(); + QTRY_VERIFY(combo.hasFocus()); + + QTest::keyClick(testWidget->lineEdit(), Qt::Key_Space); + QTest::qWait(30); + QTRY_VERIFY(combo.view()); + QTRY_VERIFY(combo.view()->isVisible()); + QTest::qWait(130); + + QCOMPARE(combo.currentText(), QLatin1String("0")); + + QCursor::setPos(combo.view()->mapToGlobal(combo.view()->rect().center())); + QTest::qWait(200); + +#define GET_SELECTION(SEL) \ + QCOMPARE(combo.view()->selectionModel()->selection().count(), 1); \ + QCOMPARE(combo.view()->selectionModel()->selection().indexes().count(), 1); \ + SEL = combo.view()->selectionModel()->selection().indexes().first().row() + + int selection; + GET_SELECTION(selection); + + //since we moved the mouse is in the middle it should even be around 5; + QVERIFY(selection > 3); + + static const int final = 40; + for (int i = selection + 1; i <= final; i++) + { + QTest::keyClick(combo.view(), Qt::Key_Down); + QTest::qWait(20); + GET_SELECTION(selection); + QCOMPARE(selection, i); + } + + QTest::keyClick(combo.view(), Qt::Key_Enter); + QTRY_COMPARE(combo.currentText(), QString::number(final)); +} + QTEST_MAIN(tst_QComboBox) #include "tst_qcombobox.moc" diff --git a/tests/auto/qdatastream/tst_qdatastream.cpp b/tests/auto/qdatastream/tst_qdatastream.cpp index add0945..56fc53a 100644 --- a/tests/auto/qdatastream/tst_qdatastream.cpp +++ b/tests/auto/qdatastream/tst_qdatastream.cpp @@ -3100,22 +3100,6 @@ void tst_QDataStream::streamToAndFromQByteArray() void tst_QDataStream::streamRealDataTypes() { -#if defined(Q_OS_WINCE) - // Note: Probably actually same 'qreal being typedeffed as float instead of double' issue as in Symbian - // instead of what CE skip message says. - QSKIP("Skipped on CE as it demands too much memory and fragments", SkipAll); -#elif defined(Q_OS_SYMBIAN) - // qreal is typedeffed float in symbian instead of double like in most platforms, so reference stream - // gets corrupted. Basically this test is flawed, as one shouldn't use naked typedeffed types in - // streams that are meant to work cross-platform. - // As this test also tests other floating point using classes, we do not simply skip it, but work around - // the qreal issue by redefining qreal as double for the duration of this function. - // Note that streaming classes works because they do explicitly use double instead of qreal when - // writing/reading to/from stream. -# define qreal double - qWarning("Note: streamRealDataTypes test redefines qreal as double in symbian!!!"); -#endif - // Generate QPicture from SVG. QSvgRenderer renderer(svgFile); QVERIFY(renderer.isValid()); @@ -3163,7 +3147,6 @@ void tst_QDataStream::streamRealDataTypes() file.close(); } - qreal a, b, c, d, e, f; QPointF point; QRectF rect; QPolygonF polygon; @@ -3180,28 +3163,50 @@ void tst_QDataStream::streamRealDataTypes() QDataStream stream(&file); stream.setVersion(QDataStream::Qt_4_2); - stream >> a >> b >> c >> d >> e >> f >> point - >> rect >> polygon >> matrix >> p; - if (i == 1) - stream >> pict; - stream >> textLength >> col >> rGrad >> cGrad - >> pen; - - QCOMPARE(stream.status(), QDataStream::Ok); - - QCOMPARE(a, qreal(0)); - QCOMPARE(b, qreal(1.0)); - QCOMPARE(c, qreal(1.1)); - QCOMPARE(d, qreal(3.14)); - QCOMPARE(e, qreal(-3.14)); - QCOMPARE(f, qreal(-1)); + if (i == 0) { + // the reference stream for 4.2 contains doubles, + // so we must read them out as doubles! + double a, b, c, d, e, f; + stream >> a; + QCOMPARE(a, 0.0); + stream >> b; + QCOMPARE(b, 1.0); + stream >> c; + QCOMPARE(c, 1.1); + stream >> d; + QCOMPARE(d, 3.14); + stream >> e; + QCOMPARE(e, -3.14); + stream >> f; + QCOMPARE(f, -1.0); + } else { + qreal a, b, c, d, e, f; + stream >> a; + QCOMPARE(a, qreal(0)); + stream >> b; + QCOMPARE(b, qreal(1.0)); + stream >> c; + QCOMPARE(c, qreal(1.1)); + stream >> d; + QCOMPARE(d, qreal(3.14)); + stream >> e; + QCOMPARE(e, qreal(-3.14)); + stream >> f; + QCOMPARE(f, qreal(-1)); + } + stream >> point; QCOMPARE(point, QPointF(3, 5)); + stream >> rect; QCOMPARE(rect, QRectF(-1, -2, 3, 4)); + stream >> polygon; QCOMPARE((QVector<QPointF> &)polygon, (QPolygonF() << QPointF(0, 0) << QPointF(1, 2))); + stream >> matrix; QCOMPARE(matrix, QMatrix().rotate(90).scale(2, 2)); + stream >> p; QCOMPARE(p, path); + if (i == 1) { + stream >> pict; - if (i == 0) { QByteArray pictA, pictB; QBuffer bufA, bufB; QVERIFY(bufA.open(QIODevice::ReadWrite)); @@ -3212,8 +3217,11 @@ void tst_QDataStream::streamRealDataTypes() QCOMPARE(pictA, pictB); } + stream >> textLength; QCOMPARE(textLength, QTextLength(QTextLength::VariableLength, 1.5)); + stream >> col; QCOMPARE(col, color); + stream >> rGrad; QCOMPARE(rGrad.style(), radialBrush.style()); QCOMPARE(rGrad.matrix(), radialBrush.matrix()); QCOMPARE(rGrad.gradient()->type(), radialBrush.gradient()->type()); @@ -3222,6 +3230,7 @@ void tst_QDataStream::streamRealDataTypes() QCOMPARE(((QRadialGradient *)rGrad.gradient())->center(), ((QRadialGradient *)radialBrush.gradient())->center()); QCOMPARE(((QRadialGradient *)rGrad.gradient())->focalPoint(), ((QRadialGradient *)radialBrush.gradient())->focalPoint()); QCOMPARE(((QRadialGradient *)rGrad.gradient())->radius(), ((QRadialGradient *)radialBrush.gradient())->radius()); + stream >> cGrad; QCOMPARE(cGrad.style(), conicalBrush.style()); QCOMPARE(cGrad.matrix(), conicalBrush.matrix()); QCOMPARE(cGrad.gradient()->type(), conicalBrush.gradient()->type()); @@ -3231,11 +3240,11 @@ void tst_QDataStream::streamRealDataTypes() QCOMPARE(((QConicalGradient *)cGrad.gradient())->angle(), ((QConicalGradient *)conicalBrush.gradient())->angle()); QCOMPARE(cGrad, conicalBrush); + stream >> pen; QCOMPARE(pen.widthF(), qreal(1.5)); + + QCOMPARE(stream.status(), QDataStream::Ok); } -#if defined(Q_OS_SYMBIAN) - #undef qreal -#endif } #ifdef QT3_SUPPORT diff --git a/tests/auto/qdatetime/tst_qdatetime.cpp b/tests/auto/qdatetime/tst_qdatetime.cpp index 8fb0c91..c53780e 100644 --- a/tests/auto/qdatetime/tst_qdatetime.cpp +++ b/tests/auto/qdatetime/tst_qdatetime.cpp @@ -447,7 +447,14 @@ void tst_QDateTime::toString_enumformat() QCOMPARE(str2, QString("1995-05-20T12:34:56")); QString str3 = dt1.toString(Qt::LocalDate); + qDebug() << str3; QVERIFY(!str3.isEmpty()); + //check for date/time components in any order + QVERIFY(str3.contains("1995")); + //day and month may be in numeric or word form + QVERIFY(str3.contains("12")); + QVERIFY(str3.contains("34")); + QVERIFY(str3.contains("56")); } void tst_QDateTime::addDays() diff --git a/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp b/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp index baf769f..91050f5 100644 --- a/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp +++ b/tests/auto/qdbusabstractinterface/tst_qdbusabstractinterface.cpp @@ -103,6 +103,8 @@ private slots: void getComplexSignal_data(); void getComplexSignal(); + void followSignal(); + void createErrors_data(); void createErrors(); @@ -130,6 +132,9 @@ tst_QDBusAbstractInterface::tst_QDBusAbstractInterface() void tst_QDBusAbstractInterface::initTestCase() { + // enable debugging temporarily: + putenv("QDBUS_DEBUG=1"); + // register the object QDBusConnection con = QDBusConnection::sessionBus(); QVERIFY(con.isConnected()); @@ -432,6 +437,60 @@ void tst_QDBusAbstractInterface::getComplexSignal() QCOMPARE(s[0][0].value<RegisteredType>(), expectedValue); } +void tst_QDBusAbstractInterface::followSignal() +{ + const QString serviceToFollow = "com.trolltech.tst_qdbusabstractinterface.FollowMe"; + Pinger p = getPinger(serviceToFollow); + QVERIFY2(p, "Not connected to D-Bus"); + + QDBusConnection con = p->connection(); + QVERIFY(!con.interface()->isServiceRegistered(serviceToFollow)); + Pinger control = getPinger(""); + + // we need to connect the signal somewhere in order for D-Bus to enable the rules + QTestEventLoop::instance().connect(p.data(), SIGNAL(voidSignal()), SLOT(exitLoop())); + QTestEventLoop::instance().connect(control.data(), SIGNAL(voidSignal()), SLOT(exitLoop())); + QSignalSpy s(p.data(), SIGNAL(voidSignal())); + + emit targetObj.voidSignal(); + QTestEventLoop::instance().enterLoop(200); + QVERIFY(!QTestEventLoop::instance().timeout()); + + // signal must not have been received because the service isn't registered + QVERIFY(s.isEmpty()); + + // now register the service + QDBusReply<QDBusConnectionInterface::RegisterServiceReply> r = + con.interface()->registerService(serviceToFollow, QDBusConnectionInterface::DontQueueService, + QDBusConnectionInterface::DontAllowReplacement); + QVERIFY(r.isValid() && r.value() == QDBusConnectionInterface::ServiceRegistered); + QVERIFY(con.interface()->isServiceRegistered(serviceToFollow)); + + // emit the signal again: + emit targetObj.voidSignal(); + QTestEventLoop::instance().enterLoop(2); + QVERIFY(!QTestEventLoop::instance().timeout()); + + // now the signal must have been received: + QCOMPARE(s.size(), 1); + QVERIFY(s.at(0).size() == 0); + s.clear(); + + // disconnect the signal + disconnect(p.data(), SIGNAL(voidSignal()), &QTestEventLoop::instance(), 0); + + // emit the signal again: + emit targetObj.voidSignal(); + QTestEventLoop::instance().enterLoop(2); + QVERIFY(!QTestEventLoop::instance().timeout()); + + // and now it mustn't have been received + QVERIFY(s.isEmpty()); + + // cleanup: + con.interface()->unregisterService(serviceToFollow); +} + void tst_QDBusAbstractInterface::createErrors_data() { QTest::addColumn<QString>("service"); diff --git a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp index e31a3a0..62d6342 100644 --- a/tests/auto/qdbusinterface/tst_qdbusinterface.cpp +++ b/tests/auto/qdbusinterface/tst_qdbusinterface.cpp @@ -171,6 +171,13 @@ class tst_QDBusInterface: public QObject { Q_OBJECT MyObject obj; +public slots: + void testServiceOwnerChanged(const QString &service) + { + if (service == "com.example.Test") + QTestEventLoop::instance().exitLoop(); + } + private slots: void initTestCase(); @@ -235,32 +242,13 @@ void tst_QDBusInterface::invalidAfterServiceOwnerChanged() QDBusInterface invalidInterface("com.example.Test", "/"); QVERIFY(!invalidInterface.isValid()); + QTestEventLoop::instance().connect(connIface, SIGNAL(serviceOwnerChanged(QString, QString, QString)), + SLOT(exitLoop())); QVERIFY(connIface->registerService("com.example.Test") == QDBusConnectionInterface::ServiceRegistered); - QSignalSpy serviceOwnerChangedSpy(connIface, SIGNAL(serviceOwnerChanged(QString, QString, QString))); - - QEventLoop loop; - QObject::connect(connIface, SIGNAL(serviceOwnerChanged(QString, QString, QString)), - &loop, SLOT(quit())); - loop.exec(); - - // at least once, but other services might have changed while running the test, too. - QVERIFY(serviceOwnerChangedSpy.count() >= 1); - bool foundOurService = false; - for (int i = 0; i < serviceOwnerChangedSpy.count(); ++i) { - QList<QVariant> args = serviceOwnerChangedSpy.at(i); - QString name = args[0].toString(); - QString oldOwner = args[1].toString(); - QString newOwner = args[2].toString(); - if (name == QLatin1String("com.example.Test")) { - if (newOwner == conn.baseService()) { - foundOurService = true; - break; - } - } - } - QVERIFY(foundOurService); + QTestEventLoop::instance().enterLoop(5); + QVERIFY(!QTestEventLoop::instance().timeout()); QVERIFY(!invalidInterface.isValid()); } diff --git a/tests/auto/qdbusservicewatcher/qdbusservicewatcher.pro b/tests/auto/qdbusservicewatcher/qdbusservicewatcher.pro new file mode 100644 index 0000000..4970f16 --- /dev/null +++ b/tests/auto/qdbusservicewatcher/qdbusservicewatcher.pro @@ -0,0 +1,8 @@ +load(qttest_p4) +QT = core +contains(QT_CONFIG,dbus): { + SOURCES += tst_qdbusservicewatcher.cpp + QT += dbus +} else { + SOURCES += ../qdbusmarshall/dummy.cpp +} diff --git a/tests/auto/qdbusservicewatcher/tst_qdbusservicewatcher.cpp b/tests/auto/qdbusservicewatcher/tst_qdbusservicewatcher.cpp new file mode 100644 index 0000000..10b43b1 --- /dev/null +++ b/tests/auto/qdbusservicewatcher/tst_qdbusservicewatcher.cpp @@ -0,0 +1,273 @@ +/**************************************************************************** +** +** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). +** All rights reserved. +** Contact: Nokia Corporation (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 Technology Preview License Agreement accompanying +** this package. +** +** 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.1, included in the file LGPL_EXCEPTION.txt in this package. +** +** If you have questions regarding the use of this file, please contact +** Nokia at qt-info@nokia.com. +** +** +** +** +** +** +** +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#include <QtDBus/QDBusServiceWatcher> +#include <QtDBus> +#include <QtTest> + +class tst_QDBusServiceWatcher: public QObject +{ + Q_OBJECT + QString serviceName; +public: + tst_QDBusServiceWatcher(); + +private slots: + void initTestCase(); + void cleanup(); + + void watchForCreation(); + void watchForDisappearance(); + void watchForOwnerChange(); + void modeChange(); +}; + +tst_QDBusServiceWatcher::tst_QDBusServiceWatcher() + : serviceName("com.example.TestName") +{ +} + +void tst_QDBusServiceWatcher::initTestCase() +{ + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); +} + +void tst_QDBusServiceWatcher::cleanup() +{ + // ensure that the name isn't registered + QDBusConnection::sessionBus().unregisterService(serviceName); +} + +void tst_QDBusServiceWatcher::watchForCreation() +{ + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); + + QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForRegistration); + + QSignalSpy spyR(&watcher, SIGNAL(serviceRegistered(QString))); + QSignalSpy spyU(&watcher, SIGNAL(serviceUnregistered(QString))); + QSignalSpy spyO(&watcher, SIGNAL(serviceOwnerChanged(QString,QString,QString))); + QTestEventLoop::instance().connect(&watcher, SIGNAL(serviceRegistered(QString)), SLOT(exitLoop())); + + // register a name + QVERIFY(con.registerService(serviceName)); + + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 1); + QCOMPARE(spyR.at(0).at(0).toString(), serviceName); + + QCOMPARE(spyU.count(), 0); + + QCOMPARE(spyO.count(), 1); + QCOMPARE(spyO.at(0).at(0).toString(), serviceName); + QVERIFY(spyO.at(0).at(1).toString().isEmpty()); + QCOMPARE(spyO.at(0).at(2).toString(), con.baseService()); + + spyR.clear(); + spyU.clear(); + spyO.clear(); + + // unregister it: + con.unregisterService(serviceName); + + // and register again + QVERIFY(con.registerService(serviceName)); + + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 1); + QCOMPARE(spyR.at(0).at(0).toString(), serviceName); + + QCOMPARE(spyU.count(), 0); + + QCOMPARE(spyO.count(), 1); + QCOMPARE(spyO.at(0).at(0).toString(), serviceName); + QVERIFY(spyO.at(0).at(1).toString().isEmpty()); + QCOMPARE(spyO.at(0).at(2).toString(), con.baseService()); +} + +void tst_QDBusServiceWatcher::watchForDisappearance() +{ + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); + + QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForUnregistration); + + QSignalSpy spyR(&watcher, SIGNAL(serviceRegistered(QString))); + QSignalSpy spyU(&watcher, SIGNAL(serviceUnregistered(QString))); + QSignalSpy spyO(&watcher, SIGNAL(serviceOwnerChanged(QString,QString,QString))); + QTestEventLoop::instance().connect(&watcher, SIGNAL(serviceUnregistered(QString)), SLOT(exitLoop())); + + // register a name + QVERIFY(con.registerService(serviceName)); + + // unregister it: + con.unregisterService(serviceName); + + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 0); + + QCOMPARE(spyU.count(), 1); + QCOMPARE(spyU.at(0).at(0).toString(), serviceName); + + QCOMPARE(spyO.count(), 1); + QCOMPARE(spyO.at(0).at(0).toString(), serviceName); + QCOMPARE(spyO.at(0).at(1).toString(), con.baseService()); + QVERIFY(spyO.at(0).at(2).toString().isEmpty()); +} + +void tst_QDBusServiceWatcher::watchForOwnerChange() +{ + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); + + QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForOwnerChange); + + QSignalSpy spyR(&watcher, SIGNAL(serviceRegistered(QString))); + QSignalSpy spyU(&watcher, SIGNAL(serviceUnregistered(QString))); + QSignalSpy spyO(&watcher, SIGNAL(serviceOwnerChanged(QString,QString,QString))); + QTestEventLoop::instance().connect(&watcher, SIGNAL(serviceRegistered(QString)), SLOT(exitLoop())); + + // register a name + QVERIFY(con.registerService(serviceName)); + + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 1); + QCOMPARE(spyR.at(0).at(0).toString(), serviceName); + + QCOMPARE(spyU.count(), 0); + + QCOMPARE(spyO.count(), 1); + QCOMPARE(spyO.at(0).at(0).toString(), serviceName); + QVERIFY(spyO.at(0).at(1).toString().isEmpty()); + QCOMPARE(spyO.at(0).at(2).toString(), con.baseService()); + + spyR.clear(); + spyU.clear(); + spyO.clear(); + + // unregister it: + con.unregisterService(serviceName); + + // and register again + QVERIFY(con.registerService(serviceName)); + + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 1); + QCOMPARE(spyR.at(0).at(0).toString(), serviceName); + + QCOMPARE(spyU.count(), 1); + QCOMPARE(spyU.at(0).at(0).toString(), serviceName); + + QCOMPARE(spyO.count(), 2); + QCOMPARE(spyO.at(0).at(0).toString(), serviceName); + QCOMPARE(spyO.at(0).at(1).toString(), con.baseService()); + QVERIFY(spyO.at(0).at(2).toString().isEmpty()); + QCOMPARE(spyO.at(1).at(0).toString(), serviceName); + QVERIFY(spyO.at(1).at(1).toString().isEmpty()); + QCOMPARE(spyO.at(1).at(2).toString(), con.baseService()); +} + +void tst_QDBusServiceWatcher::modeChange() +{ + QDBusConnection con = QDBusConnection::sessionBus(); + QVERIFY(con.isConnected()); + + QDBusServiceWatcher watcher(serviceName, con, QDBusServiceWatcher::WatchForRegistration); + + QSignalSpy spyR(&watcher, SIGNAL(serviceRegistered(QString))); + QSignalSpy spyU(&watcher, SIGNAL(serviceUnregistered(QString))); + QSignalSpy spyO(&watcher, SIGNAL(serviceOwnerChanged(QString,QString,QString))); + QTestEventLoop::instance().connect(&watcher, SIGNAL(serviceRegistered(QString)), SLOT(exitLoop())); + + // register a name + QVERIFY(con.registerService(serviceName)); + + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 1); + QCOMPARE(spyR.at(0).at(0).toString(), serviceName); + + QCOMPARE(spyU.count(), 0); + + QCOMPARE(spyO.count(), 1); + QCOMPARE(spyO.at(0).at(0).toString(), serviceName); + QVERIFY(spyO.at(0).at(1).toString().isEmpty()); + QCOMPARE(spyO.at(0).at(2).toString(), con.baseService()); + + spyR.clear(); + spyU.clear(); + spyO.clear(); + + watcher.setWatchMode(QDBusServiceWatcher::WatchForUnregistration); + + // unregister it: + con.unregisterService(serviceName); + + QTestEventLoop::instance().connect(&watcher, SIGNAL(serviceUnregistered(QString)), SLOT(exitLoop())); + QTestEventLoop::instance().enterLoop(1); + QVERIFY(!QTestEventLoop::instance().timeout()); + + QCOMPARE(spyR.count(), 0); + + QCOMPARE(spyU.count(), 1); + QCOMPARE(spyU.at(0).at(0).toString(), serviceName); + + QCOMPARE(spyO.count(), 1); + QCOMPARE(spyO.at(0).at(0).toString(), serviceName); + QCOMPARE(spyO.at(0).at(1).toString(), con.baseService()); + QVERIFY(spyO.at(0).at(2).toString().isEmpty()); +} + +QTEST_MAIN(tst_QDBusServiceWatcher) +#include "tst_qdbusservicewatcher.moc" diff --git a/tests/auto/qdom/tst_qdom.cpp b/tests/auto/qdom/tst_qdom.cpp index 0d58554e..6637202 100644 --- a/tests/auto/qdom/tst_qdom.cpp +++ b/tests/auto/qdom/tst_qdom.cpp @@ -322,7 +322,6 @@ void tst_QDom::toString_01_data() */ void tst_QDom::toString_01() { - QFAIL("make test fail instead of timing out, will be fixed later (QT-2357)"); QFETCH(QString, fileName); QFile f(fileName); diff --git a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp index 0201bc4..b40cf43 100644 --- a/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp +++ b/tests/auto/qgraphicseffect/tst_qgraphicseffect.cpp @@ -379,7 +379,8 @@ void tst_QGraphicsEffect::grayscale() item->setPen(Qt::NoPen); item->setBrush(QColor(122, 193, 66)); // Qt light green - QGraphicsGrayscaleEffect *effect = new QGraphicsGrayscaleEffect; + QGraphicsColorizeEffect *effect = new QGraphicsColorizeEffect; + effect->setColor(Qt::black); item->setGraphicsEffect(effect); QPainter painter; diff --git a/tests/auto/qgraphicseffectsource/tst_qgraphicseffectsource.cpp b/tests/auto/qgraphicseffectsource/tst_qgraphicseffectsource.cpp index 855950b..fbeb425 100644 --- a/tests/auto/qgraphicseffectsource/tst_qgraphicseffectsource.cpp +++ b/tests/auto/qgraphicseffectsource/tst_qgraphicseffectsource.cpp @@ -166,6 +166,9 @@ private slots: void deviceRect(); void pixmap(); + void pixmapPadding_data(); + void pixmapPadding(); + private: QGraphicsView *view; QGraphicsScene *scene; @@ -318,6 +321,102 @@ void tst_QGraphicsEffectSource::pixmap() QCOMPARE(pixmap1, pixmap2); } +class PaddingEffect : public QGraphicsEffect +{ +public: + PaddingEffect(QObject *parent) : QGraphicsEffect(parent) + { + } + + QRectF boundingRectFor(const QRectF &src) const { + return src.adjusted(-10, -10, 10, 10); + } + + void draw(QPainter *, QGraphicsEffectSource *source) { + pix = source->pixmap(coordinateMode, &offset, padMode); + } + + QPixmap pix; + QPoint offset; + QGraphicsEffectSource::PixmapPadMode padMode; + Qt::CoordinateSystem coordinateMode; +}; + +void tst_QGraphicsEffectSource::pixmapPadding_data() +{ + QTest::addColumn<int>("coordinateMode"); + QTest::addColumn<int>("padMode"); + QTest::addColumn<QSize>("size"); + QTest::addColumn<QPoint>("offset"); + QTest::addColumn<uint>("ulPixel"); + + QTest::newRow("log,nopad") << int(Qt::LogicalCoordinates) + << int(QGraphicsEffectSource::NoExpandPadMode) + << QSize(10, 10) << QPoint(0, 0) + << 0xffff0000u; + + QTest::newRow("log,transparent") << int(Qt::LogicalCoordinates) + << int(QGraphicsEffectSource::ExpandToTransparentBorderPadMode) + << QSize(12, 12) << QPoint(-1, -1) + << 0x00000000u; + + QTest::newRow("log,effectrect") << int(Qt::LogicalCoordinates) + << int(QGraphicsEffectSource::ExpandToEffectRectPadMode) + << QSize(30, 30) << QPoint(-10, -10) + << 0x00000000u; + + QTest::newRow("dev,nopad") << int(Qt::DeviceCoordinates) + << int(QGraphicsEffectSource::NoExpandPadMode) + << QSize(20, 20) << QPoint(40, 40) + << 0xffff0000u; + + QTest::newRow("dev,transparent") << int(Qt::DeviceCoordinates) + << int(QGraphicsEffectSource::ExpandToTransparentBorderPadMode) + << QSize(22, 22) << QPoint(39, 39) + << 0x00000000u; + + QTest::newRow("dev,effectrect") << int(Qt::DeviceCoordinates) + << int(QGraphicsEffectSource::ExpandToEffectRectPadMode) + << QSize(40, 40) << QPoint(30, 30) + << 0x00000000u; + +} + +void tst_QGraphicsEffectSource::pixmapPadding() +{ + QPixmap dummyTarget(100, 100); + QPainter dummyPainter(&dummyTarget); + dummyPainter.translate(40, 40); + dummyPainter.scale(2, 2); + + QPixmap pm(10, 10); + pm.fill(Qt::red); + + QGraphicsScene *scene = new QGraphicsScene(); + PaddingEffect *effect = new PaddingEffect(scene); + QGraphicsPixmapItem *pmItem = new QGraphicsPixmapItem(pm); + scene->addItem(pmItem); + pmItem->setGraphicsEffect(effect); + + QFETCH(int, coordinateMode); + QFETCH(int, padMode); + QFETCH(QPoint, offset); + QFETCH(QSize, size); + QFETCH(uint, ulPixel); + + effect->padMode = (QGraphicsEffectSource::PixmapPadMode) padMode; + effect->coordinateMode = (Qt::CoordinateSystem) coordinateMode; + + scene->render(&dummyPainter, scene->itemsBoundingRect(), scene->itemsBoundingRect()); + + QCOMPARE(effect->pix.size(), size); + QCOMPARE(effect->offset, offset); + QCOMPARE(effect->pix.toImage().pixel(0, 0), ulPixel); + + // ### Fix corruption in scene destruction, then enable... + // delete scene; +} + QTEST_MAIN(tst_QGraphicsEffectSource) #include "tst_qgraphicseffectsource.moc" diff --git a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp index 2c948cc..684ad4f 100644 --- a/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp +++ b/tests/auto/qgraphicsitem/tst_qgraphicsitem.cpp @@ -3111,7 +3111,7 @@ void tst_QGraphicsItem::boundingRects() void tst_QGraphicsItem::boundingRects2() { QGraphicsPixmapItem pixmap(QPixmap::fromImage(QImage(100, 100, QImage::Format_ARGB32_Premultiplied))); - QCOMPARE(pixmap.boundingRect(), QRectF(-0.5, -0.5, 101, 101)); + QCOMPARE(pixmap.boundingRect(), QRectF(0, 0, 100, 100)); QGraphicsLineItem line(0, 0, 100, 0); line.setPen(QPen(Qt::black, 1)); @@ -4041,7 +4041,7 @@ void tst_QGraphicsItem::defaultItemTest_QGraphicsPixmapItem() item.setOffset(QPointF(-10, -10)); QCOMPARE(item.offset(), QPointF(-10, -10)); - QCOMPARE(item.boundingRect(), QRectF(-10.5, -10.5, 301, 201)); + QCOMPARE(item.boundingRect(), QRectF(-10, -10, 300, 200)); } void tst_QGraphicsItem::defaultItemTest_QGraphicsTextItem() @@ -7463,7 +7463,7 @@ void tst_QGraphicsItem::moveLineItem() // Make sure the calculated region is correct. item->update(); QTest::qWait(10); - QCOMPARE(view.paintedRegion, expectedRegion); + QTRY_COMPARE(view.paintedRegion, expectedRegion); view.reset(); // Old position: (50, 50) diff --git a/tests/auto/qgraphicspixmapitem/tst_qgraphicspixmapitem.cpp b/tests/auto/qgraphicspixmapitem/tst_qgraphicspixmapitem.cpp index e25aef0..5a62dc0 100644 --- a/tests/auto/qgraphicspixmapitem/tst_qgraphicspixmapitem.cpp +++ b/tests/auto/qgraphicspixmapitem/tst_qgraphicspixmapitem.cpp @@ -165,7 +165,7 @@ void tst_QGraphicsPixmapItem::boundingRect_data() QTest::addColumn<QPixmap>("pixmap"); QTest::addColumn<QRectF>("boundingRect"); QTest::newRow("null") << QPixmap() << QRectF(); - QTest::newRow("10x10") << QPixmap(10, 10) << QRectF(-0.5, -0.5, 11, 11); + QTest::newRow("10x10") << QPixmap(10, 10) << QRectF(0, 0, 10, 10); } // public QRectF boundingRect() const diff --git a/tests/auto/qgraphicssceneindex/tst_qgraphicssceneindex.cpp b/tests/auto/qgraphicssceneindex/tst_qgraphicssceneindex.cpp index 9dfd486..7d98748 100644 --- a/tests/auto/qgraphicssceneindex/tst_qgraphicssceneindex.cpp +++ b/tests/auto/qgraphicssceneindex/tst_qgraphicssceneindex.cpp @@ -45,6 +45,8 @@ #include <private/qgraphicsscenebsptreeindex_p.h> #include <private/qgraphicssceneindex_p.h> #include <private/qgraphicsscenelinearindex_p.h> +#include "../../shared/util.h" + //TESTED_CLASS= //TESTED_FILES= @@ -356,7 +358,7 @@ void tst_QGraphicsSceneIndex::clear() MyItem *item = new MyItem; scene.addItem(item); qApp->processEvents(); - QCOMPARE(item->numPaints, 1); + QTRY_COMPARE(item->numPaints, 1); } QTEST_MAIN(tst_QGraphicsSceneIndex) diff --git a/tests/auto/qlistview/tst_qlistview.cpp b/tests/auto/qlistview/tst_qlistview.cpp index 65ab12d..a5ff153 100644 --- a/tests/auto/qlistview/tst_qlistview.cpp +++ b/tests/auto/qlistview/tst_qlistview.cpp @@ -119,6 +119,8 @@ private slots: void task262152_setModelColumnNavigate(); void taskQTBUG_2233_scrollHiddenItems_data(); void taskQTBUG_2233_scrollHiddenItems(); + void taskQTBUG_633_changeModelData(); + void taskQTBUG_435_deselectOnViewportClick(); }; // Testing get/set functions @@ -1832,5 +1834,47 @@ void tst_QListView::taskQTBUG_2233_scrollHiddenItems() } } +void tst_QListView::taskQTBUG_633_changeModelData() +{ + QListView view; + view.setFlow(QListView::LeftToRight); + QStandardItemModel model(5,1); + for (int i = 0; i < model.rowCount(); ++i) { + model.setData( model.index(i, 0), QString::number(i)); + } + + view.setModel(&model); + view.show(); + QTest::qWaitForWindowShown(&view); + model.setData( model.index(1, 0), QLatin1String("long long text")); + QTest::qWait(100); //leave time for relayouting the items + QRect rectLongText = view.visualRect(model.index(1,0)); + QRect rect2 = view.visualRect(model.index(2,0)); + QVERIFY( ! rectLongText.intersects(rect2) ); +} + +void tst_QListView::taskQTBUG_435_deselectOnViewportClick() +{ + QListView view; + QStringListModel model( QStringList() << "1" << "2" << "3" << "4"); + view.setModel(&model); + view.setSelectionMode(QAbstractItemView::ExtendedSelection); + view.selectAll(); + QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount()); + + + QPoint p = view.visualRect(model.index(model.rowCount() - 1)).center() + QPoint(0, 20); + //first the left button + QTest::mouseClick(view.viewport(), Qt::LeftButton, 0, p); + QVERIFY(!view.selectionModel()->hasSelection()); + + view.selectAll(); + QCOMPARE(view.selectionModel()->selectedIndexes().count(), model.rowCount()); + + //and now the right button + QTest::mouseClick(view.viewport(), Qt::RightButton, 0, p); + QVERIFY(!view.selectionModel()->hasSelection()); +} + QTEST_MAIN(tst_QListView) #include "tst_qlistview.moc" diff --git a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp index be39d00..ab7b0ac 100644 --- a/tests/auto/qlocalsocket/tst_qlocalsocket.cpp +++ b/tests/auto/qlocalsocket/tst_qlocalsocket.cpp @@ -976,7 +976,7 @@ void tst_QLocalSocket::writeOnlySocket() #if defined(Q_OS_SYMBIAN) QTest::qWait(250); #endif - QVERIFY(server.waitForNewConnection()); + QVERIFY(server.waitForNewConnection(200)); QLocalSocket* serverSocket = server.nextPendingConnection(); QVERIFY(serverSocket); diff --git a/tests/auto/qpixmap/tst_qpixmap.cpp b/tests/auto/qpixmap/tst_qpixmap.cpp index 53b6230..8e02c74 100644 --- a/tests/auto/qpixmap/tst_qpixmap.cpp +++ b/tests/auto/qpixmap/tst_qpixmap.cpp @@ -1134,6 +1134,8 @@ void tst_QPixmap::fromSymbianCFbsBitmap_data() QTest::newRow("EColor4K big") << EColor4K << largeWidth << largeHeight << QColor(Qt::red); QTest::newRow("EColor64K small") << EColor64K << smallWidth << smallHeight << QColor(Qt::green); QTest::newRow("EColor64K big") << EColor64K << largeWidth << largeHeight << QColor(Qt::green); + QTest::newRow("EColor16M small") << EColor16M << smallWidth << smallHeight << QColor(Qt::yellow); + QTest::newRow("EColor16M big") << EColor16M << largeWidth << largeHeight << QColor(Qt::yellow); QTest::newRow("EColor16MU small") << EColor16MU << smallWidth << smallHeight << QColor(Qt::red); QTest::newRow("EColor16MU big") << EColor16MU << largeWidth << largeHeight << QColor(Qt::red); QTest::newRow("EColor16MA small opaque") << EColor16MA << smallWidth << smallHeight << QColor(255, 255, 0); diff --git a/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp b/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp index 5a9bad7..a80c787 100644 --- a/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp +++ b/tests/auto/qpixmapfilter/tst_qpixmapfilter.cpp @@ -383,7 +383,7 @@ void tst_QPixmapFilter::dropShadowBoundingRectFor() QPixmapDropShadowFilter filter; filter.setBlurRadius(0); - QCOMPARE(filter.blurRadius(), 0); + QCOMPARE(filter.blurRadius(), 0.); const QRectF rect1(0, 0, 50, 50); const QRectF rect2(30, 20, 10, 40); diff --git a/tests/auto/qscriptstring/tst_qscriptstring.cpp b/tests/auto/qscriptstring/tst_qscriptstring.cpp index e1a4bc1..1229f4a 100644 --- a/tests/auto/qscriptstring/tst_qscriptstring.cpp +++ b/tests/auto/qscriptstring/tst_qscriptstring.cpp @@ -59,6 +59,8 @@ public: private slots: void test(); void hash(); + void toArrayIndex_data(); + void toArrayIndex(); }; tst_QScriptString::tst_QScriptString() @@ -155,5 +157,40 @@ void tst_QScriptString::hash() QCOMPARE(stringToInt.value(foo), 123); } +void tst_QScriptString::toArrayIndex_data() +{ + QTest::addColumn<QString>("input"); + QTest::addColumn<bool>("expectSuccess"); + QTest::addColumn<quint32>("expectedIndex"); + QTest::newRow("foo") << QString::fromLatin1("foo") << false << quint32(0xffffffff); + QTest::newRow("empty") << QString::fromLatin1("") << false << quint32(0xffffffff); + QTest::newRow("0") << QString::fromLatin1("0") << true << quint32(0); + QTest::newRow("00") << QString::fromLatin1("00") << false << quint32(0xffffffff); + QTest::newRow("1") << QString::fromLatin1("1") << true << quint32(1); + QTest::newRow("123") << QString::fromLatin1("123") << true << quint32(123); + QTest::newRow("-1") << QString::fromLatin1("-1") << false << quint32(0xffffffff); + QTest::newRow("0a") << QString::fromLatin1("0a") << false << quint32(0xffffffff); + QTest::newRow("0x1") << QString::fromLatin1("0x1") << false << quint32(0xffffffff); + QTest::newRow("01") << QString::fromLatin1("01") << false << quint32(0xffffffff); + QTest::newRow("4294967294") << QString::fromLatin1("4294967294") << true << quint32(0xfffffffe); + QTest::newRow("4294967295") << QString::fromLatin1("4294967295") << false << quint32(0xffffffff); +} + +void tst_QScriptString::toArrayIndex() +{ + QFETCH(QString, input); + QFETCH(bool, expectSuccess); + QFETCH(quint32, expectedIndex); + QScriptEngine engine; + for (int x = 0; x < 2; ++x) { + bool isArrayIndex; + bool *ptr = (x == 0) ? &isArrayIndex : (bool*)0; + quint32 result = engine.toStringHandle(input).toArrayIndex(ptr); + if (x == 0) + QCOMPARE(isArrayIndex, expectSuccess); + QCOMPARE(result, expectedIndex); + } +} + QTEST_MAIN(tst_QScriptString) #include "tst_qscriptstring.moc" diff --git a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp index 82b6066..fe7c3ea 100644 --- a/tests/auto/qsqldatabase/tst_qsqldatabase.cpp +++ b/tests/auto/qsqldatabase/tst_qsqldatabase.cpp @@ -1234,6 +1234,7 @@ void tst_QSqlDatabase::recordSQLite() FieldDef("integer", QVariant::Int, QVariant(13)), FieldDef("int", QVariant::Int, QVariant(12)), + FieldDef("real", QVariant::String, QVariant(1.234567890123456)), FieldDef() }; diff --git a/tests/auto/qsslsocket/tst_qsslsocket.cpp b/tests/auto/qsslsocket/tst_qsslsocket.cpp index 2bd1684..db46b66 100644 --- a/tests/auto/qsslsocket/tst_qsslsocket.cpp +++ b/tests/auto/qsslsocket/tst_qsslsocket.cpp @@ -1755,9 +1755,7 @@ void tst_QSslSocket::readFromClosedSocket() socket->close(); QVERIFY(!socket->bytesAvailable()); QVERIFY(!socket->bytesToWrite()); - socket->waitForDisconnected(); - QVERIFY(!socket->bytesAvailable()); - QVERIFY(!socket->bytesToWrite()); + QVERIFY(socket->state() == QAbstractSocket::UnconnectedState); } void tst_QSslSocket::writeBigChunk() diff --git a/tests/auto/qstatemachine/tst_qstatemachine.cpp b/tests/auto/qstatemachine/tst_qstatemachine.cpp index 1516346..975b301 100644 --- a/tests/auto/qstatemachine/tst_qstatemachine.cpp +++ b/tests/auto/qstatemachine/tst_qstatemachine.cpp @@ -117,6 +117,7 @@ private slots: void cleanup(); void rootState(); + void machineWithParent(); void addAndRemoveState(); void stateEntryAndExit(); void assignProperty(); @@ -124,6 +125,7 @@ private slots: void postEvent(); void cancelDelayedEvent(); void postDelayedEventAndStop(); + void stopAndPostEvent(); void stateFinished(); void parallelStates(); void parallelRootState(); @@ -205,6 +207,7 @@ private slots: void goToState(); void task260403_clonedSignals(); + void postEventFromOtherThread(); }; tst_QStateMachine::tst_QStateMachine() @@ -1043,6 +1046,14 @@ void tst_QStateMachine::rootState() QCOMPARE(s2->parentState(), static_cast<QState*>(&machine)); } +void tst_QStateMachine::machineWithParent() +{ + QObject object; + QStateMachine *machine = new QStateMachine(&object); + QCOMPARE(machine->parent(), &object); + QCOMPARE(machine->parentState(), (QObject*)0); +} + void tst_QStateMachine::addAndRemoveState() { #ifdef QT_BUILD_INTERNAL @@ -1681,6 +1692,22 @@ void tst_QStateMachine::postDelayedEventAndStop() QVERIFY(machine.configuration().contains(s1)); } +void tst_QStateMachine::stopAndPostEvent() +{ + QStateMachine machine; + QState *s1 = new QState(&machine); + machine.setInitialState(s1); + QSignalSpy startedSpy(&machine, SIGNAL(started())); + machine.start(); + QTRY_COMPARE(startedSpy.count(), 1); + QSignalSpy stoppedSpy(&machine, SIGNAL(stopped())); + machine.stop(); + QCOMPARE(stoppedSpy.count(), 0); + machine.postEvent(new QEvent(QEvent::User)); + QTRY_COMPARE(stoppedSpy.count(), 1); + QCoreApplication::processEvents(); +} + void tst_QStateMachine::stateFinished() { QStateMachine machine; @@ -4188,5 +4215,52 @@ void tst_QStateMachine::task260403_clonedSignals() QCOMPARE(t1->eventSignalIndex, emitter.metaObject()->indexOfSignal("signalWithDefaultArg()")); } +class EventPosterThread : public QThread +{ + Q_OBJECT +public: + EventPosterThread(QStateMachine *machine, QObject *parent = 0) + : QThread(parent), m_machine(machine), m_count(0) + { + moveToThread(this); + QObject::connect(m_machine, SIGNAL(started()), + this, SLOT(postEvent())); + } +protected: + virtual void run() + { + exec(); + } +private Q_SLOTS: + void postEvent() + { + m_machine->postEvent(new QEvent(QEvent::User)); + if (++m_count < 10000) + QTimer::singleShot(0, this, SLOT(postEvent())); + else + quit(); + } +private: + QStateMachine *m_machine; + int m_count; +}; + +void tst_QStateMachine::postEventFromOtherThread() +{ + QStateMachine machine; + EventPosterThread poster(&machine); + StringEventPoster *s1 = new StringEventPoster("foo", &machine); + s1->addTransition(new EventTransition(QEvent::User, s1)); + QFinalState *f = new QFinalState(&machine); + s1->addTransition(&poster, SIGNAL(finished()), f); + machine.setInitialState(s1); + + poster.start(); + + QSignalSpy finishedSpy(&machine, SIGNAL(finished())); + machine.start(); + QTRY_COMPARE(finishedSpy.count(), 1); +} + QTEST_MAIN(tst_QStateMachine) #include "tst_qstatemachine.moc" diff --git a/tests/auto/qstringbuilder1/qstringbuilder1.pro b/tests/auto/qstringbuilder1/qstringbuilder1.pro index 1ca9d45..5bb14d4 100644 --- a/tests/auto/qstringbuilder1/qstringbuilder1.pro +++ b/tests/auto/qstringbuilder1/qstringbuilder1.pro @@ -3,7 +3,4 @@ load(qttest_p4) QT = core SOURCES += tst_qstringbuilder1.cpp -HEADERS += ../qstringbuilder1/stringbuilder.h - -DEFINES += SCENARIO=1 diff --git a/tests/auto/qstringbuilder1/stringbuilder.cpp b/tests/auto/qstringbuilder1/stringbuilder.cpp index 9fea137..f35d4d2 100644 --- a/tests/auto/qstringbuilder1/stringbuilder.cpp +++ b/tests/auto/qstringbuilder1/stringbuilder.cpp @@ -39,61 +39,9 @@ ** ****************************************************************************/ -// This is included in various .cpp files as a compile test for various scenarios -// depending on NO_CAST_* and QT_USE_FAST_OPERATOR_PLUS and QT_USE_FAST_CONCATENATION - -#if SCENARIO == 1 -// this is the "no harm done" version. Only operator% is active, -// with NO_CAST * defined -#define P % -#undef QT_USE_FAST_OPERATOR_PLUS -#undef QT_USE_FAST_CONCATENATION -#define QT_NO_CAST_FROM_ASCII -#define QT_NO_CAST_TO_ASCII -#endif - - -#if SCENARIO == 2 -// this is the "full" version. Operator+ is replaced by a QStringBuilder -// based version -// with NO_CAST * defined -#define P + -#define QT_USE_FAST_OPERATOR_PLUS -#define QT_USE_FAST_CONCATENATION -#define QT_NO_CAST_FROM_ASCII -#define QT_NO_CAST_TO_ASCII -#endif - -#if SCENARIO == 3 -// this is the "no harm done" version. Only operator% is active, -// with NO_CAST * _not_ defined -#define P % -#undef QT_USE_FAST_OPERATOR_PLUS -#undef QT_USE_FAST_CONCATENATION -#undef QT_NO_CAST_FROM_ASCII -#undef QT_NO_CAST_TO_ASCII -#endif - -#if SCENARIO == 4 -// this is the "full" version. Operator+ is replaced by a QStringBuilder -// based version -// with NO_CAST * _not_ defined -#define P + -#define QT_USE_FAST_OPERATOR_PLUS -#define QT_USE_FAST_CONCATENATION -#undef QT_NO_CAST_FROM_ASCII -#undef QT_NO_CAST_TO_ASCII -#endif - -#include <QtTest/QtTest> -#include "stringbuilder.h" - -//TESTED_CLASS=QStringBuilder -//TESTED_FILES=qstringbuilder.cpp - #define LITERAL "some literal" -void tst_QStringBuilder::scenario() +void runScenario() { QLatin1Literal l1literal(LITERAL); QLatin1String l1string(LITERAL); @@ -129,5 +77,3 @@ void tst_QStringBuilder::scenario() QCOMPARE(r, r2); #endif } - -QTEST_APPLESS_MAIN(tst_QStringBuilder) diff --git a/tests/auto/qstringbuilder1/stringbuilder.h b/tests/auto/qstringbuilder1/stringbuilder.h deleted file mode 100644 index 5ac9dbe..0000000 --- a/tests/auto/qstringbuilder1/stringbuilder.h +++ /dev/null @@ -1,55 +0,0 @@ -/**************************************************************************** -** -** Copyright (C) 2009 Nokia Corporation and/or its subsidiary(-ies). -** All rights reserved. -** Contact: Nokia Corporation (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 Technology Preview License Agreement accompanying -** this package. -** -** 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.1, included in the file LGPL_EXCEPTION.txt in this package. -** -** If you have questions regarding the use of this file, please contact -** Nokia at qt-info@nokia.com. -** -** -** -** -** -** -** -** -** $QT_END_LICENSE$ -** -****************************************************************************/ - -#ifndef TST_QSTRINGBUILDER_H -#define TST_QSTRINGBUILDER_H - -#include <qobject.h> - -class tst_QStringBuilder : public QObject -{ - Q_OBJECT - -private slots: - void scenario(); -}; - -#endif diff --git a/tests/auto/qstringbuilder1/tst_qstringbuilder1.cpp b/tests/auto/qstringbuilder1/tst_qstringbuilder1.cpp index bd2e4b0..d0a613c 100644 --- a/tests/auto/qstringbuilder1/tst_qstringbuilder1.cpp +++ b/tests/auto/qstringbuilder1/tst_qstringbuilder1.cpp @@ -39,4 +39,35 @@ ** ****************************************************************************/ -#include "../qstringbuilder1/stringbuilder.cpp" + +// SCENARIO 1 +// this is the "no harm done" version. Only operator% is active, +// with NO_CAST * defined +#define P % +#undef QT_USE_FAST_OPERATOR_PLUS +#undef QT_USE_FAST_CONCATENATION +#define QT_NO_CAST_FROM_ASCII +#define QT_NO_CAST_TO_ASCII + + +#include <QtTest/QtTest> + +//TESTED_CLASS=QStringBuilder +//TESTED_FILES=qstringbuilder.cpp + +#define LITERAL "some literal" + +void runScenario(); // Defined in stringbuilder.cpp #included below. + +class tst_QStringBuilder1 : public QObject +{ + Q_OBJECT + +private slots: + void scenario() { runScenario(); } +}; + +#include "stringbuilder.cpp" +#include "tst_qstringbuilder1.moc" + +QTEST_APPLESS_MAIN(tst_QStringBuilder1) diff --git a/tests/auto/qstringbuilder2/qstringbuilder2.pro b/tests/auto/qstringbuilder2/qstringbuilder2.pro index c0b3ebc..4152dc3 100644 --- a/tests/auto/qstringbuilder2/qstringbuilder2.pro +++ b/tests/auto/qstringbuilder2/qstringbuilder2.pro @@ -3,6 +3,3 @@ load(qttest_p4) QT = core SOURCES += tst_qstringbuilder2.cpp -HEADERS += ../qstringbuilder1/stringbuilder.h - -DEFINES += SCENARIO=2 diff --git a/tests/auto/qstringbuilder2/tst_qstringbuilder2.cpp b/tests/auto/qstringbuilder2/tst_qstringbuilder2.cpp index bd2e4b0..4470928 100644 --- a/tests/auto/qstringbuilder2/tst_qstringbuilder2.cpp +++ b/tests/auto/qstringbuilder2/tst_qstringbuilder2.cpp @@ -39,4 +39,36 @@ ** ****************************************************************************/ + +// SCENARIO 2 +// this is the "full" version. Operator+ is replaced by a QStringBuilder +// based version +// with NO_CAST * defined +#define P + +#define QT_USE_FAST_OPERATOR_PLUS +#define QT_USE_FAST_CONCATENATION +#define QT_NO_CAST_FROM_ASCII +#define QT_NO_CAST_TO_ASCII + + +#include <QtTest/QtTest> + +//TESTED_CLASS=QStringBuilder +//TESTED_FILES=qstringbuilder.cpp + +#define LITERAL "some literal" + +void runScenario(); // Defined in stringbuilder.cpp #included below. + +class tst_QStringBuilder2 : public QObject +{ + Q_OBJECT + +private slots: + void scenario() { runScenario(); } +}; + #include "../qstringbuilder1/stringbuilder.cpp" +#include "tst_qstringbuilder2.moc" + +QTEST_APPLESS_MAIN(tst_QStringBuilder2) diff --git a/tests/auto/qstringbuilder3/qstringbuilder3.pro b/tests/auto/qstringbuilder3/qstringbuilder3.pro index 93d1a39..b4d2225 100644 --- a/tests/auto/qstringbuilder3/qstringbuilder3.pro +++ b/tests/auto/qstringbuilder3/qstringbuilder3.pro @@ -3,6 +3,3 @@ load(qttest_p4) QT = core SOURCES += tst_qstringbuilder3.cpp -HEADERS += ../qstringbuilder1/stringbuilder.h - -DEFINES += SCENARIO=3 diff --git a/tests/auto/qstringbuilder3/tst_qstringbuilder3.cpp b/tests/auto/qstringbuilder3/tst_qstringbuilder3.cpp index bd2e4b0..30f0181 100644 --- a/tests/auto/qstringbuilder3/tst_qstringbuilder3.cpp +++ b/tests/auto/qstringbuilder3/tst_qstringbuilder3.cpp @@ -39,4 +39,35 @@ ** ****************************************************************************/ + +// SCENARIO 3 +// this is the "no harm done" version. Only operator% is active, +// with NO_CAST * _not_ defined +#define P % +#undef QT_USE_FAST_OPERATOR_PLUS +#undef QT_USE_FAST_CONCATENATION +#undef QT_NO_CAST_FROM_ASCII +#undef QT_NO_CAST_TO_ASCII + + +#include <QtTest/QtTest> + +//TESTED_CLASS=QStringBuilder +//TESTED_FILES=qstringbuilder.cpp + +#define LITERAL "some literal" + +void runScenario(); // Defined in stringbuilder.cpp #included below. + +class tst_QStringBuilder3 : public QObject +{ + Q_OBJECT + +private slots: + void scenario() { runScenario(); } +}; + #include "../qstringbuilder1/stringbuilder.cpp" +#include "tst_qstringbuilder3.moc" + +QTEST_APPLESS_MAIN(tst_QStringBuilder3) diff --git a/tests/auto/qstringbuilder4/qstringbuilder4.pro b/tests/auto/qstringbuilder4/qstringbuilder4.pro index eeec447..6ec5228 100644 --- a/tests/auto/qstringbuilder4/qstringbuilder4.pro +++ b/tests/auto/qstringbuilder4/qstringbuilder4.pro @@ -3,6 +3,3 @@ load(qttest_p4) QT = core SOURCES += tst_qstringbuilder4.cpp -HEADERS += ../qstringbuilder1/stringbuilder.h - -DEFINES += SCENARIO=4 diff --git a/tests/auto/qstringbuilder4/tst_qstringbuilder4.cpp b/tests/auto/qstringbuilder4/tst_qstringbuilder4.cpp index 2159283..95b4ec3 100644 --- a/tests/auto/qstringbuilder4/tst_qstringbuilder4.cpp +++ b/tests/auto/qstringbuilder4/tst_qstringbuilder4.cpp @@ -4,7 +4,7 @@ ** All rights reserved. ** Contact: Nokia Corporation (qt-info@nokia.com) ** -** This file is part of the QtXmlPatterns module of the Qt Toolkit. +** This file is part of the test suite module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL$ ** No Commercial Usage @@ -39,4 +39,36 @@ ** ****************************************************************************/ + +// SCENARIO 4 +// this is the "full" version. Operator+ is replaced by a QStringBuilder +// based version +// with NO_CAST * _not_ defined +#define P + +#define QT_USE_FAST_OPERATOR_PLUS +#define QT_USE_FAST_CONCATENATION +#undef QT_NO_CAST_FROM_ASCII +#undef QT_NO_CAST_TO_ASCII + + +#include <QtTest/QtTest> + +//TESTED_CLASS=QStringBuilder +//TESTED_FILES=qstringbuilder.cpp + +#define LITERAL "some literal" + +void runScenario(); // Defined in stringbuilder.cpp #included below. + +class tst_QStringBuilder4 : public QObject +{ + Q_OBJECT + +private slots: + void scenario() { runScenario(); } +}; + #include "../qstringbuilder1/stringbuilder.cpp" +#include "tst_qstringbuilder4.moc" + +QTEST_APPLESS_MAIN(tst_QStringBuilder4) diff --git a/tests/auto/qtableview/tst_qtableview.cpp b/tests/auto/qtableview/tst_qtableview.cpp index fe2794f..227ca6f 100644 --- a/tests/auto/qtableview/tst_qtableview.cpp +++ b/tests/auto/qtableview/tst_qtableview.cpp @@ -203,6 +203,8 @@ private slots: void addColumnWhileEditing(); void task234926_setHeaderSorting(); + + void changeHeaderData(); }; // Testing get/set functions @@ -3883,5 +3885,24 @@ void tst_QTableView::taskQTBUG_5062_spansInconsistency() VERIFY_SPANS_CONSISTENCY(&view); } +void tst_QTableView::changeHeaderData() +{ + QTableView view; + QStandardItemModel model(5,5); + view.setModel(&model); + view.show(); + QTest::qWaitForWindowShown(&view); + + QString text = "long long long text"; + const int textWidth = view.fontMetrics().width(text); + QVERIFY(view.verticalHeader()->width() < textWidth); + + model.setHeaderData(2, Qt::Vertical, text); + QTest::qWait(100); //leave time for layout + + QVERIFY(view.verticalHeader()->width() > textWidth); +} + + QTEST_MAIN(tst_QTableView) #include "tst_qtableview.moc" diff --git a/tests/auto/qtextedit/fullWidthSelection/centered-fully-selected.png b/tests/auto/qtextedit/fullWidthSelection/centered-fully-selected.png Binary files differindex 7467478..ced6eb6 100644 --- a/tests/auto/qtextedit/fullWidthSelection/centered-fully-selected.png +++ b/tests/auto/qtextedit/fullWidthSelection/centered-fully-selected.png diff --git a/tests/auto/qtextedit/fullWidthSelection/centered-partly-selected.png b/tests/auto/qtextedit/fullWidthSelection/centered-partly-selected.png Binary files differindex 7a10e63..481b99c 100644 --- a/tests/auto/qtextedit/fullWidthSelection/centered-partly-selected.png +++ b/tests/auto/qtextedit/fullWidthSelection/centered-partly-selected.png diff --git a/tests/auto/qtextedit/fullWidthSelection/last-char-on-line.png b/tests/auto/qtextedit/fullWidthSelection/last-char-on-line.png Binary files differindex df5b92e..292d3f9 100644 --- a/tests/auto/qtextedit/fullWidthSelection/last-char-on-line.png +++ b/tests/auto/qtextedit/fullWidthSelection/last-char-on-line.png diff --git a/tests/auto/qtextedit/fullWidthSelection/last-char-on-parag.png b/tests/auto/qtextedit/fullWidthSelection/last-char-on-parag.png Binary files differindex d58d4cc..69b72ed 100644 --- a/tests/auto/qtextedit/fullWidthSelection/last-char-on-parag.png +++ b/tests/auto/qtextedit/fullWidthSelection/last-char-on-parag.png diff --git a/tests/auto/qtextedit/fullWidthSelection/multiple-full-width-lines.png b/tests/auto/qtextedit/fullWidthSelection/multiple-full-width-lines.png Binary files differindex c5c3c22..467b91e 100644 --- a/tests/auto/qtextedit/fullWidthSelection/multiple-full-width-lines.png +++ b/tests/auto/qtextedit/fullWidthSelection/multiple-full-width-lines.png diff --git a/tests/auto/qtextedit/fullWidthSelection/nowrap_long.png b/tests/auto/qtextedit/fullWidthSelection/nowrap_long.png Binary files differindex 7ded254..cce921b 100644 --- a/tests/auto/qtextedit/fullWidthSelection/nowrap_long.png +++ b/tests/auto/qtextedit/fullWidthSelection/nowrap_long.png diff --git a/tests/auto/qtextedit/fullWidthSelection/single-full-width-line.png b/tests/auto/qtextedit/fullWidthSelection/single-full-width-line.png Binary files differindex d2fd629..937494a 100644 --- a/tests/auto/qtextedit/fullWidthSelection/single-full-width-line.png +++ b/tests/auto/qtextedit/fullWidthSelection/single-full-width-line.png diff --git a/tests/auto/qtextedit/tst_qtextedit.cpp b/tests/auto/qtextedit/tst_qtextedit.cpp index 59abbd5..fee030c 100644 --- a/tests/auto/qtextedit/tst_qtextedit.cpp +++ b/tests/auto/qtextedit/tst_qtextedit.cpp @@ -1967,7 +1967,7 @@ void tst_QTextEdit::fullWidthSelection() qt_setQtEnableTestFont(true); QFont testFont; testFont.setFamily("__Qt__Box__Engine__"); - testFont.setPixelSize(12); + testFont.setPixelSize(11); testFont.setWeight(QFont::Normal); QTextCharFormat cf; cf.setFont(testFont); @@ -2015,7 +2015,7 @@ void tst_QTextEdit::fullWidthSelection2() qt_setQtEnableTestFont(true); QFont testFont; testFont.setFamily("__Qt__Box__Engine__"); - testFont.setPixelSize(12); + testFont.setPixelSize(11); testFont.setWeight(QFont::Normal); QTextCharFormat cf; cf.setFont(testFont); diff --git a/tests/auto/qtreeview/tst_qtreeview.cpp b/tests/auto/qtreeview/tst_qtreeview.cpp index 1429771..90e6c5c 100644 --- a/tests/auto/qtreeview/tst_qtreeview.cpp +++ b/tests/auto/qtreeview/tst_qtreeview.cpp @@ -2892,6 +2892,8 @@ void tst_QTreeView::styleOptionViewItem() QVERIFY(!opt.text.isEmpty()); QCOMPARE(opt.index, index); + //qDebug() << index << opt.text; + if (allCollapsed) QCOMPARE(!(opt.features & QStyleOptionViewItemV2::Alternate), !(index.row() % 2)); QCOMPARE(!(opt.features & QStyleOptionViewItemV2::HasCheckIndicator), !opt.text.contains("Checkable")); @@ -2979,9 +2981,108 @@ void tst_QTreeView::styleOptionViewItem() view.expandAll(); QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 13); + delegate.count = 0; view.collapse(par2->index()); QApplication::processEvents(); QTRY_VERIFY(delegate.count >= 4); + + + //test dynamic models + { + delegate.count = 0; + QStandardItemModel model2; + QStandardItem *item0 = new QStandardItem("OnlyOne Last"); + model2.appendRow(QList<QStandardItem*>() << item0); + view.setModel(&model2); + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 1); + QApplication::processEvents(); + + QStandardItem *item00 = new QStandardItem("OnlyOne Last"); + item0->appendRow(QList<QStandardItem*>() << item00); + item0->setText("OnlyOne Last HasChildren"); + QApplication::processEvents(); + delegate.count = 0; + view.expandAll(); + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 2); + QApplication::processEvents(); + + QStandardItem *item1 = new QStandardItem("OnlyOne Last"); + delegate.count = 0; + item0->setText("OnlyOne HasChildren"); + model2.appendRow(QList<QStandardItem*>() << item1); + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 3); + QApplication::processEvents(); + + QStandardItem *item01 = new QStandardItem("OnlyOne Last"); + delegate.count = 0; + item00->setText("OnlyOne"); + item0->appendRow(QList<QStandardItem*>() << item01); + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 4); + QApplication::processEvents(); + + QStandardItem *item000 = new QStandardItem("OnlyOne Last"); + delegate.count = 0; + item00->setText("OnlyOne HasChildren"); + item00->appendRow(QList<QStandardItem*>() << item000); + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 5); + QApplication::processEvents(); + + delegate.count = 0; + item0->removeRow(0); + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 3); + QApplication::processEvents(); + + item00 = new QStandardItem("OnlyOne"); + item0->insertRow(0, QList<QStandardItem*>() << item00); + QApplication::processEvents(); + delegate.count = 0; + view.expandAll(); + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 4); + QApplication::processEvents(); + + delegate.count = 0; + item0->removeRow(1); + item00->setText("OnlyOne Last"); + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 3); + QApplication::processEvents(); + + delegate.count = 0; + item0->removeRow(0); + item0->setText("OnlyOne"); + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 2); + QApplication::processEvents(); + + //with hidden items + item0->setText("OnlyOne HasChildren"); + item00 = new QStandardItem("OnlyOne"); + item0->appendRow(QList<QStandardItem*>() << item00); + item01 = new QStandardItem("Assert"); + item0->appendRow(QList<QStandardItem*>() << item01); + view.setRowHidden(1, item0->index(), true); + view.expandAll(); + QStandardItem *item02 = new QStandardItem("OnlyOne Last"); + item0->appendRow(QList<QStandardItem*>() << item02); + delegate.count = 0; + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 4); + QApplication::processEvents(); + + item0->removeRow(2); + item00->setText("OnlyOne Last"); + delegate.count = 0; + QApplication::processEvents(); + QTRY_VERIFY(delegate.count >= 3); + QApplication::processEvents(); + } } class task174627_TreeView : public QTreeView @@ -3552,6 +3653,7 @@ void tst_QTreeView::doubleClickedWithSpans() view.setModel(&model); view.setFirstColumnSpanned(0, QModelIndex(), true); view.show(); + QTest::qWaitForWindowShown(&view); QPoint p(10, 10); QCOMPARE(view.indexAt(p), model.index(0, 0)); diff --git a/tests/auto/qudpsocket/tst_qudpsocket.cpp b/tests/auto/qudpsocket/tst_qudpsocket.cpp index 7ea2163..9418be0 100644 --- a/tests/auto/qudpsocket/tst_qudpsocket.cpp +++ b/tests/auto/qudpsocket/tst_qudpsocket.cpp @@ -719,6 +719,8 @@ void tst_QUdpSocket::outOfProcessConnectedClientServerTest() QProcess serverProcess; serverProcess.start(QLatin1String("clientserver/clientserver server 1 1"), QIODevice::ReadWrite | QIODevice::Text); + QVERIFY2(serverProcess.waitForStarted(3000), + qPrintable("Failed to start subprocess: " + serverProcess.errorString())); // Wait until the server has started and reports success. while (!serverProcess.canReadLine()) @@ -732,6 +734,9 @@ void tst_QUdpSocket::outOfProcessConnectedClientServerTest() clientProcess.start(QString::fromLatin1("clientserver/clientserver connectedclient %1 %2") .arg(QLatin1String("127.0.0.1")).arg(serverPort), QIODevice::ReadWrite | QIODevice::Text); + QVERIFY2(clientProcess.waitForStarted(3000), + qPrintable("Failed to start subprocess: " + clientProcess.errorString())); + // Wait until the server has started and reports success. while (!clientProcess.canReadLine()) QVERIFY(clientProcess.waitForReadyRead(3000)); @@ -779,6 +784,8 @@ void tst_QUdpSocket::outOfProcessUnconnectedClientServerTest() QProcess serverProcess; serverProcess.start(QLatin1String("clientserver/clientserver server 1 1"), QIODevice::ReadWrite | QIODevice::Text); + QVERIFY2(serverProcess.waitForStarted(3000), + qPrintable("Failed to start subprocess: " + serverProcess.errorString())); // Wait until the server has started and reports success. while (!serverProcess.canReadLine()) @@ -792,6 +799,9 @@ void tst_QUdpSocket::outOfProcessUnconnectedClientServerTest() clientProcess.start(QString::fromLatin1("clientserver/clientserver unconnectedclient %1 %2") .arg(QLatin1String("127.0.0.1")).arg(serverPort), QIODevice::ReadWrite | QIODevice::Text); + QVERIFY2(clientProcess.waitForStarted(3000), + qPrintable("Failed to start subprocess: " + clientProcess.errorString())); + // Wait until the server has started and reports success. while (!clientProcess.canReadLine()) QVERIFY(clientProcess.waitForReadyRead(3000)); diff --git a/tests/auto/qurl/tst_qurl.cpp b/tests/auto/qurl/tst_qurl.cpp index 72c13bf..c8fe4e5 100644 --- a/tests/auto/qurl/tst_qurl.cpp +++ b/tests/auto/qurl/tst_qurl.cpp @@ -3679,15 +3679,21 @@ void tst_QUrl::binaryData() void tst_QUrl::fromUserInput_data() { + // + // most of this test is: + // Copyright (C) Research In Motion Limited 2009. All rights reserved. + // Distributed under the BSD license. + // See qurl.cpp + // + QTest::addColumn<QString>("string"); - QTest::addColumn<QUrl>("url"); + QTest::addColumn<QUrl>("guessUrlFromString"); // Null QTest::newRow("null") << QString() << QUrl(); // File QDirIterator it(QDir::homePath()); - QString fileString; int c = 0; while (it.hasNext()) { it.next(); @@ -3695,49 +3701,52 @@ void tst_QUrl::fromUserInput_data() } // basic latin1 - QTest::newRow("unicode-0") << QString::fromUtf8("\xC3\xA5.com/") << QUrl::fromEncoded(QString::fromUtf8("http://\xC3\xA5.com/").toUtf8(), QUrl::TolerantMode); + QTest::newRow("unicode-0") << QString::fromUtf8("\xc3\xa5.com/") << QUrl::fromEncoded(QString::fromUtf8("http://\xc3\xa5.com/").toUtf8(), QUrl::TolerantMode); + QTest::newRow("unicode-0b") << QString::fromUtf8("\xc3\xa5.com/") << QUrl::fromEncoded("http://%C3%A5.com/", QUrl::TolerantMode); + QTest::newRow("unicode-0c") << QString::fromUtf8("\xc3\xa5.com/") << QUrl::fromEncoded("http://xn--5ca.com/", QUrl::TolerantMode); // unicode - QTest::newRow("unicode-1") << QString::fromUtf8("\xCE\xBB.com/") << QUrl::fromEncoded(QString::fromUtf8("http://\xCE\xBB.com/").toUtf8(), QUrl::TolerantMode); + QTest::newRow("unicode-1") << QString::fromUtf8("\xce\xbb.com/") << QUrl::fromEncoded(QString::fromUtf8("http://\xce\xbb.com/").toUtf8(), QUrl::TolerantMode); + QTest::newRow("unicode-1b") << QString::fromUtf8("\xce\xbb.com/") << QUrl::fromEncoded("http://%CE%BB.com/", QUrl::TolerantMode); + QTest::newRow("unicode-1c") << QString::fromUtf8("\xce\xbb.com/") << QUrl::fromEncoded("http://xn--wxa.com/", QUrl::TolerantMode); // no scheme - QTest::newRow("add scheme-0") << "webkit.org" << QUrl("http://webkit.org"); - QTest::newRow("add scheme-1") << "www.webkit.org" << QUrl("http://www.webkit.org"); - QTest::newRow("add scheme-2") << "ftp.webkit.org" << QUrl("ftp://ftp.webkit.org"); + QTest::newRow("add scheme-0") << "example.org" << QUrl("http://example.org"); + QTest::newRow("add scheme-1") << "www.example.org" << QUrl("http://www.example.org"); + QTest::newRow("add scheme-2") << "ftp.example.org" << QUrl("ftp://ftp.example.org"); QTest::newRow("add scheme-3") << "webkit" << QUrl("webkit"); // QUrl's tolerant parser should already handle this - QTest::newRow("not-encoded-0") << "http://webkit.org/test page.html" << QUrl("http://webkit.org/test%20page.html"); + QTest::newRow("not-encoded-0") << "http://example.org/test page.html" << QUrl::fromEncoded("http://example.org/test%20page.html"); // Make sure the :80, i.e. port doesn't screw anything up - QUrl portUrl("http://webkit.org"); + QUrl portUrl("http://example.org"); portUrl.setPort(80); - QTest::newRow("port-0") << "webkit.org:80" << portUrl; - QTest::newRow("port-1") << "http://webkit.org:80" << portUrl; + QTest::newRow("port-0") << "example.org:80" << portUrl; + QTest::newRow("port-1") << "http://example.org:80" << portUrl; // mailto doesn't have a ://, but is valid - QUrl mailto("somebody@somewhere.net"); + QUrl mailto("ben@example.net"); mailto.setScheme("mailto"); - QTest::newRow("mailto") << "mailto:somebody@somewhere.net" << mailto; + QTest::newRow("mailto") << "mailto:ben@example.net" << mailto; // misc QTest::newRow("localhost-0") << "localhost" << QUrl("http://localhost"); QTest::newRow("localhost-1") << "localhost:80" << QUrl("http://localhost:80"); - QTest::newRow("spaces-0") << " http://webkit.org/test page.html " << QUrl("http://webkit.org/test%20page.html"); - QTest::newRow("trash-0") << "webkit.org/test?someData=42%&someOtherData=abcde#anchor" << QUrl::fromEncoded("http://webkit.org/test?someData=42%25&someOtherData=abcde#anchor"); + QTest::newRow("spaces-0") << " http://example.org/test page.html " << QUrl("http://example.org/test%20page.html"); + QTest::newRow("trash-0") << "example.org/test?someData=42%&someOtherData=abcde#anchor" << QUrl::fromEncoded("http://example.org/test?someData=42%25&someOtherData=abcde#anchor"); // FYI: The scheme in the resulting url user QUrl authUrl("user:pass@domain.com"); QTest::newRow("misc-1") << "user:pass@domain.com" << authUrl; } -// public static QUrl guessUrlFromString(QString const& string) void tst_QUrl::fromUserInput() { QFETCH(QString, string); - QFETCH(QUrl, url); + QFETCH(QUrl, guessUrlFromString); - QUrl guessedUrl = QUrl::fromUserInput(string); - QCOMPARE(guessedUrl, url); + QUrl url = QUrl::fromUserInput(string); + QCOMPARE(url, guessUrlFromString); } void tst_QUrl::task_199967() diff --git a/tests/auto/qvariant/tst_qvariant.cpp b/tests/auto/qvariant/tst_qvariant.cpp index 61e9a4f..e2a606f 100644 --- a/tests/auto/qvariant/tst_qvariant.cpp +++ b/tests/auto/qvariant/tst_qvariant.cpp @@ -3380,6 +3380,10 @@ void tst_QVariant::variantInVariant() QVariant var8 = qvariant_cast<QVariant>(QVariant::fromValue(QVariant::fromValue(str))); QCOMPARE((int)var8.type(), (int)QVariant::String); QCOMPARE(qvariant_cast<QString>(QVariant(qvariant_cast<QVariant>(var8))), str); + + QVariant var9(qMetaTypeId<QVariant>(), &var1); + QCOMPARE(var9.userType(), qMetaTypeId<QVariant>()); + QCOMPARE(qvariant_cast<QVariant>(var9), var1); } QTEST_MAIN(tst_QVariant) diff --git a/tests/auto/qwidget/tst_qwidget.cpp b/tests/auto/qwidget/tst_qwidget.cpp index bc8cece..3d801cc 100644 --- a/tests/auto/qwidget/tst_qwidget.cpp +++ b/tests/auto/qwidget/tst_qwidget.cpp @@ -6320,6 +6320,7 @@ void tst_QWidget::compatibilityChildInsertedEvents() widget.show(); expected = EventRecorder::EventList() + << qMakePair(&widget, QEvent::WinIdChange) << qMakePair(&widget, QEvent::Polish) << qMakePair(&widget, QEvent::Move) << qMakePair(&widget, QEvent::Resize) @@ -6405,6 +6406,7 @@ void tst_QWidget::compatibilityChildInsertedEvents() widget.show(); expected = EventRecorder::EventList() + << qMakePair(&widget, QEvent::WinIdChange) << qMakePair(&widget, QEvent::Polish) #ifdef QT_HAS_QT3SUPPORT << qMakePair(&widget, QEvent::ChildInserted) @@ -6502,6 +6504,7 @@ void tst_QWidget::compatibilityChildInsertedEvents() widget.show(); expected = EventRecorder::EventList() + << qMakePair(&widget, QEvent::WinIdChange) << qMakePair(&widget, QEvent::Polish) #ifdef QT_HAS_QT3SUPPORT << qMakePair(&widget, QEvent::ChildInserted) |