diff options
Diffstat (limited to 'tests/auto')
46 files changed, 6526 insertions, 386 deletions
diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro index b6d2241..134ae1b 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/declarative/declarative.pro @@ -17,6 +17,7 @@ SUBDIRS += \ qmlbinding \ # Cover qmlconnection \ # Cover qmlcontext \ # Cover + qmldebug \ # Cover qmldom \ # Cover qmlecmascript \ # Cover qmlerror \ # Cover @@ -24,6 +25,7 @@ SUBDIRS += \ qmlgraphicsitem \ # Cover qmlgraphicsborderimage \ # Cover qmlgraphicsparticles \ # Cover + qmlgraphicspositioners \ # Cover qmlgraphicstext \ # Cover qmlgraphicstextedit \ # Cover qmlgraphicstextinput \ # Cover diff --git a/tests/auto/declarative/layouts/data/layouts.qml b/tests/auto/declarative/layouts/data/layouts.qml new file mode 100644 index 0000000..ccc8cfe --- /dev/null +++ b/tests/auto/declarative/layouts/data/layouts.qml @@ -0,0 +1,34 @@ +import Qt 4.6 + +Item { + id: resizable + width:300 + height:300 + + GraphicsObjectContainer { + anchors.fill:parent + + QGraphicsWidget { + size.width:parent.width + size.height:parent.height + + layout: QGraphicsLinearLayout { + spacing: 0 + LayoutItem { + objectName: "left" + minimumSize: "100x100" + maximumSize: "300x300" + preferredSize: "100x100" + Rectangle { objectName: "yellowRect"; color: "yellow"; anchors.fill: parent } + } + LayoutItem { + objectName: "right" + minimumSize: "100x100" + maximumSize: "400x400" + preferredSize: "200x200" + Rectangle { objectName: "greenRect"; color: "green"; anchors.fill: parent } + } + } + } + } +} diff --git a/tests/auto/declarative/layouts/tst_layouts.cpp b/tests/auto/declarative/layouts/tst_layouts.cpp index c0c067a..f619b57 100644 --- a/tests/auto/declarative/layouts/tst_layouts.cpp +++ b/tests/auto/declarative/layouts/tst_layouts.cpp @@ -41,7 +41,7 @@ #include <QtTest/QtTest> #include <private/qlistmodelinterface_p.h> #include <qmlview.h> -#include <private/qmlgraphicsrectangle_p.h> +#include <private/qmlgraphicslayoutitem_p.h> #include <qmlexpression.h> class tst_QmlGraphicsLayouts : public QObject @@ -51,17 +51,9 @@ public: tst_QmlGraphicsLayouts(); private slots: - void test_horizontal(); - void test_horizontal_spacing(); - void test_horizontal_animated(); - void test_vertical(); - void test_vertical_spacing(); - void test_vertical_animated(); - void test_grid(); - void test_grid_spacing(); - void test_grid_animated(); + void test_qml();//GraphicsLayout set up in Qml + void test_cpp();//GraphicsLayout set up in C++ - void test_repeater(); private: QmlView *createView(const QString &filename); }; @@ -70,385 +62,61 @@ tst_QmlGraphicsLayouts::tst_QmlGraphicsLayouts() { } -void tst_QmlGraphicsLayouts::test_horizontal() +void tst_QmlGraphicsLayouts::test_qml() { - QmlView *canvas = createView(SRCDIR "/data/horizontal.qml"); + QmlView *canvas = createView(SRCDIR "/data/layouts.qml"); canvas->execute(); qApp->processEvents(); - - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(two->x(), 50.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(three->x(), 70.0); - QCOMPARE(three->y(), 0.0); + QmlGraphicsLayoutItem *left = qobject_cast<QmlGraphicsLayoutItem*>(canvas->root()->findChild<QmlGraphicsItem*>("left")); + QVERIFY(left != 0); + + QmlGraphicsLayoutItem *right = qobject_cast<QmlGraphicsLayoutItem*>(canvas->root()->findChild<QmlGraphicsItem*>("right")); + QVERIFY(right != 0); + + qreal gvMargin = 9.0; + //Preferred Size + canvas->root()->setWidth(300 + 2*gvMargin); + canvas->root()->setHeight(300 + 2*gvMargin); + + QCOMPARE(left->x(), gvMargin); + QCOMPARE(left->y(), gvMargin); + QCOMPARE(left->width(), 100.0); + QCOMPARE(left->height(), 300.0); + + QCOMPARE(right->x(), 100.0 + gvMargin); + QCOMPARE(right->y(), 0.0 + gvMargin); + QCOMPARE(right->width(), 200.0); + QCOMPARE(right->height(), 300.0); + + //Minimum Size + canvas->root()->setWidth(10+2*gvMargin); + canvas->root()->setHeight(10+2*gvMargin); + + QCOMPARE(left->x(), gvMargin); + QCOMPARE(left->width(), 100.0); + QCOMPARE(left->height(), 100.0); + + QCOMPARE(right->x(), 100.0 + gvMargin); + QCOMPARE(right->width(), 100.0); + QCOMPARE(right->height(), 100.0); + + //Maximum Size + canvas->root()->setWidth(1000 + 2*gvMargin); + canvas->root()->setHeight(1000 + 2*gvMargin); + + QCOMPARE(left->x(), gvMargin); + QCOMPARE(left->width(), 300.0); + QCOMPARE(left->height(), 300.0); + + QCOMPARE(right->x(), 300.0 + gvMargin); + QCOMPARE(right->width(), 400.0); + QCOMPARE(right->height(), 400.0); } -void tst_QmlGraphicsLayouts::test_horizontal_spacing() +void tst_QmlGraphicsLayouts::test_cpp() { - QmlView *canvas = createView(SRCDIR "/data/horizontal-spacing.qml"); - - canvas->execute(); - qApp->processEvents(); - - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(two->x(), 60.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(three->x(), 90.0); - QCOMPARE(three->y(), 0.0); -} - -void tst_QmlGraphicsLayouts::test_horizontal_animated() -{ - QmlView *canvas = createView(SRCDIR "/data/horizontal-animated.qml"); - - canvas->execute(); - qApp->processEvents(); - - QTest::qWait(0);//Let the animation start - //Note that one and three animate in - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - QCOMPARE(one->x(), -100.0); - - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - QCOMPARE(two->x(), 0.0); - - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - QCOMPARE(three->x(), -100.0); - - QTest::qWait(300);//Let the animation complete - - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(two->opacity(), 0.0); - QCOMPARE(two->x(), 0.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(three->x(), 50.0); - QCOMPARE(three->y(), 0.0); - - //Add 'two' - two->setOpacity(1.0); - QCOMPARE(two->opacity(), 1.0); - QTest::qWait(0);//Let the animation start - QCOMPARE(two->x(), -100.0); - QCOMPARE(three->x(), 50.0); - QTest::qWait(300);//Let the animation complete - QCOMPARE(two->x(), 50.0); - QCOMPARE(three->x(), 100.0); - - //Remove 'two' - two->setOpacity(0.0); - QCOMPARE(two->opacity(), 0.0); - QCOMPARE(two->x(), 50.0); - QCOMPARE(three->x(), 100.0); - QTest::qWait(300);//Let the animation complete - QCOMPARE(two->x(), 50.0); - QCOMPARE(three->x(), 50.0); -} - -void tst_QmlGraphicsLayouts::test_vertical() -{ - QmlView *canvas = createView(SRCDIR "/data/vertical.qml"); - - canvas->execute(); - qApp->processEvents(); - - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(two->x(), 0.0); - QCOMPARE(two->y(), 50.0); - QCOMPARE(three->x(), 0.0); - QCOMPARE(three->y(), 60.0); -} - -void tst_QmlGraphicsLayouts::test_vertical_spacing() -{ - QmlView *canvas = createView(SRCDIR "/data/vertical-spacing.qml"); - - canvas->execute(); - qApp->processEvents(); - - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(two->x(), 0.0); - QCOMPARE(two->y(), 60.0); - QCOMPARE(three->x(), 0.0); - QCOMPARE(three->y(), 80.0); -} - -void tst_QmlGraphicsLayouts::test_vertical_animated() -{ - QmlView *canvas = createView(SRCDIR "/data/vertical-animated.qml"); - - canvas->execute(); - qApp->processEvents(); - - QTest::qWait(0);//Let the animation start - //Note that one and three animate in - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - QCOMPARE(one->y(), -100.0); - - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - QCOMPARE(two->y(), 0.0); - - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - QCOMPARE(three->y(), -100.0); - - QTest::qWait(300);//Let the animation complete - - QCOMPARE(one->y(), 0.0); - QCOMPARE(one->x(), 0.0); - QCOMPARE(two->opacity(), 0.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(two->x(), 0.0); - QCOMPARE(three->y(), 50.0); - QCOMPARE(three->x(), 0.0); - - //Add 'two' - two->setOpacity(1.0); - QCOMPARE(two->opacity(), 1.0); - QTest::qWait(0);//Let the animation start - QCOMPARE(two->y(), -100.0); - QCOMPARE(three->y(), 50.0); - QTest::qWait(300);//Let the animation complete - QCOMPARE(two->y(), 50.0); - QCOMPARE(three->y(), 100.0); - - //Remove 'two' - two->setOpacity(0.0); - QCOMPARE(two->opacity(), 0.0); - QCOMPARE(two->y(), 50.0); - QCOMPARE(three->y(), 100.0); - QTest::qWait(300);//Let the animation complete - QCOMPARE(two->y(), 50.0); - QCOMPARE(three->y(), 50.0); -} - -void tst_QmlGraphicsLayouts::test_grid() -{ - QmlView *canvas = createView("data/grid.qml"); - - canvas->execute(); - qApp->processEvents(); - - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - QmlGraphicsRectangle *four = canvas->root()->findChild<QmlGraphicsRectangle*>("four"); - QVERIFY(four != 0); - QmlGraphicsRectangle *five = canvas->root()->findChild<QmlGraphicsRectangle*>("five"); - QVERIFY(five != 0); - - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(two->x(), 50.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(three->x(), 70.0); - QCOMPARE(three->y(), 0.0); - QCOMPARE(four->x(), 0.0); - QCOMPARE(four->y(), 50.0); - QCOMPARE(five->x(), 50.0); - QCOMPARE(five->y(), 50.0); -} - -void tst_QmlGraphicsLayouts::test_grid_spacing() -{ - QmlView *canvas = createView("data/grid-spacing.qml"); - - canvas->execute(); - qApp->processEvents(); - - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - QmlGraphicsRectangle *four = canvas->root()->findChild<QmlGraphicsRectangle*>("four"); - QVERIFY(four != 0); - QmlGraphicsRectangle *five = canvas->root()->findChild<QmlGraphicsRectangle*>("five"); - QVERIFY(five != 0); - - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(two->x(), 54.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(three->x(), 78.0); - QCOMPARE(three->y(), 0.0); - QCOMPARE(four->x(), 0.0); - QCOMPARE(four->y(), 54.0); - QCOMPARE(five->x(), 54.0); - QCOMPARE(five->y(), 54.0); -} - -void tst_QmlGraphicsLayouts::test_grid_animated() -{ - QmlView *canvas = createView(SRCDIR "/data/grid-animated.qml"); - canvas->execute(); - qApp->processEvents(); - - QTest::qWait(0);//Let the animation start - //Note that all but two animate in - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - QCOMPARE(one->x(), -100.0); - QCOMPARE(one->y(), -100.0); - - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - QCOMPARE(two->x(), 0.0); - QCOMPARE(two->y(), 0.0); - - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - QCOMPARE(three->x(), -100.0); - QCOMPARE(three->y(), -100.0); - - QmlGraphicsRectangle *four = canvas->root()->findChild<QmlGraphicsRectangle*>("four"); - QVERIFY(four != 0); - QCOMPARE(four->x(), -100.0); - QCOMPARE(four->y(), -100.0); - - QmlGraphicsRectangle *five = canvas->root()->findChild<QmlGraphicsRectangle*>("five"); - QVERIFY(five != 0); - QCOMPARE(five->x(), -100.0); - QCOMPARE(five->y(), -100.0); - - QTest::qWait(300);//Let the animation complete - - QCOMPARE(one->y(), 0.0); - QCOMPARE(one->x(), 0.0); - QCOMPARE(two->opacity(), 0.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(two->x(), 0.0); - QCOMPARE(three->y(), 0.0); - QCOMPARE(three->x(), 50.0); - QCOMPARE(four->y(), 0.0); - QCOMPARE(four->x(), 100.0); - QCOMPARE(five->y(), 50.0); - QCOMPARE(five->x(), 0.0); - - //Add 'two' - two->setOpacity(1.0); - QCOMPARE(two->opacity(), 1.0); - QTest::qWait(0);//Let the animation start - QCOMPARE(two->x(), -100.0); - QCOMPARE(two->y(), -100.0); - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(three->x(), 50.0); - QCOMPARE(three->y(), 0.0); - QCOMPARE(four->x(), 100.0); - QCOMPARE(four->y(), 0.0); - QCOMPARE(five->x(), 0.0); - QCOMPARE(five->y(), 50.0); - QTest::qWait(300);//Let the animation complete - QCOMPARE(two->x(), 50.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(three->x(), 100.0); - QCOMPARE(three->y(), 0.0); - QCOMPARE(four->x(), 0.0); - QCOMPARE(four->y(), 50.0); - QCOMPARE(five->x(), 50.0); - QCOMPARE(five->y(), 50.0); - - //Remove 'two' - two->setOpacity(0.0); - QCOMPARE(two->opacity(), 0.0); - QCOMPARE(two->x(), 50.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(three->x(), 100.0); - QCOMPARE(three->y(), 0.0); - QCOMPARE(four->x(), 0.0); - QCOMPARE(four->y(), 50.0); - QCOMPARE(five->x(), 50.0); - QCOMPARE(five->y(), 50.0); - QTest::qWait(300);//Let the animation complete - QCOMPARE(two->x(), 50.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(three->x(), 50.0); - QCOMPARE(three->y(), 0.0); - QCOMPARE(four->x(), 100.0); - QCOMPARE(four->y(), 0.0); - QCOMPARE(five->x(), 0.0); - QCOMPARE(five->y(), 50.0); -} - -void tst_QmlGraphicsLayouts::test_repeater() -{ - QmlView *canvas = createView("data/repeater.qml"); - - canvas->execute(); - qApp->processEvents(); - - QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); - QVERIFY(one != 0); - - QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); - QVERIFY(two != 0); - - QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); - QVERIFY(three != 0); - - QCOMPARE(one->x(), 0.0); - QCOMPARE(one->y(), 0.0); - QCOMPARE(two->x(), 50.0); - QCOMPARE(two->y(), 0.0); - QCOMPARE(three->x(), 100.0); - QCOMPARE(three->y(), 0.0); + //TODO: Waiting on QT-2407 to write this test } QmlView *tst_QmlGraphicsLayouts::createView(const QString &filename) diff --git a/tests/auto/declarative/qmldebug/qmldebug.pro b/tests/auto/declarative/qmldebug/qmldebug.pro new file mode 100644 index 0000000..61f821e --- /dev/null +++ b/tests/auto/declarative/qmldebug/qmldebug.pro @@ -0,0 +1,5 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += network declarative +macx:CONFIG -= app_bundle + +SOURCES += tst_qmldebug.cpp diff --git a/tests/auto/declarative/qmldebug/tst_qmldebug.cpp b/tests/auto/declarative/qmldebug/tst_qmldebug.cpp new file mode 100644 index 0000000..a7573da --- /dev/null +++ b/tests/auto/declarative/qmldebug/tst_qmldebug.cpp @@ -0,0 +1,594 @@ +/**************************************************************************** +** +** 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 <QSignalSpy> +#include <QTimer> +#include <QHostAddress> +#include <QDebug> +#include <QThread> +#include <QProcessEnvironment> +#include <QProcess> + +#include <QtDeclarative/qmlengine.h> +#include <QtDeclarative/qmlcontext.h> +#include <QtDeclarative/qmlcomponent.h> +#include <QtDeclarative/qmlexpression.h> + +#include <private/qmldebug_p.h> +#include <private/qmldebugclient_p.h> +#include <private/qmldebugservice_p.h> +#include <private/qmlgraphicsrectangle_p.h> +#include <private/qmlgraphicstext_p.h> + + +class tst_QmlDebug : public QObject +{ + Q_OBJECT + +public: + tst_QmlDebug(QmlDebugConnection *conn, QmlEngine *engine, QmlGraphicsItem *rootItem) + : m_conn(conn), m_dbg(0), m_engine(engine), m_rootItem(rootItem) {} + +protected slots: + void saveValueChange(const QByteArray &ba, const QVariant &v) + { + m_savedValueChanges[ba] = v; + } + +private: + QmlDebugConnection *m_conn; + QmlEngineDebug *m_dbg; + QmlEngine *m_engine; + QmlGraphicsItem *m_rootItem; + + QHash<QByteArray, QVariant> m_savedValueChanges; + + void waitForQuery(QmlDebugQuery *query) + { + QCOMPARE(query->parent(), this); + QEventLoop loop; + QTimer timer; + QVERIFY(query->state() == QmlDebugQuery::Waiting); + connect(query, SIGNAL(stateChanged(State)), &loop, SLOT(quit())); + connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); + timer.start(5000); + loop.exec(); + if (!timer.isActive()) + QFAIL("query timed out"); + } + + void verifyRootObject(const QmlDebugObjectReference &obj) + { + // verifies object according to component definition in main() + + QCOMPARE(obj.debugId(), QmlDebugService::idForObject(m_rootItem)); + QCOMPARE(obj.className(), QLatin1String("Item")); + QCOMPARE(obj.name(), m_rootItem->objectName()); + QCOMPARE(obj.contextDebugId(), QmlDebugService::idForObject(qmlContext(m_rootItem))); + + QmlDebugFileReference source = obj.source(); + QCOMPARE(source.url(), QUrl("file://")); + QCOMPARE(source.lineNumber(), 3); + QCOMPARE(source.columnNumber(), 3); + + QList<QmlDebugPropertyReference> props = obj.properties(); + QHash<QString, QVariant> expected; + + expected["width"] = 10; + expected["height"] = 20; + verifyProperties(props, expected); + } + + void verifyProperties(const QList<QmlDebugPropertyReference> &actual, const QHash<QString, QVariant> &expected) + { + foreach(const QmlDebugPropertyReference &p, actual) { + if (expected.contains(p.name())) + QCOMPARE(p.value(), expected[p.name()]); + } + } + + QmlDebugObjectReference findRootObject() + { + QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this); + waitForQuery(q_engines); + + if (q_engines->engines().count() == 0) + return QmlDebugObjectReference(); + QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this); + waitForQuery(q_context); + + if (q_context->rootContext().objects().count() == 0) + return QmlDebugObjectReference(); + QmlDebugObjectQuery *q_obj = m_dbg->queryObject(q_context->rootContext().objects()[0], this); + waitForQuery(q_obj); + + QmlDebugObjectReference result = q_obj->object(); + + delete q_engines; + delete q_context; + delete q_obj; + + return result; + } + + QmlDebugPropertyReference findProperty(const QList<QmlDebugPropertyReference> &props, const QString &name) + { + foreach(const QmlDebugPropertyReference &p, props) { + if (p.name() == name) + return p; + } + return QmlDebugPropertyReference(); + } + + int countNotifiableProperties(const QObject *obj) + { + int count = 0; + for (int i=0; i<obj->metaObject()->propertyCount(); i++) { + QMetaProperty p = obj->metaObject()->property(i); + if (p.hasNotifySignal()) + count++; + } + return count; + } + +private slots: + void initTestCase(); + + void watch_property(); + void watch_object(); + void watch_expression(); + void watch_expression_data(); + + void queryAvailableEngines(); + void queryRootContexts(); + void queryObject(); + void queryObjectRecursive(); + void queryExpressionResult(); + void queryExpressionResult_data(); +}; + +void tst_QmlDebug::initTestCase() +{ + m_dbg = new QmlEngineDebug(m_conn, this); +} + +void tst_QmlDebug::watch_property() +{ + QmlDebugObjectReference obj = findRootObject(); + QmlDebugPropertyReference prop = findProperty(obj.properties(), "width"); + + QmlDebugPropertyWatch *watch = m_dbg->addWatch(prop, this); + QCOMPARE(watch->state(), QmlDebugWatch::Waiting); + QCOMPARE(watch->objectDebugId(), obj.debugId()); + QCOMPARE(watch->name(), prop.name()); + + QSignalSpy spy(watch, SIGNAL(valueChanged(QByteArray,QVariant))); + QEventLoop loop; + QTimer timer; + connect(watch, SIGNAL(valueChanged(QByteArray,QVariant)), &loop, SLOT(quit())); + connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); + + int origWidth = m_rootItem->property("width").toInt(); + timer.start(5000); + m_rootItem->setProperty("width", origWidth*2); + loop.exec(); + + if (!timer.isActive()) + QFAIL("Did not receive valueChanged() for property"); + + m_dbg->removeWatch(watch); + delete watch; + + // restore original value and verify spy doesn't get a signal since watch has been removed + m_rootItem->setProperty("width", origWidth); + QTest::qWait(500); + QCOMPARE(spy.count(), 1); + + QCOMPARE(spy.at(0).at(0).value<QByteArray>(), prop.name().toUtf8()); + QCOMPARE(spy.at(0).at(1).value<QVariant>(), qVariantFromValue(origWidth*2)); +} + +void tst_QmlDebug::watch_object() +{ + QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this); + waitForQuery(q_engines); + + QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this); + waitForQuery(q_context); + + QmlDebugObjectQuery *q_obj = m_dbg->queryObject(q_context->rootContext().objects()[0], this); + waitForQuery(q_obj); + + QmlDebugObjectReference obj = q_obj->object(); + + delete q_engines; + delete q_context; + delete q_obj; + + QmlDebugWatch *watch = m_dbg->addWatch(obj, this); + QCOMPARE(watch->state(), QmlDebugWatch::Waiting); + QCOMPARE(watch->objectDebugId(), obj.debugId()); + + m_savedValueChanges.clear(); + connect(watch, SIGNAL(valueChanged(QByteArray,QVariant)), + SLOT(saveValueChange(QByteArray,QVariant))); + + int origWidth = m_rootItem->property("width").toInt(); + int origHeight = m_rootItem->property("height").toInt(); + m_rootItem->setProperty("width", origWidth*2); + m_rootItem->setProperty("height", origHeight*2); + + QEventLoop loop; + QTimer timer; + timer.start(5000); + while (timer.isActive() && + (!m_savedValueChanges.contains("width") || !m_savedValueChanges.contains("height"))) { + loop.processEvents(QEventLoop::AllEvents, 50); + } + + QVariant newWidth = m_savedValueChanges["width"]; + QVariant newHeight = m_savedValueChanges["height"]; + + m_dbg->removeWatch(watch); + delete watch; + + // since watch has been removed, restoring the original values should not trigger a valueChanged() + m_savedValueChanges.clear(); + m_rootItem->setProperty("width", origWidth); + m_rootItem->setProperty("height", origHeight); + QTest::qWait(500); + QCOMPARE(m_savedValueChanges.count(), 0); + + if (newWidth.isNull() || newHeight.isNull()) { + QString s = QString("Did not receive both width and height changes (width=%1, height=%2)") + .arg(newWidth.toString()).arg(newHeight.toString()); + QFAIL(qPrintable(s)); + } + + QCOMPARE(newWidth, qVariantFromValue(origWidth*2)); + QCOMPARE(newHeight, qVariantFromValue(origHeight*2)); +} + +void tst_QmlDebug::watch_expression() +{ + QFETCH(QString, expr); + QFETCH(int, increment); + QFETCH(int, incrementCount); + + int origWidth = m_rootItem->property("width").toInt(); + + QmlDebugObjectReference obj = findRootObject(); + QmlDebugPropertyReference prop; + + QmlDebugObjectExpressionWatch *watch = m_dbg->addWatch(obj, expr, this); + QCOMPARE(watch->state(), QmlDebugWatch::Waiting); + QCOMPARE(watch->objectDebugId(), obj.debugId()); + QCOMPARE(watch->expression(), expr); + + QSignalSpy spy(watch, SIGNAL(valueChanged(QByteArray,QVariant))); + int expectedSpyCount = incrementCount + 1; // should also get signal with expression's initial value + + int width = origWidth; + for (int i=0; i<incrementCount+1; i++) { + QTimer timer; + timer.start(5000); + if (i > 0) { + width += increment; + m_rootItem->setProperty("width", width); + } + QEventLoop loop; + connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); + connect(watch, SIGNAL(valueChanged(QByteArray,QVariant)), &loop, SLOT(quit())); + loop.exec(); + if (!timer.isActive()) + QFAIL("Did not receive valueChanged() signal for expression"); + } + + m_dbg->removeWatch(watch); + delete watch; + + // restore original value and verify spy doesn't get a signal since watch has been removed + m_rootItem->setProperty("width", origWidth); // may increase spy count before QCOMPARE() + QTest::qWait(500); + QCOMPARE(spy.count(), expectedSpyCount); + + width = origWidth + increment; + for (int i=0; i<spy.count(); i++) { + QCOMPARE(spy.at(i).at(1).value<QVariant>().toInt(), width); + width += increment; + } +} + +void tst_QmlDebug::watch_expression_data() +{ + QTest::addColumn<QString>("expr"); + QTest::addColumn<int>("increment"); + QTest::addColumn<int>("incrementCount"); + + QTest::newRow("width") << "width" << 0 << 0; + QTest::newRow("width+10") << "width + 10" << 10 << 5; +} + +void tst_QmlDebug::queryAvailableEngines() +{ + QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this); + waitForQuery(q_engines); + + // TODO have multiple engines + QList<QmlDebugEngineReference> engines = q_engines->engines(); + QCOMPARE(engines.count(), 1); + + foreach(const QmlDebugEngineReference &e, engines) { + QCOMPARE(e.debugId(), QmlDebugService::idForObject(m_engine)); + QCOMPARE(e.name(), m_engine->objectName()); + } + + delete q_engines; +} + +void tst_QmlDebug::queryRootContexts() +{ + QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this); + waitForQuery(q_engines); + + QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this); + waitForQuery(q_context); + + QmlContext *actualContext = m_engine->rootContext(); + QmlDebugContextReference context = q_context->rootContext(); + QCOMPARE(context.debugId(), QmlDebugService::idForObject(actualContext)); + QCOMPARE(context.name(), actualContext->objectName()); + + QCOMPARE(context.objects().count(), 1); + + // root context query sends only root object data - it doesn't fill in + // the children or property info + QCOMPARE(context.objects()[0].properties().count(), 0); + QCOMPARE(context.objects()[0].children().count(), 0); + + // TODO have multiple contexts + QCOMPARE(context.contexts().count(), 0); + + delete q_engines; + delete q_context; +} + +void tst_QmlDebug::queryObject() +{ + QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this); + waitForQuery(q_engines); + + QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this); + waitForQuery(q_context); + + QmlDebugObjectQuery *q_obj = m_dbg->queryObject(q_context->rootContext().objects()[0], this); + waitForQuery(q_obj); + + QmlDebugObjectReference obj = q_obj->object(); + verifyRootObject(obj); + + QVERIFY(obj.children().count() >= 2); + + // non-recursive query, children data not available + foreach(const QmlDebugObjectReference &child, obj.children()) + QCOMPARE(child.properties().count(), 0); + + delete q_engines; + delete q_context; + delete q_obj; +} + +void tst_QmlDebug::queryObjectRecursive() +{ + QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this); + waitForQuery(q_engines); + + QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this); + waitForQuery(q_context); + + QmlDebugObjectQuery *q_obj = m_dbg->queryObjectRecursive(q_context->rootContext().objects()[0], this); + waitForQuery(q_obj); + + QmlDebugObjectReference obj = q_obj->object(); + verifyRootObject(obj); + + delete q_engines; + delete q_context; + delete q_obj; + + QList<QmlDebugObjectReference> children = obj.children(); + QVERIFY(children.count() >= 2); // there may be additional properties e.g. StateGroup + + QList<QmlDebugPropertyReference> props; + QHash<QString, QVariant> expected; + + QmlDebugObjectReference rectRef; + QmlDebugObjectReference textRef; + foreach (const QmlDebugObjectReference &child, children) { + if (child.className() == "Rectangle") { + props = child.properties(); + QVERIFY(props.count() > 0); + expected.clear(); + expected["width"] = 500; + expected["height"] = 600; + expected["color"] = "blue"; + verifyProperties(props, expected); + rectRef = child; + } else if (child.className() == "Text") { + props = child.properties(); + QVERIFY(props.count() > 0); + expected.clear(); + expected["color"] = "red"; + verifyProperties(props, expected); + textRef = child; + } + } + + QVERIFY(!rectRef.className().isEmpty()); + QVERIFY(!textRef.className().isEmpty()); + + QObject *rectObj = 0; + QObject *textObj = 0; + foreach (QObject *o, m_rootItem->children()) { + if (o->metaObject()->className() == QmlGraphicsRectangle::staticMetaObject.className()) + rectObj = o; + else if (o->metaObject()->className() == QmlGraphicsText::staticMetaObject.className()) + textObj = o; + } + + QVERIFY(rectObj); + QVERIFY(textObj); + + for (int i=0; i<rectObj->metaObject()->propertyCount(); i++) { + QMetaProperty p = rectObj->metaObject()->property(i); + QmlDebugPropertyReference pd = findProperty(rectRef.properties(), p.name()); + if (!pd.name().isEmpty()) { + QCOMPARE(pd.name(), QString::fromUtf8(p.name())); + if (p.type() < QVariant::UserType) + QCOMPARE(pd.value(), p.read(rectObj)); + if (pd.name() != "parent") + QCOMPARE(pd.valueTypeName(), QString::fromUtf8(p.typeName())); + QCOMPARE(pd.hasNotifySignal(), p.hasNotifySignal()); + } + } +} + +void tst_QmlDebug::queryExpressionResult() +{ + QFETCH(QString, expr); + QFETCH(QVariant, result); + + QmlDebugEnginesQuery *q_engines = m_dbg->queryAvailableEngines(this); + waitForQuery(q_engines); + + QmlDebugRootContextQuery *q_context = m_dbg->queryRootContexts(q_engines->engines()[0].debugId(), this); + waitForQuery(q_context); + + QmlDebugExpressionQuery *q_expr = m_dbg->queryExpressionResult(q_context->rootContext().objects()[0].debugId(), expr, this); + QCOMPARE(q_expr->expression(), expr); + waitForQuery(q_expr); + + QCOMPARE(q_expr->result(), result); + + delete q_engines; + delete q_context; + delete q_expr; +} + +void tst_QmlDebug::queryExpressionResult_data() +{ + QTest::addColumn<QString>("expr"); + QTest::addColumn<QVariant>("result"); + + QTest::newRow("width + 50") << "width + 50" << qVariantFromValue(60); + QTest::newRow("blueRect.width") << "blueRect.width" << qVariantFromValue(500); + QTest::newRow("bad expr") << "aeaef" << qVariantFromValue(QString("<undefined>")); +} + + +class TestRunnerThread : public QThread +{ + Q_OBJECT +public: + void run() { + QTest::qWait(1000); + connectToEngine(); + } + + QPointer<QmlEngine> m_engine; + QPointer<QmlGraphicsItem> m_item; + +signals: + void testsFinished(); + +public slots: + + void connectToEngine() + { + QmlDebugConnection conn; + conn.connectToHost("127.0.0.1", 3768); + bool ok = conn.waitForConnected(5000); + Q_ASSERT(ok); + while (!m_engine && !m_item) + QTest::qWait(50); + + tst_QmlDebug test(&conn, m_engine, m_item); + QTest::qExec(&test); + emit testsFinished(); + } +}; + + +int main(int argc, char *argv[]) +{ + QApplication app(argc, argv); + qputenv("QML_DEBUG_SERVER_PORT", "3768"); + + TestRunnerThread thread; + QObject::connect(&thread, SIGNAL(testsFinished()), qApp, SLOT(quit())); + thread.start(); + + QmlEngine engine; // blocks until client connects + + QmlComponent component(&engine, + "import Qt 4.6\n" + "\n" // don't remove, line number is tested + " Item {\n" // don't remove spaces, column number is tested + "width: 10; height: 20;\n" + "Rectangle { id: blueRect; width: 500; height: 600; color: \"blue\"; }" + "Text { color: \"red\"; }" + "}\n", + QUrl("file://")); + Q_ASSERT(component.isReady()); + QObject *o = component.create(); + QObject::connect(&thread, SIGNAL(testsFinished()), o, SLOT(deleteLater())); + + // start the test + thread.m_engine = &engine; + thread.m_item = qobject_cast<QmlGraphicsItem*>(o); + + return app.exec(); + +} + +//QTEST_MAIN(tst_QmlDebug) + +#include "tst_qmldebug.moc" diff --git a/tests/auto/declarative/layouts/data/grid-animated.qml b/tests/auto/declarative/qmlgraphicspositioners/data/grid-animated.qml index 6b128ce..6b128ce 100644 --- a/tests/auto/declarative/layouts/data/grid-animated.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/grid-animated.qml diff --git a/tests/auto/declarative/layouts/data/grid-spacing.qml b/tests/auto/declarative/qmlgraphicspositioners/data/grid-spacing.qml index 5b4a30d..5b4a30d 100644 --- a/tests/auto/declarative/layouts/data/grid-spacing.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/grid-spacing.qml diff --git a/tests/auto/declarative/layouts/data/grid.qml b/tests/auto/declarative/qmlgraphicspositioners/data/grid.qml index 830df6a..830df6a 100644 --- a/tests/auto/declarative/layouts/data/grid.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/grid.qml diff --git a/tests/auto/declarative/layouts/data/horizontal-animated.qml b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-animated.qml index c29d6df..c29d6df 100644 --- a/tests/auto/declarative/layouts/data/horizontal-animated.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-animated.qml diff --git a/tests/auto/declarative/layouts/data/horizontal-spacing.qml b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-spacing.qml index 32bf775..32bf775 100644 --- a/tests/auto/declarative/layouts/data/horizontal-spacing.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal-spacing.qml diff --git a/tests/auto/declarative/layouts/data/horizontal.qml b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal.qml index 06ae151..06ae151 100644 --- a/tests/auto/declarative/layouts/data/horizontal.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/horizontal.qml diff --git a/tests/auto/declarative/layouts/data/repeater.qml b/tests/auto/declarative/qmlgraphicspositioners/data/repeater.qml index 2bc5e94..2bc5e94 100644 --- a/tests/auto/declarative/layouts/data/repeater.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/repeater.qml diff --git a/tests/auto/declarative/layouts/data/vertical-animated.qml b/tests/auto/declarative/qmlgraphicspositioners/data/vertical-animated.qml index fcbc5f7..fcbc5f7 100644 --- a/tests/auto/declarative/layouts/data/vertical-animated.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/vertical-animated.qml diff --git a/tests/auto/declarative/layouts/data/vertical-spacing.qml b/tests/auto/declarative/qmlgraphicspositioners/data/vertical-spacing.qml index 69a8256..69a8256 100644 --- a/tests/auto/declarative/layouts/data/vertical-spacing.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/vertical-spacing.qml diff --git a/tests/auto/declarative/layouts/data/vertical.qml b/tests/auto/declarative/qmlgraphicspositioners/data/vertical.qml index 856c180..856c180 100644 --- a/tests/auto/declarative/layouts/data/vertical.qml +++ b/tests/auto/declarative/qmlgraphicspositioners/data/vertical.qml diff --git a/tests/auto/declarative/qmlgraphicspositioners/qmlgraphicspositioners.pro b/tests/auto/declarative/qmlgraphicspositioners/qmlgraphicspositioners.pro new file mode 100644 index 0000000..d151026 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicspositioners/qmlgraphicspositioners.pro @@ -0,0 +1,7 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative +SOURCES += tst_qmlgraphicspositioners.cpp +macx:CONFIG -= app_bundle + +# Define SRCDIR equal to test's source directory +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qmlgraphicspositioners/tst_qmlgraphicspositioners.cpp b/tests/auto/declarative/qmlgraphicspositioners/tst_qmlgraphicspositioners.cpp new file mode 100644 index 0000000..aca3579 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicspositioners/tst_qmlgraphicspositioners.cpp @@ -0,0 +1,469 @@ +/**************************************************************************** +** +** 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 <private/qlistmodelinterface_p.h> +#include <qmlview.h> +#include <private/qmlgraphicsrectangle_p.h> +#include <qmlexpression.h> + +class tst_QmlGraphicsPositioners : public QObject +{ + Q_OBJECT +public: + tst_QmlGraphicsPositioners(); + +private slots: + void test_horizontal(); + void test_horizontal_spacing(); + void test_horizontal_animated(); + void test_vertical(); + void test_vertical_spacing(); + void test_vertical_animated(); + void test_grid(); + void test_grid_spacing(); + void test_grid_animated(); + + void test_repeater(); +private: + QmlView *createView(const QString &filename); +}; + +tst_QmlGraphicsPositioners::tst_QmlGraphicsPositioners() +{ +} + +void tst_QmlGraphicsPositioners::test_horizontal() +{ + QmlView *canvas = createView(SRCDIR "/data/horizontal.qml"); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(two->x(), 50.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(three->x(), 70.0); + QCOMPARE(three->y(), 0.0); +} + +void tst_QmlGraphicsPositioners::test_horizontal_spacing() +{ + QmlView *canvas = createView(SRCDIR "/data/horizontal-spacing.qml"); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(two->x(), 60.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(three->x(), 90.0); + QCOMPARE(three->y(), 0.0); +} + +void tst_QmlGraphicsPositioners::test_horizontal_animated() +{ + QmlView *canvas = createView(SRCDIR "/data/horizontal-animated.qml"); + + canvas->execute(); + qApp->processEvents(); + + QTest::qWait(0);//Let the animation start + //Note that one and three animate in + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + QCOMPARE(one->x(), -100.0); + + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + QCOMPARE(two->x(), 0.0); + + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + QCOMPARE(three->x(), -100.0); + + QTest::qWait(300);//Let the animation complete + + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(two->opacity(), 0.0); + QCOMPARE(two->x(), 0.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(three->x(), 50.0); + QCOMPARE(three->y(), 0.0); + + //Add 'two' + two->setOpacity(1.0); + QCOMPARE(two->opacity(), 1.0); + QTest::qWait(0);//Let the animation start + QCOMPARE(two->x(), -100.0); + QCOMPARE(three->x(), 50.0); + QTest::qWait(300);//Let the animation complete + QCOMPARE(two->x(), 50.0); + QCOMPARE(three->x(), 100.0); + + //Remove 'two' + two->setOpacity(0.0); + QCOMPARE(two->opacity(), 0.0); + QCOMPARE(two->x(), 50.0); + QCOMPARE(three->x(), 100.0); + QTest::qWait(300);//Let the animation complete + QCOMPARE(two->x(), 50.0); + QCOMPARE(three->x(), 50.0); +} + +void tst_QmlGraphicsPositioners::test_vertical() +{ + QmlView *canvas = createView(SRCDIR "/data/vertical.qml"); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(two->x(), 0.0); + QCOMPARE(two->y(), 50.0); + QCOMPARE(three->x(), 0.0); + QCOMPARE(three->y(), 60.0); +} + +void tst_QmlGraphicsPositioners::test_vertical_spacing() +{ + QmlView *canvas = createView(SRCDIR "/data/vertical-spacing.qml"); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(two->x(), 0.0); + QCOMPARE(two->y(), 60.0); + QCOMPARE(three->x(), 0.0); + QCOMPARE(three->y(), 80.0); +} + +void tst_QmlGraphicsPositioners::test_vertical_animated() +{ + QmlView *canvas = createView(SRCDIR "/data/vertical-animated.qml"); + + canvas->execute(); + qApp->processEvents(); + + QTest::qWait(0);//Let the animation start + //Note that one and three animate in + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + QCOMPARE(one->y(), -100.0); + + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + QCOMPARE(two->y(), 0.0); + + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + QCOMPARE(three->y(), -100.0); + + QTest::qWait(300);//Let the animation complete + + QCOMPARE(one->y(), 0.0); + QCOMPARE(one->x(), 0.0); + QCOMPARE(two->opacity(), 0.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(two->x(), 0.0); + QCOMPARE(three->y(), 50.0); + QCOMPARE(three->x(), 0.0); + + //Add 'two' + two->setOpacity(1.0); + QCOMPARE(two->opacity(), 1.0); + QTest::qWait(0);//Let the animation start + QCOMPARE(two->y(), -100.0); + QCOMPARE(three->y(), 50.0); + QTest::qWait(300);//Let the animation complete + QCOMPARE(two->y(), 50.0); + QCOMPARE(three->y(), 100.0); + + //Remove 'two' + two->setOpacity(0.0); + QCOMPARE(two->opacity(), 0.0); + QCOMPARE(two->y(), 50.0); + QCOMPARE(three->y(), 100.0); + QTest::qWait(300);//Let the animation complete + QCOMPARE(two->y(), 50.0); + QCOMPARE(three->y(), 50.0); +} + +void tst_QmlGraphicsPositioners::test_grid() +{ + QmlView *canvas = createView("data/grid.qml"); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + QmlGraphicsRectangle *four = canvas->root()->findChild<QmlGraphicsRectangle*>("four"); + QVERIFY(four != 0); + QmlGraphicsRectangle *five = canvas->root()->findChild<QmlGraphicsRectangle*>("five"); + QVERIFY(five != 0); + + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(two->x(), 50.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(three->x(), 70.0); + QCOMPARE(three->y(), 0.0); + QCOMPARE(four->x(), 0.0); + QCOMPARE(four->y(), 50.0); + QCOMPARE(five->x(), 50.0); + QCOMPARE(five->y(), 50.0); +} + +void tst_QmlGraphicsPositioners::test_grid_spacing() +{ + QmlView *canvas = createView("data/grid-spacing.qml"); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + QmlGraphicsRectangle *four = canvas->root()->findChild<QmlGraphicsRectangle*>("four"); + QVERIFY(four != 0); + QmlGraphicsRectangle *five = canvas->root()->findChild<QmlGraphicsRectangle*>("five"); + QVERIFY(five != 0); + + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(two->x(), 54.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(three->x(), 78.0); + QCOMPARE(three->y(), 0.0); + QCOMPARE(four->x(), 0.0); + QCOMPARE(four->y(), 54.0); + QCOMPARE(five->x(), 54.0); + QCOMPARE(five->y(), 54.0); +} + +void tst_QmlGraphicsPositioners::test_grid_animated() +{ + QmlView *canvas = createView(SRCDIR "/data/grid-animated.qml"); + canvas->execute(); + qApp->processEvents(); + + QTest::qWait(0);//Let the animation start + //Note that all but two animate in + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + QCOMPARE(one->x(), -100.0); + QCOMPARE(one->y(), -100.0); + + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + QCOMPARE(two->x(), 0.0); + QCOMPARE(two->y(), 0.0); + + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + QCOMPARE(three->x(), -100.0); + QCOMPARE(three->y(), -100.0); + + QmlGraphicsRectangle *four = canvas->root()->findChild<QmlGraphicsRectangle*>("four"); + QVERIFY(four != 0); + QCOMPARE(four->x(), -100.0); + QCOMPARE(four->y(), -100.0); + + QmlGraphicsRectangle *five = canvas->root()->findChild<QmlGraphicsRectangle*>("five"); + QVERIFY(five != 0); + QCOMPARE(five->x(), -100.0); + QCOMPARE(five->y(), -100.0); + + QTest::qWait(300);//Let the animation complete + + QCOMPARE(one->y(), 0.0); + QCOMPARE(one->x(), 0.0); + QCOMPARE(two->opacity(), 0.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(two->x(), 0.0); + QCOMPARE(three->y(), 0.0); + QCOMPARE(three->x(), 50.0); + QCOMPARE(four->y(), 0.0); + QCOMPARE(four->x(), 100.0); + QCOMPARE(five->y(), 50.0); + QCOMPARE(five->x(), 0.0); + + //Add 'two' + two->setOpacity(1.0); + QCOMPARE(two->opacity(), 1.0); + QTest::qWait(0);//Let the animation start + QCOMPARE(two->x(), -100.0); + QCOMPARE(two->y(), -100.0); + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(three->x(), 50.0); + QCOMPARE(three->y(), 0.0); + QCOMPARE(four->x(), 100.0); + QCOMPARE(four->y(), 0.0); + QCOMPARE(five->x(), 0.0); + QCOMPARE(five->y(), 50.0); + QTest::qWait(300);//Let the animation complete + QCOMPARE(two->x(), 50.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(three->x(), 100.0); + QCOMPARE(three->y(), 0.0); + QCOMPARE(four->x(), 0.0); + QCOMPARE(four->y(), 50.0); + QCOMPARE(five->x(), 50.0); + QCOMPARE(five->y(), 50.0); + + //Remove 'two' + two->setOpacity(0.0); + QCOMPARE(two->opacity(), 0.0); + QCOMPARE(two->x(), 50.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(three->x(), 100.0); + QCOMPARE(three->y(), 0.0); + QCOMPARE(four->x(), 0.0); + QCOMPARE(four->y(), 50.0); + QCOMPARE(five->x(), 50.0); + QCOMPARE(five->y(), 50.0); + QTest::qWait(300);//Let the animation complete + QCOMPARE(two->x(), 50.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(three->x(), 50.0); + QCOMPARE(three->y(), 0.0); + QCOMPARE(four->x(), 100.0); + QCOMPARE(four->y(), 0.0); + QCOMPARE(five->x(), 0.0); + QCOMPARE(five->y(), 50.0); +} + +void tst_QmlGraphicsPositioners::test_repeater() +{ + QmlView *canvas = createView("data/repeater.qml"); + + canvas->execute(); + qApp->processEvents(); + + QmlGraphicsRectangle *one = canvas->root()->findChild<QmlGraphicsRectangle*>("one"); + QVERIFY(one != 0); + + QmlGraphicsRectangle *two = canvas->root()->findChild<QmlGraphicsRectangle*>("two"); + QVERIFY(two != 0); + + QmlGraphicsRectangle *three = canvas->root()->findChild<QmlGraphicsRectangle*>("three"); + QVERIFY(three != 0); + + QCOMPARE(one->x(), 0.0); + QCOMPARE(one->y(), 0.0); + QCOMPARE(two->x(), 50.0); + QCOMPARE(two->y(), 0.0); + QCOMPARE(three->x(), 100.0); + QCOMPARE(three->y(), 0.0); +} + +QmlView *tst_QmlGraphicsPositioners::createView(const QString &filename) +{ + QmlView *canvas = new QmlView(0); + + QFile file(filename); + file.open(QFile::ReadOnly); + QString xml = file.readAll(); + canvas->setQml(xml, filename); + + return canvas; +} + + +QTEST_MAIN(tst_QmlGraphicsPositioners) + +#include "tst_qmlgraphicspositioners.moc" diff --git a/tests/auto/declarative/qmlgraphicswebview/data/basic.html b/tests/auto/declarative/qmlgraphicswebview/data/basic.html index c262f12..22e3e24 100644 --- a/tests/auto/declarative/qmlgraphicswebview/data/basic.html +++ b/tests/auto/declarative/qmlgraphicswebview/data/basic.html @@ -1,6 +1,11 @@ <html> <head><title>Basic</title> <link rel="icon" sizes="48x48" href="basic.png"> +<script type="text/javascript"> +<!-- +window.onload = function(){ window.status = "status here"; } +// --> +</script> </head> <body leftmargin="0" marginwidth="0"> <table width="123"> diff --git a/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml b/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml new file mode 100644 index 0000000..28742f3 --- /dev/null +++ b/tests/auto/declarative/qmlgraphicswebview/data/javaScript.qml @@ -0,0 +1,11 @@ +import Qt 4.6 + +WebView { + url: "javaScript.html" + javaScriptWindowObjects: [ + Object { + property string qmlprop: "qmlvalue" + WebView.windowObjectName: "myjsname" + } + ] +} diff --git a/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp b/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp index 864f4b5..c05f8a6 100644 --- a/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp +++ b/tests/auto/declarative/qmlgraphicswebview/tst_qmlgraphicswebview.cpp @@ -59,9 +59,9 @@ private slots: void historyNav(); void loadError(); void setHtml(); + void javaScript(); void cleanupTestCase(); - private: void checkNoErrors(const QmlComponent& component); QmlEngine engine; @@ -131,7 +131,7 @@ void tst_qmlgraphicswebview::basicProperties() QCOMPARE(wv->title(),QString("Basic")); QTRY_COMPARE(wv->icon().width(), 48); QCOMPARE(wv->icon(),QPixmap(SRCDIR "/data/basic.png")); - QCOMPARE(wv->statusText(),QString("")); + QCOMPARE(wv->statusText(),QString("status here")); QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/basic.html")), strippedHtml(wv->html())); QCOMPARE(wv->width(), 123.0); QCOMPARE(wv->webPageWidth(), 0); @@ -147,6 +147,11 @@ void tst_qmlgraphicswebview::basicProperties() QVERIFY(!wv->forwardAction()->isEnabled()); QVERIFY(wv->stopAction()); QVERIFY(!wv->stopAction()->isEnabled()); + + wv->setPixelCacheSize(0); // mainly testing that it doesn't crash or anything! + QCOMPARE(wv->pixelCacheSize(),0); + wv->reloadAction()->trigger(); + QTRY_COMPARE(wv->progress(), 1.0); } void tst_qmlgraphicswebview::historyNav() @@ -162,7 +167,7 @@ void tst_qmlgraphicswebview::historyNav() QCOMPARE(wv->title(),QString("Basic")); QTRY_COMPARE(wv->icon().width(), 48); QCOMPARE(wv->icon(),QPixmap(SRCDIR "/data/basic.png")); - QCOMPARE(wv->statusText(),QString("")); + QCOMPARE(wv->statusText(),QString("status here")); QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/basic.html")), strippedHtml(wv->html())); QCOMPARE(wv->width(), 123.0); QCOMPARE(wv->webPageWidth(), 0); @@ -188,6 +193,7 @@ void tst_qmlgraphicswebview::historyNav() QCOMPARE(strippedHtml(fileContents(SRCDIR "/data/forward.html")), strippedHtml(wv->html())); QCOMPARE(wv->url(), QUrl::fromLocalFile(SRCDIR "/data/forward.html")); QCOMPARE(wv->status(), QmlGraphicsWebView::Ready); + QCOMPARE(wv->statusText(),QString("")); QVERIFY(wv->reloadAction()); QVERIFY(wv->reloadAction()->isEnabled()); QVERIFY(wv->backAction()); @@ -242,6 +248,18 @@ void tst_qmlgraphicswebview::setHtml() QCOMPARE(wv->html(),QString("<html><head></head><body><p>This is a <b>string</b> set on the WebView</p></body></html>")); } +void tst_qmlgraphicswebview::javaScript() +{ + QmlComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/javaScript.qml")); + checkNoErrors(component); + QmlGraphicsWebView *wv = qobject_cast<QmlGraphicsWebView*>(component.create()); + QVERIFY(wv != 0); + QTRY_COMPARE(wv->progress(), 1.0); + QCOMPARE(wv->evaluateJavaScript("123").toInt(), 123); + QCOMPARE(wv->evaluateJavaScript("window.status").toString(), QString("status here")); + QCOMPARE(wv->evaluateJavaScript("window.myjsname.qmlprop").toString(), QString("qmlvalue")); +} + QTEST_MAIN(tst_qmlgraphicswebview) #include "tst_qmlgraphicswebview.moc" diff --git a/tests/auto/declarative/qmllistmodel/qmllistmodel.pro b/tests/auto/declarative/qmllistmodel/qmllistmodel.pro new file mode 100644 index 0000000..60b0c4b --- /dev/null +++ b/tests/auto/declarative/qmllistmodel/qmllistmodel.pro @@ -0,0 +1,6 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative +QT += script +macx:CONFIG -= app_bundle + +SOURCES += tst_qmllistmodel.cpp diff --git a/tests/auto/declarative/qmllistmodel/tst_qmllistmodel.cpp b/tests/auto/declarative/qmllistmodel/tst_qmllistmodel.cpp new file mode 100644 index 0000000..9ce1a7c --- /dev/null +++ b/tests/auto/declarative/qmllistmodel/tst_qmllistmodel.cpp @@ -0,0 +1,138 @@ +/**************************************************************************** +** +** 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/private/qmllistmodel_p.h> +#include <QtDeclarative/private/qmlexpression_p.h> +#include <QDebug> + +class tst_QmlListModel : public QObject +{ + Q_OBJECT +public: + tst_QmlListModel() {} + +private slots: + void dynamic_data(); + void dynamic(); +}; + +void tst_QmlListModel::dynamic_data() +{ + QTest::addColumn<QString>("script"); + QTest::addColumn<int>("result"); + QTest::addColumn<QString>("warning"); + + // Simple flat model + + QTest::newRow("count") << "count" << 0 << ""; + + QTest::newRow("append1") << "{append({'foo':123});count}" << 1 << ""; + QTest::newRow("append2") << "{append({'foo':123,'bar':456});count}" << 1 << ""; + QTest::newRow("append3a") << "{append({'foo':123});append({'foo':456});get(0).foo}" << 123 << ""; + QTest::newRow("append3b") << "{append({'foo':123});append({'foo':456});get(1).foo}" << 456 << ""; + + QTest::newRow("clear1") << "{append({'foo':456});clear();count}" << 0 << ""; + QTest::newRow("clear2") << "{append({'foo':123});append({'foo':456});clear();count}" << 0 << ""; + QTest::newRow("clear2") << "{append({'foo':123});clear();get(0).foo}" << 0 << "QML QmlListModel (unknown location) get: index 0 out of range"; + + QTest::newRow("remove1") << "{append({'foo':123});remove(0);count}" << 0 << ""; + QTest::newRow("remove2a") << "{append({'foo':123});append({'foo':456});remove(0);count}" << 1 << ""; + QTest::newRow("remove2b") << "{append({'foo':123});append({'foo':456});remove(0);get(0).foo}" << 456 << ""; + QTest::newRow("remove2c") << "{append({'foo':123});append({'foo':456});remove(1);get(0).foo}" << 123 << ""; + QTest::newRow("remove3") << "{append({'foo':123});remove(0);get(0).foo}" << 0 << "QML QmlListModel (unknown location) get: index 0 out of range"; + + QTest::newRow("insert1") << "{insert(0,{'foo':123});count}" << 1 << ""; + QTest::newRow("insert2") << "{insert(1,{'foo':123});count}" << 0 << "QML QmlListModel (unknown location) insert: index 1 out of range"; + QTest::newRow("insert3a") << "{append({'foo':123});insert(1,{'foo':456});count}" << 2 << ""; + QTest::newRow("insert3b") << "{append({'foo':123});insert(1,{'foo':456});get(0).foo}" << 123 << ""; + QTest::newRow("insert3c") << "{append({'foo':123});insert(1,{'foo':456});get(1).foo}" << 456 << ""; + QTest::newRow("insert3d") << "{append({'foo':123});insert(0,{'foo':456});get(0).foo}" << 456 << ""; + QTest::newRow("insert3e") << "{append({'foo':123});insert(0,{'foo':456});get(1).foo}" << 123 << ""; + QTest::newRow("insert4") << "{append({'foo':123});insert(-1,{'foo':456})}" << 0 << "QML QmlListModel (unknown location) insert: index -1 out of range"; + + QTest::newRow("set1") << "{append({'foo':123});set(0,{'foo':456});count}" << 1 << ""; + QTest::newRow("set2") << "{append({'foo':123});set(0,{'foo':456});get(0).foo}" << 456 << ""; + QTest::newRow("set3a") << "{append({'foo':123,'bar':456});set(0,{'foo':999});get(0).foo}" << 999 << ""; + QTest::newRow("set3b") << "{append({'foo':123,'bar':456});set(0,{'foo':999});get(0).bar}" << 456 << ""; + + QTest::newRow("setprop1") << "{append({'foo':123});set(0,'foo',456);count}" << 1 << ""; + QTest::newRow("setprop2") << "{append({'foo':123});set(0,'foo',456);get(0).foo}" << 456 << ""; + QTest::newRow("setprop3a") << "{append({'foo':123,'bar':456});set(0,'foo',999);get(0).foo}" << 999 << ""; + QTest::newRow("setprop3b") << "{append({'foo':123,'bar':456});set(0,'foo',999);get(0).bar}" << 456 << ""; + + QTest::newRow("move1a") << "{append({'foo':123});append({'foo':456});move(0,1,1);count}" << 2 << ""; + QTest::newRow("move1b") << "{append({'foo':123});append({'foo':456});move(0,1,1);get(0).foo}" << 456 << ""; + QTest::newRow("move1c") << "{append({'foo':123});append({'foo':456});move(0,1,1);get(1).foo}" << 123 << ""; + QTest::newRow("move1d") << "{append({'foo':123});append({'foo':456});move(1,0,1);get(0).foo}" << 456 << ""; + QTest::newRow("move1e") << "{append({'foo':123});append({'foo':456});move(1,0,1);get(1).foo}" << 123 << ""; + QTest::newRow("move2a") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,1,2);count}" << 3 << ""; + QTest::newRow("move2b") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,1,2);get(0).foo}" << 789 << ""; + QTest::newRow("move2c") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,1,2);get(1).foo}" << 123 << ""; + QTest::newRow("move2d") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,1,2);get(2).foo}" << 456 << ""; + + // Structured model + + // XXX todo +} + +void tst_QmlListModel::dynamic() +{ + QFETCH(QString, script); + QFETCH(int, result); + QFETCH(QString, warning); + + QmlEngine engine; + QmlListModel model; + QmlEngine::setContextForObject(&model,engine.rootContext()); + engine.rootContext()->addDefaultObject(&model); + QmlExpression e(engine.rootContext(), script, &model); + if (!warning.isEmpty()) + QTest::ignoreMessage(QtWarningMsg, warning.toLatin1()); + int actual = e.value().toInt(); + if (e.hasError()) + qDebug() << e.error(); // errors not expected + QVERIFY(!e.hasError()); + QCOMPARE(actual,result); +} + +QTEST_MAIN(tst_QmlListModel) + +#include "tst_qmllistmodel.moc" diff --git a/tests/auto/declarative/visual/webview/embedding/egg.qml b/tests/auto/declarative/visual/webview/embedding/egg.qml new file mode 100644 index 0000000..a9019d1 --- /dev/null +++ b/tests/auto/declarative/visual/webview/embedding/egg.qml @@ -0,0 +1,27 @@ +import Qt 4.6 + +Item { + property var period : 250 + property var color : "black" + id: root + + Item { + x: root.width/2 + y: root.height/2 + Rectangle { + radius: width/2 + color: root.color + x: -width/2 + y: -height/2 + width: root.width*1.5 + height: root.height*1.5 + } + rotation: NumberAnimation { + from: 0 + to: 360 + repeat: true + running: true + duration: root.period + } + } +} diff --git a/tests/auto/declarative/visual/webview/embedding/nesting.html b/tests/auto/declarative/visual/webview/embedding/nesting.html new file mode 100644 index 0000000..6e81689 --- /dev/null +++ b/tests/auto/declarative/visual/webview/embedding/nesting.html @@ -0,0 +1,9 @@ +<html> +<head><title>Nesting</title> +<link rel="icon" sizes="48x48" href="basic.png"> +</head> +<body bgcolor="green"> +<h1>Nesting</h1> +This is a test... +<OBJECT data=egg.qml TYPE=application/x-qt-plugin width=50 height=70 period=2000 color=white></OBJECT> +... with a spinning QML egg nested in it. diff --git a/tests/auto/declarative/visual/webview/embedding/nesting.qml b/tests/auto/declarative/visual/webview/embedding/nesting.qml new file mode 100644 index 0000000..0d76579 --- /dev/null +++ b/tests/auto/declarative/visual/webview/embedding/nesting.qml @@ -0,0 +1,8 @@ +import Qt 4.6 + +WebView { + width: 300 + height: 200 + url: "nesting.html" + settings.pluginsEnabled: true +} diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.0.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.0.png Binary files differnew file mode 100644 index 0000000..139aa9d --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.0.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.1.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.1.png Binary files differnew file mode 100644 index 0000000..e2e1644 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.1.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.2.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.2.png Binary files differnew file mode 100644 index 0000000..aa2fb82 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.2.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.3.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.3.png Binary files differnew file mode 100644 index 0000000..1976430 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.3.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.4.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.4.png Binary files differnew file mode 100644 index 0000000..c895a0a --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.4.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.5.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.5.png Binary files differnew file mode 100644 index 0000000..c895a0a --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.5.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.6.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.6.png Binary files differnew file mode 100644 index 0000000..c895a0a --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.6.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.7.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.7.png Binary files differnew file mode 100644 index 0000000..c895a0a --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.7.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.8.png b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.8.png Binary files differnew file mode 100644 index 0000000..c895a0a --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.8.png diff --git a/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.qml b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.qml new file mode 100644 index 0000000..957f9d5 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/data/evaluateJavaScript.qml @@ -0,0 +1,3759 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 32 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 48 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 64 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 80 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 96 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 112 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 128 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 144 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 160 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 176 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 192 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 208 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 224 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 240 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 256 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 272 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 288 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 304 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 320 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 336 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 352 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 368 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 384 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 400 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 416 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 195; y: 25 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 187; y: 35 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 432 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 153; y: 77 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 448 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 145; y: 87 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 139; y: 99 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 464 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 135; y: 111 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 129; y: 121 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 480 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 125; y: 131 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 121; y: 139 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 117; y: 149 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 496 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 111; y: 157 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 512 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 165 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 171 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 528 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 177 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 185 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 544 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 91; y: 189 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 89; y: 195 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 560 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 85; y: 199 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 84; y: 201 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 576 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 83; y: 203 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 204 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 81; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 592 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 80; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 608 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 205 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 78; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 624 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 77; y: 207 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 76; y: 208 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 640 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 216 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 656 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 218 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 220 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 672 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 222 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 224 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 688 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 704 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 720 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 736 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 752 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 768 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 784 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 800 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 224 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 816 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 66; y: 222 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 832 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 221 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 217 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 848 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 60; y: 215 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 864 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 59; y: 214 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 880 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 55; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 896 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 912 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 928 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 944 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 960 + image: "evaluateJavaScript.0.png" + } + Frame { + msec: 976 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 992 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1008 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 55; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1024 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1040 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1056 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1072 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1088 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 55; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1104 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1120 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1136 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1152 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1168 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1184 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1200 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1216 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1232 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1248 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1264 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1280 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1296 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 212 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1312 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 210 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 67; y: 209 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1328 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 69; y: 208 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 207 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1344 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 73; y: 207 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 75; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 1360 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1376 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1392 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1408 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1424 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1440 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1456 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1472 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1488 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1504 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1520 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1536 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1552 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1568 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1584 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1600 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1616 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1632 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1648 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1664 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1680 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Frame { + msec: 1696 + hash: "f35c69aed43a795ff02b46d7b01ef64a" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 1712 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1728 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1744 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1760 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1776 + hash: "244200622435603a75f58366496daf8b" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 1792 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1808 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1824 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1840 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1856 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1872 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1888 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1904 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1920 + image: "evaluateJavaScript.1.png" + } + Frame { + msec: 1936 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1952 + hash: "244200622435603a75f58366496daf8b" + } + Frame { + msec: 1968 + hash: "244200622435603a75f58366496daf8b" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 1984 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2000 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2016 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2032 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2048 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2064 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2080 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2096 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2112 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2128 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2144 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2160 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2176 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Frame { + msec: 2192 + hash: "44dc10a2914a391b57e68c2002a95adf" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2208 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2224 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2240 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2256 + hash: "c93921d0611e95373338c14cfcc17481" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2272 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2288 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2304 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2320 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2336 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2352 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2368 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2384 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2400 + hash: "c93921d0611e95373338c14cfcc17481" + } + Frame { + msec: 2416 + hash: "c93921d0611e95373338c14cfcc17481" + } + Key { + type: 6 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2432 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2448 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2464 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2480 + hash: "9266775c7f2156977ff56fcd45246229" + } + Key { + type: 7 + key: 83 + modifiers: 0 + text: "73" + autorep: false + count: 1 + } + Frame { + msec: 2496 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2512 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2528 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2544 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2560 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2576 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2592 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2608 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2624 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2640 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2656 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2672 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2688 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2704 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2720 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2736 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2752 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2768 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2784 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2800 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2816 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2832 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2848 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2864 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2880 + image: "evaluateJavaScript.2.png" + } + Frame { + msec: 2896 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2912 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2928 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2944 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2960 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2976 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 2992 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3008 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3024 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3040 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3056 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3072 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3088 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3104 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3120 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3136 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3152 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3168 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3184 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3200 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3216 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3232 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3248 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3264 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3280 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3296 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3312 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 74; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3328 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 72; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3344 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 70; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 68; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3360 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 63; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3376 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 61; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 59; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3392 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 57; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 55; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3408 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 54; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 53; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3424 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3440 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3456 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3472 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3488 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3504 + hash: "9266775c7f2156977ff56fcd45246229" + } + Frame { + msec: 3520 + hash: "9266775c7f2156977ff56fcd45246229" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 52; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 52; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3536 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3552 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3568 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3584 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3600 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3616 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3632 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3648 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 52; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 3664 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3680 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3696 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3712 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3728 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3744 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3760 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3776 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3792 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3808 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3824 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3840 + image: "evaluateJavaScript.3.png" + } + Frame { + msec: 3856 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3872 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3888 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3904 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3920 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3936 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3952 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3968 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Frame { + msec: 3984 + hash: "b62d9027299daa6ab8304d812ed00f83" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 4000 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4016 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4032 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4048 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4064 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4080 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4096 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4112 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 4128 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4144 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4160 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4176 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4192 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4208 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4224 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4240 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4256 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4272 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4288 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4304 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4320 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4336 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4352 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4368 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4384 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4400 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4416 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4432 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4448 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4464 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4480 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4496 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4512 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4528 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4544 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4560 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4576 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4592 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4608 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4624 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4640 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4656 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4672 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4688 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4704 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4720 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4736 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4752 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4768 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Frame { + msec: 4784 + hash: "6cea5b700e402072a9953c81b605ef22" + } + Key { + type: 6 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 4800 + image: "evaluateJavaScript.4.png" + } + Frame { + msec: 4816 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4832 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4848 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4864 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4880 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4896 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4912 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4928 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Key { + type: 7 + key: 65 + modifiers: 0 + text: "61" + autorep: false + count: 1 + } + Frame { + msec: 4944 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4960 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4976 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 4992 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5008 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5024 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5040 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5056 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5072 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5088 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5104 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5120 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5136 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5152 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5168 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5184 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5200 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5216 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5232 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5248 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5264 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5280 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5296 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5312 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5328 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5344 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5360 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5376 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5392 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5408 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5424 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5440 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5456 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5472 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5488 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5504 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5520 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5536 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5552 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5568 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5584 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5600 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5616 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5632 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5648 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5664 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5680 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5696 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5712 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5728 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5744 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5760 + image: "evaluateJavaScript.5.png" + } + Frame { + msec: 5776 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5792 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5808 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 5824 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 54; y: 206 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5840 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 56; y: 206 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 62; y: 204 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 65; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5856 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 71; y: 202 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 79; y: 200 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5872 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 82; y: 200 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 90; y: 196 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5888 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 192 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 102; y: 188 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5904 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 108; y: 182 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 112; y: 176 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5920 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 168 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 120; y: 158 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5936 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 124; y: 148 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 128; y: 136 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5952 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 130; y: 124 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 134; y: 112 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5968 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 138; y: 100 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 142; y: 88 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5984 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 78 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6000 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 150; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 154; y: 62 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 158; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6016 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 162; y: 48 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6032 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 166; y: 44 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 168; y: 38 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 172; y: 32 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6048 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 174; y: 26 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 176; y: 20 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6064 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 177; y: 18 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6080 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 16 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 14 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6096 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 12 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6112 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 11 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6128 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 10 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6144 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 179; y: 9 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6160 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 180; y: 7 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6176 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 181; y: 5 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 181; y: 4 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6192 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 182; y: 2 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 183; y: 1 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6208 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6224 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6240 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6256 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6272 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6288 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6304 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6320 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6336 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6352 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6368 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6384 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6400 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6416 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6432 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6448 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6464 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6480 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6496 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6512 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6528 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6544 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6560 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6576 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6592 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6608 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6624 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6640 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6656 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6672 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6688 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6704 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6720 + image: "evaluateJavaScript.6.png" + } + Frame { + msec: 6736 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6752 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6768 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6784 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6800 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6816 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6832 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6848 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6864 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 176; y: 1 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 174; y: 15 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 172; y: 31 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6880 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 166; y: 47 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 162; y: 63 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6896 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 156; y: 81 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 150; y: 95 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6912 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 144; y: 107 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 138; y: 119 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6928 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 132; y: 127 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 126; y: 133 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6944 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 122; y: 137 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 120; y: 138 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6960 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 120; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6976 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 6992 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7008 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7024 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7040 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7056 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7072 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 119; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7088 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7104 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7120 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 117; y: 137 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7136 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 139 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 115; y: 141 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7152 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 113; y: 149 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 109; y: 155 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7168 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 165 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 171 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7184 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 179 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 181 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7200 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 187 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 189 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7216 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 95; y: 190 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7232 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7248 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7264 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7280 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 188 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7296 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 187 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 186 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7312 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 96; y: 185 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 184 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7328 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 183 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 97; y: 182 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7344 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 180 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7360 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 98; y: 178 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7376 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 177 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 176 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 99; y: 174 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7392 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7408 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 172 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 171 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7424 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 170 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7440 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 100; y: 169 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7456 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 101; y: 167 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7472 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7488 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7504 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 101; y: 167 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7520 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7536 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7552 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7568 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7584 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7600 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7616 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Frame { + msec: 7632 + hash: "04e2e16813a9cafc37077a675e279f5f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 101; y: 166 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 101; y: 166 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7648 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7664 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7680 + image: "evaluateJavaScript.7.png" + } + Frame { + msec: 7696 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7712 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7728 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7744 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7760 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7776 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7792 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7808 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7824 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 103; y: 166 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7840 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 7856 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 105; y: 166 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7872 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 106; y: 165 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 107; y: 164 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7888 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 108; y: 164 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 109; y: 163 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7904 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 111; y: 163 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 112; y: 162 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7920 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 116; y: 158 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7936 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 118; y: 157 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 122; y: 153 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7952 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 128; y: 147 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 134; y: 139 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7968 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 140; y: 133 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 146; y: 125 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 150; y: 117 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 7984 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 156; y: 109 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 160; y: 99 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8000 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 164; y: 89 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 166; y: 77 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8016 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 170; y: 67 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 172; y: 55 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8032 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 176; y: 45 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8048 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 35 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 178; y: 27 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 180; y: 19 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8064 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 180; y: 11 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 0 + x: 182; y: 5 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8080 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8096 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8112 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8128 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8144 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8160 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8176 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8192 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8208 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8224 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8240 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8256 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8272 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8288 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8304 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8320 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8336 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8352 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8368 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8384 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8400 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8416 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8432 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8448 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8464 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8480 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8496 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8512 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8528 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8544 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8560 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8576 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8592 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8608 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8624 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8640 + image: "evaluateJavaScript.8.png" + } + Frame { + msec: 8656 + hash: "792140067e09d04b31e78be1fc9a40a2" + } + Frame { + msec: 8672 + hash: "792140067e09d04b31e78be1fc9a40a2" + } +} diff --git a/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml b/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml new file mode 100644 index 0000000..d3cf578 --- /dev/null +++ b/tests/auto/declarative/visual/webview/javascript/evaluateJavaScript.qml @@ -0,0 +1,31 @@ +import Qt 4.6 + +Column { + WebView { + id: webview + width: 200 + height: 200 + url: "test-objects.html" + javaScriptWindowObjects: + Object { + property string text: btntext.text + WebView.windowObjectName: "qmltext" + onTextChanged: { + webview.evaluateJavaScript("{document.getElementById('button').value=window.qmltext.text}") + } + } + } + Row { + Text { text: "Input:" } + Rectangle { + width: btntext.width+10 + height: btntext.height+10 + border.color: "black" + TextInput { + id: btntext + text: "Blah" + cursorDelegate: Rectangle { width: 1; color: "red" } + } + } + } +} diff --git a/tests/auto/declarative/visual/webview/zooming/data/pageWidth.qml b/tests/auto/declarative/visual/webview/zooming/data/pageWidth.qml new file mode 100644 index 0000000..1a993e1 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/pageWidth.qml @@ -0,0 +1,227 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 32 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 48 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 64 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 80 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 96 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 112 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 128 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 144 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 160 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 176 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 192 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 208 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 224 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 240 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 256 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 272 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 288 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 304 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 320 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 336 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 352 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 368 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 384 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 400 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 416 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 432 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 448 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 464 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 480 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 496 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 512 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 528 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 544 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 560 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 576 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 592 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 608 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 624 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 640 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 656 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 672 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 688 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 704 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 720 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 736 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 752 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 768 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 784 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 800 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 816 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 832 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 848 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 864 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } + Frame { + msec: 880 + hash: "9a2554b1b322ea71115fa91d0100d2ff" + } +} diff --git a/tests/auto/declarative/visual/webview/zooming/data/renderControl.0.png b/tests/auto/declarative/visual/webview/zooming/data/renderControl.0.png Binary files differnew file mode 100644 index 0000000..38df70e --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/renderControl.0.png diff --git a/tests/auto/declarative/visual/webview/zooming/data/renderControl.qml b/tests/auto/declarative/visual/webview/zooming/data/renderControl.qml new file mode 100644 index 0000000..d3c5890 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/renderControl.qml @@ -0,0 +1,415 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "4f999826cd5ebe4f58bfd255e1c22be0" + } + Frame { + msec: 32 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } + Frame { + msec: 48 + hash: "19d5f48f1c73d52483be96c887d3fd76" + } + Frame { + msec: 64 + hash: "9b85eef4e0746cc43aaefd442efdd824" + } + Frame { + msec: 80 + hash: "fca0034fb720e40198ede95a0ab0fadb" + } + Frame { + msec: 96 + hash: "9f63ddbd927a4b08242f3410a9ed7283" + } + Frame { + msec: 112 + hash: "4f5804c3c3ee195470a462293307cfd5" + } + Frame { + msec: 128 + hash: "d0434f08a8097b97b76c1194317a38ba" + } + Frame { + msec: 144 + hash: "921880d300e56f9605923a13fcd8b967" + } + Frame { + msec: 160 + hash: "f5dc87abf36332c68fd4450a6236dcb4" + } + Frame { + msec: 176 + hash: "c54f220cd5768afa1c12579007e17eff" + } + Frame { + msec: 192 + hash: "e1c70c3896d5a937296f205b09991b31" + } + Frame { + msec: 208 + hash: "d135f70f761add1358062a0386c62d18" + } + Frame { + msec: 224 + hash: "53cb2ed2b65e77cf0cd70530f32854ad" + } + Frame { + msec: 240 + hash: "2ff4feb61d958a800b38b282c3400293" + } + Frame { + msec: 256 + hash: "59f5585ec472efa29c5eba8b972ab3bd" + } + Frame { + msec: 272 + hash: "3aef5e1ff6da15e0e9f2e620dbabbab2" + } + Frame { + msec: 288 + hash: "2931299f667752efe9fca727534385e1" + } + Frame { + msec: 304 + hash: "2ed90e61c41b994ccea924191b66fc71" + } + Frame { + msec: 320 + hash: "1424c634067c896973c2c10793957933" + } + Frame { + msec: 336 + hash: "c4d30d511053a7caeefdae753236cf5b" + } + Frame { + msec: 352 + hash: "32300e07e34e8f316770c790a5ef9f6d" + } + Frame { + msec: 368 + hash: "95312dc2a4d88a48605fea170712354d" + } + Frame { + msec: 384 + hash: "3d146357d1532640cefb64fbae75bc0d" + } + Frame { + msec: 400 + hash: "5b78740511a456a3647d8392b2008f7f" + } + Frame { + msec: 416 + hash: "dddb065cefa27a862d108429c9984191" + } + Frame { + msec: 432 + hash: "0857067a0ee381e0f462ef8aceb0b696" + } + Frame { + msec: 448 + hash: "1f5e7e064cc62ff2e0585c98875351df" + } + Frame { + msec: 464 + hash: "c7f6bb852bdb2b99cbb5a8ca34f1585a" + } + Frame { + msec: 480 + hash: "f2284dea5812f167cae08c687fc1a3e9" + } + Frame { + msec: 496 + hash: "deec54bc32c46921e5032bce7daa1dad" + } + Frame { + msec: 512 + hash: "1271d3704de17bfe463c76fd73c3132b" + } + Frame { + msec: 528 + hash: "0568b0ecd47cd1c34b9de477e68e5751" + } + Frame { + msec: 544 + hash: "f070dd88e42697a9e43573f9f41b3540" + } + Frame { + msec: 560 + hash: "f5ced2827b06ea514f05866f1e4099f0" + } + Frame { + msec: 576 + hash: "59f5585ec472efa29c5eba8b972ab3bd" + } + Frame { + msec: 592 + hash: "2ff4feb61d958a800b38b282c3400293" + } + Frame { + msec: 608 + hash: "53cb2ed2b65e77cf0cd70530f32854ad" + } + Frame { + msec: 624 + hash: "d135f70f761add1358062a0386c62d18" + } + Frame { + msec: 640 + hash: "e1c70c3896d5a937296f205b09991b31" + } + Frame { + msec: 656 + hash: "c54f220cd5768afa1c12579007e17eff" + } + Frame { + msec: 672 + hash: "f5dc87abf36332c68fd4450a6236dcb4" + } + Frame { + msec: 688 + hash: "921880d300e56f9605923a13fcd8b967" + } + Frame { + msec: 704 + hash: "d0434f08a8097b97b76c1194317a38ba" + } + Frame { + msec: 720 + hash: "4f5804c3c3ee195470a462293307cfd5" + } + Frame { + msec: 736 + hash: "9f63ddbd927a4b08242f3410a9ed7283" + } + Frame { + msec: 752 + hash: "fca0034fb720e40198ede95a0ab0fadb" + } + Frame { + msec: 768 + hash: "9b85eef4e0746cc43aaefd442efdd824" + } + Frame { + msec: 784 + hash: "19d5f48f1c73d52483be96c887d3fd76" + } + Frame { + msec: 800 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } + Frame { + msec: 816 + hash: "4f999826cd5ebe4f58bfd255e1c22be0" + } + Frame { + msec: 832 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } + Frame { + msec: 848 + hash: "19d5f48f1c73d52483be96c887d3fd76" + } + Frame { + msec: 864 + hash: "9b85eef4e0746cc43aaefd442efdd824" + } + Frame { + msec: 880 + hash: "fca0034fb720e40198ede95a0ab0fadb" + } + Frame { + msec: 896 + hash: "9f63ddbd927a4b08242f3410a9ed7283" + } + Frame { + msec: 912 + hash: "4f5804c3c3ee195470a462293307cfd5" + } + Frame { + msec: 928 + hash: "d0434f08a8097b97b76c1194317a38ba" + } + Frame { + msec: 944 + hash: "921880d300e56f9605923a13fcd8b967" + } + Frame { + msec: 960 + image: "renderControl.0.png" + } + Frame { + msec: 976 + hash: "c54f220cd5768afa1c12579007e17eff" + } + Frame { + msec: 992 + hash: "e1c70c3896d5a937296f205b09991b31" + } + Frame { + msec: 1008 + hash: "d135f70f761add1358062a0386c62d18" + } + Frame { + msec: 1024 + hash: "53cb2ed2b65e77cf0cd70530f32854ad" + } + Frame { + msec: 1040 + hash: "2ff4feb61d958a800b38b282c3400293" + } + Frame { + msec: 1056 + hash: "59f5585ec472efa29c5eba8b972ab3bd" + } + Frame { + msec: 1072 + hash: "3aef5e1ff6da15e0e9f2e620dbabbab2" + } + Frame { + msec: 1088 + hash: "2931299f667752efe9fca727534385e1" + } + Frame { + msec: 1104 + hash: "2ed90e61c41b994ccea924191b66fc71" + } + Frame { + msec: 1120 + hash: "1424c634067c896973c2c10793957933" + } + Frame { + msec: 1136 + hash: "c4d30d511053a7caeefdae753236cf5b" + } + Frame { + msec: 1152 + hash: "32300e07e34e8f316770c790a5ef9f6d" + } + Frame { + msec: 1168 + hash: "95312dc2a4d88a48605fea170712354d" + } + Frame { + msec: 1184 + hash: "3d146357d1532640cefb64fbae75bc0d" + } + Frame { + msec: 1200 + hash: "5b78740511a456a3647d8392b2008f7f" + } + Frame { + msec: 1216 + hash: "dddb065cefa27a862d108429c9984191" + } + Frame { + msec: 1232 + hash: "0857067a0ee381e0f462ef8aceb0b696" + } + Frame { + msec: 1248 + hash: "1f5e7e064cc62ff2e0585c98875351df" + } + Frame { + msec: 1264 + hash: "c7f6bb852bdb2b99cbb5a8ca34f1585a" + } + Frame { + msec: 1280 + hash: "f2284dea5812f167cae08c687fc1a3e9" + } + Frame { + msec: 1296 + hash: "deec54bc32c46921e5032bce7daa1dad" + } + Frame { + msec: 1312 + hash: "1271d3704de17bfe463c76fd73c3132b" + } + Frame { + msec: 1328 + hash: "0568b0ecd47cd1c34b9de477e68e5751" + } + Frame { + msec: 1344 + hash: "f070dd88e42697a9e43573f9f41b3540" + } + Frame { + msec: 1360 + hash: "f5ced2827b06ea514f05866f1e4099f0" + } + Frame { + msec: 1376 + hash: "59f5585ec472efa29c5eba8b972ab3bd" + } + Frame { + msec: 1392 + hash: "2ff4feb61d958a800b38b282c3400293" + } + Frame { + msec: 1408 + hash: "53cb2ed2b65e77cf0cd70530f32854ad" + } + Frame { + msec: 1424 + hash: "d135f70f761add1358062a0386c62d18" + } + Frame { + msec: 1440 + hash: "e1c70c3896d5a937296f205b09991b31" + } + Frame { + msec: 1456 + hash: "c54f220cd5768afa1c12579007e17eff" + } + Frame { + msec: 1472 + hash: "f5dc87abf36332c68fd4450a6236dcb4" + } + Frame { + msec: 1488 + hash: "921880d300e56f9605923a13fcd8b967" + } + Frame { + msec: 1504 + hash: "d0434f08a8097b97b76c1194317a38ba" + } + Frame { + msec: 1520 + hash: "4f5804c3c3ee195470a462293307cfd5" + } + Frame { + msec: 1536 + hash: "9f63ddbd927a4b08242f3410a9ed7283" + } + Frame { + msec: 1552 + hash: "fca0034fb720e40198ede95a0ab0fadb" + } + Frame { + msec: 1568 + hash: "9b85eef4e0746cc43aaefd442efdd824" + } + Frame { + msec: 1584 + hash: "19d5f48f1c73d52483be96c887d3fd76" + } + Frame { + msec: 1600 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } + Frame { + msec: 1616 + hash: "4f999826cd5ebe4f58bfd255e1c22be0" + } + Frame { + msec: 1632 + hash: "3aa9bd1bd75219f82578689ac6d81c7e" + } +} diff --git a/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.0.png b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.0.png Binary files differnew file mode 100644 index 0000000..4b9abb4 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.0.png diff --git a/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.1.png b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.1.png Binary files differnew file mode 100644 index 0000000..5ce9787 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.1.png diff --git a/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.qml b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.qml new file mode 100644 index 0000000..aaa7583 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/data/zoomTextOnly.qml @@ -0,0 +1,655 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "4e401b5ebff6e442fa108e94a5dba668" + } + Frame { + msec: 32 + hash: "c2f8551d0442d0736b71c54fc965562b" + } + Frame { + msec: 48 + hash: "4fc1ef611b24ec5737310859b12c83d3" + } + Frame { + msec: 64 + hash: "7df07aea83bc5c3213e7871854661820" + } + Frame { + msec: 80 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 96 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 112 + hash: "f5c917c7ca26bb916dd4df84eafc8e94" + } + Frame { + msec: 128 + hash: "0696257de0441666bd264f8db6383d15" + } + Frame { + msec: 144 + hash: "0b43fdee23346c30c60b822a20131cc3" + } + Frame { + msec: 160 + hash: "98dbd004cf4809dbc90bfa9272378644" + } + Frame { + msec: 176 + hash: "32d0e9005ebb9dfd410d348e336bcd93" + } + Frame { + msec: 192 + hash: "8a64b18006ad0bd2c373a2a9395ce52e" + } + Frame { + msec: 208 + hash: "7dc26fd658f626b8fe18545cf93dc4ec" + } + Frame { + msec: 224 + hash: "6712be93cf1ed2b7b202367418b6d2d7" + } + Frame { + msec: 240 + hash: "524840a3453af4e97ac82b559308cce3" + } + Frame { + msec: 256 + hash: "11436091b24c02af94dfa75a5fd1a001" + } + Frame { + msec: 272 + hash: "d3689b53474b4b26630d70ba01c057b4" + } + Frame { + msec: 288 + hash: "16e2b66f28ed80d80d9b5264d89624d5" + } + Frame { + msec: 304 + hash: "87636076959de7e5a0a8bd8b31354ed4" + } + Frame { + msec: 320 + hash: "a6916da6bfac27aa87d75da2bbb73f31" + } + Frame { + msec: 336 + hash: "58cfba3aae4bf54a5b445e0e34571d2d" + } + Frame { + msec: 352 + hash: "1475ae722afd169cc0c8e1fde39eb6b7" + } + Frame { + msec: 368 + hash: "14d08c2ca430631af8ede1013f4f4da0" + } + Frame { + msec: 384 + hash: "ace9db9112d147569dc0cf1a1b680d6c" + } + Frame { + msec: 400 + hash: "08bc6815601417f3731eaae398d0861d" + } + Frame { + msec: 416 + hash: "809870dfd9b05ce07170edd945348ddf" + } + Frame { + msec: 432 + hash: "5784deb0f3270cf7a0d0964cd9d31458" + } + Frame { + msec: 448 + hash: "2f06ee407e5175d4b954e31c39c9522c" + } + Frame { + msec: 464 + hash: "48a7dbed293fbbd5ea202190837a411f" + } + Frame { + msec: 480 + hash: "abf3d90803cfa12d35d2752be7ea02d8" + } + Frame { + msec: 496 + hash: "a60edcf8d792f93a839e6ddbafbf993f" + } + Frame { + msec: 512 + hash: "7e8dfe86ea0849022355b12578d4cb1a" + } + Frame { + msec: 528 + hash: "3c84122b0933ee870f178d39469e51e2" + } + Frame { + msec: 544 + hash: "25f463e91febf5b6d8819fd5010bc1c2" + } + Frame { + msec: 560 + hash: "d423a9bc912237d0f20b924849ba0cb1" + } + Frame { + msec: 576 + hash: "5bd3cc309a5fce6183654975543250b2" + } + Frame { + msec: 592 + hash: "4e401b5ebff6e442fa108e94a5dba668" + } + Frame { + msec: 608 + hash: "9a4bf1400da038f2088dd4c49403d852" + } + Frame { + msec: 624 + hash: "a37024356613bd5d678e0b2f7b8f5959" + } + Frame { + msec: 640 + hash: "4f37d72c10e51f68a2359086094da249" + } + Frame { + msec: 656 + hash: "6093bcb7673f8e58fe5a7b0143638822" + } + Frame { + msec: 672 + hash: "c272aeea2b9c450fbd732305ccc01b93" + } + Frame { + msec: 688 + hash: "6a4e2ee45b26037421e2a5f2d6ee517e" + } + Frame { + msec: 704 + hash: "d912afcbce6c9d879a07ffc3c51b36d1" + } + Frame { + msec: 720 + hash: "2578335ac6f21c8aec2c87515562c321" + } + Frame { + msec: 736 + hash: "5b77af55f0a723ba762d283f41e91c98" + } + Frame { + msec: 752 + hash: "b420fc71b22fa608a9c0cdbbbc61c447" + } + Frame { + msec: 768 + hash: "3f7a9cecf2a590e8728137fabfd3f5f3" + } + Frame { + msec: 784 + hash: "c51f12a2f438f137785c70e3af4922fd" + } + Frame { + msec: 800 + hash: "5d97175fc4d986e5b21758d4ac785025" + } + Frame { + msec: 816 + hash: "94f922f3460ad76cd05cb5b321977a94" + } + Frame { + msec: 832 + hash: "5747adbc4f0b22ed359793d72d3e7d1f" + } + Frame { + msec: 848 + hash: "255d1d45d3343972f156dfab7d13ce41" + } + Frame { + msec: 864 + hash: "e5b54132ffb83acad30622e969405bc0" + } + Frame { + msec: 880 + hash: "2c05cf00e3417883e789f58c2728dc97" + } + Frame { + msec: 896 + hash: "9d66290b1aae1de3025d24d3efc4ca1c" + } + Frame { + msec: 912 + hash: "5e9b0783b1b4221145a4febbae56b30f" + } + Frame { + msec: 928 + hash: "21eea497c26600b03d868661232b3ebe" + } + Frame { + msec: 944 + hash: "2383c415170ac6444f1c193ed698f682" + } + Frame { + msec: 960 + image: "zoomTextOnly.0.png" + } + Frame { + msec: 976 + hash: "4ed0f85dec4eb0bb740ac3780b6872c0" + } + Frame { + msec: 992 + hash: "0a18bccca4efeadfced8e5cb1715a1f3" + } + Frame { + msec: 1008 + hash: "823e65df9075eb0e9a3aad6b15ec3342" + } + Frame { + msec: 1024 + hash: "823e65df9075eb0e9a3aad6b15ec3342" + } + Frame { + msec: 1040 + hash: "0a18bccca4efeadfced8e5cb1715a1f3" + } + Frame { + msec: 1056 + hash: "4ed0f85dec4eb0bb740ac3780b6872c0" + } + Frame { + msec: 1072 + hash: "fae77663566351fa3bb506b459496a9d" + } + Frame { + msec: 1088 + hash: "2383c415170ac6444f1c193ed698f682" + } + Frame { + msec: 1104 + hash: "2e05365256bebbdf3229f99b94263b6c" + } + Frame { + msec: 1120 + hash: "5e9b0783b1b4221145a4febbae56b30f" + } + Frame { + msec: 1136 + hash: "9d66290b1aae1de3025d24d3efc4ca1c" + } + Frame { + msec: 1152 + hash: "2c05cf00e3417883e789f58c2728dc97" + } + Frame { + msec: 1168 + hash: "e5b54132ffb83acad30622e969405bc0" + } + Frame { + msec: 1184 + hash: "255d1d45d3343972f156dfab7d13ce41" + } + Frame { + msec: 1200 + hash: "5747adbc4f0b22ed359793d72d3e7d1f" + } + Frame { + msec: 1216 + hash: "94f922f3460ad76cd05cb5b321977a94" + } + Frame { + msec: 1232 + hash: "5d97175fc4d986e5b21758d4ac785025" + } + Frame { + msec: 1248 + hash: "c51f12a2f438f137785c70e3af4922fd" + } + Frame { + msec: 1264 + hash: "3f7a9cecf2a590e8728137fabfd3f5f3" + } + Frame { + msec: 1280 + hash: "b420fc71b22fa608a9c0cdbbbc61c447" + } + Frame { + msec: 1296 + hash: "5b77af55f0a723ba762d283f41e91c98" + } + Frame { + msec: 1312 + hash: "2578335ac6f21c8aec2c87515562c321" + } + Frame { + msec: 1328 + hash: "a9b5438bd48dbafd307d571877416003" + } + Frame { + msec: 1344 + hash: "6a4e2ee45b26037421e2a5f2d6ee517e" + } + Frame { + msec: 1360 + hash: "c272aeea2b9c450fbd732305ccc01b93" + } + Frame { + msec: 1376 + hash: "37c7e50c270e8feb4dd9018580284a85" + } + Frame { + msec: 1392 + hash: "4f37d72c10e51f68a2359086094da249" + } + Frame { + msec: 1408 + hash: "a37024356613bd5d678e0b2f7b8f5959" + } + Frame { + msec: 1424 + hash: "9a4bf1400da038f2088dd4c49403d852" + } + Frame { + msec: 1440 + hash: "4e401b5ebff6e442fa108e94a5dba668" + } + Frame { + msec: 1456 + hash: "5bd3cc309a5fce6183654975543250b2" + } + Frame { + msec: 1472 + hash: "d423a9bc912237d0f20b924849ba0cb1" + } + Frame { + msec: 1488 + hash: "25f463e91febf5b6d8819fd5010bc1c2" + } + Frame { + msec: 1504 + hash: "3c84122b0933ee870f178d39469e51e2" + } + Frame { + msec: 1520 + hash: "7e8dfe86ea0849022355b12578d4cb1a" + } + Frame { + msec: 1536 + hash: "a60edcf8d792f93a839e6ddbafbf993f" + } + Frame { + msec: 1552 + hash: "abf3d90803cfa12d35d2752be7ea02d8" + } + Frame { + msec: 1568 + hash: "48a7dbed293fbbd5ea202190837a411f" + } + Frame { + msec: 1584 + hash: "2f06ee407e5175d4b954e31c39c9522c" + } + Frame { + msec: 1600 + hash: "5784deb0f3270cf7a0d0964cd9d31458" + } + Frame { + msec: 1616 + hash: "809870dfd9b05ce07170edd945348ddf" + } + Frame { + msec: 1632 + hash: "08bc6815601417f3731eaae398d0861d" + } + Frame { + msec: 1648 + hash: "ace9db9112d147569dc0cf1a1b680d6c" + } + Frame { + msec: 1664 + hash: "14d08c2ca430631af8ede1013f4f4da0" + } + Frame { + msec: 1680 + hash: "1475ae722afd169cc0c8e1fde39eb6b7" + } + Frame { + msec: 1696 + hash: "58cfba3aae4bf54a5b445e0e34571d2d" + } + Frame { + msec: 1712 + hash: "a6916da6bfac27aa87d75da2bbb73f31" + } + Frame { + msec: 1728 + hash: "87636076959de7e5a0a8bd8b31354ed4" + } + Frame { + msec: 1744 + hash: "16e2b66f28ed80d80d9b5264d89624d5" + } + Frame { + msec: 1760 + hash: "d3689b53474b4b26630d70ba01c057b4" + } + Frame { + msec: 1776 + hash: "11436091b24c02af94dfa75a5fd1a001" + } + Frame { + msec: 1792 + hash: "524840a3453af4e97ac82b559308cce3" + } + Frame { + msec: 1808 + hash: "6712be93cf1ed2b7b202367418b6d2d7" + } + Frame { + msec: 1824 + hash: "7dc26fd658f626b8fe18545cf93dc4ec" + } + Frame { + msec: 1840 + hash: "8a64b18006ad0bd2c373a2a9395ce52e" + } + Frame { + msec: 1856 + hash: "32d0e9005ebb9dfd410d348e336bcd93" + } + Frame { + msec: 1872 + hash: "98dbd004cf4809dbc90bfa9272378644" + } + Frame { + msec: 1888 + hash: "0b43fdee23346c30c60b822a20131cc3" + } + Frame { + msec: 1904 + hash: "0696257de0441666bd264f8db6383d15" + } + Frame { + msec: 1920 + image: "zoomTextOnly.1.png" + } + Frame { + msec: 1936 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 1952 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 1968 + hash: "7df07aea83bc5c3213e7871854661820" + } + Frame { + msec: 1984 + hash: "4fc1ef611b24ec5737310859b12c83d3" + } + Frame { + msec: 2000 + hash: "c2f8551d0442d0736b71c54fc965562b" + } + Frame { + msec: 2016 + hash: "4ec29787e437f9619ce0f0a0f4889d0f" + } + Frame { + msec: 2032 + hash: "c2f8551d0442d0736b71c54fc965562b" + } + Frame { + msec: 2048 + hash: "4fc1ef611b24ec5737310859b12c83d3" + } + Frame { + msec: 2064 + hash: "7df07aea83bc5c3213e7871854661820" + } + Frame { + msec: 2080 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 2096 + hash: "0ae4ee18cc675749f008b897fe35cc40" + } + Frame { + msec: 2112 + hash: "f5c917c7ca26bb916dd4df84eafc8e94" + } + Frame { + msec: 2128 + hash: "0696257de0441666bd264f8db6383d15" + } + Frame { + msec: 2144 + hash: "0b43fdee23346c30c60b822a20131cc3" + } + Frame { + msec: 2160 + hash: "98dbd004cf4809dbc90bfa9272378644" + } + Frame { + msec: 2176 + hash: "32d0e9005ebb9dfd410d348e336bcd93" + } + Frame { + msec: 2192 + hash: "8a64b18006ad0bd2c373a2a9395ce52e" + } + Frame { + msec: 2208 + hash: "7dc26fd658f626b8fe18545cf93dc4ec" + } + Frame { + msec: 2224 + hash: "6712be93cf1ed2b7b202367418b6d2d7" + } + Frame { + msec: 2240 + hash: "524840a3453af4e97ac82b559308cce3" + } + Frame { + msec: 2256 + hash: "11436091b24c02af94dfa75a5fd1a001" + } + Frame { + msec: 2272 + hash: "d3689b53474b4b26630d70ba01c057b4" + } + Frame { + msec: 2288 + hash: "16e2b66f28ed80d80d9b5264d89624d5" + } + Frame { + msec: 2304 + hash: "87636076959de7e5a0a8bd8b31354ed4" + } + Frame { + msec: 2320 + hash: "a6916da6bfac27aa87d75da2bbb73f31" + } + Frame { + msec: 2336 + hash: "58cfba3aae4bf54a5b445e0e34571d2d" + } + Frame { + msec: 2352 + hash: "1475ae722afd169cc0c8e1fde39eb6b7" + } + Frame { + msec: 2368 + hash: "14d08c2ca430631af8ede1013f4f4da0" + } + Frame { + msec: 2384 + hash: "ace9db9112d147569dc0cf1a1b680d6c" + } + Frame { + msec: 2400 + hash: "08bc6815601417f3731eaae398d0861d" + } + Frame { + msec: 2416 + hash: "809870dfd9b05ce07170edd945348ddf" + } + Frame { + msec: 2432 + hash: "5784deb0f3270cf7a0d0964cd9d31458" + } + Frame { + msec: 2448 + hash: "2f06ee407e5175d4b954e31c39c9522c" + } + Frame { + msec: 2464 + hash: "48a7dbed293fbbd5ea202190837a411f" + } + Frame { + msec: 2480 + hash: "abf3d90803cfa12d35d2752be7ea02d8" + } + Frame { + msec: 2496 + hash: "a60edcf8d792f93a839e6ddbafbf993f" + } + Frame { + msec: 2512 + hash: "7e8dfe86ea0849022355b12578d4cb1a" + } + Frame { + msec: 2528 + hash: "3c84122b0933ee870f178d39469e51e2" + } + Frame { + msec: 2544 + hash: "25f463e91febf5b6d8819fd5010bc1c2" + } + Frame { + msec: 2560 + hash: "d423a9bc912237d0f20b924849ba0cb1" + } + Frame { + msec: 2576 + hash: "5bd3cc309a5fce6183654975543250b2" + } + Frame { + msec: 2592 + hash: "4e401b5ebff6e442fa108e94a5dba668" + } +} diff --git a/tests/auto/declarative/visual/webview/zooming/pageWidth.qml b/tests/auto/declarative/visual/webview/zooming/pageWidth.qml new file mode 100644 index 0000000..86dd7d2 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/pageWidth.qml @@ -0,0 +1,9 @@ +import Qt 4.6 + +WebView { + width: 200 + height: 250 + url: "resolution.html" + webPageWidth: 400 + preferredWidth: 200 +} diff --git a/tests/auto/declarative/visual/webview/zooming/renderControl.qml b/tests/auto/declarative/visual/webview/zooming/renderControl.qml new file mode 100644 index 0000000..c2f2c02 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/renderControl.qml @@ -0,0 +1,21 @@ +import Qt 4.6 + +Rectangle { + width: 200 + height: 250 + clip: true + WebView { + id: webview + width: 400 + url: "renderControl.html" + x: SequentialAnimation { + running: true + repeat: true + NumberAnimation { from: 100; to: 0; duration: 200 } + PropertyAction { target: webview; property: "renderingEnabled"; value: false } + NumberAnimation { from: 0; to: -100; duration: 200 } + PropertyAction { target: webview; property: "renderingEnabled"; value: true } + NumberAnimation { from: -100; to: 100; duration: 400 } + } + } +} diff --git a/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.html b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.html new file mode 100644 index 0000000..4997712 --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.html @@ -0,0 +1,7 @@ +<html> +<body> +<h1>Zoom Text Only</h1> +<p> +This test shows how zooming can be done just +on text, not images. +<img src="qtlogo.png"> diff --git a/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml new file mode 100644 index 0000000..55cd9bc --- /dev/null +++ b/tests/auto/declarative/visual/webview/zooming/zoomTextOnly.qml @@ -0,0 +1,15 @@ +import Qt 4.6 + +WebView { + width: 200 + height: 250 + url: "zoomTextOnly.html" + settings.zoomTextOnly: true + zoomFactor: + SequentialAnimation { + running: true + repeat: true + NumberAnimation { from: 2; to: 0.25; duration: 1000 } + NumberAnimation { from: 0.25; to: 2; duration: 1000 } + } +} |