diff options
Diffstat (limited to 'tests/auto')
169 files changed, 7114 insertions, 830 deletions
diff --git a/tests/auto/declarative/declarative.pro b/tests/auto/declarative/declarative.pro index 7834650..9b3b3d0 100644 --- a/tests/auto/declarative/declarative.pro +++ b/tests/auto/declarative/declarative.pro @@ -59,10 +59,12 @@ SUBDIRS += \ qdeclarativerepeater \ # Cover qdeclarativeworkerscript \ # Cover qdeclarativevaluetypes \ # Cover + qdeclarativeview \ # Cover qdeclarativexmlhttprequest \ # Cover qdeclarativeimageprovider \ # Cover qdeclarativestyledtext \ # Cover qdeclarativesqldatabase \ # Cover + qdeclarativevisualdatamodel \ # Cover qmlvisual # Cover contains(QT_CONFIG, webkit) { diff --git a/tests/auto/declarative/parserstress/tst_parserstress.cpp b/tests/auto/declarative/parserstress/tst_parserstress.cpp index 41c0a1b..f61ca9f 100644 --- a/tests/auto/declarative/parserstress/tst_parserstress.cpp +++ b/tests/auto/declarative/parserstress/tst_parserstress.cpp @@ -65,7 +65,7 @@ QStringList tst_parserstress::findJSFiles(const QDir &d) { QStringList rv; - QStringList files = d.entryList(QStringList() << QLatin1String("*.js"), + QStringList files = d.entryList(QStringList() << QLatin1String("*.js"), QDir::Files); foreach (const QString &file, files) { if (file == "browser.js") @@ -73,7 +73,7 @@ QStringList tst_parserstress::findJSFiles(const QDir &d) rv << d.absoluteFilePath(file); } - QStringList dirs = d.entryList(QDir::Dirs | QDir::NoDotAndDotDot | + QStringList dirs = d.entryList(QDir::Dirs | QDir::NoDotAndDotDot | QDir::NoSymLinks); foreach (const QString &dir, dirs) { QDir sub = d; @@ -131,8 +131,8 @@ void tst_parserstress::ecmascript() QDeclarativeComponent component(&engine); component.setData(qmlData, QUrl::fromLocalFile(SRCDIR + QString("/dummy.qml"))); QSet<QString> failingTests; - failingTests << "uc-003.js" << "uc-005.js" << "regress-352044-02-n.js" - << "regress-334158.js" << "regress-58274.js" << "dowhile-006.js" << "dowhile-005.js"; + failingTests << "regress-352044-02-n.js" + << "regress-334158.js"; QFileInfo info(file); foreach (const QString &failing, failingTests) { if (info.fileName().endsWith(failing)) { diff --git a/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp b/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp index 01b5bc5..dff62c7 100644 --- a/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp +++ b/tests/auto/declarative/qdeclarativeanchors/tst_qdeclarativeanchors.cpp @@ -49,7 +49,7 @@ #include <private/qdeclarativetext_p.h> #include <QtDeclarative/private/qdeclarativeanchors_p_p.h> -Q_DECLARE_METATYPE(QDeclarativeAnchors::UsedAnchor) +Q_DECLARE_METATYPE(QDeclarativeAnchors::Anchor) Q_DECLARE_METATYPE(QDeclarativeAnchorLine::AnchorLine) @@ -262,7 +262,7 @@ void tst_qdeclarativeanchors::loops() { QUrl source(QUrl::fromLocalFile(SRCDIR "/data/loop1.qml")); - QString expect = "QML Text (" + source.toString() + ":6:5" + ") Possible anchor loop detected on horizontal anchor."; + QString expect = source.toString() + ":6:5: QML Text: Possible anchor loop detected on horizontal anchor."; QTest::ignoreMessage(QtWarningMsg, expect.toLatin1()); QTest::ignoreMessage(QtWarningMsg, expect.toLatin1()); QTest::ignoreMessage(QtWarningMsg, expect.toLatin1()); @@ -277,7 +277,7 @@ void tst_qdeclarativeanchors::loops() { QUrl source(QUrl::fromLocalFile(SRCDIR "/data/loop2.qml")); - QString expect = "QML Image (" + source.toString() + ":8:3" + ") Possible anchor loop detected on horizontal anchor."; + QString expect = source.toString() + ":8:3: QML Image: Possible anchor loop detected on horizontal anchor."; QTest::ignoreMessage(QtWarningMsg, expect.toLatin1()); QDeclarativeView *view = new QDeclarativeView; @@ -312,62 +312,62 @@ void tst_qdeclarativeanchors::illegalSets_data() QTest::newRow("H - too many anchors") << "Rectangle { id: rect; Rectangle { anchors.left: rect.left; anchors.right: rect.right; anchors.horizontalCenter: rect.horizontalCenter } }" - << "QML Rectangle (file::2:23) Cannot specify left, right, and hcenter anchors."; + << "file::2:23: QML Rectangle: Cannot specify left, right, and hcenter anchors."; foreach (const QString &side, QStringList() << "left" << "right") { QTest::newRow("H - anchor to V") << QString("Rectangle { Rectangle { anchors.%1: parent.top } }").arg(side) - << "QML Rectangle (file::2:13) Cannot anchor a horizontal edge to a vertical edge."; + << "file::2:13: QML Rectangle: Cannot anchor a horizontal edge to a vertical edge."; QTest::newRow("H - anchor to non parent/sibling") << QString("Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.%1: rect.%1 } }").arg(side) - << "QML Rectangle (file::2:45) Cannot anchor to an item that isn't a parent or sibling."; + << "file::2:45: QML Rectangle: Cannot anchor to an item that isn't a parent or sibling."; QTest::newRow("H - anchor to self") << QString("Rectangle { id: rect; anchors.%1: rect.%1 }").arg(side) - << "QML Rectangle (file::2:1) Cannot anchor item to self."; + << "file::2:1: QML Rectangle: Cannot anchor item to self."; } QTest::newRow("V - too many anchors") << "Rectangle { id: rect; Rectangle { anchors.top: rect.top; anchors.bottom: rect.bottom; anchors.verticalCenter: rect.verticalCenter } }" - << "QML Rectangle (file::2:23) Cannot specify top, bottom, and vcenter anchors."; + << "file::2:23: QML Rectangle: Cannot specify top, bottom, and vcenter anchors."; QTest::newRow("V - too many anchors with baseline") << "Rectangle { Text { id: text1; text: \"Hello\" } Text { anchors.baseline: text1.baseline; anchors.top: text1.top; } }" - << "QML Text (file::2:47) Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors."; + << "file::2:47: QML Text: Baseline anchor cannot be used in conjunction with top, bottom, or vcenter anchors."; foreach (const QString &side, QStringList() << "top" << "bottom" << "baseline") { QTest::newRow("V - anchor to H") << QString("Rectangle { Rectangle { anchors.%1: parent.left } }").arg(side) - << "QML Rectangle (file::2:13) Cannot anchor a vertical edge to a horizontal edge."; + << "file::2:13: QML Rectangle: Cannot anchor a vertical edge to a horizontal edge."; QTest::newRow("V - anchor to non parent/sibling") << QString("Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.%1: rect.%1 } }").arg(side) - << "QML Rectangle (file::2:45) Cannot anchor to an item that isn't a parent or sibling."; + << "file::2:45: QML Rectangle: Cannot anchor to an item that isn't a parent or sibling."; QTest::newRow("V - anchor to self") << QString("Rectangle { id: rect; anchors.%1: rect.%1 }").arg(side) - << "QML Rectangle (file::2:1) Cannot anchor item to self."; + << "file::2:1: QML Rectangle: Cannot anchor item to self."; } QTest::newRow("centerIn - anchor to non parent/sibling") << "Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.centerIn: rect} }" - << "QML Rectangle (file::2:45) Cannot anchor to an item that isn't a parent or sibling."; + << "file::2:45: QML Rectangle: Cannot anchor to an item that isn't a parent or sibling."; QTest::newRow("fill - anchor to non parent/sibling") << "Rectangle { Item { Rectangle { id: rect } } Rectangle { anchors.fill: rect} }" - << "QML Rectangle (file::2:45) Cannot anchor to an item that isn't a parent or sibling."; + << "file::2:45: QML Rectangle: Cannot anchor to an item that isn't a parent or sibling."; } void tst_qdeclarativeanchors::reset() { QFETCH(QString, side); QFETCH(QDeclarativeAnchorLine::AnchorLine, anchorLine); - QFETCH(QDeclarativeAnchors::UsedAnchor, usedAnchor); + QFETCH(QDeclarativeAnchors::Anchor, usedAnchor); QDeclarativeItem *baseItem = new QDeclarativeItem; @@ -394,16 +394,16 @@ void tst_qdeclarativeanchors::reset_data() { QTest::addColumn<QString>("side"); QTest::addColumn<QDeclarativeAnchorLine::AnchorLine>("anchorLine"); - QTest::addColumn<QDeclarativeAnchors::UsedAnchor>("usedAnchor"); + QTest::addColumn<QDeclarativeAnchors::Anchor>("usedAnchor"); - QTest::newRow("left") << "left" << QDeclarativeAnchorLine::Left << QDeclarativeAnchors::HasLeftAnchor; - QTest::newRow("top") << "top" << QDeclarativeAnchorLine::Top << QDeclarativeAnchors::HasTopAnchor; - QTest::newRow("right") << "right" << QDeclarativeAnchorLine::Right << QDeclarativeAnchors::HasRightAnchor; - QTest::newRow("bottom") << "bottom" << QDeclarativeAnchorLine::Bottom << QDeclarativeAnchors::HasBottomAnchor; + QTest::newRow("left") << "left" << QDeclarativeAnchorLine::Left << QDeclarativeAnchors::LeftAnchor; + QTest::newRow("top") << "top" << QDeclarativeAnchorLine::Top << QDeclarativeAnchors::TopAnchor; + QTest::newRow("right") << "right" << QDeclarativeAnchorLine::Right << QDeclarativeAnchors::RightAnchor; + QTest::newRow("bottom") << "bottom" << QDeclarativeAnchorLine::Bottom << QDeclarativeAnchors::BottomAnchor; - QTest::newRow("hcenter") << "horizontalCenter" << QDeclarativeAnchorLine::HCenter << QDeclarativeAnchors::HasHCenterAnchor; - QTest::newRow("vcenter") << "verticalCenter" << QDeclarativeAnchorLine::VCenter << QDeclarativeAnchors::HasVCenterAnchor; - QTest::newRow("baseline") << "baseline" << QDeclarativeAnchorLine::Baseline << QDeclarativeAnchors::HasBaselineAnchor; + QTest::newRow("hcenter") << "horizontalCenter" << QDeclarativeAnchorLine::HCenter << QDeclarativeAnchors::HCenterAnchor; + QTest::newRow("vcenter") << "verticalCenter" << QDeclarativeAnchorLine::VCenter << QDeclarativeAnchors::VCenterAnchor; + QTest::newRow("baseline") << "baseline" << QDeclarativeAnchorLine::Baseline << QDeclarativeAnchors::BaselineAnchor; } void tst_qdeclarativeanchors::resetConvenience() @@ -437,7 +437,7 @@ void tst_qdeclarativeanchors::nullItem() const QMetaObject *meta = item->anchors()->metaObject(); QMetaProperty p = meta->property(meta->indexOfProperty(side.toUtf8().constData())); - QTest::ignoreMessage(QtWarningMsg, "QML Item (unknown location) Cannot anchor to a null item."); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML Item: Cannot anchor to a null item."); QVERIFY(p.write(item->anchors(), qVariantFromValue(anchor))); delete item; @@ -461,7 +461,7 @@ void tst_qdeclarativeanchors::crash1() { QUrl source(QUrl::fromLocalFile(SRCDIR "/data/crash1.qml")); - QString expect = "QML Text (" + source.toString() + ":4:5" + ") Possible anchor loop detected on fill."; + QString expect = source.toString() + ":4:5: QML Text: Possible anchor loop detected on fill."; QTest::ignoreMessage(QtWarningMsg, expect.toLatin1()); diff --git a/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp b/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp index 0fb080c..237a436 100644 --- a/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp +++ b/tests/auto/declarative/qdeclarativeanimatedimage/tst_qdeclarativeanimatedimage.cpp @@ -199,7 +199,7 @@ void tst_qdeclarativeanimatedimage::invalidSource() component.setData("import Qt 4.7\n AnimatedImage { source: \"no-such-file.gif\" }", QUrl::fromLocalFile("")); QVERIFY(component.isReady()); - QTest::ignoreMessage(QtWarningMsg, "Error Reading Animated Image File QUrl( \"file:no-such-file.gif\" ) "); + QTest::ignoreMessage(QtWarningMsg, "file::2:2: QML AnimatedImage: Error Reading Animated Image File file:no-such-file.gif"); QDeclarativeAnimatedImage *anim = qobject_cast<QDeclarativeAnimatedImage *>(component.create()); QVERIFY(anim); diff --git a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp index 959cc19..e217e34 100644 --- a/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp +++ b/tests/auto/declarative/qdeclarativeanimations/tst_qdeclarativeanimations.cpp @@ -339,13 +339,13 @@ void tst_qdeclarativeanimations::badProperties() QDeclarativeEngine engine; QDeclarativeComponent c1(&engine, QUrl::fromLocalFile(SRCDIR "/data/badproperty1.qml")); - QByteArray message = "QML ColorAnimation (" + QUrl::fromLocalFile(SRCDIR "/data/badproperty1.qml").toString().toUtf8() + ":18:9) Cannot animate non-existent property \"border.colr\""; + QByteArray message = QUrl::fromLocalFile(SRCDIR "/data/badproperty1.qml").toString().toUtf8() + ":18:9: QML ColorAnimation: Cannot animate non-existent property \"border.colr\""; QTest::ignoreMessage(QtWarningMsg, message); QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c1.create()); QVERIFY(rect); QDeclarativeComponent c2(&engine, QUrl::fromLocalFile(SRCDIR "/data/badproperty2.qml")); - message = "QML ColorAnimation (" + QUrl::fromLocalFile(SRCDIR "/data/badproperty2.qml").toString().toUtf8() + ":18:9) Cannot animate read-only property \"border\""; + message = QUrl::fromLocalFile(SRCDIR "/data/badproperty2.qml").toString().toUtf8() + ":18:9: QML ColorAnimation: Cannot animate read-only property \"border\""; QTest::ignoreMessage(QtWarningMsg, message); rect = qobject_cast<QDeclarativeRectangle*>(c2.create()); QVERIFY(rect); @@ -549,12 +549,12 @@ void tst_qdeclarativeanimations::propertiesTransition() void tst_qdeclarativeanimations::invalidDuration() { QDeclarativePropertyAnimation *animation = new QDeclarativePropertyAnimation; - QTest::ignoreMessage(QtWarningMsg, "QML PropertyAnimation (unknown location) Cannot set a duration of < 0"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML PropertyAnimation: Cannot set a duration of < 0"); animation->setDuration(-1); QCOMPARE(animation->duration(), 250); QDeclarativePauseAnimation *pauseAnimation = new QDeclarativePauseAnimation; - QTest::ignoreMessage(QtWarningMsg, "QML PauseAnimation (unknown location) Cannot set a duration of < 0"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML PauseAnimation: Cannot set a duration of < 0"); pauseAnimation->setDuration(-1); QCOMPARE(pauseAnimation->duration(), 250); } @@ -620,7 +620,8 @@ void tst_qdeclarativeanimations::dontStart() QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/dontStart.qml")); - QTest::ignoreMessage(QtWarningMsg, "QDeclarativeAbstractAnimation: setRunning() cannot be used on non-root animation nodes"); + QString warning = c.url().toString() + ":14:13: QML NumberAnimation: setRunning() cannot be used on non-root animation nodes."; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); QVERIFY(rect); @@ -634,7 +635,8 @@ void tst_qdeclarativeanimations::dontStart() QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/dontStart2.qml")); - QTest::ignoreMessage(QtWarningMsg, "QDeclarativeAbstractAnimation: setRunning() cannot be used on non-root animation nodes"); + QString warning = c.url().toString() + ":15:17: QML NumberAnimation: setRunning() cannot be used on non-root animation nodes."; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); QVERIFY(rect); diff --git a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp index 3bff2f5..ee9e282 100644 --- a/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp +++ b/tests/auto/declarative/qdeclarativebehaviors/tst_qdeclarativebehaviors.cpp @@ -272,7 +272,8 @@ void tst_qdeclarativebehaviors::reassignedAnimation() { QDeclarativeEngine engine; QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/reassignedAnimation.qml")); - QTest::ignoreMessage(QtWarningMsg, QString("QML Behavior (" + QUrl::fromLocalFile(SRCDIR "/data/reassignedAnimation.qml").toString() + ":9:9) Cannot change the animation assigned to a Behavior.").toUtf8().constData()); + QString warning = QUrl::fromLocalFile(SRCDIR "/data/reassignedAnimation.qml").toString() + ":9:9: QML Behavior: Cannot change the animation assigned to a Behavior."; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); QTRY_VERIFY(rect); QTRY_COMPARE(qobject_cast<QDeclarativeNumberAnimation*>( @@ -303,7 +304,8 @@ void tst_qdeclarativebehaviors::dontStart() QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/dontStart.qml")); - QTest::ignoreMessage(QtWarningMsg, "QDeclarativeAbstractAnimation: setRunning() cannot be used on non-root animation nodes"); + QString warning = c.url().toString() + ":13:13: QML NumberAnimation: setRunning() cannot be used on non-root animation nodes."; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(c.create()); QTRY_VERIFY(rect); diff --git a/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp b/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp index 8621239..69b4a89 100644 --- a/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp +++ b/tests/auto/declarative/qdeclarativeborderimage/tst_qdeclarativeborderimage.cpp @@ -121,10 +121,10 @@ void tst_qdeclarativeborderimage::imageSource_data() QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/colors.png").toString() << false << ""; QTest::newRow("local not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() << false - << "QML BorderImage (file::2:1) Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString(); + << "file::2:1: QML BorderImage: Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString(); QTest::newRow("remote") << SERVER_ADDR "/colors.png" << true << ""; QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << true - << "QML BorderImage (file::2:1) Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found"; + << "file::2:1: QML BorderImage: Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found"; } void tst_qdeclarativeborderimage::imageSource() @@ -304,8 +304,8 @@ void tst_qdeclarativeborderimage::sciSource_data() void tst_qdeclarativeborderimage::invalidSciFile() { - QTest::ignoreMessage(QtWarningMsg, "Unknown tile rule specified. Using Stretch "); // for "Roun" - QTest::ignoreMessage(QtWarningMsg, "Unknown tile rule specified. Using Stretch "); // for "Repea" + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeGridScaledImage: Invalid tile rule specified. Using Stretch."); // for "Roun" + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeGridScaledImage: Invalid tile rule specified. Using Stretch."); // for "Repea" QString componentStr = "import Qt 4.7\nBorderImage { source: \"" + QUrl::fromLocalFile(SRCDIR "/data/invalid.sci").toString() +"\"; width: 300; height: 300 }"; QDeclarativeComponent component(&engine); diff --git a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp index 133dcb8..e2d3ee4 100644 --- a/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp +++ b/tests/auto/declarative/qdeclarativedebug/tst_qdeclarativedebug.cpp @@ -60,6 +60,7 @@ #include <private/qdeclarativemetatype_p.h> #include <private/qdeclarativeproperty_p.h> +#include "../../../shared/util.h" #include "../shared/debugutil_p.h" Q_DECLARE_METATYPE(QDeclarativeDebugWatch::State) @@ -69,14 +70,6 @@ class tst_QDeclarativeDebug : public QObject { Q_OBJECT -public: - tst_QDeclarativeDebug(QDeclarativeDebugTestData *data) - { - m_conn = data->conn; - m_engine = data->engine; - m_rootItem = data->items[0]; - } - private: QDeclarativeDebugObjectReference findRootObject(); QDeclarativeDebugPropertyReference findProperty(const QList<QDeclarativeDebugPropertyReference> &props, const QString &name) const; @@ -93,8 +86,11 @@ private: QDeclarativeEngine *m_engine; QDeclarativeItem *m_rootItem; + QObjectList m_components; + private slots: void initTestCase(); + void cleanupTestCase(); void watch_property(); void watch_object(); @@ -278,9 +274,52 @@ void tst_QDeclarativeDebug::compareProperties(const QDeclarativeDebugPropertyRef void tst_QDeclarativeDebug::initTestCase() { + qRegisterMetaType<QDeclarativeDebugWatch::State>(); + + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3768..."); + qputenv("QML_DEBUG_SERVER_PORT", "3768"); + m_engine = new QDeclarativeEngine(this); + + QList<QByteArray> qml; + qml << "import Qt 4.7\n" + "Item {" + "width: 10; height: 20; scale: blueRect.scale;" + "Rectangle { id: blueRect; width: 500; height: 600; color: \"blue\"; }" + "Text { color: blueRect.color; }" + "MouseArea {" + "onEntered: { console.log('hello') }" + "}" + "}"; + // add second component to test multiple root contexts + qml << "import Qt 4.7\n" + "Item {}"; + + for (int i=0; i<qml.count(); i++) { + QDeclarativeComponent component(m_engine); + component.setData(qml[i], QUrl::fromLocalFile("")); + Q_ASSERT(component.isReady()); // fails if bad syntax + m_components << qobject_cast<QDeclarativeItem*>(component.create()); + } + m_rootItem = qobject_cast<QDeclarativeItem*>(m_components.first()); + + // add an extra context to test for multiple contexts + QDeclarativeContext *context = new QDeclarativeContext(m_engine->rootContext(), this); + context->setObjectName("tst_QDeclarativeDebug_childContext"); + + m_conn = new QDeclarativeDebugConnection(this); + m_conn->connectToHost("127.0.0.1", 3768); + + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Connection established"); + bool ok = m_conn->waitForConnected(); + Q_ASSERT(ok); + QTRY_VERIFY(QDeclarativeDebugService::hasDebuggingClient()); + m_dbg = new QDeclarativeEngineDebug(m_conn, this); +} - qRegisterMetaType<QDeclarativeDebugWatch::State>(); +void tst_QDeclarativeDebug::cleanupTestCase() +{ + qDeleteAll(m_components); } void tst_QDeclarativeDebug::watch_property() @@ -804,40 +843,6 @@ void tst_QDeclarativeDebug::tst_QDeclarativeDebugPropertyReference() compareProperties(r, ref); } - -class tst_QDeclarativeDebug_Factory : public QDeclarativeTestFactory -{ -public: - QObject *createTest(QDeclarativeDebugTestData *data) - { - tst_QDeclarativeDebug *test = new tst_QDeclarativeDebug(data); - QDeclarativeContext *c = new QDeclarativeContext(data->engine->rootContext(), test); - c->setObjectName("tst_QDeclarativeDebug_childContext"); - return test; - } -}; - -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - - QList<QByteArray> qml; - qml << "import Qt 4.7\n" - "Item {" - "width: 10; height: 20; scale: blueRect.scale;" - "Rectangle { id: blueRect; width: 500; height: 600; color: \"blue\"; }" - "Text { color: blueRect.color; }" - "MouseArea {" - "onEntered: { console.log('hello') }" - "}" - "}"; - // add second component to test multiple root contexts - qml << "import Qt 4.7\n" - "Item {}"; - tst_QDeclarativeDebug_Factory factory; - return QDeclarativeDebugTest::runTests(&factory, qml); -} - -//QTEST_MAIN(tst_QDeclarativeDebug) +QTEST_MAIN(tst_QDeclarativeDebug) #include "tst_qdeclarativedebug.moc" diff --git a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp index d3679a7..a19c2c2 100644 --- a/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp +++ b/tests/auto/declarative/qdeclarativedebugclient/tst_qdeclarativedebugclient.cpp @@ -52,21 +52,19 @@ #include <private/qdeclarativedebugclient_p.h> #include <private/qdeclarativedebugservice_p.h> +#include "../../../shared/util.h" #include "../shared/debugutil_p.h" class tst_QDeclarativeDebugClient : public QObject { Q_OBJECT -public: - tst_QDeclarativeDebugClient(QDeclarativeDebugTestData *data) - { - m_conn = data->conn; - } - +private: QDeclarativeDebugConnection *m_conn; private slots: + void initTestCase(); + void name(); void isEnabled(); void setEnabled(); @@ -74,6 +72,23 @@ private slots: void sendMessage(); }; +void tst_QDeclarativeDebugClient::initTestCase() +{ + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3770..."); + + qputenv("QML_DEBUG_SERVER_PORT", "3770"); + new QDeclarativeEngine(this); + + m_conn = new QDeclarativeDebugConnection(this); + m_conn->connectToHost("127.0.0.1", 3770); + + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Connection established"); + bool ok = m_conn->waitForConnected(); + Q_ASSERT(ok); + + QTRY_VERIFY(QDeclarativeDebugService::hasDebuggingClient()); +} + void tst_QDeclarativeDebugClient::name() { QString name = "tst_QDeclarativeDebugClient::name()"; @@ -136,22 +151,7 @@ void tst_QDeclarativeDebugClient::sendMessage() QCOMPARE(resp, msg); } - -class tst_QDeclarativeDebugClient_Factory : public QDeclarativeTestFactory -{ -public: - QObject *createTest(QDeclarativeDebugTestData *data) { return new tst_QDeclarativeDebugClient(data); } -}; - - -// This does not use QTEST_MAIN because the test has to be created and run -// in a separate thread. -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - - tst_QDeclarativeDebugClient_Factory factory; - return QDeclarativeDebugTest::runTests(&factory); -} +QTEST_MAIN(tst_QDeclarativeDebugClient) #include "tst_qdeclarativedebugclient.moc" + diff --git a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp index c8fc001..9ebbbaf 100644 --- a/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp +++ b/tests/auto/declarative/qdeclarativedebugservice/tst_qdeclarativedebugservice.cpp @@ -52,21 +52,19 @@ #include <private/qdeclarativedebugclient_p.h> #include <private/qdeclarativedebugservice_p.h> +#include "../../../shared/util.h" #include "../shared/debugutil_p.h" + class tst_QDeclarativeDebugService : public QObject { Q_OBJECT - -public: - tst_QDeclarativeDebugService(QDeclarativeDebugTestData *data) - { - m_conn = data->conn; - } - +private: QDeclarativeDebugConnection *m_conn; private slots: + void initTestCase(); + void name(); void isEnabled(); void enabledChanged(); @@ -76,6 +74,22 @@ private slots: void objectToString(); }; +void tst_QDeclarativeDebugService::initTestCase() +{ + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Waiting for connection on port 3769..."); + qputenv("QML_DEBUG_SERVER_PORT", "3769"); + new QDeclarativeEngine(this); + + m_conn = new QDeclarativeDebugConnection(this); + m_conn->connectToHost("127.0.0.1", 3769); + + QTest::ignoreMessage(QtWarningMsg, "QDeclarativeDebugServer: Connection established"); + bool ok = m_conn->waitForConnected(); + Q_ASSERT(ok); + + QTRY_VERIFY(QDeclarativeDebugService::hasDebuggingClient()); +} + void tst_QDeclarativeDebugService::name() { QString name = "tst_QDeclarativeDebugService::name()"; @@ -140,7 +154,7 @@ void tst_QDeclarativeDebugService::idForObject() int idB = QDeclarativeDebugService::idForObject(objB); QVERIFY(idB != idA); QCOMPARE(QDeclarativeDebugService::objectForId(idB), objB); - + delete objA; delete objB; } @@ -170,21 +184,6 @@ void tst_QDeclarativeDebugService::objectToString() delete obj; } - -class tst_QDeclarativeDebugService_Factory : public QDeclarativeTestFactory -{ -public: - QObject *createTest(QDeclarativeDebugTestData *data) { return new tst_QDeclarativeDebugService(data); } -}; - -// This does not use QTEST_MAIN because the test has to be created and run -// in a separate thread. -int main(int argc, char *argv[]) -{ - QApplication app(argc, argv); - - tst_QDeclarativeDebugService_Factory factory; - return QDeclarativeDebugTest::runTests(&factory); -} +QTEST_MAIN(tst_QDeclarativeDebugService) #include "tst_qdeclarativedebugservice.moc" diff --git a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp index 1f0c47c..a951827 100644 --- a/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp +++ b/tests/auto/declarative/qdeclarativedom/tst_qdeclarativedom.cpp @@ -1303,7 +1303,8 @@ void tst_qdeclarativedom::position() QCOMPARE(child2Value.length(), 6); // All QDeclarativeDomList - qWarning("QDeclarativeListValue position test required"); + QCOMPARE(childrenList.position(), 189); + QCOMPARE(childrenList.length(), 18); } QTEST_MAIN(tst_qdeclarativedom) diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/ScopeObject.qml b/tests/auto/declarative/qdeclarativeecmascript/data/ScopeObject.qml index b7bec63..12ac754 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/ScopeObject.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/ScopeObject.qml @@ -5,10 +5,8 @@ Item { property int binding: myFunction(); property int binding2: myCompFunction(); - Script { - function myCompFunction() { - return a; - } + function myCompFunction() { + return a; } } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.1.qml b/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.1.qml new file mode 100644 index 0000000..3fd9131 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.1.qml @@ -0,0 +1,9 @@ +import Qt.test 1.0 + +MyQmlObject { + property bool runTest: false + + property variant a: MyQmlObject {} + + objectProperty: (runTest == false)?a:null +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.2.qml new file mode 100644 index 0000000..19b0c42 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/canAssignNullToQObject.2.qml @@ -0,0 +1,11 @@ +import Qt.test 1.0 +import Qt 4.6 + +MyQmlObject { + objectProperty: MyQmlObject {} + + Component.onCompleted: { + objectProperty = null; + } +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/deletedObject.qml b/tests/auto/declarative/qdeclarativeecmascript/data/deletedObject.qml index 29eba42..64b83af 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/deletedObject.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/deletedObject.qml @@ -20,6 +20,6 @@ QtObject { myObject.deleteOnSet = 1; test3 = myObject.value == undefined; - // test4 = obj.value == undefined; + test4 = obj.value == undefined; } } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/dynamicCreation.qml b/tests/auto/declarative/qdeclarativeecmascript/data/dynamicCreation.qml index 2fef03a..3047e9b 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/dynamicCreation.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/dynamicCreation.qml @@ -5,23 +5,23 @@ MyQmlObject{ objectName: "obj" function createOne() { - obj.objectProperty = createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"objectOne"}', obj); + obj.objectProperty = Qt.createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"objectOne"}', obj); } function createTwo() { - var component = createComponent('dynamicCreation.helper.qml'); + var component = Qt.createComponent('dynamicCreation.helper.qml'); obj.objectProperty = component.createObject(); } function createThree() { - obj.objectProperty = createQmlObject('TypeForDynamicCreation{}', obj); + obj.objectProperty = Qt.createQmlObject('TypeForDynamicCreation{}', obj); } function dontCrash() { - var component = createComponent('file-doesnt-exist.qml'); + var component = Qt.createComponent('file-doesnt-exist.qml'); obj.objectProperty = component.createObject(); } } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/dynamicDeletion.qml b/tests/auto/declarative/qdeclarativeecmascript/data/dynamicDeletion.qml index 0855b29..f41e526 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/dynamicDeletion.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/dynamicDeletion.qml @@ -5,7 +5,7 @@ MyQmlObject{ objectName: "obj" function create() { - obj.objectProperty = createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"emptyObject"}', obj); + obj.objectProperty = Qt.createQmlObject('import Qt.test 1.0; MyQmlObject{objectName:"emptyObject"}', obj); } function killOther() diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/extensionObjectsPropertyOverride.qml b/tests/auto/declarative/qdeclarativeecmascript/data/extensionObjectsPropertyOverride.qml new file mode 100644 index 0000000..3c443cb --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/extensionObjectsPropertyOverride.qml @@ -0,0 +1,7 @@ +import Qt.test 1.0 + +OverrideDefaultPropertyObject +{ + MyBaseExtendedObject { + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.1.qml b/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.1.qml deleted file mode 100644 index 2ac7b6e..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.1.qml +++ /dev/null @@ -1,11 +0,0 @@ -import Qt 4.6 - -QtObject { - property int test: external_script_func(); - - Script { - // Single source as non-array literal - source: "externalScript.js" - } -} - diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.2.js b/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.2.js deleted file mode 100644 index 78c3a86..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.2.js +++ /dev/null @@ -1,8 +0,0 @@ -function external_script_func2() { - return a; -} - -function is_a_undefined() { - return a == undefined; -} - diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.2.qml deleted file mode 100644 index dec657c..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.2.qml +++ /dev/null @@ -1,11 +0,0 @@ -import Qt 4.6 - -QtObject { - property int test: external_script_func(); - - Script { - // Single source as array - source: [ "externalScript.js" ] - } -} - diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.3.qml b/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.3.qml deleted file mode 100644 index d7acf38..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.3.qml +++ /dev/null @@ -1,13 +0,0 @@ -import Qt 4.6 - -QtObject { - property int test: external_script_func(); - property int test2: external_script_func2(); - property bool test3: is_a_undefined(); - - Script { - // Multiple script - source: [ "externalScript.js", "externalScript.2.js" ] - } -} - diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.4.qml b/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.4.qml deleted file mode 100644 index 16211aa..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.4.qml +++ /dev/null @@ -1,15 +0,0 @@ -import Qt 4.6 - -QtObject { - property int test: external_script_func(); - property bool test2: is_a_undefined(); - - // Disconnected scripts - Script { - source: "externalScript.js" - } - - Script { - source: "externalScript.2.js" - } -} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.js b/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.js deleted file mode 100644 index 8928652..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/externalScript.js +++ /dev/null @@ -1,6 +0,0 @@ -var a = 92; - -function external_script_func() { - return a; -} - diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scope.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scope.2.qml index 8e5aa0b..9beda6a 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scope.2.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scope.2.qml @@ -4,10 +4,8 @@ Item { property int a: 0 property int b: 0 - Script { - function b() { return 11; } - function c() { return 33; } - } + function b() { return 11; } + function c() { return 33; } QtObject { id: a diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scope.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scope.qml index cccd3d3..1c0be98 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scope.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scope.qml @@ -7,21 +7,17 @@ Item { property int binding: a property string binding2: a + "Test" property int binding3: myFunction() - property int binding4: myNestedFunction() + property int binding4: nestedObject.myNestedFunction() - Script { - function myFunction() { - return a; - } + function myFunction() { + return a; } Item { id: nestedObject - Script { - function myNestedFunction() { - return a; - } + function myNestedFunction() { + return a; } property int a: 2 diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptAccess.js b/tests/auto/declarative/qdeclarativeecmascript/data/scriptAccess.js deleted file mode 100644 index c00d285..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptAccess.js +++ /dev/null @@ -1,7 +0,0 @@ -var extVariable = 19; - -function extMethod() -{ - return extVariable; -} - diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptAccess.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptAccess.qml deleted file mode 100644 index feb6d16..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptAccess.qml +++ /dev/null @@ -1,17 +0,0 @@ -import Qt 4.6 - -Item { - Script { - function method() { - return 10; - } - } - - Script { - source: "scriptAccess.js" - } - - property int test1: method() - property int test2: extMethod() - property int test3: extVariable -} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.1.js b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.1.js new file mode 100644 index 0000000..54284fe --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.1.js @@ -0,0 +1,4 @@ +function testFunction() { + test = true; +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.1.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.1.qml index 2bdd706..d6e4207 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.1.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.1.qml @@ -1,16 +1,10 @@ import Qt.test 1.0 import Qt 4.6 - +import "scriptConnect.1.js" as Script MyQmlObject { property bool test: false id: root - Script { - function testFunction() { - test = true; - } - } - - Component.onCompleted: root.argumentSignal.connect(testFunction); + Component.onCompleted: root.argumentSignal.connect(Script.testFunction); } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.2.js b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.2.js new file mode 100644 index 0000000..595c778 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.2.js @@ -0,0 +1,5 @@ +function testFunction() { + if (this.b == 12) + test = true; +} + diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.2.qml index fa90918..7992ba5 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.2.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.2.qml @@ -1,22 +1,16 @@ import Qt.test 1.0 import Qt 4.6 +import "scriptConnect.2.js" as Script MyQmlObject { property bool test: false id: root - Script { - function testFunction() { - if (this.b == 12) - test = true; - } - } - Component.onCompleted: { var a = new Object; a.b = 12; - root.argumentSignal.connect(a, testFunction); + root.argumentSignal.connect(a, Script.testFunction); } } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.6.js b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.6.js new file mode 100644 index 0000000..71bdd08 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.6.js @@ -0,0 +1,3 @@ +function testFunction() { + test++; +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.6.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.6.qml index 8c35db1..d546495 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.6.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptConnect.6.qml @@ -1,20 +1,15 @@ import Qt.test 1.0 import Qt 4.6 +import "scriptConnect.6.js" as Script MyQmlObject { property int test: 0 id: root - - Script { - function testFunction() { - test++; - } - } Component.onCompleted: { - root.argumentSignal.connect(testFunction); - root.argumentSignal.connect(testFunction); + root.argumentSignal.connect(Script.testFunction); + root.argumentSignal.connect(Script.testFunction); } } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.1.js b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.1.js new file mode 100644 index 0000000..407426f --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.1.js @@ -0,0 +1,6 @@ +function testFunction() { + test++; +} + +function otherFunction() { +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.1.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.1.qml index 45c4f73..0d262c6 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.1.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.1.qml @@ -1,18 +1,13 @@ import Qt.test 1.0 import Qt 4.6 +import "scriptDisconnect.1.js" as Script MyQmlObject { property int test: 0 id: root - Script { - function testFunction() { - test++; - } - } + Component.onCompleted: root.argumentSignal.connect(Script.testFunction); - Component.onCompleted: root.argumentSignal.connect(testFunction); - - onBasicSignal: root.argumentSignal.disconnect(testFunction); + onBasicSignal: root.argumentSignal.disconnect(Script.testFunction); } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.2.qml index a47fe74..6d379e6 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.2.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.2.qml @@ -1,19 +1,14 @@ import Qt.test 1.0 import Qt 4.6 +import "scriptDisconnect.1.js" as Script MyQmlObject { property int test: 0 id: root - Script { - function testFunction() { - test++; - } - } + Component.onCompleted: root.argumentSignal.connect(root, Script.testFunction); - Component.onCompleted: root.argumentSignal.connect(root, testFunction); - - onBasicSignal: root.argumentSignal.disconnect(root, testFunction); + onBasicSignal: root.argumentSignal.disconnect(root, Script.testFunction); } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.3.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.3.qml index c95ffbf..526580a 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.3.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.3.qml @@ -1,19 +1,14 @@ import Qt.test 1.0 import Qt 4.6 +import "scriptDisconnect.1.js" as Script MyQmlObject { property int test: 0 id: root - Script { - function testFunction() { - test++; - } - } + Component.onCompleted: root.argumentSignal.connect(root, Script.testFunction); - Component.onCompleted: root.argumentSignal.connect(root, testFunction); - - onBasicSignal: root.argumentSignal.disconnect(testFunction); + onBasicSignal: root.argumentSignal.disconnect(Script.testFunction); } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.4.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.4.qml index 342f24a..18b05ad 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.4.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptDisconnect.4.qml @@ -1,20 +1,13 @@ import Qt.test 1.0 import Qt 4.6 +import "scriptDisconnect.1.js" as Script MyQmlObject { property int test: 0 id: root - Script { - function testFunction() { - test++; - } - function otherFunction() { - } - } + Component.onCompleted: root.argumentSignal.connect(Script.testFunction); - Component.onCompleted: root.argumentSignal.connect(testFunction); - - onBasicSignal: root.argumentSignal.disconnect(otherFunction); + onBasicSignal: root.argumentSignal.disconnect(Script.otherFunction); } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptErrors.js b/tests/auto/declarative/qdeclarativeecmascript/data/scriptErrors.js index 1d7b357..d22f623 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptErrors.js +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptErrors.js @@ -1,2 +1,4 @@ // Comment a = 10 + +function getValue() { a = 10; return 0; } diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptErrors.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptErrors.qml index c2edb41..e8f7b62 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptErrors.qml +++ b/tests/auto/declarative/qdeclarativeecmascript/data/scriptErrors.qml @@ -1,11 +1,9 @@ import Qt.test 1.0 +import "scriptErrors.js" as Script MyQmlObject { - Script { source: "scriptErrors.js" } - Script { function getValue() { a = 10; return 0; } } - property int t: a.value - property int w: getValue(); + property int w: Script.getValue(); property int x: undefinedObject property int y: (a.value, undefinedObject) diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptScope.1.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptScope.1.qml deleted file mode 100644 index 9b11fa9..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptScope.1.qml +++ /dev/null @@ -1,13 +0,0 @@ -import Qt.test 1.0 - -MyQmlObject { - property string result - - Script{ - function f() { - result = b - } - - } - onArgumentSignal: f() -} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptScope.2.qml b/tests/auto/declarative/qdeclarativeecmascript/data/scriptScope.2.qml deleted file mode 100644 index ec727e2..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptScope.2.qml +++ /dev/null @@ -1,11 +0,0 @@ -import Qt.test 1.0 - -MyQmlObject { - property string result - property string aProp: "hello" - - Script{ - source: "scriptScope.js" - } - onBasicSignal: f() -} diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/scriptScope.js b/tests/auto/declarative/qdeclarativeecmascript/data/scriptScope.js deleted file mode 100644 index 5689930..0000000 --- a/tests/auto/declarative/qdeclarativeecmascript/data/scriptScope.js +++ /dev/null @@ -1,5 +0,0 @@ -var aProp = "world"; - -function f() { - result = aProp; -} diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp index 0d07055..154ff4d 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.cpp @@ -72,6 +72,14 @@ private: int m_value; }; +class DefaultPropertyExtensionObject : public QObject +{ + Q_OBJECT + Q_CLASSINFO("DefaultProperty", "firstProperty") +public: + DefaultPropertyExtensionObject(QObject *parent) : QObject(parent) {} +}; + void registerTypes() { qmlRegisterType<MyQmlObject>("Qt.test", 1,0, "MyQmlObject"); @@ -81,6 +89,8 @@ void registerTypes() qmlRegisterExtendedType<MyExtendedObject, ExtensionObject>("Qt.test", 1,0, "MyExtendedObject"); qmlRegisterType<MyTypeObject>("Qt.test", 1,0, "MyTypeObject"); qmlRegisterType<NumberAssignment>("Qt.test", 1,0, "NumberAssignment"); + qmlRegisterExtendedType<DefaultPropertyExtendedObject, DefaultPropertyExtensionObject>("Qt.test", 1,0, "DefaultPropertyExtendedObject"); + qmlRegisterType<OverrideDefaultPropertyObject>("Qt.test", 1,0, "OverrideDefaultPropertyObject"); } #include "testtypes.moc" diff --git a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h index 4424419..1381d57 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/testtypes.h +++ b/tests/auto/declarative/qdeclarativeecmascript/testtypes.h @@ -170,7 +170,6 @@ private: }; QML_DECLARE_TYPEINFO(MyQmlObject, QML_HAS_ATTACHED_PROPERTIES) -QML_DECLARE_TYPE(MyQmlObject); class MyQmlContainer : public QObject { @@ -185,7 +184,6 @@ private: QList<MyQmlObject*> m_children; }; -QML_DECLARE_TYPE(MyQmlContainer); class MyExpression : public QDeclarativeExpression { @@ -258,7 +256,6 @@ private: QObject *m_object; QObject *m_object2; }; -QML_DECLARE_TYPE(MyDeferredObject); class MyBaseExtendedObject : public QObject { @@ -273,7 +270,6 @@ public: private: int m_value; }; -QML_DECLARE_TYPE(MyBaseExtendedObject); class MyExtendedObject : public MyBaseExtendedObject { @@ -288,7 +284,6 @@ public: private: int m_value; }; -QML_DECLARE_TYPE(MyExtendedObject); class MyTypeObject : public QObject { @@ -555,7 +550,6 @@ signals: void rectPropertyChanged(); }; Q_DECLARE_OPERATORS_FOR_FLAGS(MyTypeObject::MyFlags) -QML_DECLARE_TYPE(MyTypeObject); Q_DECLARE_METATYPE(QScriptValue); class MyInvokableObject : public QObject @@ -665,6 +659,31 @@ public: void setTest12(unsigned int v) { _test12 = v; } }; +class DefaultPropertyExtendedObject : public QObject +{ + Q_OBJECT + Q_PROPERTY(QObject *firstProperty READ firstProperty WRITE setFirstProperty) + Q_PROPERTY(QObject *secondProperty READ secondProperty WRITE setSecondProperty) +public: + DefaultPropertyExtendedObject(QObject *parent = 0) : QObject(parent), m_firstProperty(0), m_secondProperty(0) {} + + QObject *firstProperty() const { return m_firstProperty; } + QObject *secondProperty() const { return m_secondProperty; } + void setFirstProperty(QObject *property) { m_firstProperty = property; } + void setSecondProperty(QObject *property) { m_secondProperty = property; } +private: + QObject* m_firstProperty; + QObject* m_secondProperty; +}; + +class OverrideDefaultPropertyObject : public DefaultPropertyExtendedObject +{ + Q_OBJECT + Q_CLASSINFO("DefaultProperty", "secondProperty") +public: + OverrideDefaultPropertyObject() {} +}; + void registerTypes(); #endif // TESTTYPES_H diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index 098ac36..6939290 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -90,6 +90,7 @@ private slots: void objectPropertiesTriggerReeval(); void deferredProperties(); void extensionObjects(); + void overrideExtensionProperties(); void attachedProperties(); void enums(); void valueTypeFunctions(); @@ -100,7 +101,6 @@ private slots: void scope(); void signalParameterTypes(); void objectsCompareAsEqual(); - void scriptAccess(); void dynamicCreation_data(); void dynamicCreation(); void dynamicDestruction(); @@ -117,14 +117,12 @@ private slots: void exceptionBindingProducesWarning(); void transientErrors(); void shutdownErrors(); - void externalScript(); void compositePropertyType(); void jsObject(); void undefinedResetsProperty(); void listToVariant(); void multiEngineObject(); void deletedObject(); - void scriptScope(); void attachedPropertyScope(); void scriptConnect(); void scriptDisconnect(); @@ -143,6 +141,7 @@ private slots: void variantsAssignedUndefined(); void qtbug_9792(); void noSpuriousWarningsAtShutdown(); + void canAssignNullToQObject(); void callQtInvokables(); private: @@ -320,7 +319,7 @@ void tst_qdeclarativeecmascript::methods() void tst_qdeclarativeecmascript::bindingLoop() { QDeclarativeComponent component(&engine, TEST_FILE("bindingLoop.qml")); - QString warning = "QML MyQmlObject (" + component.url().toString() + ":9:9) Binding loop detected for property \"stringProperty\""; + QString warning = component.url().toString() + ":9:9: QML MyQmlObject: Binding loop detected for property \"stringProperty\""; QTest::ignoreMessage(QtWarningMsg, warning.toLatin1().constData()); QObject *object = component.create(); QVERIFY(object != 0); @@ -568,6 +567,16 @@ void tst_qdeclarativeecmascript::extensionObjects() } +void tst_qdeclarativeecmascript::overrideExtensionProperties() +{ + QDeclarativeComponent component(&engine, TEST_FILE("extensionObjectsPropertyOverride.qml")); + OverrideDefaultPropertyObject *object = + qobject_cast<OverrideDefaultPropertyObject *>(component.create()); + QVERIFY(object != 0); + QVERIFY(object->secondProperty() != 0); + QVERIFY(object->firstProperty() == 0); +} + void tst_qdeclarativeecmascript::attachedProperties() { QDeclarativeComponent component(&engine, TEST_FILE("attachedProperty.qml")); @@ -837,24 +846,6 @@ void tst_qdeclarativeecmascript::aliasPropertyAndBinding() QCOMPARE(object->property("c3").toInt(), 19); } -/* -Tests that only methods of Script {} blocks are exposed. -*/ -void tst_qdeclarativeecmascript::scriptAccess() -{ - QDeclarativeComponent component(&engine, TEST_FILE("scriptAccess.qml")); - - QString warning = component.url().toString() + ":16: Unable to assign [undefined] to int"; - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning)); - - QObject *object = component.create(); - QVERIFY(object != 0); - - QCOMPARE(object->property("test1").toInt(), 10); - QCOMPARE(object->property("test2").toInt(), 19); - QCOMPARE(object->property("test3").toInt(), 0); -} - void tst_qdeclarativeecmascript::dynamicCreation_data() { QTest::addColumn<QString>("method"); @@ -977,13 +968,13 @@ void tst_qdeclarativeecmascript::scriptErrors() QString url = component.url().toString(); QString warning1 = url.left(url.length() - 3) + "js:2: Error: Invalid write to global property \"a\""; - QString warning2 = url + ":7: TypeError: Result of expression 'a' [undefined] is not an object."; - QString warning3 = url + ":5: Error: Invalid write to global property \"a\""; - QString warning4 = url + ":12: TypeError: Result of expression 'a' [undefined] is not an object."; - QString warning5 = url + ":10: TypeError: Result of expression 'a' [undefined] is not an object."; - QString warning6 = url + ":9: Unable to assign [undefined] to int"; - QString warning7 = url + ":14: Error: Cannot assign to read-only property \"trueProperty\""; - QString warning8 = url + ":15: Error: Cannot assign to non-existent property \"fakeProperty\""; + QString warning2 = url + ":5: TypeError: Result of expression 'a' [undefined] is not an object."; + QString warning3 = url.left(url.length() - 3) + "js:4: Error: Invalid write to global property \"a\""; + QString warning4 = url + ":10: TypeError: Result of expression 'a' [undefined] is not an object."; + QString warning5 = url + ":8: TypeError: Result of expression 'a' [undefined] is not an object."; + QString warning6 = url + ":7: Unable to assign [undefined] to int"; + QString warning7 = url + ":12: Error: Cannot assign to read-only property \"trueProperty\""; + QString warning8 = url + ":13: Error: Cannot assign to non-existent property \"fakeProperty\""; QTest::ignoreMessage(QtWarningMsg, warning1.toLatin1().constData()); QTest::ignoreMessage(QtWarningMsg, warning2.toLatin1().constData()); @@ -1166,53 +1157,6 @@ void tst_qdeclarativeecmascript::shutdownErrors() QCOMPARE(transientErrorsMsgCount, 0); } -// Check that Script::source property works as expected -void tst_qdeclarativeecmascript::externalScript() -{ - { - QDeclarativeComponent component(&engine, TEST_FILE("externalScript.1.qml")); - QObject *object = component.create(); - QVERIFY(object != 0); - - QCOMPARE(object->property("test").toInt(), 92); - - delete object; - } - - { - QDeclarativeComponent component(&engine, TEST_FILE("externalScript.2.qml")); - QObject *object = component.create(); - QVERIFY(object != 0); - - QCOMPARE(object->property("test").toInt(), 92); - - delete object; - } - - { - QDeclarativeComponent component(&engine, TEST_FILE("externalScript.3.qml")); - QObject *object = component.create(); - QVERIFY(object != 0); - - QCOMPARE(object->property("test").toInt(), 92); - QCOMPARE(object->property("test2").toInt(), 92); - QCOMPARE(object->property("test3").toBool(), false); - - delete object; - } - - { - QDeclarativeComponent component(&engine, TEST_FILE("externalScript.4.qml")); - QObject *object = component.create(); - QVERIFY(object != 0); - - QCOMPARE(object->property("test").toInt(), 92); - QCOMPARE(object->property("test2").toBool(), true); - - delete object; - } -} - void tst_qdeclarativeecmascript::compositePropertyType() { QDeclarativeComponent component(&engine, TEST_FILE("compositePropertyType.qml")); @@ -1764,37 +1708,11 @@ void tst_qdeclarativeecmascript::deletedObject() QCOMPARE(object->property("test1").toBool(), true); QCOMPARE(object->property("test2").toBool(), true); QCOMPARE(object->property("test3").toBool(), true); - QEXPECT_FAIL("", "QTBUG-8077", Continue); QCOMPARE(object->property("test4").toBool(), true); delete object; } -void tst_qdeclarativeecmascript::scriptScope() -{ - { - QDeclarativeComponent component(&engine, TEST_FILE("scriptScope.1.qml")); - - MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create()); - QVERIFY(object != 0); - emit object->argumentSignal(19, "Hello world!", 10.3); - QCOMPARE(object->property("result").toString(), QString()); - - delete object; - } - - { - QDeclarativeComponent component(&engine, TEST_FILE("scriptScope.2.qml")); - - MyQmlObject *object = qobject_cast<MyQmlObject *>(component.create()); - QVERIFY(object != 0); - emit object->basicSignal(); - QCOMPARE(object->property("result").toString(), QLatin1String("world")); - - delete object; - } -} - void tst_qdeclarativeecmascript::attachedPropertyScope() { QDeclarativeComponent component(&engine, TEST_FILE("attachedPropertyScope.qml")); @@ -2273,6 +2191,35 @@ void tst_qdeclarativeecmascript::noSpuriousWarningsAtShutdown() } } +void tst_qdeclarativeecmascript::canAssignNullToQObject() +{ + { + QDeclarativeComponent component(&engine, TEST_FILE("canAssignNullToQObject.1.qml")); + + MyQmlObject *o = qobject_cast<MyQmlObject *>(component.create()); + QVERIFY(o != 0); + + QVERIFY(o->objectProperty() != 0); + + o->setProperty("runTest", true); + + QVERIFY(o->objectProperty() == 0); + + delete o; + } + + { + QDeclarativeComponent component(&engine, TEST_FILE("canAssignNullToQObject.2.qml")); + + MyQmlObject *o = qobject_cast<MyQmlObject *>(component.create()); + QVERIFY(o != 0); + + QVERIFY(o->objectProperty() == 0); + + delete o; + } +} + QTEST_MAIN(tst_qdeclarativeecmascript) #include "tst_qdeclarativeecmascript.moc" diff --git a/tests/auto/declarative/qdeclarativeflipable/tst_qdeclarativeflipable.cpp b/tests/auto/declarative/qdeclarativeflipable/tst_qdeclarativeflipable.cpp index 4155edb..f32cdbd 100644 --- a/tests/auto/declarative/qdeclarativeflipable/tst_qdeclarativeflipable.cpp +++ b/tests/auto/declarative/qdeclarativeflipable/tst_qdeclarativeflipable.cpp @@ -103,11 +103,11 @@ void tst_qdeclarativeflipable::setFrontAndBack() QVERIFY(obj->front() != 0); QVERIFY(obj->back() != 0); - QString message = "QML Flipable (" + c.url().toString() + ":3:1) front is a write-once property"; + QString message = c.url().toString() + ":3:1: QML Flipable: front is a write-once property"; QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); obj->setFront(new QDeclarativeRectangle()); - message = "QML Flipable (" + c.url().toString() + ":3:1) back is a write-once property"; + message = c.url().toString() + ":3:1: QML Flipable: back is a write-once property"; QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); obj->setBack(new QDeclarativeRectangle()); delete obj; diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml b/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml new file mode 100644 index 0000000..adde522 --- /dev/null +++ b/tests/auto/declarative/qdeclarativefocusscope/data/forcefocus.qml @@ -0,0 +1,81 @@ +import Qt 4.6 + +Rectangle { + width: 800; height: 600 + + FocusScope { + focus: true + + FocusScope { + id: firstScope + focus: true + + Rectangle { + objectName: "item0" + height: 120; width: 420 + + color: "transparent" + border.width: 5; border.color: firstScope.wantsFocus?"blue":"black" + + Rectangle { + id: item1; objectName: "item1" + x: 10; y: 10; width: 100; height: 100; color: "green" + border.width: 5; border.color: wantsFocus?"blue":"black" + focus: true + + Rectangle { + width: 50; height: 50; anchors.centerIn: parent + color: parent.focus?"red":"transparent" + } + } + + Rectangle { + id: item2; objectName: "item2" + x: 310; y: 10; width: 100; height: 100; color: "green" + border.width: 5; border.color: wantsFocus?"blue":"black" + + Rectangle { + width: 50; height: 50; anchors.centerIn: parent + color: parent.focus?"red":"transparent" + } + } + } + } + + FocusScope { + id: secondScope + + Rectangle { + objectName: "item3" + y: 160; height: 120; width: 420 + + color: "transparent" + border.width: 5; border.color: secondScope.wantsFocus?"blue":"black" + + Rectangle { + id: item4; objectName: "item4" + x: 10; y: 10; width: 100; height: 100; color: "green" + border.width: 5; border.color: wantsFocus?"blue":"black" + + Rectangle { + width: 50; height: 50; anchors.centerIn: parent + color: parent.focus?"red":"transparent" + } + } + + Rectangle { + id: item5; objectName: "item5" + x: 310; y: 10; width: 100; height: 100; color: "green" + border.width: 5; border.color: wantsFocus?"blue":"black" + + Rectangle { + width: 50; height: 50; anchors.centerIn: parent + color: parent.focus?"red":"transparent" + } + } + } + } + } + Keys.onDigit4Pressed: item4.focus = true + Keys.onDigit5Pressed: item5.forceFocus() +} diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test.qml index 647e5bf..f060bdc 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test.qml @@ -20,7 +20,7 @@ Rectangle { color: "transparent" border.width: 5 - //border.color: myScope.wantsFocus?"blue":"black" + border.color: myScope.wantsFocus?"blue":"black" Rectangle { id: item1; objectName: "item1" diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml index d8bd390..e41c6b8 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test4.qml @@ -19,7 +19,7 @@ Rectangle { color: "transparent" border.width: 5 - //border.color: myScope.wantsFocus?"blue":"black" + border.color: myScope.wantsFocus?"blue":"black" Rectangle { id: item1; objectName: "item1" diff --git a/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml b/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml index da452cf..838e557 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml +++ b/tests/auto/declarative/qdeclarativefocusscope/data/test5.qml @@ -20,7 +20,7 @@ Rectangle { color: "transparent" border.width: 5 - //border.color: myScope.wantsFocus?"blue":"black" + border.color: myScope.wantsFocus?"blue":"black" Rectangle { x: 10; y: 10 diff --git a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp index 1bd8331..04bb1c5 100644 --- a/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp +++ b/tests/auto/declarative/qdeclarativefocusscope/tst_qdeclarativefocusscope.cpp @@ -63,6 +63,7 @@ private slots: void nested(); void noFocus(); void textEdit(); + void forceFocus(); }; /* @@ -273,6 +274,62 @@ void tst_qdeclarativefocusscope::textEdit() delete view; } +void tst_qdeclarativefocusscope::forceFocus() +{ + QDeclarativeView *view = new QDeclarativeView; + view->setSource(QUrl::fromLocalFile(SRCDIR "/data/forcefocus.qml")); + + QDeclarativeRectangle *item0 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item0")); + QDeclarativeRectangle *item1 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item1")); + QDeclarativeRectangle *item2 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item2")); + QDeclarativeRectangle *item3 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item3")); + QDeclarativeRectangle *item4 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item4")); + QDeclarativeRectangle *item5 = findItem<QDeclarativeRectangle>(view->rootObject(), QLatin1String("item5")); + QVERIFY(item0 != 0); + QVERIFY(item1 != 0); + QVERIFY(item2 != 0); + QVERIFY(item3 != 0); + QVERIFY(item4 != 0); + QVERIFY(item5 != 0); + + view->show(); + qApp->setActiveWindow(view); + qApp->processEvents(); + +#ifdef Q_WS_X11 + // to be safe and avoid failing setFocus with window managers + qt_x11_wait_for_window_manager(view); +#endif + + QVERIFY(view->hasFocus()); + QVERIFY(view->scene()->hasFocus()); + QVERIFY(item0->wantsFocus() == true); + QVERIFY(item1->hasFocus() == true); + QVERIFY(item2->hasFocus() == false); + QVERIFY(item3->wantsFocus() == false); + QVERIFY(item4->hasFocus() == false); + QVERIFY(item5->hasFocus() == false); + + QTest::keyClick(view, Qt::Key_4); + QVERIFY(item0->wantsFocus() == true); + QVERIFY(item1->hasFocus() == true); + QVERIFY(item2->hasFocus() == false); + QVERIFY(item3->wantsFocus() == false); + QVERIFY(item4->hasFocus() == false); + QVERIFY(item5->hasFocus() == false); + + QTest::keyClick(view, Qt::Key_5); + QVERIFY(item0->wantsFocus() == false); + QVERIFY(item1->hasFocus() == false); + QVERIFY(item2->hasFocus() == false); + QVERIFY(item3->wantsFocus() == true); + QVERIFY(item4->hasFocus() == false); + QVERIFY(item5->hasFocus() == true); + + delete view; +} + + QTEST_MAIN(tst_qdeclarativefocusscope) #include "tst_qdeclarativefocusscope.moc" diff --git a/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp b/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp index 5cdc96c..36908d9 100644 --- a/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp +++ b/tests/auto/declarative/qdeclarativefontloader/tst_qdeclarativefontloader.cpp @@ -121,7 +121,7 @@ void tst_qdeclarativefontloader::localFont() void tst_qdeclarativefontloader::failLocalFont() { QString componentStr = "import Qt 4.7\nFontLoader { source: \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\" }"; - QTest::ignoreMessage(QtWarningMsg, QString("Cannot load font: QUrl( \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\" ) ").toUtf8().constData()); + QTest::ignoreMessage(QtWarningMsg, QString("file::2:1: QML FontLoader: Cannot load font: \"" + QUrl::fromLocalFile(SRCDIR "/data/dummy.ttf").toString() + "\"").toUtf8().constData()); QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create()); @@ -165,7 +165,7 @@ void tst_qdeclarativefontloader::redirWebFont() void tst_qdeclarativefontloader::failWebFont() { QString componentStr = "import Qt 4.7\nFontLoader { source: \"http://localhost:14448/nonexist.ttf\" }"; - QTest::ignoreMessage(QtWarningMsg, "Cannot load font: QUrl( \"http://localhost:14448/nonexist.ttf\" ) "); + QTest::ignoreMessage(QtWarningMsg, "file::2:1: QML FontLoader: Cannot load font: \"http://localhost:14448/nonexist.ttf\""); QDeclarativeComponent component(&engine); component.setData(componentStr.toLatin1(), QUrl::fromLocalFile("")); QDeclarativeFontLoader *fontObject = qobject_cast<QDeclarativeFontLoader*>(component.create()); diff --git a/tests/auto/declarative/qdeclarativeimage/data/green.png b/tests/auto/declarative/qdeclarativeimage/data/green.png Binary files differnew file mode 100644 index 0000000..0a2e153 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimage/data/green.png diff --git a/tests/auto/declarative/qdeclarativeimage/data/tiling.qml b/tests/auto/declarative/qdeclarativeimage/data/tiling.qml new file mode 100644 index 0000000..32839bb --- /dev/null +++ b/tests/auto/declarative/qdeclarativeimage/data/tiling.qml @@ -0,0 +1,16 @@ +import Qt 4.7 + +Rectangle { + width: 800; height: 600 + + Image { + objectName: "vTiling"; height: 550; width: 200 + source: "green.png"; fillMode: Image.TileVertically + } + + Image { + objectName: "hTiling"; x: 225; height: 250; width: 550 + source: "green.png"; fillMode: Image.TileHorizontally + } +} + diff --git a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp index 854bcdd..73aefaf 100644 --- a/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp +++ b/tests/auto/declarative/qdeclarativeimage/tst_qdeclarativeimage.cpp @@ -51,6 +51,7 @@ #include <private/qdeclarativeimagebase_p.h> #include <private/qdeclarativeloader_p.h> #include <QtDeclarative/qdeclarativecontext.h> +#include <QtDeclarative/qdeclarativeexpression.h> #include "../shared/testhttpserver.h" @@ -86,8 +87,12 @@ private slots: void pixmap(); void svg(); void big(); + void tiling_QTBUG_6716(); private: + template<typename T> + T *findItem(QGraphicsObject *parent, const QString &id, int index=-1); + QDeclarativeEngine engine; }; @@ -124,13 +129,13 @@ void tst_qdeclarativeimage::imageSource_data() QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/colors.png").toString() << 120.0 << 120.0 << false << false << ""; QTest::newRow("local async") << QUrl::fromLocalFile(SRCDIR "/data/colors1.png").toString() << 120.0 << 120.0 << false << true << ""; QTest::newRow("local not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString() << 0.0 << 0.0 << false - << false << "QML Image (file::2:1) Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString(); + << false << "file::2:1: QML Image: Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file.png").toString(); QTest::newRow("local async not found") << QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString() << 0.0 << 0.0 << false - << true << "QML Image (file::2:1) Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString(); + << true << "file::2:1: QML Image: Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/no-such-file-1.png").toString(); QTest::newRow("remote") << SERVER_ADDR "/colors.png" << 120.0 << 120.0 << true << false << ""; QTest::newRow("remote svg") << SERVER_ADDR "/heart.svg" << 550.0 << 500.0 << true << false << ""; QTest::newRow("remote not found") << SERVER_ADDR "/no-such-file.png" << 0.0 << 0.0 << true - << false << "QML Image (file::2:1) Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found"; + << false << "file::2:1: QML Image: Error downloading " SERVER_ADDR "/no-such-file.png - server replied: Not found"; } @@ -161,7 +166,7 @@ void tst_qdeclarativeimage::imageSource() if (async) QVERIFY(obj->asynchronous() == true); - + if (remote || async) TRY_WAIT(obj->status() == QDeclarativeImage::Loading); @@ -339,6 +344,76 @@ void tst_qdeclarativeimage::big() delete obj; } +void tst_qdeclarativeimage::tiling_QTBUG_6716() +{ + QDeclarativeView *canvas = new QDeclarativeView(0); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/tiling.qml")); + canvas->show(); + qApp->processEvents(); + + QDeclarativeImage *vTiling = findItem<QDeclarativeImage>(canvas->rootObject(), "vTiling"); + QDeclarativeImage *hTiling = findItem<QDeclarativeImage>(canvas->rootObject(), "hTiling"); + + QVERIFY(vTiling != 0); + QVERIFY(hTiling != 0); + + { + QPixmap pm(vTiling->width(), vTiling->height()); + QPainter p(&pm); + vTiling->paint(&p, 0, 0); + + QImage img = pm.toImage(); + for (int x = 0; x < vTiling->width(); ++x) { + for (int y = 0; y < vTiling->height(); ++y) { + QVERIFY(img.pixel(x, y) == qRgb(0, 255, 0)); + } + } + } + + { + QPixmap pm(hTiling->width(), hTiling->height()); + QPainter p(&pm); + hTiling->paint(&p, 0, 0); + + QImage img = pm.toImage(); + for (int x = 0; x < hTiling->width(); ++x) { + for (int y = 0; y < hTiling->height(); ++y) { + QVERIFY(img.pixel(x, y) == qRgb(0, 255, 0)); + } + } + } +} + +/* + Find an item with the specified objectName. If index is supplied then the + item must also evaluate the {index} expression equal to index +*/ +template<typename T> +T *tst_qdeclarativeimage::findItem(QGraphicsObject *parent, const QString &objectName, int index) +{ + const QMetaObject &mo = T::staticMetaObject; + //qDebug() << parent->childItems().count() << "children"; + for (int i = 0; i < parent->childItems().count(); ++i) { + QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(parent->childItems().at(i)); + if(!item) + continue; + //qDebug() << "try" << item; + if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) { + if (index != -1) { + QDeclarativeExpression e(qmlContext(item), "index", item); + if (e.value().toInt() == index) + return static_cast<T*>(item); + } else { + return static_cast<T*>(item); + } + } + item = findItem<T>(item, objectName, index); + if (item) + return static_cast<T*>(item); + } + + return 0; +} QTEST_MAIN(tst_qdeclarativeimage) diff --git a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp index aca951b..cc4ec20 100644 --- a/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp +++ b/tests/auto/declarative/qdeclarativeimageprovider/tst_qdeclarativeimageprovider.cpp @@ -96,9 +96,9 @@ void tst_qdeclarativeimageprovider::imageSource_data() QTest::newRow("exists") << "image://test/exists.png" << "" << QSize(100,100) << ""; QTest::newRow("scaled") << "image://test/exists.png" << "sourceSize: \"80x30\"" << QSize(80,30) << ""; QTest::newRow("missing") << "image://test/no-such-file.png" << "" << QSize() - << "QML Image (file::2:1) Failed to get image from provider: image://test/no-such-file.png"; + << "file::2:1: QML Image: Failed to get image from provider: image://test/no-such-file.png"; QTest::newRow("unknown provider") << "image://bogus/exists.png" << "" << QSize() - << "QML Image (file::2:1) Failed to get image from provider: image://bogus/exists.png"; + << "file::2:1: QML Image: Failed to get image from provider: image://bogus/exists.png"; } @@ -158,7 +158,7 @@ void tst_qdeclarativeimageprovider::removeProvider() QCOMPARE(obj->width(), 100.0); // remove the provider and confirm - QString error("QML Image (file::2:1) Failed to get image from provider: image://test2/exists2.png"); + QString error("file::2:1: QML Image: Failed to get image from provider: image://test2/exists2.png"); QTest::ignoreMessage(QtWarningMsg, error.toUtf8()); diff --git a/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp b/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp index aa3f03b..36db448 100644 --- a/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp +++ b/tests/auto/declarative/qdeclarativeinfo/tst_qdeclarativeinfo.cpp @@ -75,14 +75,14 @@ void tst_qdeclarativeinfo::qmlObject() QObject *object = component.create(); QVERIFY(object != 0); - QString message = "QML QObject_QML_0 (" + component.url().toString() + ":3:1) Test Message"; + QString message = component.url().toString() + ":3:1: QML QObject_QML_0: Test Message"; QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); qmlInfo(object) << "Test Message"; QObject *nested = qvariant_cast<QObject *>(object->property("nested")); QVERIFY(nested != 0); - message = "QML QtObject (" + component.url().toString() + ":6:13) Second Test Message"; + message = component.url().toString() + ":6:13: QML QtObject: Second Test Message"; QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); qmlInfo(nested) << "Second Test Message"; } @@ -99,11 +99,11 @@ void tst_qdeclarativeinfo::nestedQmlObject() QObject *nested2 = qvariant_cast<QObject *>(object->property("nested2")); QVERIFY(nested2 != 0); - QString message = "QML NestedObject (" + component.url().toString() + ":5:13) Outer Object"; + QString message = component.url().toString() + ":5:13: QML NestedObject: Outer Object"; QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); qmlInfo(nested) << "Outer Object"; - message = "QML QtObject (" + TEST_FILE("NestedObject.qml").toString() + ":6:14) Inner Object"; + message = TEST_FILE("NestedObject.qml").toString() + ":6:14: QML QtObject: Inner Object"; QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); qmlInfo(nested2) << "Inner Object"; } @@ -111,17 +111,17 @@ void tst_qdeclarativeinfo::nestedQmlObject() void tst_qdeclarativeinfo::nonQmlObject() { QObject object; - QTest::ignoreMessage(QtWarningMsg, "QML QtObject (unknown location) Test Message"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML QtObject: Test Message"); qmlInfo(&object) << "Test Message"; QPushButton pbObject; - QTest::ignoreMessage(QtWarningMsg, "QML QPushButton (unknown location) Test Message"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML QPushButton: Test Message"); qmlInfo(&pbObject) << "Test Message"; } void tst_qdeclarativeinfo::nullObject() { - QTest::ignoreMessage(QtWarningMsg, "QML (unknown location) Null Object Test Message"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: Null Object Test Message"); qmlInfo(0) << "Null Object Test Message"; } @@ -130,7 +130,7 @@ void tst_qdeclarativeinfo::nonQmlContextedObject() QObject object; QDeclarativeContext context(&engine); QDeclarativeEngine::setContextForObject(&object, &context); - QTest::ignoreMessage(QtWarningMsg, "QML QtObject (unknown location) Test Message"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML QtObject: Test Message"); qmlInfo(&object) << "Test Message"; } diff --git a/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp b/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp index f4df130..9ae26f2 100644 --- a/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp +++ b/tests/auto/declarative/qdeclarativeinstruction/tst_qdeclarativeinstruction.cpp @@ -332,16 +332,6 @@ void tst_qdeclarativeinstruction::dump() { QDeclarativeInstruction i; - i.line = 28; - i.type = QDeclarativeInstruction::StoreScript; - i.storeScript.value = 2; - //i.storeScript.fileName = 18; - //i.storeScript.lineNumber = 28; - data->bytecode << i; - } - - { - QDeclarativeInstruction i; i.line = 29; i.type = QDeclarativeInstruction::StoreScriptString; i.storeScriptString.propertyIndex = 24; @@ -571,30 +561,29 @@ void tst_qdeclarativeinstruction::dump() << "25\t\t25\tSTORE_VARIANT_OBJECT\t22" << "26\t\t26\tSTORE_INTERFACE\t\t23" << "27\t\t27\tSTORE_SIGNAL\t\t2\t3\t\t\"console.log(1921)\"" - << "28\t\t28\tSTORE_SCRIPT\t\t2" - << "29\t\t29\tSTORE_SCRIPT_STRING\t24\t3\t1" - << "30\t\t30\tASSIGN_SIGNAL_OBJECT\t0\t\t\t\"mySignal\"" - << "31\t\t31\tASSIGN_CUSTOMTYPE\t25\t4" - << "32\t\t32\tSTORE_BINDING\t26\t3\t2" - << "33\t\t33\tSTORE_COMPILED_BINDING\t27\t2\t4" - << "34\t\t34\tSTORE_VALUE_SOURCE\t29\t4" - << "35\t\t35\tSTORE_VALUE_INTERCEPTOR\t30\t-4" - << "36\t\t36\tBEGIN\t\t\t4" - << "37\t\t38\tSTORE_OBJECT_QLIST" - << "38\t\t39\tASSIGN_OBJECT_LIST" - << "39\t\t40\tFETCH_ATTACHED\t\t23" - << "40\t\t42\tFETCH_QLIST\t\t32" - << "41\t\t43\tFETCH\t\t\t33" - << "42\t\t44\tFETCH_VALUE\t\t34\t6" - << "43\t\t45\tPOP" - << "44\t\t46\tPOP_QLIST" - << "45\t\t47\tPOP_VALUE\t\t35\t8" - << "46\t\t48\tDEFER\t\t\t7" - << "47\t\tNA\tDEFER\t\t\t7" - << "48\t\t48\tSTORE_IMPORTED_SCRIPT\t2" - << "49\t\t50\tXXX UNKOWN INSTRUCTION\t1234" - << "50\t\t51\tSTORE_VARIANT_INTEGER\t\t32\t11" - << "51\t\t52\tSTORE_VARIANT_DOUBLE\t\t19\t33.7" + << "28\t\t29\tSTORE_SCRIPT_STRING\t24\t3\t1" + << "29\t\t30\tASSIGN_SIGNAL_OBJECT\t0\t\t\t\"mySignal\"" + << "30\t\t31\tASSIGN_CUSTOMTYPE\t25\t4" + << "31\t\t32\tSTORE_BINDING\t26\t3\t2" + << "32\t\t33\tSTORE_COMPILED_BINDING\t27\t2\t4" + << "33\t\t34\tSTORE_VALUE_SOURCE\t29\t4" + << "34\t\t35\tSTORE_VALUE_INTERCEPTOR\t30\t-4" + << "35\t\t36\tBEGIN\t\t\t4" + << "36\t\t38\tSTORE_OBJECT_QLIST" + << "37\t\t39\tASSIGN_OBJECT_LIST" + << "38\t\t40\tFETCH_ATTACHED\t\t23" + << "39\t\t42\tFETCH_QLIST\t\t32" + << "40\t\t43\tFETCH\t\t\t33" + << "41\t\t44\tFETCH_VALUE\t\t34\t6" + << "42\t\t45\tPOP" + << "43\t\t46\tPOP_QLIST" + << "44\t\t47\tPOP_VALUE\t\t35\t8" + << "45\t\t48\tDEFER\t\t\t7" + << "46\t\tNA\tDEFER\t\t\t7" + << "47\t\t48\tSTORE_IMPORTED_SCRIPT\t2" + << "48\t\t50\tXXX UNKOWN INSTRUCTION\t1234" + << "49\t\t51\tSTORE_VARIANT_INTEGER\t\t32\t11" + << "50\t\t52\tSTORE_VARIANT_DOUBLE\t\t19\t33.7" << "-------------------------------------------------------------------------------"; messages = QStringList(); diff --git a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp index 4400116..d2c328e 100644 --- a/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp +++ b/tests/auto/declarative/qdeclarativeitem/tst_qdeclarativeitem.cpp @@ -385,12 +385,15 @@ void tst_QDeclarativeItem::mapCoordinates() Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, x), Q_ARG(QVariant, y))); QCOMPARE(result.value<QPointF>(), qobject_cast<QGraphicsItem*>(a)->mapFromScene(x, y)); - QTest::ignoreMessage(QtWarningMsg, "mapToItem() given argument \"1122\" which is neither null nor an Item"); + QString warning1 = QUrl::fromLocalFile(SRCDIR "/data/mapCoordinates.qml").toString() + ":7:5: QML Item: mapToItem() given argument \"1122\" which is neither null nor an Item"; + QString warning2 = QUrl::fromLocalFile(SRCDIR "/data/mapCoordinates.qml").toString() + ":7:5: QML Item: mapFromItem() given argument \"1122\" which is neither null nor an Item"; + + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); QVERIFY(QMetaObject::invokeMethod(root, "checkMapAToInvalid", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, x), Q_ARG(QVariant, y))); QVERIFY(result.toBool()); - QTest::ignoreMessage(QtWarningMsg, "mapFromItem() given argument \"1122\" which is neither null nor an Item"); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); QVERIFY(QMetaObject::invokeMethod(root, "checkMapAFromInvalid", Q_RETURN_ARG(QVariant, result), Q_ARG(QVariant, x), Q_ARG(QVariant, y))); QVERIFY(result.toBool()); diff --git a/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.errors.txt new file mode 100644 index 0000000..78aa471 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.errors.txt @@ -0,0 +1 @@ +4:5:Invalid use of namespace diff --git a/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.qml b/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.qml new file mode 100644 index 0000000..4681879 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/assignToNamespace.qml @@ -0,0 +1,5 @@ +import Qt 4.6 as Qt + +Qt.QtObject { + Qt: 10 +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.7.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/component.7.errors.txt new file mode 100644 index 0000000..b144814 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/component.7.errors.txt @@ -0,0 +1 @@ +3:1:Component objects cannot declare new properties. diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.7.qml b/tests/auto/declarative/qdeclarativelanguage/data/component.7.qml new file mode 100644 index 0000000..ad708fe --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/component.7.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Component { + property int a + QtObject {} +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.8.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/component.8.errors.txt new file mode 100644 index 0000000..6f2d0d2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/component.8.errors.txt @@ -0,0 +1 @@ +3:1:Component objects cannot declare new signals. diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.8.qml b/tests/auto/declarative/qdeclarativelanguage/data/component.8.qml new file mode 100644 index 0000000..67b1b89 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/component.8.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Component { + signal a + QtObject {} +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.9.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/component.9.errors.txt new file mode 100644 index 0000000..92f1456 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/component.9.errors.txt @@ -0,0 +1 @@ +3:1:Component objects cannot declare new functions. diff --git a/tests/auto/declarative/qdeclarativelanguage/data/component.9.qml b/tests/auto/declarative/qdeclarativelanguage/data/component.9.qml new file mode 100644 index 0000000..a4dbae0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/component.9.qml @@ -0,0 +1,7 @@ +import Qt 4.6 + +Component { + function a() {} + QtObject {} +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.errors.txt new file mode 100644 index 0000000..1f9f916 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.errors.txt @@ -0,0 +1 @@ +5:5:Duplicate default property diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.qml new file mode 100644 index 0000000..1efe791 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.1.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +QtObject { + default property QtObject a + default property QtObject b +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.errors.txt new file mode 100644 index 0000000..7a4f63b --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.errors.txt @@ -0,0 +1 @@ +5:5:Duplicate property name diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.qml new file mode 100644 index 0000000..4e7b5ae --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.2.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +QtObject { + property int a + property bool a +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt new file mode 100644 index 0000000..c5860a2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.errors.txt @@ -0,0 +1 @@ +3:1:Duplicate signal name diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.qml new file mode 100644 index 0000000..573c1ba --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.3.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +QtObject { + signal a + signal a +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt new file mode 100644 index 0000000..b293c86 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.errors.txt @@ -0,0 +1 @@ +3:1:Duplicate method name diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.qml new file mode 100644 index 0000000..51dd834 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.4.qml @@ -0,0 +1,6 @@ +import Qt 4.6 + +QtObject { + function a() {} + function a() {} +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.errors.txt new file mode 100644 index 0000000..015d55b --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.errors.txt @@ -0,0 +1 @@ +3:1:UnknownType is not a type diff --git a/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.qml b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.qml new file mode 100644 index 0000000..6b93e00 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/dynamicMeta.5.qml @@ -0,0 +1,5 @@ +import Qt 4.6 + +QtObject { + property UnknownType a +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.errors.txt new file mode 100644 index 0000000..9848e48 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.errors.txt @@ -0,0 +1 @@ +3:1:No property alias location diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.qml new file mode 100644 index 0000000..985fb94 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.1.qml @@ -0,0 +1,5 @@ +import Qt 4.7 + +QtObject { + property alias a +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.errors.txt new file mode 100644 index 0000000..3e15628 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.errors.txt @@ -0,0 +1 @@ +4:23:Invalid alias location diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.qml new file mode 100644 index 0000000..a2ac91c --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.2.qml @@ -0,0 +1,6 @@ +import Qt 4.7 + +QtObject { + property alias a: 10 +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt new file mode 100644 index 0000000..7260be4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.errors.txt @@ -0,0 +1 @@ +5:23:Invalid alias reference. An alias reference must be specified as <id> or <id>.<property> diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml new file mode 100644 index 0000000..cc71753 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.3.qml @@ -0,0 +1,6 @@ +import Test 1.0 + +MyTypeObject { + id: root + property alias a: root.rectProperty.x +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt new file mode 100644 index 0000000..7260be4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.errors.txt @@ -0,0 +1 @@ +5:23:Invalid alias reference. An alias reference must be specified as <id> or <id>.<property> diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.qml new file mode 100644 index 0000000..cfdfca0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.4.qml @@ -0,0 +1,7 @@ +import Test 1.0 + +MyTypeObject { + id: root + property alias a: print("Hello!") +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.errors.txt new file mode 100644 index 0000000..6f78e59 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.errors.txt @@ -0,0 +1 @@ +5:23:Invalid alias reference. Unable to find id "otherroot" diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.qml new file mode 100644 index 0000000..0c1d5d7 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.5.qml @@ -0,0 +1,7 @@ +import Test 1.0 + +MyTypeObject { + id: root + property alias a: otherroot +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.errors.txt new file mode 100644 index 0000000..93652a7 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.errors.txt @@ -0,0 +1 @@ +5:23:Invalid alias location diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.qml new file mode 100644 index 0000000..edfdb24 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAlias.6.qml @@ -0,0 +1,7 @@ +import Test 1.0 + +MyTypeObject { + id: root + property alias a: root.foobar +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.errors.txt new file mode 100644 index 0000000..189a795 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.errors.txt @@ -0,0 +1 @@ +4:13:Attached properties cannot be used here diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.qml new file mode 100644 index 0000000..7de503e --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.12.qml @@ -0,0 +1,6 @@ +import Test 1.0 + +MyTypeObject { + grouped.MyQmlObject.value: 10 +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.errors.txt new file mode 100644 index 0000000..46d7be2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.errors.txt @@ -0,0 +1 @@ +5:9:Attached properties cannot be used here diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.qml new file mode 100644 index 0000000..986ab85 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidAttachedProperty.13.qml @@ -0,0 +1,8 @@ +import Test 1.0 + +MyTypeObject { + grouped { + MyQmlObject.value: 10 + } +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.errors.txt new file mode 100644 index 0000000..b4210a1 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.errors.txt @@ -0,0 +1 @@ +3:5:"MyQmlObject" cannot operate on "value" diff --git a/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.qml b/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.qml new file mode 100644 index 0000000..d748bf4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/invalidOn.qml @@ -0,0 +1,4 @@ +import Test 1.0 +MyQmlObject { + MyQmlObject on value {} +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.errors.txt new file mode 100644 index 0000000..35d2d35 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.errors.txt @@ -0,0 +1 @@ +4:24:Cannot assign object to list diff --git a/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.qml new file mode 100644 index 0000000..6c628e4 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/listAssignment.1.qml @@ -0,0 +1,6 @@ +import Test 1.0 +import Qt 4.7 +MyContainer { + containerChildren: QtObject {} +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.errors.txt new file mode 100644 index 0000000..e1f7ec5 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.errors.txt @@ -0,0 +1 @@ +5:5:Property value set multiple times diff --git a/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.qml b/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.qml new file mode 100644 index 0000000..7d03139 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/multiSet.11.qml @@ -0,0 +1,6 @@ +import Test 1.0 + +MyTypeObject { + rectProperty.x: 10 + rectProperty.x: 11 +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/noCreation.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/noCreation.errors.txt new file mode 100644 index 0000000..23cd3f3 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/noCreation.errors.txt @@ -0,0 +1 @@ +3:1:Keys is only available via attached properties diff --git a/tests/auto/declarative/qdeclarativelanguage/data/noCreation.qml b/tests/auto/declarative/qdeclarativelanguage/data/noCreation.qml new file mode 100644 index 0000000..0612fa2 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/noCreation.qml @@ -0,0 +1,4 @@ +import Qt 4.6 + +Keys { +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.errors.txt new file mode 100644 index 0000000..d857a04 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.errors.txt @@ -0,0 +1 @@ +3:5:Invalid property assignment: "readOnlyString" is a read-only property diff --git a/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.qml b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.qml new file mode 100644 index 0000000..5338ac7 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.4.qml @@ -0,0 +1,4 @@ +import Test 1.0 +MyQmlObject { + MyPropertyValueSource on readOnlyString {} +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.errors.txt new file mode 100644 index 0000000..baf4766 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.errors.txt @@ -0,0 +1 @@ +3:27:Invalid property assignment: "readOnlyEnumProperty" is a read-only property diff --git a/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.qml b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.qml new file mode 100644 index 0000000..422d13d --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/readOnly.5.qml @@ -0,0 +1,4 @@ +import Test 1.0 +MyTypeObject { + readOnlyEnumProperty: MyTypeObject.EnumValue1 +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.errors.txt new file mode 100644 index 0000000..14463e0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.errors.txt @@ -0,0 +1 @@ +4:21:Invalid property assignment: script expected diff --git a/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.qml b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.qml new file mode 100644 index 0000000..f07d223 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.1.qml @@ -0,0 +1,5 @@ +import Test 1.0 + +MyTypeObject { + scriptProperty: MyTypeObject {} +} diff --git a/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.errors.txt new file mode 100644 index 0000000..f8a776f --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.errors.txt @@ -0,0 +1 @@ +4:40:Cannot assign multiple values to a script property diff --git a/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.qml b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.qml new file mode 100644 index 0000000..dc825c7 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/scriptString.2.qml @@ -0,0 +1,6 @@ +import Test 1.0 + +MyTypeObject { + scriptProperty: [ MyTypeObject {}, MyTypeObject {} ] +} + diff --git a/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.errors.txt b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.errors.txt new file mode 100644 index 0000000..77cf210 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.errors.txt @@ -0,0 +1 @@ +4:24:Cannot assign object to property diff --git a/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.qml b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.qml new file mode 100644 index 0000000..1ddccc0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativelanguage/data/wrongType.16.qml @@ -0,0 +1,5 @@ +import Test 1.0 +import Qt 4.7 +MyQmlObject { + qmlobjectProperty: QtObject {} +} diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp index 623775a..5d87404 100644 --- a/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.cpp @@ -52,8 +52,7 @@ void registerTypes() qmlRegisterType<MyNamespace::MySecondNamespacedType>("Test",1,0,"MySecondNamespacedType"); qmlRegisterType<MyGroupedObject>(); - qmlRegisterCustomType<MyCustomParserType>("Test", 1, 0, "MyCustomParserType", "MyCustomParserType", - new MyCustomParserTypeParser); + qmlRegisterCustomType<MyCustomParserType>("Test", 1, 0, "MyCustomParserType", new MyCustomParserTypeParser); } QVariant myCustomVariantTypeConverter(const QString &data) diff --git a/tests/auto/declarative/qdeclarativelanguage/testtypes.h b/tests/auto/declarative/qdeclarativelanguage/testtypes.h index 8c163a5..89f99c8 100644 --- a/tests/auto/declarative/qdeclarativelanguage/testtypes.h +++ b/tests/auto/declarative/qdeclarativelanguage/testtypes.h @@ -167,8 +167,9 @@ private: MyCustomVariantType m_custom; int m_propertyWithNotify; }; +QML_DECLARE_TYPE(MyQmlObject) QML_DECLARE_TYPEINFO(MyQmlObject, QML_HAS_ATTACHED_PROPERTIES) -QML_DECLARE_TYPE(MyQmlObject); + class MyGroupedObject : public QObject { @@ -187,8 +188,6 @@ private: QDeclarativeScriptString m_script; }; -QML_DECLARE_TYPE(MyGroupedObject); - class MyTypeObject : public QObject { @@ -201,6 +200,7 @@ class MyTypeObject : public QObject Q_PROPERTY(QDeclarativeComponent *componentProperty READ componentProperty WRITE setComponentProperty) Q_PROPERTY(MyFlags flagProperty READ flagProperty WRITE setFlagProperty) Q_PROPERTY(MyEnum enumProperty READ enumProperty WRITE setEnumProperty) + Q_PROPERTY(MyEnum readOnlyEnumProperty READ readOnlyEnumProperty) Q_PROPERTY(QString stringProperty READ stringProperty WRITE setStringProperty) Q_PROPERTY(uint uintProperty READ uintProperty WRITE setUintProperty) Q_PROPERTY(int intProperty READ intProperty WRITE setIntProperty) @@ -274,6 +274,10 @@ public: enumPropertyValue = v; } + MyEnum readOnlyEnumProperty() const { + return EnumVal1; + } + QString stringPropertyValue; QString stringProperty() const { return stringPropertyValue; @@ -462,28 +466,29 @@ signals: void rectPropertyChanged(); }; Q_DECLARE_OPERATORS_FOR_FLAGS(MyTypeObject::MyFlags) -QML_DECLARE_TYPE(MyTypeObject); + class MyContainer : public QObject { Q_OBJECT Q_PROPERTY(QDeclarativeListProperty<QObject> children READ children) + Q_PROPERTY(QDeclarativeListProperty<MyContainer> containerChildren READ containerChildren) Q_PROPERTY(QDeclarativeListProperty<MyInterface> qlistInterfaces READ qlistInterfaces) Q_CLASSINFO("DefaultProperty", "children") public: MyContainer() {} QDeclarativeListProperty<QObject> children() { return QDeclarativeListProperty<QObject>(this, m_children); } + QDeclarativeListProperty<MyContainer> containerChildren() { return QDeclarativeListProperty<MyContainer>(this, m_containerChildren); } QList<QObject *> *getChildren() { return &m_children; } QDeclarativeListProperty<MyInterface> qlistInterfaces() { return QDeclarativeListProperty<MyInterface>(this, m_interfaces); } QList<MyInterface *> *getQListInterfaces() { return &m_interfaces; } + QList<MyContainer*> m_containerChildren; QList<QObject*> m_children; QList<MyInterface *> m_interfaces; }; -QML_DECLARE_TYPE(MyContainer); - class MyPropertyValueSource : public QObject, public QDeclarativePropertyValueSource { @@ -499,7 +504,7 @@ public: prop = p; } }; -QML_DECLARE_TYPE(MyPropertyValueSource); + class MyDotPropertyObject : public QObject { @@ -540,7 +545,6 @@ private: bool m_ownRWObj; }; -QML_DECLARE_TYPE(MyDotPropertyObject); namespace MyNamespace { class MyNamespacedType : public QObject @@ -559,8 +563,6 @@ namespace MyNamespace { QList<MyNamespacedType *> m_list; }; } -QML_DECLARE_TYPE(MyNamespace::MyNamespacedType); -QML_DECLARE_TYPE(MyNamespace::MySecondNamespacedType); class MyCustomParserType : public QObject { @@ -574,8 +576,6 @@ public: void setCustomData(QObject *, const QByteArray &) {} }; -QML_DECLARE_TYPE(MyCustomParserType); - void registerTypes(); #endif // TESTTYPES_H diff --git a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp index 8feab32..c1397de 100644 --- a/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp +++ b/tests/auto/declarative/qdeclarativelanguage/tst_qdeclarativelanguage.cpp @@ -225,11 +225,15 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("wrongType (number string for int)") << "wrongType.13.qml" << "wrongType.13.errors.txt" << false; QTest::newRow("wrongType (int for string)") << "wrongType.14.qml" << "wrongType.14.errors.txt" << false; QTest::newRow("wrongType (int for url)") << "wrongType.15.qml" << "wrongType.15.errors.txt" << false; + QTest::newRow("wrongType (invalid object)") << "wrongType.16.qml" << "wrongType.16.errors.txt" << false; QTest::newRow("readOnly.1") << "readOnly.1.qml" << "readOnly.1.errors.txt" << false; QTest::newRow("readOnly.2") << "readOnly.2.qml" << "readOnly.2.errors.txt" << false; QTest::newRow("readOnly.3") << "readOnly.3.qml" << "readOnly.3.errors.txt" << false; + QTest::newRow("readOnly.4") << "readOnly.4.qml" << "readOnly.4.errors.txt" << false; + QTest::newRow("readOnly.5") << "readOnly.5.qml" << "readOnly.5.errors.txt" << false; + QTest::newRow("listAssignment.1") << "listAssignment.1.qml" << "listAssignment.1.errors.txt" << false; QTest::newRow("listAssignment.2") << "listAssignment.2.qml" << "listAssignment.2.errors.txt" << false; QTest::newRow("listAssignment.3") << "listAssignment.3.qml" << "listAssignment.3.errors.txt" << false; @@ -243,6 +247,9 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("invalidID.8") << "invalidID.8.qml" << "invalidID.8.errors.txt" << false; QTest::newRow("invalidID.9") << "invalidID.9.qml" << "invalidID.9.errors.txt" << false; + QTest::newRow("scriptString.1") << "scriptString.1.qml" << "scriptString.1.errors.txt" << false; + QTest::newRow("scriptString.2") << "scriptString.2.qml" << "scriptString.2.errors.txt" << false; + QTest::newRow("unsupportedProperty") << "unsupportedProperty.qml" << "unsupportedProperty.errors.txt" << false; QTest::newRow("nullDotProperty") << "nullDotProperty.qml" << "nullDotProperty.errors.txt" << true; QTest::newRow("fakeDotProperty") << "fakeDotProperty.qml" << "fakeDotProperty.errors.txt" << false; @@ -296,6 +303,9 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("Component.4") << "component.4.qml" << "component.4.errors.txt" << false; QTest::newRow("Component.5") << "component.5.qml" << "component.5.errors.txt" << false; QTest::newRow("Component.6") << "component.6.qml" << "component.6.errors.txt" << false; + QTest::newRow("Component.7") << "component.7.qml" << "component.7.errors.txt" << false; + QTest::newRow("Component.8") << "component.8.qml" << "component.8.errors.txt" << false; + QTest::newRow("Component.9") << "component.9.qml" << "component.9.errors.txt" << false; QTest::newRow("MultiSet.1") << "multiSet.1.qml" << "multiSet.1.errors.txt" << false; QTest::newRow("MultiSet.2") << "multiSet.2.qml" << "multiSet.2.errors.txt" << false; @@ -307,6 +317,20 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("MultiSet.8") << "multiSet.8.qml" << "multiSet.8.errors.txt" << false; QTest::newRow("MultiSet.9") << "multiSet.9.qml" << "multiSet.9.errors.txt" << false; QTest::newRow("MultiSet.10") << "multiSet.10.qml" << "multiSet.10.errors.txt" << false; + QTest::newRow("MultiSet.11") << "multiSet.11.qml" << "multiSet.11.errors.txt" << false; + + QTest::newRow("dynamicMeta.1") << "dynamicMeta.1.qml" << "dynamicMeta.1.errors.txt" << false; + QTest::newRow("dynamicMeta.2") << "dynamicMeta.2.qml" << "dynamicMeta.2.errors.txt" << false; + QTest::newRow("dynamicMeta.3") << "dynamicMeta.3.qml" << "dynamicMeta.3.errors.txt" << false; + QTest::newRow("dynamicMeta.4") << "dynamicMeta.4.qml" << "dynamicMeta.4.errors.txt" << false; + QTest::newRow("dynamicMeta.5") << "dynamicMeta.5.qml" << "dynamicMeta.5.errors.txt" << false; + + QTest::newRow("invalidAlias.1") << "invalidAlias.1.qml" << "invalidAlias.1.errors.txt" << false; + QTest::newRow("invalidAlias.2") << "invalidAlias.2.qml" << "invalidAlias.2.errors.txt" << false; + QTest::newRow("invalidAlias.3") << "invalidAlias.3.qml" << "invalidAlias.3.errors.txt" << false; + QTest::newRow("invalidAlias.4") << "invalidAlias.4.qml" << "invalidAlias.4.errors.txt" << false; + QTest::newRow("invalidAlias.5") << "invalidAlias.5.qml" << "invalidAlias.5.errors.txt" << false; + QTest::newRow("invalidAlias.6") << "invalidAlias.6.qml" << "invalidAlias.6.errors.txt" << false; QTest::newRow("invalidAttachedProperty.1") << "invalidAttachedProperty.1.qml" << "invalidAttachedProperty.1.errors.txt" << false; QTest::newRow("invalidAttachedProperty.2") << "invalidAttachedProperty.2.qml" << "invalidAttachedProperty.2.errors.txt" << false; @@ -319,6 +343,8 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("invalidAttachedProperty.9") << "invalidAttachedProperty.9.qml" << "invalidAttachedProperty.9.errors.txt" << false; QTest::newRow("invalidAttachedProperty.10") << "invalidAttachedProperty.10.qml" << "invalidAttachedProperty.10.errors.txt" << false; QTest::newRow("invalidAttachedProperty.11") << "invalidAttachedProperty.11.qml" << "invalidAttachedProperty.11.errors.txt" << false; + QTest::newRow("invalidAttachedProperty.12") << "invalidAttachedProperty.12.qml" << "invalidAttachedProperty.12.errors.txt" << false; + QTest::newRow("invalidAttachedProperty.13") << "invalidAttachedProperty.13.qml" << "invalidAttachedProperty.13.errors.txt" << false; QTest::newRow("emptySignal") << "emptySignal.qml" << "emptySignal.errors.txt" << false; QTest::newRow("emptySignal.2") << "emptySignal.2.qml" << "emptySignal.2.errors.txt" << false; @@ -330,7 +356,10 @@ void tst_qdeclarativelanguage::errors_data() QTest::newRow("missingValueTypeProperty") << "missingValueTypeProperty.qml" << "missingValueTypeProperty.errors.txt" << false; QTest::newRow("objectValueTypeProperty") << "objectValueTypeProperty.qml" << "objectValueTypeProperty.errors.txt" << false; QTest::newRow("enumTypes") << "enumTypes.qml" << "enumTypes.errors.txt" << false; + QTest::newRow("noCreation") << "noCreation.qml" << "noCreation.errors.txt" << false; QTest::newRow("destroyedSignal") << "destroyedSignal.qml" << "destroyedSignal.errors.txt" << false; + QTest::newRow("assignToNamespace") << "assignToNamespace.qml" << "assignToNamespace.errors.txt" << false; + QTest::newRow("invalidOn") << "invalidOn.qml" << "invalidOn.errors.txt" << false; } @@ -779,8 +808,7 @@ void tst_qdeclarativelanguage::valueTypes() QDeclarativeComponent component(&engine, TEST_FILE("valueTypes.qml")); VERIFY_ERRORS(0); - QString message = QLatin1String("QML MyTypeObject (") + component.url().toString() + - QLatin1String(":2:1) Binding loop detected for property \"rectProperty.width\""); + QString message = component.url().toString() + ":2:1: QML MyTypeObject: Binding loop detected for property \"rectProperty.width\""; QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); QTest::ignoreMessage(QtWarningMsg, qPrintable(message)); @@ -1133,8 +1161,6 @@ void tst_qdeclarativelanguage::testType(const QString& qml, const QString& type, } } -QML_DECLARE_TYPE(TestType) -QML_DECLARE_TYPE(TestType2) // Import tests (QT-558) diff --git a/tests/auto/declarative/qdeclarativelistmodel/data/enumerate.qml b/tests/auto/declarative/qdeclarativelistmodel/data/enumerate.qml new file mode 100644 index 0000000..8d23d4b --- /dev/null +++ b/tests/auto/declarative/qdeclarativelistmodel/data/enumerate.qml @@ -0,0 +1,24 @@ +import Qt 4.6 + +Item { + property string result + + ListModel { + id: model + + ListElement { + val1: 1 + val2: 2 + val3: "str" + val4: false + val5: true + } + } + + Component.onCompleted: { + var element = model.get(0); + + for (var i in element) + result += i+"="+element[i]+(element[i] ? "Y" : "N")+":"; + } +} diff --git a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp index 9d61ad0..e4c296f 100644 --- a/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp +++ b/tests/auto/declarative/qdeclarativelistmodel/tst_qdeclarativelistmodel.cpp @@ -51,11 +51,11 @@ #include "../../../shared/util.h" -class tst_QDeclarativeListModel : public QObject +class tst_qdeclarativelistmodel : public QObject { Q_OBJECT public: - tst_QDeclarativeListModel() {} + tst_qdeclarativelistmodel() {} private: QScriptValue nestedListValue(QScriptEngine *eng) const; @@ -76,12 +76,13 @@ private slots: void convertNestedToFlat_fail_data(); void convertNestedToFlat_ok(); void convertNestedToFlat_ok_data(); + void enumerate(); void error_data(); void error(); void set(); }; -QScriptValue tst_QDeclarativeListModel::nestedListValue(QScriptEngine *eng) const +QScriptValue tst_qdeclarativelistmodel::nestedListValue(QScriptEngine *eng) const { QScriptValue list = eng->newArray(); list.setProperty(0, eng->newObject()); @@ -91,7 +92,7 @@ QScriptValue tst_QDeclarativeListModel::nestedListValue(QScriptEngine *eng) cons return sv; } -QDeclarativeItem *tst_QDeclarativeListModel::createWorkerTest(QDeclarativeEngine *eng, QDeclarativeComponent *component, QDeclarativeListModel *model) +QDeclarativeItem *tst_qdeclarativelistmodel::createWorkerTest(QDeclarativeEngine *eng, QDeclarativeComponent *component, QDeclarativeListModel *model) { QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(component->create()); QDeclarativeEngine::setContextForObject(model, eng->rootContext()); @@ -100,7 +101,7 @@ QDeclarativeItem *tst_QDeclarativeListModel::createWorkerTest(QDeclarativeEngine return item; } -void tst_QDeclarativeListModel::waitForWorker(QDeclarativeItem *item) +void tst_qdeclarativelistmodel::waitForWorker(QDeclarativeItem *item) { QEventLoop loop; QTimer timer; @@ -115,7 +116,7 @@ void tst_QDeclarativeListModel::waitForWorker(QDeclarativeItem *item) QVERIFY(timer.isActive()); } -void tst_QDeclarativeListModel::static_i18n() +void tst_qdeclarativelistmodel::static_i18n() { QString expect = QString::fromUtf8("na\303\257ve"); QString componentStr = "import Qt 4.7\nListModel { ListElement { prop1: \""+expect+"\" } }"; @@ -129,7 +130,7 @@ void tst_QDeclarativeListModel::static_i18n() delete obj; } -void tst_QDeclarativeListModel::static_nestedElements() +void tst_qdeclarativelistmodel::static_nestedElements() { QFETCH(int, elementCount); @@ -163,7 +164,7 @@ void tst_QDeclarativeListModel::static_nestedElements() delete obj; } -void tst_QDeclarativeListModel::static_nestedElements_data() +void tst_qdeclarativelistmodel::static_nestedElements_data() { QTest::addColumn<int>("elementCount"); @@ -173,7 +174,7 @@ void tst_QDeclarativeListModel::static_nestedElements_data() QTest::newRow("many items") << 5; } -void tst_QDeclarativeListModel::dynamic_data() +void tst_qdeclarativelistmodel::dynamic_data() { QTest::addColumn<QString>("script"); QTest::addColumn<int>("result"); @@ -183,58 +184,58 @@ void tst_QDeclarativeListModel::dynamic_data() QTest::newRow("count") << "count" << 0 << ""; - QTest::newRow("get1") << "{get(0)}" << 0 << "QML ListModel (unknown location) get: index 0 out of range"; - QTest::newRow("get2") << "{get(-1)}" << 0 << "QML ListModel (unknown location) get: index -1 out of range"; + QTest::newRow("get1") << "{get(0)}" << 0 << "<Unknown File>: QML ListModel: get: index 0 out of range"; + QTest::newRow("get2") << "{get(-1)}" << 0 << "<Unknown File>: QML ListModel: get: index -1 out of range"; 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("append4a") << "{append(123)}" << 0 << "QML ListModel (unknown location) append: value is not an object"; - QTest::newRow("append4b") << "{append([1,2,3])}" << 0 << "QML ListModel (unknown location) append: value is not an object"; + QTest::newRow("append4a") << "{append(123)}" << 0 << "<Unknown File>: QML ListModel: append: value is not an object"; + QTest::newRow("append4b") << "{append([1,2,3])}" << 0 << "<Unknown File>: QML ListModel: append: value is not an object"; QTest::newRow("clear1") << "{append({'foo':456});clear();count}" << 0 << ""; QTest::newRow("clear2") << "{append({'foo':123});append({'foo':456});clear();count}" << 0 << ""; - QTest::newRow("clear3") << "{append({'foo':123});clear();get(0).foo}" << 0 << "QML ListModel (unknown location) get: index 0 out of range"; + QTest::newRow("clear3") << "{append({'foo':123});clear();get(0).foo}" << 0 << "<Unknown File>: QML ListModel: 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 ListModel (unknown location) get: index 0 out of range"; - QTest::newRow("remove3a") << "{append({'foo':123});remove(-1);count}" << 1 << "QML ListModel (unknown location) remove: index -1 out of range"; - QTest::newRow("remove4a") << "{remove(0)}" << 0 << "QML ListModel (unknown location) remove: index 0 out of range"; - QTest::newRow("remove4b") << "{append({'foo':123});remove(0);remove(0);count}" << 0 << "QML ListModel (unknown location) remove: index 0 out of range"; - QTest::newRow("remove4c") << "{append({'foo':123});remove(1);count}" << 1 << "QML ListModel (unknown location) remove: index 1 out of range"; + QTest::newRow("remove3") << "{append({'foo':123});remove(0);get(0).foo}" << 0 << "<Unknown File>: QML ListModel: get: index 0 out of range"; + QTest::newRow("remove3a") << "{append({'foo':123});remove(-1);count}" << 1 << "<Unknown File>: QML ListModel: remove: index -1 out of range"; + QTest::newRow("remove4a") << "{remove(0)}" << 0 << "<Unknown File>: QML ListModel: remove: index 0 out of range"; + QTest::newRow("remove4b") << "{append({'foo':123});remove(0);remove(0);count}" << 0 << "<Unknown File>: QML ListModel: remove: index 0 out of range"; + QTest::newRow("remove4c") << "{append({'foo':123});remove(1);count}" << 1 << "<Unknown File>: QML ListModel: remove: index 1 out of range"; QTest::newRow("insert1") << "{insert(0,{'foo':123});count}" << 1 << ""; - QTest::newRow("insert2") << "{insert(1,{'foo':123});count}" << 0 << "QML ListModel (unknown location) insert: index 1 out of range"; + QTest::newRow("insert2") << "{insert(1,{'foo':123});count}" << 0 << "<Unknown File>: QML ListModel: 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});count}" << 1 << "QML ListModel (unknown location) insert: index -1 out of range"; - QTest::newRow("insert5a") << "{insert(0,123)}" << 0 << "QML ListModel (unknown location) insert: value is not an object"; - QTest::newRow("insert5b") << "{insert(0,[1,2,3])}" << 0 << "QML ListModel (unknown location) insert: value is not an object"; + QTest::newRow("insert4") << "{append({'foo':123});insert(-1,{'foo':456});count}" << 1 << "<Unknown File>: QML ListModel: insert: index -1 out of range"; + QTest::newRow("insert5a") << "{insert(0,123)}" << 0 << "<Unknown File>: QML ListModel: insert: value is not an object"; + QTest::newRow("insert5b") << "{insert(0,[1,2,3])}" << 0 << "<Unknown File>: QML ListModel: insert: value is not an object"; 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("set4a") << "{set(0,{'foo':456})}" << 0 << "QML ListModel (unknown location) set: index 0 out of range"; - QTest::newRow("set4c") << "{set(-1,{'foo':456})}" << 0 << "QML ListModel (unknown location) set: index -1 out of range"; - QTest::newRow("set5a") << "{append({'foo':123,'bar':456});set(0,123);count}" << 1 << "QML ListModel (unknown location) set: value is not an object"; - QTest::newRow("set5b") << "{append({'foo':123,'bar':456});set(0,[1,2,3]);count}" << 1 << "QML ListModel (unknown location) set: value is not an object"; + QTest::newRow("set4a") << "{set(0,{'foo':456})}" << 0 << "<Unknown File>: QML ListModel: set: index 0 out of range"; + QTest::newRow("set4c") << "{set(-1,{'foo':456})}" << 0 << "<Unknown File>: QML ListModel: set: index -1 out of range"; + QTest::newRow("set5a") << "{append({'foo':123,'bar':456});set(0,123);count}" << 1 << "<Unknown File>: QML ListModel: set: value is not an object"; + QTest::newRow("set5b") << "{append({'foo':123,'bar':456});set(0,[1,2,3]);count}" << 1 << "<Unknown File>: QML ListModel: set: value is not an object"; QTest::newRow("set6") << "{append({'foo':123});set(1,{'foo':456});count}" << 2 << ""; QTest::newRow("setprop1") << "{append({'foo':123});setProperty(0,'foo',456);count}" << 1 << ""; QTest::newRow("setprop2") << "{append({'foo':123});setProperty(0,'foo',456);get(0).foo}" << 456 << ""; QTest::newRow("setprop3a") << "{append({'foo':123,'bar':456});setProperty(0,'foo',999);get(0).foo}" << 999 << ""; QTest::newRow("setprop3b") << "{append({'foo':123,'bar':456});setProperty(0,'foo',999);get(0).bar}" << 456 << ""; - QTest::newRow("setprop4a") << "{setProperty(0,'foo',456)}" << 0 << "QML ListModel (unknown location) set: index 0 out of range"; - QTest::newRow("setprop4b") << "{setProperty(-1,'foo',456)}" << 0 << "QML ListModel (unknown location) set: index -1 out of range"; - QTest::newRow("setprop4c") << "{append({'foo':123,'bar':456});setProperty(1,'foo',456);count}" << 1 << "QML ListModel (unknown location) set: index 1 out of range"; + QTest::newRow("setprop4a") << "{setProperty(0,'foo',456)}" << 0 << "<Unknown File>: QML ListModel: set: index 0 out of range"; + QTest::newRow("setprop4b") << "{setProperty(-1,'foo',456)}" << 0 << "<Unknown File>: QML ListModel: set: index -1 out of range"; + QTest::newRow("setprop4c") << "{append({'foo':123,'bar':456});setProperty(1,'foo',456);count}" << 1 << "<Unknown File>: QML ListModel: set: index 1 out of range"; QTest::newRow("setprop5") << "{append({'foo':123,'bar':456});append({'foo':111});setProperty(1,'bar',222);get(1).bar}" << 222 << ""; QTest::newRow("move1a") << "{append({'foo':123});append({'foo':456});move(0,1,1);count}" << 2 << ""; @@ -246,10 +247,10 @@ void tst_QDeclarativeListModel::dynamic_data() 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 << ""; - QTest::newRow("move3a") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(1,0,3);count}" << 3 << "QML ListModel (unknown location) move: out of range"; - QTest::newRow("move3b") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(1,-1,1);count}" << 3 << "QML ListModel (unknown location) move: out of range"; - QTest::newRow("move3c") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(1,0,-1);count}" << 3 << "QML ListModel (unknown location) move: out of range"; - QTest::newRow("move3d") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,3,1);count}" << 3 << "QML ListModel (unknown location) move: out of range"; + QTest::newRow("move3a") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(1,0,3);count}" << 3 << "<Unknown File>: QML ListModel: move: out of range"; + QTest::newRow("move3b") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(1,-1,1);count}" << 3 << "<Unknown File>: QML ListModel: move: out of range"; + QTest::newRow("move3c") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(1,0,-1);count}" << 3 << "<Unknown File>: QML ListModel: move: out of range"; + QTest::newRow("move3d") << "{append({'foo':123});append({'foo':456});append({'foo':789});move(0,3,1);count}" << 3 << "<Unknown File>: QML ListModel: move: out of range"; // Nested models @@ -264,7 +265,7 @@ void tst_QDeclarativeListModel::dynamic_data() //QTest::newRow("nested-setprop") << "{append({'foo':123});setProperty(0,'foo',[{'x':123}]);get(0).foo.get(0).x}" << 123 << ""; } -void tst_QDeclarativeListModel::dynamic() +void tst_qdeclarativelistmodel::dynamic() { QFETCH(QString, script); QFETCH(int, result); @@ -285,12 +286,12 @@ void tst_QDeclarativeListModel::dynamic() QCOMPARE(actual,result); } -void tst_QDeclarativeListModel::dynamic_worker_data() +void tst_qdeclarativelistmodel::dynamic_worker_data() { dynamic_data(); } -void tst_QDeclarativeListModel::dynamic_worker() +void tst_qdeclarativelistmodel::dynamic_worker() { QFETCH(QString, script); QFETCH(int, result); @@ -323,7 +324,13 @@ void tst_QDeclarativeListModel::dynamic_worker() // execute a set of commands on the worker list model, then check the // changes are reflected in the list model in the main thread if (QByteArray(QTest::currentDataTag()).startsWith("nested")) - QTest::ignoreMessage(QtWarningMsg, "QML ListModel (unknown location) Cannot add nested list values when modifying or after modification from a worker script"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: Cannot add nested list values when modifying or after modification from a worker script"); + + if (QByteArray(QTest::currentDataTag()).startsWith("nested-append")) { + int callsToGet = script.count(QLatin1String(";get(")); + for (int i=0; i<callsToGet; i++) + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: get: index 0 out of range"); + } QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker", Q_ARG(QVariant, operations.mid(0, operations.length()-1)))); @@ -340,7 +347,7 @@ void tst_QDeclarativeListModel::dynamic_worker() qApp->processEvents(); } -void tst_QDeclarativeListModel::convertNestedToFlat_fail() +void tst_qdeclarativelistmodel::convertNestedToFlat_fail() { // If a model has nested data, it cannot be used at all from a worker script @@ -359,7 +366,7 @@ void tst_QDeclarativeListModel::convertNestedToFlat_fail() model.append(nestedListValue(&s_eng)); QCOMPARE(model.count(), 2); - QTest::ignoreMessage(QtWarningMsg, "QML ListModel (unknown location) List contains nested list values and cannot be used from a worker script"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML ListModel: List contains nested list values and cannot be used from a worker script"); QVERIFY(QMetaObject::invokeMethod(item, "evalExpressionViaWorker", Q_ARG(QVariant, script))); waitForWorker(item); @@ -369,7 +376,7 @@ void tst_QDeclarativeListModel::convertNestedToFlat_fail() qApp->processEvents(); } -void tst_QDeclarativeListModel::convertNestedToFlat_fail_data() +void tst_qdeclarativelistmodel::convertNestedToFlat_fail_data() { QTest::addColumn<QString>("script"); @@ -383,7 +390,7 @@ void tst_QDeclarativeListModel::convertNestedToFlat_fail_data() QTest::newRow("get") << "get(0)"; } -void tst_QDeclarativeListModel::convertNestedToFlat_ok() +void tst_qdeclarativelistmodel::convertNestedToFlat_ok() { // If a model only has plain data, it can be modified from a worker script. However, // once the model is used from a worker script, it no longer accepts nested data @@ -411,7 +418,7 @@ void tst_QDeclarativeListModel::convertNestedToFlat_ok() QCOMPARE(model.count(), count+1); QScriptValue nested = nestedListValue(&s_eng); - const char *warning = "QML ListModel (unknown location) Cannot add nested list values when modifying or after modification from a worker script"; + const char *warning = "<Unknown File>: QML ListModel: Cannot add nested list values when modifying or after modification from a worker script"; QTest::ignoreMessage(QtWarningMsg, warning); model.append(nested); @@ -428,12 +435,12 @@ void tst_QDeclarativeListModel::convertNestedToFlat_ok() qApp->processEvents(); } -void tst_QDeclarativeListModel::convertNestedToFlat_ok_data() +void tst_qdeclarativelistmodel::convertNestedToFlat_ok_data() { convertNestedToFlat_fail_data(); } -void tst_QDeclarativeListModel::static_types_data() +void tst_qdeclarativelistmodel::static_types_data() { QTest::addColumn<QString>("qml"); QTest::addColumn<QVariant>("value"); @@ -463,7 +470,7 @@ void tst_QDeclarativeListModel::static_types_data() << QVariant(double(QDeclarativeText::AlignHCenter)); } -void tst_QDeclarativeListModel::static_types() +void tst_qdeclarativelistmodel::static_types() { QFETCH(QString, qml); QFETCH(QVariant, value); @@ -494,7 +501,24 @@ void tst_QDeclarativeListModel::static_types() delete obj; } -void tst_QDeclarativeListModel::error_data() +void tst_qdeclarativelistmodel::enumerate() +{ + QDeclarativeEngine eng; + QDeclarativeComponent component(&eng, QUrl::fromLocalFile(SRCDIR "/data/enumerate.qml")); + QVERIFY(!component.isError()); + QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(component.create()); + QVERIFY(item != 0); + QStringList r = item->property("result").toString().split(":"); + QCOMPARE(r[0],QLatin1String("val1=1Y")); + QCOMPARE(r[1],QLatin1String("val2=2Y")); + QCOMPARE(r[2],QLatin1String("val3=strY")); + QCOMPARE(r[3],QLatin1String("val4=falseN")); + QCOMPARE(r[4],QLatin1String("val5=trueY")); + delete item; +} + + +void tst_qdeclarativelistmodel::error_data() { QTest::addColumn<QString>("qml"); QTest::addColumn<QString>("error"); @@ -532,7 +556,7 @@ void tst_QDeclarativeListModel::error_data() << "ListElement: cannot contain nested elements"; } -void tst_QDeclarativeListModel::error() +void tst_qdeclarativelistmodel::error() { QFETCH(QString, qml); QFETCH(QString, error); @@ -551,7 +575,7 @@ void tst_QDeclarativeListModel::error() } } -void tst_QDeclarativeListModel::set() +void tst_qdeclarativelistmodel::set() { QDeclarativeEngine engine; QDeclarativeListModel model; @@ -575,6 +599,6 @@ void tst_QDeclarativeListModel::set() } -QTEST_MAIN(tst_QDeclarativeListModel) +QTEST_MAIN(tst_qdeclarativelistmodel) #include "tst_qdeclarativelistmodel.moc" diff --git a/tests/auto/declarative/qdeclarativelistreference/tst_qdeclarativelistreference.cpp b/tests/auto/declarative/qdeclarativelistreference/tst_qdeclarativelistreference.cpp index 908f336..7689270 100644 --- a/tests/auto/declarative/qdeclarativelistreference/tst_qdeclarativelistreference.cpp +++ b/tests/auto/declarative/qdeclarativelistreference/tst_qdeclarativelistreference.cpp @@ -102,7 +102,6 @@ public: QList<TestType *> data; QDeclarativeListProperty<TestType> property; }; -QML_DECLARE_TYPE(TestType); void tst_qdeclarativelistreference::initTestCase() { diff --git a/tests/auto/declarative/qdeclarativeloader/data/SetSourceComponent.qml b/tests/auto/declarative/qdeclarativeloader/data/SetSourceComponent.qml index 1db56c4..f600e85 100644 --- a/tests/auto/declarative/qdeclarativeloader/data/SetSourceComponent.qml +++ b/tests/auto/declarative/qdeclarativeloader/data/SetSourceComponent.qml @@ -1,6 +1,9 @@ import Qt 4.6 Item { + function clear() { + loader.sourceComponent = undefined + } Component { id: comp; Rectangle { width: 100; height: 50 } } - Loader { sourceComponent: comp } + Loader { id: loader; sourceComponent: comp } } diff --git a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp index 4a82b50..7cdadb4 100644 --- a/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp +++ b/tests/auto/declarative/qdeclarativeloader/tst_qdeclarativeloader.cpp @@ -138,7 +138,7 @@ void tst_QDeclarativeLoader::component() void tst_QDeclarativeLoader::invalidUrl() { - QTest::ignoreMessage(QtWarningMsg, QString("(:-1: File error for URL " + QUrl::fromLocalFile(SRCDIR "/data/IDontExist.qml").toString() + ") ").toUtf8().constData()); + QTest::ignoreMessage(QtWarningMsg, QString("<Unknown File>: File error for URL " + QUrl::fromLocalFile(SRCDIR "/data/IDontExist.qml").toString()).toUtf8().constData()); QDeclarativeComponent component(&engine); component.setData(QByteArray("import Qt 4.7\nLoader { source: \"IDontExist.qml\" }"), TEST_FILE("")); @@ -198,6 +198,26 @@ void tst_QDeclarativeLoader::clear() delete item; } + { + QDeclarativeComponent component(&engine, TEST_FILE("/SetSourceComponent.qml")); + QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(component.create()); + QVERIFY(item); + + QDeclarativeLoader *loader = qobject_cast<QDeclarativeLoader*>(item->QGraphicsObject::children().at(1)); + QVERIFY(loader); + QVERIFY(loader->item()); + QCOMPARE(loader->progress(), 1.0); + QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 1); + + QMetaObject::invokeMethod(item, "clear"); + + QVERIFY(loader->item() == 0); + QCOMPARE(loader->progress(), 0.0); + QCOMPARE(loader->status(), QDeclarativeLoader::Null); + QCOMPARE(static_cast<QGraphicsItem*>(loader)->children().count(), 0); + + delete item; + } } void tst_QDeclarativeLoader::urlToComponent() @@ -465,7 +485,7 @@ void tst_QDeclarativeLoader::failNetworkRequest() QVERIFY(server.isValid()); server.serveDirectory(SRCDIR "/data"); - QTest::ignoreMessage(QtWarningMsg, "(:-1: Network error for URL http://127.0.0.1:14450/IDontExist.qml) "); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: Network error for URL http://127.0.0.1:14450/IDontExist.qml"); QDeclarativeComponent component(&engine); component.setData(QByteArray("import Qt 4.7\nLoader { source: \"http://127.0.0.1:14450/IDontExist.qml\" }"), QUrl::fromLocalFile("http://127.0.0.1:14450/dummy.qml")); @@ -505,7 +525,7 @@ void tst_QDeclarativeLoader::deleteComponentCrash() void tst_QDeclarativeLoader::nonItem() { QDeclarativeComponent component(&engine, TEST_FILE("nonItem.qml")); - QString err = QString("QML Loader (") + QUrl::fromLocalFile(SRCDIR).toString() + QString("/data/nonItem.qml:3:1) Loader does not support loading non-visual elements."); + QString err = QUrl::fromLocalFile(SRCDIR).toString() + "/data/nonItem.qml:3:1: QML Loader: Loader does not support loading non-visual elements."; QTest::ignoreMessage(QtWarningMsg, err.toLatin1().constData()); QDeclarativeLoader *loader = qobject_cast<QDeclarativeLoader*>(component.create()); @@ -518,9 +538,8 @@ void tst_QDeclarativeLoader::nonItem() void tst_QDeclarativeLoader::vmeErrors() { QDeclarativeComponent component(&engine, TEST_FILE("vmeErrors.qml")); - //ignore message for now - //QString err = QUrl::fromLocalFile(SRCDIR "/data/VmeError.qml:6: Cannot assign object type QObject with no default method\n onSomethingHappened: QtObject {}) "); - //QTest::ignoreMessage(QtWarningMsg, err.toLatin1().constData()); + QString err = QUrl::fromLocalFile(SRCDIR).toString() + "/data/VmeError.qml:6: Cannot assign object type QObject with no default method"; + QTest::ignoreMessage(QtWarningMsg, err.toLatin1().constData()); QDeclarativeLoader *loader = qobject_cast<QDeclarativeLoader*>(component.create()); QVERIFY(loader); QVERIFY(loader->item() == 0); diff --git a/tests/auto/declarative/qdeclarativemoduleplugin/plugin/plugin.cpp b/tests/auto/declarative/qdeclarativemoduleplugin/plugin/plugin.cpp index fd94cc6..7d89bee 100644 --- a/tests/auto/declarative/qdeclarativemoduleplugin/plugin/plugin.cpp +++ b/tests/auto/declarative/qdeclarativemoduleplugin/plugin/plugin.cpp @@ -61,8 +61,6 @@ private: int v; }; -QML_DECLARE_TYPE(MyPluginType); - class MyPlugin : public QDeclarativeExtensionPlugin { diff --git a/tests/auto/declarative/qdeclarativemousearea/data/dragging.qml b/tests/auto/declarative/qdeclarativemousearea/data/dragging.qml new file mode 100644 index 0000000..a28f049 --- /dev/null +++ b/tests/auto/declarative/qdeclarativemousearea/data/dragging.qml @@ -0,0 +1,28 @@ +import Qt 4.7 +Rectangle { + id: whiteRect + width: 200 + height: 200 + color: "white" + Rectangle { + id: blackRect + objectName: "blackrect" + color: "black" + y: 50 + x: 50 + width: 100 + height: 100 + opacity: (whiteRect.width-blackRect.x+whiteRect.height-blackRect.y-199)/200 + Text { text: blackRect.opacity} + MouseArea { + objectName: "mouseregion" + anchors.fill: parent + drag.target: blackRect + drag.axis: Drag.XandYAxis + drag.minimumX: 0 + drag.maximumX: whiteRect.width-blackRect.width + drag.minimumY: 0 + drag.maximumY: whiteRect.height-blackRect.height + } + } + } diff --git a/tests/auto/declarative/qdeclarativemousearea/data/updateMousePosOnResize.qml b/tests/auto/declarative/qdeclarativemousearea/data/updateMousePosOnResize.qml new file mode 100644 index 0000000..63de624 --- /dev/null +++ b/tests/auto/declarative/qdeclarativemousearea/data/updateMousePosOnResize.qml @@ -0,0 +1,38 @@ +import Qt 4.6 + +Rectangle { + color: "#ffffff" + width: 320; height: 240 + Rectangle { + id: brother + objectName: "brother" + color: "lightgreen" + x: 200; y: 100 + width: 120; height: 120 + } + MouseArea { + id: mouseRegion + objectName: "mouseregion" + + property int x1 + property int y1 + property int x2 + property int y2 + property bool emitPositionChanged: false + property bool mouseMatchesPos: true + + anchors.fill: brother + onPressed: { + if (mouse.x != mouseX || mouse.y != mouseY) + mouseMatchesPos = false + x1 = mouseX; y1 = mouseY + anchors.fill = parent + } + onPositionChanged: { emitPositionChanged = true } + onMousePositionChanged: { + if (mouse.x != mouseX || mouse.y != mouseY) + mouseMatchesPos = false + x2 = mouseX; y2 = mouseY + } + } +} diff --git a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp index bdb8eca..eb4aa12 100644 --- a/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp +++ b/tests/auto/declarative/qdeclarativemousearea/tst_qdeclarativemousearea.cpp @@ -52,7 +52,9 @@ class tst_QDeclarativeMouseArea: public QObject private slots: void dragProperties(); void resetDrag(); + void dragging(); void updateMouseAreaPosOnClick(); + void updateMouseAreaPosOnResize(); void noOnClickedWithPressAndHold(); private: QDeclarativeView *createView(); @@ -162,6 +164,61 @@ void tst_QDeclarativeMouseArea::resetDrag() } +void tst_QDeclarativeMouseArea::dragging() +{ + QDeclarativeView *canvas = createView(); + + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/dragging.qml")); + canvas->show(); + canvas->setFocus(); + QVERIFY(canvas->rootObject() != 0); + + QDeclarativeMouseArea *mouseRegion = canvas->rootObject()->findChild<QDeclarativeMouseArea*>("mouseregion"); + QDeclarativeDrag *drag = mouseRegion->drag(); + QVERIFY(mouseRegion != 0); + QVERIFY(drag != 0); + + // target + QDeclarativeItem *blackRect = canvas->rootObject()->findChild<QDeclarativeItem*>("blackrect"); + QVERIFY(blackRect != 0); + QVERIFY(blackRect == drag->target()); + + QVERIFY(!drag->active()); + + QGraphicsScene *scene = canvas->scene(); + QGraphicsSceneMouseEvent pressEvent(QEvent::GraphicsSceneMousePress); + pressEvent.setScenePos(QPointF(100, 100)); + pressEvent.setButton(Qt::LeftButton); + pressEvent.setButtons(Qt::LeftButton); + QApplication::sendEvent(scene, &pressEvent); + + QVERIFY(!drag->active()); + QCOMPARE(blackRect->x(), 50.0); + QCOMPARE(blackRect->y(), 50.0); + + QGraphicsSceneMouseEvent moveEvent(QEvent::GraphicsSceneMouseMove); + moveEvent.setScenePos(QPointF(110, 110)); + moveEvent.setButton(Qt::LeftButton); + moveEvent.setButtons(Qt::LeftButton); + QApplication::sendEvent(scene, &moveEvent); + + QVERIFY(drag->active()); + QCOMPARE(blackRect->x(), 60.0); + QCOMPARE(blackRect->y(), 60.0); + + QGraphicsSceneMouseEvent releaseEvent(QEvent::GraphicsSceneMouseRelease); + releaseEvent.setScenePos(QPointF(110, 110)); + releaseEvent.setButton(Qt::LeftButton); + releaseEvent.setButtons(Qt::LeftButton); + QApplication::sendEvent(scene, &releaseEvent); + + QVERIFY(!drag->active()); + QCOMPARE(blackRect->x(), 60.0); + QCOMPARE(blackRect->y(), 60.0); + + delete canvas; +} + QDeclarativeView *tst_QDeclarativeMouseArea::createView() { QDeclarativeView *canvas = new QDeclarativeView(0); @@ -203,6 +260,46 @@ void tst_QDeclarativeMouseArea::updateMouseAreaPosOnClick() delete canvas; } +void tst_QDeclarativeMouseArea::updateMouseAreaPosOnResize() +{ + QDeclarativeView *canvas = createView(); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/updateMousePosOnResize.qml")); + canvas->show(); + canvas->setFocus(); + QVERIFY(canvas->rootObject() != 0); + + QDeclarativeMouseArea *mouseRegion = canvas->rootObject()->findChild<QDeclarativeMouseArea*>("mouseregion"); + QVERIFY(mouseRegion != 0); + + QDeclarativeRectangle *rect = canvas->rootObject()->findChild<QDeclarativeRectangle*>("brother"); + QVERIFY(rect != 0); + + QCOMPARE(mouseRegion->mouseX(), 0.0); + QCOMPARE(mouseRegion->mouseY(), 0.0); + + QGraphicsScene *scene = canvas->scene(); + QGraphicsSceneMouseEvent event(QEvent::GraphicsSceneMousePress); + event.setScenePos(rect->pos()); + event.setButton(Qt::LeftButton); + event.setButtons(Qt::LeftButton); + QApplication::sendEvent(scene, &event); + + QVERIFY(!mouseRegion->property("emitPositionChanged").toBool()); + QVERIFY(mouseRegion->property("mouseMatchesPos").toBool()); + + QCOMPARE(mouseRegion->property("x1").toInt(), 0); + QCOMPARE(mouseRegion->property("y1").toInt(), 0); + + // XXX: is it on purpose that mouseX is real and mouse.x is int? + QCOMPARE(mouseRegion->property("x2").toInt(), (int) rect->x()); + QCOMPARE(mouseRegion->property("y2").toInt(), (int) rect->y()); + + QCOMPARE(mouseRegion->mouseX(), rect->x()); + QCOMPARE(mouseRegion->mouseY(), rect->y()); + + delete canvas; +} + void tst_QDeclarativeMouseArea::noOnClickedWithPressAndHold() { QDeclarativeView *canvas = createView(); diff --git a/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp b/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp index 7d51bb6..53614fe 100644 --- a/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp +++ b/tests/auto/declarative/qdeclarativeproperty/tst_qdeclarativeproperty.cpp @@ -310,7 +310,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object() QCOMPARE(prop.propertyTypeName(), "int"); QCOMPARE(QString(prop.property().name()), QString("defaultProperty")); QVERIFY(QDeclarativePropertyPrivate::binding(prop) == 0); - QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: Unable to assign null to int"); QVERIFY(QDeclarativePropertyPrivate::setBinding(prop, binding.data()) == 0); QVERIFY(binding != 0); QVERIFY(QDeclarativePropertyPrivate::binding(prop) == binding.data()); @@ -409,7 +409,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string() QCOMPARE(prop.propertyTypeName(), "int"); QCOMPARE(QString(prop.property().name()), QString("defaultProperty")); QVERIFY(QDeclarativePropertyPrivate::binding(prop) == 0); - QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: Unable to assign null to int"); QVERIFY(QDeclarativePropertyPrivate::setBinding(prop, binding.data()) == 0); QVERIFY(binding != 0); QVERIFY(QDeclarativePropertyPrivate::binding(prop) == binding.data()); @@ -602,7 +602,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_context() QCOMPARE(prop.propertyTypeName(), "int"); QCOMPARE(QString(prop.property().name()), QString("defaultProperty")); QVERIFY(QDeclarativePropertyPrivate::binding(prop) == 0); - QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: Unable to assign null to int"); QVERIFY(QDeclarativePropertyPrivate::setBinding(prop, binding.data()) == 0); QVERIFY(binding != 0); QVERIFY(QDeclarativePropertyPrivate::binding(prop) == binding.data()); @@ -701,7 +701,7 @@ void tst_qdeclarativeproperty::qmlmetaproperty_object_string_context() QCOMPARE(prop.propertyTypeName(), "int"); QCOMPARE(QString(prop.property().name()), QString("defaultProperty")); QVERIFY(QDeclarativePropertyPrivate::binding(prop) == 0); - QTest::ignoreMessage(QtWarningMsg, "<Unknown File>:-1: Unable to assign null to int"); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: Unable to assign null to int"); QVERIFY(QDeclarativePropertyPrivate::setBinding(prop, binding.data()) == 0); QVERIFY(binding != 0); QVERIFY(QDeclarativePropertyPrivate::binding(prop) == binding.data()); diff --git a/tests/auto/declarative/qdeclarativeqt/data/createComponent.qml b/tests/auto/declarative/qdeclarativeqt/data/createComponent.qml index d9b70ec..253a4e3 100644 --- a/tests/auto/declarative/qdeclarativeqt/data/createComponent.qml +++ b/tests/auto/declarative/qdeclarativeqt/data/createComponent.qml @@ -1,23 +1,20 @@ import Qt 4.6 QtObject { - property bool incorrectArgCount1: false - property bool incorrectArgCount2: false property bool emptyArg: false property string relativeUrl property string absoluteUrl - Component.onCompleted: { - // Test that using incorrect argument count returns a null object - incorrectArgCount1 = (createComponent() == null); - incorrectArgCount2 = (createComponent("main.qml", 10) == null); - emptyArg = (createComponent("") == null); + property QtObject incorectArgCount1: Qt.createComponent() + property QtObject incorectArgCount2: Qt.createComponent("main.qml", 10) - var r = createComponent("createComponentData.qml"); + Component.onCompleted: { + emptyArg = (Qt.createComponent("") == null); + var r = Qt.createComponent("createComponentData.qml"); relativeUrl = r.url; - var a = createComponent("http://www.example.com/test.qml"); + var a = Qt.createComponent("http://www.example.com/test.qml"); absoluteUrl = a.url; } } diff --git a/tests/auto/declarative/qdeclarativeqt/data/createQmlObject.qml b/tests/auto/declarative/qdeclarativeqt/data/createQmlObject.qml index 54a3e7d..9fe169d 100644 --- a/tests/auto/declarative/qdeclarativeqt/data/createQmlObject.qml +++ b/tests/auto/declarative/qdeclarativeqt/data/createQmlObject.qml @@ -3,29 +3,29 @@ import Qt 4.6 Item { id: root - property bool incorrectArgCount1: false - property bool incorrectArgCount2: false + // errors resulting in exceptions + property QtObject incorrectArgCount1: Qt.createQmlObject() + property QtObject incorrectArgCount2: Qt.createQmlObject("import Qt 4.6\nQtObject{}", root, "main.qml", 10) + property QtObject noParent: Qt.createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13}", 0) + property QtObject notAvailable: Qt.createQmlObject("import Qt 4.6\nQtObject{Blah{}}", root) + property QtObject errors: Qt.createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\nproperty int test: 13\n}", root, "main.qml") + property bool emptyArg: false - property bool noParent: false - property bool notAvailable: false - property bool runtimeError: false - property bool errors: false property bool success: false Component.onCompleted: { - // errors - incorrectArgCount1 = (createQmlObject() == null); - incorrectArgCount2 = (createQmlObject("import Qt 4.6\nQtObject{}", root, "main.qml", 10) == null); - emptyArg = (createQmlObject("", root) == null); - errors = (createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\nproperty int test: 13\n}", root, "main.qml") == null); - noParent = (createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13}", 0) == null); - notAvailable = (createQmlObject("import Qt 4.6\nQtObject{Blah{}}", root) == null); - runtimeError = (createQmlObject("import Qt 4.6\nQtObject{property int test\nonTestChanged: QtObject{}\n}", root) == null); + // errors resulting in nulls + emptyArg = (Qt.createQmlObject("", root) == null); + try { + Qt.createQmlObject("import Qt 4.6\nQtObject{property int test\nonTestChanged: QtObject{}\n}", root) + } catch (error) { + console.log("RunTimeError: ",error.message); + } - var o = createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\n}", root); + var o = Qt.createQmlObject("import Qt 4.6\nQtObject{\nproperty int test: 13\n}", root); success = (o.test == 13); - createQmlObject("import Qt 4.6\nItem {}\n", root); + Qt.createQmlObject("import Qt 4.6\nItem {}\n", root); } } diff --git a/tests/auto/declarative/qdeclarativeqt/data/hsla.qml b/tests/auto/declarative/qdeclarativeqt/data/hsla.qml index df51ccd..142410b 100644 --- a/tests/auto/declarative/qdeclarativeqt/data/hsla.qml +++ b/tests/auto/declarative/qdeclarativeqt/data/hsla.qml @@ -5,7 +5,7 @@ QtObject { property color test2: Qt.hsla(1, 0.5, 0.3); property color test3: Qt.hsla(1, 1); property color test4: Qt.hsla(1, 1, 1, 1, 1); - property color test5: Qt.hsla(1.2, 1, 1); - property color test6: Qt.hsla(-0.1, 1, 1); + property color test5: Qt.hsla(1.2, 1.3, 1.4, 1.5); + property color test6: Qt.hsla(-0.1, -0.2, -0.3, -0.4); } diff --git a/tests/auto/declarative/qdeclarativeqt/data/rgba.qml b/tests/auto/declarative/qdeclarativeqt/data/rgba.qml index 6dd6565..66305a4 100644 --- a/tests/auto/declarative/qdeclarativeqt/data/rgba.qml +++ b/tests/auto/declarative/qdeclarativeqt/data/rgba.qml @@ -5,6 +5,6 @@ QtObject { property color test2: Qt.rgba(1, 0.5, 0.3); property color test3: Qt.rgba(1, 1); property color test4: Qt.rgba(1, 1, 1, 1, 1); - property color test5: Qt.rgba(1.2, 1, 1); - property color test6: Qt.rgba(-0.1, 1, 1); + property color test5: Qt.rgba(1.2, 1.3, 1.4, 1.5); + property color test6: Qt.rgba(-0.1, -0.2, -0.3, -0.4); } diff --git a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp index 98f1200..727d74c 100644 --- a/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp +++ b/tests/auto/declarative/qdeclarativeqt/tst_qdeclarativeqt.cpp @@ -102,14 +102,10 @@ void tst_qdeclarativeqt::rgba() { QDeclarativeComponent component(&engine, TEST_FILE("rgba.qml")); - QString warning1 = component.url().toString() + ":6: Unable to assign null to QColor"; - QString warning2 = component.url().toString() + ":7: Unable to assign null to QColor"; - QString warning3 = component.url().toString() + ":8: Unable to assign null to QColor"; - QString warning4 = component.url().toString() + ":9: Unable to assign null to QColor"; + QString warning1 = component.url().toString() + ":6: Error: expected 3 or 4 parameters"; + QString warning2 = component.url().toString() + ":7: Error: expected 3 or 4 parameters"; QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning3)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning4)); QObject *object = component.create(); QVERIFY(object != 0); @@ -119,8 +115,8 @@ void tst_qdeclarativeqt::rgba() QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor::fromRgbF(1, 0.5, 0.3, 1)); QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor()); QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor()); - QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor()); - QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor::fromRgbF(1, 1, 1, 1)); + QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor::fromRgbF(0, 0, 0, 0)); delete object; } @@ -129,14 +125,10 @@ void tst_qdeclarativeqt::hsla() { QDeclarativeComponent component(&engine, TEST_FILE("hsla.qml")); - QString warning1 = component.url().toString() + ":6: Unable to assign null to QColor"; - QString warning2 = component.url().toString() + ":7: Unable to assign null to QColor"; - QString warning3 = component.url().toString() + ":8: Unable to assign null to QColor"; - QString warning4 = component.url().toString() + ":9: Unable to assign null to QColor"; + QString warning1 = component.url().toString() + ":6: Error: expected 3 or 4 parameters"; + QString warning2 = component.url().toString() + ":7: Error: expected 3 or 4 parameters"; QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning3)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning4)); QObject *object = component.create(); QVERIFY(object != 0); @@ -145,8 +137,8 @@ void tst_qdeclarativeqt::hsla() QCOMPARE(qvariant_cast<QColor>(object->property("test2")), QColor::fromHslF(1, 0.5, 0.3, 1)); QCOMPARE(qvariant_cast<QColor>(object->property("test3")), QColor()); QCOMPARE(qvariant_cast<QColor>(object->property("test4")), QColor()); - QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor()); - QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor()); + QCOMPARE(qvariant_cast<QColor>(object->property("test5")), QColor::fromHslF(1, 1, 1, 1)); + QCOMPARE(qvariant_cast<QColor>(object->property("test6")), QColor::fromHslF(0, 0, 0, 0)); delete object; } @@ -154,6 +146,12 @@ void tst_qdeclarativeqt::hsla() void tst_qdeclarativeqt::rect() { QDeclarativeComponent component(&engine, TEST_FILE("rect.qml")); + + QString warning1 = component.url().toString() + ":6: Error: expected 4 parameters"; + QString warning2 = component.url().toString() + ":7: Error: expected 4 parameters"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + QObject *object = component.create(); QVERIFY(object != 0); @@ -169,6 +167,12 @@ void tst_qdeclarativeqt::rect() void tst_qdeclarativeqt::point() { QDeclarativeComponent component(&engine, TEST_FILE("point.qml")); + + QString warning1 = component.url().toString() + ":6: Error: expected 2 parameters"; + QString warning2 = component.url().toString() + ":7: Error: expected 2 parameters"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + QObject *object = component.create(); QVERIFY(object != 0); @@ -183,6 +187,12 @@ void tst_qdeclarativeqt::point() void tst_qdeclarativeqt::size() { QDeclarativeComponent component(&engine, TEST_FILE("size.qml")); + + QString warning1 = component.url().toString() + ":7: Error: expected 2 parameters"; + QString warning2 = component.url().toString() + ":8: Error: expected 2 parameters"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + QObject *object = component.create(); QVERIFY(object != 0); @@ -198,6 +208,12 @@ void tst_qdeclarativeqt::size() void tst_qdeclarativeqt::vector() { QDeclarativeComponent component(&engine, TEST_FILE("vector.qml")); + + QString warning1 = component.url().toString() + ":6: Error: expected 3 parameters"; + QString warning2 = component.url().toString() + ":7: Error: expected 3 parameters"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + QObject *object = component.create(); QVERIFY(object != 0); @@ -212,6 +228,12 @@ void tst_qdeclarativeqt::vector() void tst_qdeclarativeqt::lighter() { QDeclarativeComponent component(&engine, TEST_FILE("lighter.qml")); + + QString warning1 = component.url().toString() + ":5: Error: expected 1 parameter"; + QString warning2 = component.url().toString() + ":6: Error: expected 1 parameter"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + QObject *object = component.create(); QVERIFY(object != 0); @@ -228,6 +250,12 @@ void tst_qdeclarativeqt::lighter() void tst_qdeclarativeqt::darker() { QDeclarativeComponent component(&engine, TEST_FILE("darker.qml")); + + QString warning1 = component.url().toString() + ":5: Error: expected 1 parameter"; + QString warning2 = component.url().toString() + ":6: Error: expected 1 parameter"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + QObject *object = component.create(); QVERIFY(object != 0); @@ -245,8 +273,9 @@ void tst_qdeclarativeqt::tint() { QDeclarativeComponent component(&engine, TEST_FILE("tint.qml")); - QString warning1 = component.url().toString() + ":7: Unable to assign null to QColor"; - QString warning2 = component.url().toString() + ":8: Unable to assign null to QColor"; + QString warning1 = component.url().toString() + ":7: Error: expected 2 parameters"; + QString warning2 = component.url().toString() + ":8: Error: expected 2 parameters"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); @@ -305,13 +334,15 @@ void tst_qdeclarativeqt::md5() void tst_qdeclarativeqt::createComponent() { QDeclarativeComponent component(&engine, TEST_FILE("createComponent.qml")); + + QString warning1 = component.url().toString() + ":9: Error: expected 1 parameter"; + QString warning2 = component.url().toString() + ":10: Error: expected 1 parameter"; + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); + QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); + QObject *object = component.create(); QVERIFY(object != 0); - QCOMPARE(object->property("incorrectArgCount1").toBool(), true); - QCOMPARE(object->property("incorrectArgCount2").toBool(), true); - QCOMPARE(object->property("emptyArg").toBool(), true); - QCOMPARE(object->property("absoluteUrl").toString(), QString("http://www.example.com/test.qml")); QCOMPARE(object->property("relativeUrl").toString(), TEST_FILE("createComponentData.qml").toString()); @@ -322,30 +353,24 @@ void tst_qdeclarativeqt::createQmlObject() { QDeclarativeComponent component(&engine, TEST_FILE("createQmlObject.qml")); - QString warning1 = "QDeclarativeEngine::createQmlObject():"; - QString warning2 = " " + TEST_FILE("main.qml").toString() + ":4:1: Duplicate property name"; - QString warning3 = "QDeclarativeEngine::createQmlObject():"; - QString warning4 = " " + TEST_FILE("inline").toString() + ":2:10: Blah is not a type"; - QString warning5 = "QDeclarativeEngine::createQmlObject():"; - QString warning6 = " " + TEST_FILE("inline").toString() + ":3: Cannot assign object type QObject with no default method"; + QString warning1 = component.url().toString() + ":7: Error: expected 2 or 3 parameters"; + QString warning2 = component.url().toString()+ ":10: Error: Qt.createQmlObject() failed to create object: " + TEST_FILE("inline").toString() + ":2:10: Blah is not a type\n"; + QString warning3 = component.url().toString()+ ":11: Error: Qt.createQmlObject() failed to create object: " + TEST_FILE("main.qml").toString() + ":4:1: Duplicate property name\n"; + QString warning4 = component.url().toString()+ ":9: Error: parent object not found"; + QString warning5 = component.url().toString()+ ":8: Error: expected 2 or 3 parameters"; + QString warning6 = "RunTimeError: Qt.createQmlObject() failed to create object: " + TEST_FILE("inline").toString() + ":3: Cannot assign object type QObject with no default method\n"; QTest::ignoreMessage(QtWarningMsg, qPrintable(warning1)); QTest::ignoreMessage(QtWarningMsg, qPrintable(warning2)); QTest::ignoreMessage(QtWarningMsg, qPrintable(warning3)); QTest::ignoreMessage(QtWarningMsg, qPrintable(warning4)); QTest::ignoreMessage(QtWarningMsg, qPrintable(warning5)); - QTest::ignoreMessage(QtWarningMsg, qPrintable(warning6)); + QTest::ignoreMessage(QtDebugMsg, qPrintable(warning6)); QObject *object = component.create(); QVERIFY(object != 0); - QCOMPARE(object->property("incorrectArgCount1").toBool(), true); - QCOMPARE(object->property("incorrectArgCount2").toBool(), true); QCOMPARE(object->property("emptyArg").toBool(), true); - QCOMPARE(object->property("errors").toBool(), true); - QCOMPARE(object->property("noParent").toBool(), true); - QCOMPARE(object->property("notAvailable").toBool(), true); - QCOMPARE(object->property("runtimeError").toBool(), true); QCOMPARE(object->property("success").toBool(), true); QDeclarativeItem *item = qobject_cast<QDeclarativeItem *>(object); diff --git a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp index 578bcb4..a016fa7 100644 --- a/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp +++ b/tests/auto/declarative/qdeclarativestates/tst_qdeclarativestates.cpp @@ -68,8 +68,6 @@ private: int m_prop; }; -QML_DECLARE_TYPE(MyRect) - class tst_qdeclarativestates : public QObject { @@ -522,7 +520,7 @@ void tst_qdeclarativestates::parentChangeErrors() QDeclarativeRectangle *innerRect = qobject_cast<QDeclarativeRectangle*>(rect->findChild<QDeclarativeRectangle*>("MyRect")); QVERIFY(innerRect != 0); - QTest::ignoreMessage(QtWarningMsg, QByteArray("QML ParentChange (" + fullDataPath("/data/parentChange4.qml") + ":25:9) Unable to preserve appearance under non-uniform scale").constData()); + QTest::ignoreMessage(QtWarningMsg, fullDataPath("/data/parentChange4.qml") + ":25:9: QML ParentChange: Unable to preserve appearance under non-uniform scale"); rect->setState("reparented"); QCOMPARE(innerRect->rotation(), qreal(0)); QCOMPARE(innerRect->scale(), qreal(1)); @@ -538,7 +536,7 @@ void tst_qdeclarativestates::parentChangeErrors() QDeclarativeRectangle *innerRect = qobject_cast<QDeclarativeRectangle*>(rect->findChild<QDeclarativeRectangle*>("MyRect")); QVERIFY(innerRect != 0); - QTest::ignoreMessage(QtWarningMsg, QByteArray("QML ParentChange (" + fullDataPath("/data/parentChange5.qml") + ":25:9) Unable to preserve appearance under complex transform").constData()); + QTest::ignoreMessage(QtWarningMsg, fullDataPath("/data/parentChange5.qml") + ":25:9: QML ParentChange: Unable to preserve appearance under complex transform"); rect->setState("reparented"); QCOMPARE(innerRect->rotation(), qreal(0)); QCOMPARE(innerRect->scale(), qreal(1)); @@ -568,10 +566,10 @@ void tst_qdeclarativestates::anchorChanges() rect->setState("right"); QCOMPARE(innerRect->x(), qreal(150)); - QCOMPARE(aChanges->anchors()->left().anchorLine, QDeclarativeAnchorLine::Invalid); //### was reset (how do we distinguish from not set at all) QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect)); - QCOMPARE(aChanges->anchors()->right().item, rect->right().item); - QCOMPARE(aChanges->anchors()->right().anchorLine, rect->right().anchorLine); + QCOMPARE(aChanges->object()->anchors()->left().anchorLine, QDeclarativeAnchorLine::Invalid); //### was reset (how do we distinguish from not set at all) + QCOMPARE(aChanges->object()->anchors()->right().item, rect->right().item); + QCOMPARE(aChanges->object()->anchors()->right().anchorLine, rect->right().anchorLine); rect->setState(""); QCOMPARE(innerRect->x(), qreal(5)); @@ -591,7 +589,6 @@ void tst_qdeclarativestates::anchorChanges2() QVERIFY(innerRect != 0); rect->setState("right"); - QEXPECT_FAIL("", "QTBUG-5338", Continue); QCOMPARE(innerRect->x(), qreal(150)); rect->setState(""); @@ -627,14 +624,14 @@ void tst_qdeclarativestates::anchorChanges3() rect->setState("reanchored"); QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect)); - QCOMPARE(aChanges->anchors()->left().item, leftGuideline->left().item); - QCOMPARE(aChanges->anchors()->left().anchorLine, leftGuideline->left().anchorLine); - QCOMPARE(aChanges->anchors()->right().item, rect->right().item); - QCOMPARE(aChanges->anchors()->right().anchorLine, rect->right().anchorLine); - QCOMPARE(aChanges->anchors()->top().item, rect->top().item); - QCOMPARE(aChanges->anchors()->top().anchorLine, rect->top().anchorLine); - QCOMPARE(aChanges->anchors()->bottom().item, bottomGuideline->bottom().item); - QCOMPARE(aChanges->anchors()->bottom().anchorLine, bottomGuideline->bottom().anchorLine); + QCOMPARE(aChanges->object()->anchors()->left().item, leftGuideline->left().item); + QCOMPARE(aChanges->object()->anchors()->left().anchorLine, leftGuideline->left().anchorLine); + QCOMPARE(aChanges->object()->anchors()->right().item, rect->right().item); + QCOMPARE(aChanges->object()->anchors()->right().anchorLine, rect->right().anchorLine); + QCOMPARE(aChanges->object()->anchors()->top().item, rect->top().item); + QCOMPARE(aChanges->object()->anchors()->top().anchorLine, rect->top().anchorLine); + QCOMPARE(aChanges->object()->anchors()->bottom().item, bottomGuideline->bottom().item); + QCOMPARE(aChanges->object()->anchors()->bottom().anchorLine, bottomGuideline->bottom().anchorLine); QCOMPARE(innerRect->x(), qreal(10)); QCOMPARE(innerRect->y(), qreal(0)); @@ -677,10 +674,10 @@ void tst_qdeclarativestates::anchorChanges4() rect->setState("reanchored"); QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect)); - QCOMPARE(aChanges->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item); - QCOMPARE(aChanges->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine); - QCOMPARE(aChanges->anchors()->verticalCenter().item, leftGuideline->verticalCenter().item); - QCOMPARE(aChanges->anchors()->verticalCenter().anchorLine, leftGuideline->verticalCenter().anchorLine); + QCOMPARE(aChanges->object()->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item); + QCOMPARE(aChanges->object()->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine); + QCOMPARE(aChanges->object()->anchors()->verticalCenter().item, leftGuideline->verticalCenter().item); + QCOMPARE(aChanges->object()->anchors()->verticalCenter().anchorLine, leftGuideline->verticalCenter().anchorLine); delete rect; } @@ -712,10 +709,10 @@ void tst_qdeclarativestates::anchorChanges5() rect->setState("reanchored"); QCOMPARE(aChanges->object(), qobject_cast<QDeclarativeItem*>(innerRect)); - QCOMPARE(aChanges->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item); - QCOMPARE(aChanges->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine); - QCOMPARE(aChanges->anchors()->baseline().item, leftGuideline->baseline().item); - QCOMPARE(aChanges->anchors()->baseline().anchorLine, leftGuideline->baseline().anchorLine); + //QCOMPARE(aChanges->anchors()->horizontalCenter().item, bottomGuideline->horizontalCenter().item); + //QCOMPARE(aChanges->anchors()->horizontalCenter().anchorLine, bottomGuideline->horizontalCenter().anchorLine); + //QCOMPARE(aChanges->anchors()->baseline().item, leftGuideline->baseline().item); + //QCOMPARE(aChanges->anchors()->baseline().anchorLine, leftGuideline->baseline().anchorLine); delete rect; } @@ -813,8 +810,8 @@ void tst_qdeclarativestates::propertyErrors() QCOMPARE(rect->color(),QColor("red")); - QTest::ignoreMessage(QtWarningMsg, QByteArray("QML PropertyChanges (" + fullDataPath("/data/propertyErrors.qml") + ":8:9) Cannot assign to non-existent property \"colr\"").constData()); - QTest::ignoreMessage(QtWarningMsg, QByteArray("QML PropertyChanges (" + fullDataPath("/data/propertyErrors.qml") + ":8:9) Cannot assign to read-only property \"wantsFocus\"").constData()); + QTest::ignoreMessage(QtWarningMsg, fullDataPath("/data/propertyErrors.qml") + ":8:9: QML PropertyChanges: Cannot assign to non-existent property \"colr\""); + QTest::ignoreMessage(QtWarningMsg, fullDataPath("/data/propertyErrors.qml") + ":8:9: QML PropertyChanges: Cannot assign to read-only property \"wantsFocus\""); rect->setState("blue"); } @@ -946,7 +943,7 @@ void tst_qdeclarativestates::illegalTempState() QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(rectComponent.create()); QVERIFY(rect != 0); - QTest::ignoreMessage(QtWarningMsg, "Can't apply a state change as part of a state definition. "); + QTest::ignoreMessage(QtWarningMsg, "<Unknown File>: QML StateGroup: Can't apply a state change as part of a state definition."); rect->setState("placed"); QCOMPARE(rect->state(), QLatin1String("placed")); } @@ -959,7 +956,7 @@ void tst_qdeclarativestates::nonExistantProperty() QDeclarativeRectangle *rect = qobject_cast<QDeclarativeRectangle*>(rectComponent.create()); QVERIFY(rect != 0); - QTest::ignoreMessage(QtWarningMsg, QByteArray("QML PropertyChanges (" + fullDataPath("/data/nonExistantProp.qml") + ":9:9) Cannot assign to non-existent property \"colr\"").constData()); + QTest::ignoreMessage(QtWarningMsg, fullDataPath("/data/nonExistantProp.qml") + ":9:9: QML PropertyChanges: Cannot assign to non-existent property \"colr\""); rect->setState("blue"); QCOMPARE(rect->state(), QLatin1String("blue")); } diff --git a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp index edb4a32..551e17b 100644 --- a/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp +++ b/tests/auto/declarative/qdeclarativetext/tst_qdeclarativetext.cpp @@ -871,10 +871,10 @@ void tst_qdeclarativetext::embeddedImages_data() QTest::addColumn<QString>("error"); QTest::newRow("local") << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesLocal.qml") << ""; QTest::newRow("local-error") << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesLocalError.qml") - << "QML Text ("+QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesLocalError.qml").toString()+":3:1) Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/http/notexists.png").toString(); + << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesLocalError.qml").toString()+":3:1: QML Text: Cannot open: " + QUrl::fromLocalFile(SRCDIR "/data/http/notexists.png").toString(); QTest::newRow("remote") << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesRemote.qml") << ""; QTest::newRow("remote-error") << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesRemoteError.qml") - << "QML Text ("+QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesRemoteError.qml").toString()+":3:1) Error downloading http://127.0.0.1:14453/notexists.png - server replied: Not found"; + << QUrl::fromLocalFile(SRCDIR "/data/embeddedImagesRemoteError.qml").toString()+":3:1: QML Text: Error downloading http://127.0.0.1:14453/notexists.png - server replied: Not found"; } void tst_qdeclarativetext::embeddedImages() diff --git a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp index 25101ba..3307b7c 100644 --- a/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp +++ b/tests/auto/declarative/qdeclarativetextedit/tst_qdeclarativetextedit.cpp @@ -649,7 +649,7 @@ void tst_qdeclarativetextedit::delegateLoading_data() // import installed QTest::newRow("pass") << "cursorHttpTestPass.qml" << ""; - QTest::newRow("fail1") << "cursorHttpTestFail1.qml" << ":-1: Network error for URL http://localhost:42332/FailItem.qml "; + QTest::newRow("fail1") << "cursorHttpTestFail1.qml" << "<Unknown File>: Network error for URL http://localhost:42332/FailItem.qml "; QTest::newRow("fail2") << "cursorHttpTestFail2.qml" << "http://localhost:42332/ErrItem.qml:4:5: Fungus is not a type "; } diff --git a/tests/auto/declarative/qdeclarativetimer/tst_qdeclarativetimer.cpp b/tests/auto/declarative/qdeclarativetimer/tst_qdeclarativetimer.cpp index a08a91c..da2d173 100644 --- a/tests/auto/declarative/qdeclarativetimer/tst_qdeclarativetimer.cpp +++ b/tests/auto/declarative/qdeclarativetimer/tst_qdeclarativetimer.cpp @@ -43,6 +43,7 @@ #include <QtDeclarative/qdeclarativeengine.h> #include <QtDeclarative/qdeclarativecomponent.h> #include <private/qdeclarativetimer_p.h> +#include <QtDeclarative/qdeclarativeitem.h> #include <QDebug> class tst_qdeclarativetimer : public QObject @@ -60,6 +61,7 @@ private slots: void triggeredOnStartRepeat(); void changeDuration(); void restart(); + void parentProperty(); }; class TimerHelper : public QObject @@ -317,6 +319,21 @@ void tst_qdeclarativetimer::restart() delete timer; } +void tst_qdeclarativetimer::parentProperty() +{ + QDeclarativeEngine engine; + QDeclarativeComponent component(&engine); + component.setData(QByteArray("import Qt 4.7\nItem { Timer { objectName: \"timer\"; running: parent.visible } }"), QUrl::fromLocalFile("")); + QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(component.create()); + QVERIFY(item != 0); + QDeclarativeTimer *timer = item->findChild<QDeclarativeTimer*>("timer"); + QVERIFY(timer != 0); + + QVERIFY(timer->isRunning()); + + delete timer; +} + QTEST_MAIN(tst_qdeclarativetimer) #include "tst_qdeclarativetimer.moc" diff --git a/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h b/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h index dd13429..8a9b981 100644 --- a/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h +++ b/tests/auto/declarative/qdeclarativevaluetypes/testtypes.h @@ -133,7 +133,6 @@ signals: public slots: QSize method() { return QSize(13, 14); } }; -QML_DECLARE_TYPE(MyTypeObject); class MyConstantValueSource : public QObject, public QDeclarativePropertyValueSource { @@ -142,7 +141,6 @@ class MyConstantValueSource : public QObject, public QDeclarativePropertyValueSo public: virtual void setTarget(const QDeclarativeProperty &p) { p.write(3345); } }; -QML_DECLARE_TYPE(MyConstantValueSource); class MyOffsetValueInterceptor : public QObject, public QDeclarativePropertyValueInterceptor { @@ -155,7 +153,6 @@ public: private: QDeclarativeProperty prop; }; -QML_DECLARE_TYPE(MyOffsetValueInterceptor); void registerTypes(); diff --git a/tests/auto/declarative/qdeclarativeview/data/resizemodedeclarativeitem.qml b/tests/auto/declarative/qdeclarativeview/data/resizemodedeclarativeitem.qml new file mode 100644 index 0000000..27c8454 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeview/data/resizemodedeclarativeitem.qml @@ -0,0 +1,5 @@ +import Qt 4.7 +Item { + width: 200 + height: 200 +} diff --git a/tests/auto/declarative/qdeclarativeview/data/resizemodegraphicswidget.qml b/tests/auto/declarative/qdeclarativeview/data/resizemodegraphicswidget.qml new file mode 100644 index 0000000..964810c --- /dev/null +++ b/tests/auto/declarative/qdeclarativeview/data/resizemodegraphicswidget.qml @@ -0,0 +1,5 @@ +import Qt 4.7 +QGraphicsWidget { + width: 200 + height: 200 +} diff --git a/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro b/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro new file mode 100644 index 0000000..d6be728 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeview/qdeclarativeview.pro @@ -0,0 +1,7 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui +macx:CONFIG -= app_bundle + +SOURCES += tst_qdeclarativeview.cpp + +DEFINES += SRCDIR=\\\"$$PWD\\\" diff --git a/tests/auto/declarative/qdeclarativeview/tst_qdeclarativeview.cpp b/tests/auto/declarative/qdeclarativeview/tst_qdeclarativeview.cpp new file mode 100644 index 0000000..1ed51c1 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeview/tst_qdeclarativeview.cpp @@ -0,0 +1,272 @@ +/**************************************************************************** +** +** Copyright (C) 2010 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 <QtTest/QSignalSpy> +#include <QtDeclarative/qdeclarativecomponent.h> +#include <QtDeclarative/qdeclarativecontext.h> +#include <QtDeclarative/qdeclarativeview.h> +#include <QtDeclarative/qdeclarativeitem.h> +#include <QtGui/qgraphicswidget.h> + +class tst_QDeclarativeView : public QObject + +{ + Q_OBJECT +public: + tst_QDeclarativeView(); + +private slots: + void resizemodedeclarativeitem(); + void resizemodegraphicswidget(); + +private: + template<typename T> + T *findItem(QGraphicsObject *parent, const QString &objectName); +}; + + +tst_QDeclarativeView::tst_QDeclarativeView() +{ +} + +void tst_QDeclarativeView::resizemodedeclarativeitem() +{ + QWidget window; + QDeclarativeView *canvas = new QDeclarativeView(&window); + QVERIFY(canvas); + QSignalSpy sceneResizedSpy(canvas, SIGNAL(sceneResized(QSize))); + canvas->setResizeMode(QDeclarativeView::SizeRootObjectToView); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/resizemodedeclarativeitem.qml")); + QDeclarativeItem* declarativeItem = qobject_cast<QDeclarativeItem*>(canvas->rootObject()); + QVERIFY(declarativeItem); + window.show(); + + // initial size from root object + QCOMPARE(declarativeItem->width(), 200.0); + QCOMPARE(declarativeItem->height(), 200.0); + QCOMPARE(canvas->size(), QSize(200, 200)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy.count(), 1); + + // size update from view + canvas->resize(QSize(80,100)); + QCOMPARE(declarativeItem->width(), 80.0); + QCOMPARE(declarativeItem->height(), 100.0); + QCOMPARE(canvas->size(), QSize(80, 100)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy.count(), 2); + + canvas->setResizeMode(QDeclarativeView::SizeViewToRootObject); + + // size update from view disabled + canvas->resize(QSize(60,80)); + QCOMPARE(declarativeItem->width(), 80.0); + QCOMPARE(declarativeItem->height(), 100.0); + QCOMPARE(canvas->size(), QSize(60, 80)); + QCOMPARE(sceneResizedSpy.count(), 3); + + // size update from root object + declarativeItem->setWidth(250); + declarativeItem->setHeight(350); + qApp->processEvents(); + QCOMPARE(declarativeItem->width(), 250.0); + QCOMPARE(declarativeItem->height(), 350.0); + QCOMPARE(canvas->size(), QSize(250, 350)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy.count(), 4); + + // reset canvas + window.hide(); + delete canvas; + canvas = new QDeclarativeView(&window); + QVERIFY(canvas); + QSignalSpy sceneResizedSpy2(canvas, SIGNAL(sceneResized(QSize))); + canvas->setResizeMode(QDeclarativeView::SizeViewToRootObject); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/resizemodedeclarativeitem.qml")); + declarativeItem = qobject_cast<QDeclarativeItem*>(canvas->rootObject()); + QVERIFY(declarativeItem); + window.show(); + + // initial size for root object + QCOMPARE(declarativeItem->width(), 200.0); + QCOMPARE(declarativeItem->height(), 200.0); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy2.count(), 1); + + // size update from root object + declarativeItem->setWidth(80); + declarativeItem->setHeight(100); + qApp->processEvents(); + QCOMPARE(declarativeItem->width(), 80.0); + QCOMPARE(declarativeItem->height(), 100.0); + QCOMPARE(canvas->size(), QSize(80, 100)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy2.count(), 2); + + // size update from root object disabled + canvas->setResizeMode(QDeclarativeView::SizeRootObjectToView); + declarativeItem->setWidth(60); + declarativeItem->setHeight(80); + QCOMPARE(canvas->width(), 80); + QCOMPARE(canvas->height(), 100); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy2.count(), 2); + + // size update from view + canvas->resize(QSize(200,300)); + QCOMPARE(declarativeItem->width(), 200.0); + QCOMPARE(declarativeItem->height(), 300.0); + QCOMPARE(canvas->size(), QSize(200, 300)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy2.count(), 3); + + delete canvas; +} + +void tst_QDeclarativeView::resizemodegraphicswidget() +{ + QWidget window; + QDeclarativeView *canvas = new QDeclarativeView(&window); + QVERIFY(canvas); + QSignalSpy sceneResizedSpy(canvas, SIGNAL(sceneResized(QSize))); + canvas->setResizeMode(QDeclarativeView::SizeRootObjectToView); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/resizemodegraphicswidget.qml")); + QGraphicsWidget* graphicsWidget = qobject_cast<QGraphicsWidget*>(canvas->rootObject()); + QVERIFY(graphicsWidget); + window.show(); + + // initial size from root object + QCOMPARE(graphicsWidget->size(), QSizeF(200.0, 200.0)); + QCOMPARE(canvas->size(), QSize(200, 200)); + QCOMPARE(canvas->size(), QSize(200, 200)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy.count(), 1); + + // size update from view + canvas->resize(QSize(80,100)); + QCOMPARE(graphicsWidget->size(), QSizeF(80.0,100.0)); + QCOMPARE(canvas->size(), QSize(80,100)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy.count(), 2); + + // size update from view disabled + canvas->setResizeMode(QDeclarativeView::SizeViewToRootObject); + canvas->resize(QSize(60,80)); + QCOMPARE(graphicsWidget->size(), QSizeF(80.0,100.0)); + QCOMPARE(canvas->size(), QSize(60, 80)); + QCOMPARE(sceneResizedSpy.count(), 3); + + // size update from root object + graphicsWidget->resize(QSizeF(250.0, 350.0)); + QCOMPARE(graphicsWidget->size(), QSizeF(250.0,350.0)); + QCOMPARE(canvas->size(), QSize(250, 350)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy.count(), 4); + + // reset canvas + window.hide(); + delete canvas; + canvas = new QDeclarativeView(&window); + QVERIFY(canvas); + QSignalSpy sceneResizedSpy2(canvas, SIGNAL(sceneResized(QSize))); + canvas->setResizeMode(QDeclarativeView::SizeViewToRootObject); + canvas->setSource(QUrl::fromLocalFile(SRCDIR "/data/resizemodegraphicswidget.qml")); + graphicsWidget = qobject_cast<QGraphicsWidget*>(canvas->rootObject()); + QVERIFY(graphicsWidget); + window.show(); + + // initial size from root object + QCOMPARE(graphicsWidget->size(), QSizeF(200.0, 200.0)); + QCOMPARE(canvas->size(), QSize(200, 200)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy2.count(), 1); + + // size update from root object + graphicsWidget->resize(QSizeF(80, 100)); + QCOMPARE(graphicsWidget->size(), QSizeF(80.0, 100.0)); + QCOMPARE(canvas->size(), QSize(80, 100)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy2.count(), 2); + + // size update from root object disabled + canvas->setResizeMode(QDeclarativeView::SizeRootObjectToView); + graphicsWidget->resize(QSizeF(60,80)); + QCOMPARE(canvas->size(), QSize(80,100)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy2.count(), 2); + + // size update from view + canvas->resize(QSize(200,300)); + QCOMPARE(graphicsWidget->size(), QSizeF(200.0, 300.0)); + QCOMPARE(canvas->size(), QSize(200, 300)); + QCOMPARE(canvas->size(), canvas->sizeHint()); + QCOMPARE(sceneResizedSpy2.count(), 3); + + window.show(); + delete canvas; +} + +template<typename T> +T *tst_QDeclarativeView::findItem(QGraphicsObject *parent, const QString &objectName) +{ + if (!parent) + return 0; + + const QMetaObject &mo = T::staticMetaObject; + //qDebug() << parent->QGraphicsObject::children().count() << "children"; + for (int i = 0; i < parent->childItems().count(); ++i) { + QDeclarativeItem *item = qobject_cast<QDeclarativeItem*>(parent->childItems().at(i)); + if(!item) + continue; + //qDebug() << "try" << item; + if (mo.cast(item) && (objectName.isEmpty() || item->objectName() == objectName)) + return static_cast<T*>(item); + item = findItem<T>(item, objectName); + if (item) + return static_cast<T*>(item); + } + + return 0; +} + +QTEST_MAIN(tst_QDeclarativeView) + +#include "tst_qdeclarativeview.moc" diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/data/visualdatamodel.qml b/tests/auto/declarative/qdeclarativevisualdatamodel/data/visualdatamodel.qml new file mode 100644 index 0000000..d70f82b --- /dev/null +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/data/visualdatamodel.qml @@ -0,0 +1,11 @@ +import Qt 4.7 + +VisualDataModel { + function setRoot() { + rootIndex = modelIndex(0); + } + function setRootToParent() { + rootIndex = parentModelIndex(); + } + model: myModel +} diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro new file mode 100644 index 0000000..d76b582 --- /dev/null +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/qdeclarativevisualdatamodel.pro @@ -0,0 +1,11 @@ +load(qttest_p4) +contains(QT_CONFIG,declarative): QT += declarative gui +macx:CONFIG -= app_bundle + +SOURCES += tst_qdeclarativevisualdatamodel.cpp + +# Define SRCDIR equal to test's source directory +DEFINES += SRCDIR=\\\"$$PWD\\\" + +CONFIG += parallel_test + diff --git a/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp new file mode 100644 index 0000000..7de15a3 --- /dev/null +++ b/tests/auto/declarative/qdeclarativevisualdatamodel/tst_qdeclarativevisualdatamodel.cpp @@ -0,0 +1,111 @@ +/**************************************************************************** +** +** Copyright (C) 2010 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 <QtTest/QSignalSpy> +#include <QStandardItemModel> +#include <QtDeclarative/qdeclarativeengine.h> +#include <QtDeclarative/qdeclarativecomponent.h> +#include <QtDeclarative/qdeclarativecontext.h> +#include <private/qdeclarativevisualitemmodel_p.h> +#include <private/qdeclarativevaluetype_p.h> +#include <math.h> + +static void initStandardTreeModel(QStandardItemModel *model) +{ + QStandardItem *item; + item = new QStandardItem(QLatin1String("Row 1 Item")); + model->insertRow(0, item); + + item = new QStandardItem(QLatin1String("Row 2 Item")); + item->setCheckable(true); + model->insertRow(1, item); + + QStandardItem *childItem = new QStandardItem(QLatin1String("Row 2 Child Item")); + item->setChild(0, childItem); + + item = new QStandardItem(QLatin1String("Row 3 Item")); + item->setIcon(QIcon()); + model->insertRow(2, item); +} + +class tst_qdeclarativevisualdatamodel : public QObject +{ + Q_OBJECT +public: + tst_qdeclarativevisualdatamodel(); + +private slots: + void rootIndex(); + +private: + QDeclarativeEngine engine; +}; + +tst_qdeclarativevisualdatamodel::tst_qdeclarativevisualdatamodel() +{ +} + +void tst_qdeclarativevisualdatamodel::rootIndex() +{ + QDeclarativeEngine engine; + QDeclarativeComponent c(&engine, QUrl::fromLocalFile(SRCDIR "/data/visualdatamodel.qml")); + + QStandardItemModel model; + initStandardTreeModel(&model); + + engine.rootContext()->setContextProperty("myModel", &model); + + QDeclarativeVisualDataModel *obj = qobject_cast<QDeclarativeVisualDataModel*>(c.create()); + QVERIFY(obj != 0); + + QMetaObject::invokeMethod(obj, "setRoot"); + QVERIFY(qvariant_cast<QModelIndex>(obj->rootIndex()) == model.index(0,0)); + + QMetaObject::invokeMethod(obj, "setRootToParent"); + QVERIFY(qvariant_cast<QModelIndex>(obj->rootIndex()) == QModelIndex()); + + delete obj; +} + + +QTEST_MAIN(tst_qdeclarativevisualdatamodel) + +#include "tst_qdeclarativevisualdatamodel.moc" diff --git a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp index cf7e357..831e318 100644 --- a/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp +++ b/tests/auto/declarative/qdeclarativexmllistmodel/tst_qdeclarativexmllistmodel.cpp @@ -222,7 +222,7 @@ void tst_qdeclarativexmllistmodel::roles() void tst_qdeclarativexmllistmodel::roleErrors() { QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/roleErrors.qml")); - QTest::ignoreMessage(QtWarningMsg, QString("QML XmlRole (" + QUrl::fromLocalFile(SRCDIR "/data/roleErrors.qml").toString() + ":6:5) An XmlRole query must not start with '/'").toUtf8().constData()); + QTest::ignoreMessage(QtWarningMsg, (QUrl::fromLocalFile(SRCDIR "/data/roleErrors.qml").toString() + ":6:5: QML XmlRole: An XmlRole query must not start with '/'").toUtf8().constData()); //### make sure we receive all expected warning messages. QDeclarativeXmlListModel *model = qobject_cast<QDeclarativeXmlListModel*>(component.create()); QVERIFY(model != 0); @@ -247,7 +247,7 @@ void tst_qdeclarativexmllistmodel::roleErrors() void tst_qdeclarativexmllistmodel::uniqueRoleNames() { QDeclarativeComponent component(&engine, QUrl::fromLocalFile(SRCDIR "/data/unique.qml")); - QTest::ignoreMessage(QtWarningMsg, QString("QML XmlRole (" + QUrl::fromLocalFile(SRCDIR "/data/unique.qml").toString() + ":7:5) \"name\" duplicates a previous role name and will be disabled.").toUtf8().constData()); + QTest::ignoreMessage(QtWarningMsg, (QUrl::fromLocalFile(SRCDIR "/data/unique.qml").toString() + ":7:5: QML XmlRole: \"name\" duplicates a previous role name and will be disabled.").toUtf8().constData()); QDeclarativeXmlListModel *model = qobject_cast<QDeclarativeXmlListModel*>(component.create()); QVERIFY(model != 0); QTRY_COMPARE(model->count(), 9); diff --git a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png Binary files differindex 9c9ceae..02fa5c9 100644 --- a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png +++ b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.0.png diff --git a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml index 08ed609..1dc2d29 100644 --- a/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml +++ b/tests/auto/declarative/qmlvisual/fillmode/data/fillmode.qml @@ -7,5 +7,5 @@ VisualTest { Frame { msec: 16 image: "fillmode.0.png" - } + } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml index 1403d35..dd38ea5 100644 --- a/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml +++ b/tests/auto/declarative/qmlvisual/qdeclarativeborderimage/data/borders.qml @@ -6,6 +6,6 @@ VisualTest { } Frame { msec: 16 - hash: "258a7e75b491e4f51a91739c776803b3" + image: "borders.0.png" } } diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.qml new file mode 100644 index 0000000..6e5f7a0 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/data/test_flipable_resize.qml @@ -0,0 +1,207 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "04382a80a203e1fe3d0d4944c9195e0b" + } + Frame { + msec: 32 + hash: "8d8c6a3c37ba3cb77afcc7ed4234d40f" + } + Frame { + msec: 48 + hash: "93ab01494e2229c0921c25d3acbcffe6" + } + Frame { + msec: 64 + hash: "5036bf3c842e5ad09b7bac5512e433ad" + } + Frame { + msec: 80 + hash: "ef02ef4598fbe6390391b7f2c17ec99d" + } + Frame { + msec: 96 + hash: "7fa83afca86cfec48a4986ba3df08e3b" + } + Frame { + msec: 112 + hash: "d9388827bd7755bb9bc1ef78507cc0ac" + } + Frame { + msec: 128 + hash: "d18778f4f748f7ee54404db334831ff7" + } + Frame { + msec: 144 + hash: "fee69ae3b4d79b795d4443b055a8a91a" + } + Frame { + msec: 160 + hash: "f80fa0131c859286e900071b51e74784" + } + Frame { + msec: 176 + hash: "b654e51ea71ec118e6b985743281b6a1" + } + Frame { + msec: 192 + hash: "91c771226e9c97e0f00c6f7c6fc6c95c" + } + Frame { + msec: 208 + hash: "0f612f81541b093442e68d99e00c288c" + } + Frame { + msec: 224 + hash: "246b619598606fef9f0442439cee4ec6" + } + Frame { + msec: 240 + hash: "1d2f34459b2128877218cef340f46f06" + } + Frame { + msec: 256 + hash: "af3c2eef734da05d45484bbb19646425" + } + Frame { + msec: 272 + hash: "85dfe5680e47919500728de6e93c8290" + } + Frame { + msec: 288 + hash: "8fd7d439bafa07461a65a3c97cf8602a" + } + Frame { + msec: 304 + hash: "1ebf543a84aae4abfd480f24ad362cb0" + } + Frame { + msec: 320 + hash: "60a9c9300981282986659e7c73d381b0" + } + Frame { + msec: 336 + hash: "686f3ff048f2b214033988d989ed087a" + } + Frame { + msec: 352 + hash: "24694e17476b0ffe9848159aa282e931" + } + Frame { + msec: 368 + hash: "c05e1bdf62e3e58972f868b930823a58" + } + Frame { + msec: 384 + hash: "cbc1a3c78b8f79047d1221d5ae06f0f8" + } + Frame { + msec: 400 + hash: "05ad366e74bf30b1619cf2ef1f530d82" + } + Frame { + msec: 416 + hash: "4c5c536f2c03ecfb7d3d8f56638001ec" + } + Frame { + msec: 432 + hash: "9754048ffcb7863a8a676e5bee4a7991" + } + Frame { + msec: 448 + hash: "047aa8203ad18023f5af340a41f1084e" + } + Frame { + msec: 464 + hash: "1351b7c92cd873db387e93dc74cca848" + } + Frame { + msec: 480 + hash: "4066f52fae753013396195dc98311058" + } + Frame { + msec: 496 + hash: "21d969b92993e428e79babb574e9203d" + } + Frame { + msec: 512 + hash: "62c00f52e8b0592fbb59f88deb3b022e" + } + Frame { + msec: 528 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 544 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 560 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 576 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 592 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 608 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 624 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 640 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 656 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 672 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 688 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 704 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 720 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Key { + type: 6 + key: 16777249 + modifiers: 67108864 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 736 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 752 + hash: "322719dee40d3495e9b4d2faac351e89" + } + Frame { + msec: 768 + hash: "322719dee40d3495e9b4d2faac351e89" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativeflipable/test_flipable_resize.qml b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/test_flipable_resize.qml new file mode 100644 index 0000000..5a73e67 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativeflipable/test_flipable_resize.qml @@ -0,0 +1,62 @@ +import Qt 4.6 +Item { //realWindow + width: 370 + height: 480 + Item { + id: window + NumberAnimation on width{ from:320; to:370; duration: 500 } + NumberAnimation on height{ from:480; to:320; duration: 500 } + Flipable { + id: flipable + x: 0 + y: window.height / 3.0 - 40 + width: parent.width + height: parent.height + transform: Rotation { + id: transform + origin.x: window.width / 2.0 + origin.y: 0 + origin.z: 0 + axis.x: 0 + axis.y: 1 + axis.z: 0 + angle: 0; + } + front: Rectangle{ + width: parent.width + height: 80 + color: "blue" + }back: Rectangle{ + width: parent.width + height: 80 + color: "red" + } + } + Flipable { + id: flipableBack + x: 0 + y: 2.0 * window.height / 3.0 - 40 + width: parent.width + height: parent.height + transform: Rotation { + id: transformBack + origin.x: window.width / 2.0 + origin.y: 0 + origin.z: 0 + axis.x: 0 + axis.y: 1 + axis.z: 0 + angle: 180; + } + front: Rectangle{ + width: parent.width + height: 80 + color: "blue" + }back: Rectangle{ + width: parent.width + height: 80 + color: "red" + } + } + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png Binary files differnew file mode 100644 index 0000000..993610f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.0.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png Binary files differnew file mode 100644 index 0000000..993610f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.1.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png Binary files differnew file mode 100644 index 0000000..12c6cf5 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.10.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png Binary files differnew file mode 100644 index 0000000..ccb9fdd --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.11.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png Binary files differnew file mode 100644 index 0000000..ace0752 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.12.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png Binary files differnew file mode 100644 index 0000000..993610f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.13.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png Binary files differnew file mode 100644 index 0000000..e58c68b --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.2.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png Binary files differnew file mode 100644 index 0000000..e58c68b --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.3.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png Binary files differnew file mode 100644 index 0000000..cb6d2f8 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.4.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png Binary files differnew file mode 100644 index 0000000..db6bea2 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.5.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png Binary files differnew file mode 100644 index 0000000..c18bb34 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.6.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png Binary files differnew file mode 100644 index 0000000..c18bb34 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.7.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png Binary files differnew file mode 100644 index 0000000..3b56301 --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.8.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png Binary files differnew file mode 100644 index 0000000..993610f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.9.png diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml new file mode 100644 index 0000000..e6a09bf --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/data/mousearea-flickable.qml @@ -0,0 +1,5127 @@ +import Qt.VisualTest 4.6 + +VisualTest { + Frame { + msec: 0 + } + Frame { + msec: 16 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 32 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 48 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 64 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 80 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 96 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 112 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 128 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 144 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 160 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 176 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 192 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 208 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 224 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 240 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 256 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 272 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 288 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 304 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 320 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 336 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 352 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 368 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 384 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 400 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 416 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 432 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 448 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 464 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 480 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 496 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 512 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 528 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 544 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 560 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 576 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 592 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 608 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 624 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 640 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 656 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 672 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 688 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 704 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 720 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 736 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 752 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 768 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 784 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 800 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 816 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 832 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 848 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 864 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 880 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 896 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 912 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 928 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 944 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 960 + image: "mousearea-flickable.0.png" + } + Frame { + msec: 976 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 992 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1008 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1024 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1040 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1056 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1072 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1088 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1104 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1120 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1136 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1152 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1168 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1184 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1200 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1216 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1232 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1248 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1264 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1280 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1296 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1312 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1328 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1344 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1360 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1376 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1392 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1408 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1424 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1440 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1456 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1472 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1488 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1504 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1520 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1536 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1552 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1568 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1584 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1600 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1616 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1632 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1648 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1664 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1680 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1696 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1712 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1728 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1744 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1760 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1776 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1792 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1808 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1824 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1840 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1856 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1872 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1888 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1904 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1920 + image: "mousearea-flickable.1.png" + } + Frame { + msec: 1936 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1952 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1968 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 1984 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2000 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2016 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2032 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2048 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2064 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2080 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2096 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2112 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2128 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2144 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2160 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2176 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2192 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2208 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2224 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2240 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2256 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2272 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2288 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2304 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2320 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2336 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2352 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2368 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2384 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2400 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2416 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2432 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2448 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2464 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2480 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2496 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2512 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2528 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2544 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2560 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2576 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2592 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 2608 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 188; y: 41 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 2624 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2640 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2656 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2672 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2688 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2704 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2720 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2736 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2752 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2768 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2784 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2800 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2816 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2832 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2848 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2864 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2880 + image: "mousearea-flickable.2.png" + } + Frame { + msec: 2896 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2912 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2928 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2944 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2960 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2976 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 2992 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3008 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3024 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3040 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3056 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3072 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3088 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3104 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3120 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3136 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3152 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3168 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3184 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3200 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3216 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3232 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3248 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3264 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3280 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3296 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3312 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3328 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3344 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3360 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3376 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3392 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3408 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3424 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3440 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3456 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3472 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3488 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3504 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3520 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3536 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3552 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3568 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3584 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3600 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3616 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3632 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3648 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3664 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3680 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3696 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3712 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3728 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3744 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3760 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3776 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3792 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3808 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3824 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3840 + image: "mousearea-flickable.3.png" + } + Frame { + msec: 3856 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3872 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3888 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3904 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3920 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3936 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3952 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3968 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 3984 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4000 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4016 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4032 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4048 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4064 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4080 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4096 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4112 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4128 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4144 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4160 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4176 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4192 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4208 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4224 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4240 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4256 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4272 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4288 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4304 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4320 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4336 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4352 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4368 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4384 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4400 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4416 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4432 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4448 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4464 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4480 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4496 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Frame { + msec: 4512 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 189; y: 42 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4528 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 189; y: 44 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4544 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 190; y: 45 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 190; y: 47 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4560 + hash: "4a60ab820ca66548384b2257b21de8ec" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 190; y: 48 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 190; y: 50 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4576 + hash: "86b32befe0dada5bdce82a7dd14777ce" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 191; y: 51 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 191; y: 53 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4592 + hash: "7a5f69a1eecb5de0fc2295cd287eb449" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 191; y: 54 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 56 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4608 + hash: "144eeb7c2a32cedb6ebba063501c9176" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 57 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 59 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4624 + hash: "11120d6de575ffa639b6abb3af4afef7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 193; y: 61 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 193; y: 62 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4640 + hash: "ab4c936a81299adf080f3b14f7e6be49" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 193; y: 64 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 66 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4656 + hash: "6602009ffe3c0f3072640ebc8749b76f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 68 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 70 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4672 + hash: "8517007d5102af238935e93a3b38087f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 195; y: 72 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 195; y: 75 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4688 + hash: "4e129ebba85d1f3717d09f71eb5a1a7d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 77 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 79 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4704 + hash: "82f54d7e254edcf499ea12a63118e8a7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 82 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 197; y: 84 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4720 + hash: "572cb62d69ccb973ea18d3b0eaff571b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 197; y: 86 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 197; y: 88 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4736 + hash: "79650397b868019909b931a32a115823" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 198; y: 90 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 198; y: 92 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4752 + hash: "43e50f4d4d37373e26af0a5d3cb64c4c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 198; y: 94 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 198; y: 97 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4768 + hash: "a0f8eb8a796f67c368b0a479e8d14681" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 199; y: 99 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 199; y: 101 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4784 + hash: "01bf03313a0229e810a24e2adbbe9775" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 199; y: 106 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4800 + image: "mousearea-flickable.4.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 200; y: 111 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4816 + hash: "aafb12a520eb443ee1348282f2c54e4a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 200; y: 113 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 200; y: 116 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4832 + hash: "806d22bc3533c729cd10dc889c36902d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 201; y: 121 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4848 + hash: "05b3013c9e42ed9ced7009d2e2999357" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 201; y: 124 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 130 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4864 + hash: "cb49adcd2c8afe27fd5926bd622added" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 133 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 135 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4880 + hash: "d0b4215b43403c97d83250add6d2b6db" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 138 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 146 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4896 + hash: "ee0523fe6a33b59871ad3b311ca0cbeb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 149 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 152 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4912 + hash: "29ca97cc573d3a1fde65320b61678c60" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 207; y: 161 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4928 + hash: "021bda841eaefa76ce5e1c97150af6f6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 207; y: 164 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 166 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4944 + hash: "80edf52cc9e64a29f677bc2203220ba9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 172 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4960 + hash: "c09f4002ed9d41f62bb1aaff95723cce" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 175 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 177 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4976 + hash: "7bb17b13db811b02c86a24a0051336d9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 180 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 182 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 4992 + hash: "da5c33ee9e9e1d9aaa7d5efa83b8bf69" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 187 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5008 + hash: "3ca9742356b6ff833fd287a95520174a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 189 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 192 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5024 + hash: "d1372239a681d1fccc25257b4a02fb39" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 194 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 196 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5040 + hash: "1f37473ab2fb0643e11e4a41a2ee4561" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 198 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 200 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5056 + hash: "1533c6ff17e79a47a5d3510aa85bcf8a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 202 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 204 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5072 + hash: "4cad3c6caf8d3009f63923df897c4723" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 205 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 207 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5088 + hash: "b81183233961b34c2a3f21a249b0fbfb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 209 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 210 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5104 + hash: "9f876eb93a16c24843dd6a5acd303ab3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 211 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 213 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5120 + hash: "237dd62011f4253970b946b335e3fb71" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 215 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5136 + hash: "6206ad3e633b6b1b068304caa4efe48a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 217 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5152 + hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 211; y: 218 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5168 + hash: "d9e953d132330f8a58a190d61aec6ec3" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 219 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 220 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5184 + hash: "c1570ad4cb688ea51818e0a09e349daa" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 222 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5200 + hash: "11853dcbad9d1d9a8b7d8a4e6fcca140" + } + Frame { + msec: 5216 + hash: "11853dcbad9d1d9a8b7d8a4e6fcca140" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 223 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5232 + hash: "11853dcbad9d1d9a8b7d8a4e6fcca140" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 224 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5248 + hash: "c6a81be579382f25ac583734897c2570" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5264 + hash: "c6a81be579382f25ac583734897c2570" + } + Frame { + msec: 5280 + hash: "c6a81be579382f25ac583734897c2570" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 226 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5296 + hash: "8cbeb925f039bde9846d37a5ec6cd3f9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5312 + hash: "8cbeb925f039bde9846d37a5ec6cd3f9" + } + Frame { + msec: 5328 + hash: "8cbeb925f039bde9846d37a5ec6cd3f9" + } + Frame { + msec: 5344 + hash: "8cbeb925f039bde9846d37a5ec6cd3f9" + } + Frame { + msec: 5360 + hash: "8cbeb925f039bde9846d37a5ec6cd3f9" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 209; y: 227 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 5376 + hash: "8cbeb925f039bde9846d37a5ec6cd3f9" + } + Frame { + msec: 5392 + hash: "c6a81be579382f25ac583734897c2570" + } + Frame { + msec: 5408 + hash: "11853dcbad9d1d9a8b7d8a4e6fcca140" + } + Frame { + msec: 5424 + hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b" + } + Frame { + msec: 5440 + hash: "9f876eb93a16c24843dd6a5acd303ab3" + } + Frame { + msec: 5456 + hash: "1533c6ff17e79a47a5d3510aa85bcf8a" + } + Frame { + msec: 5472 + hash: "9a9d1e0b1d7b9291480b3ec641f354ce" + } + Frame { + msec: 5488 + hash: "ee40862a59f14667c89fa62f380c10fb" + } + Frame { + msec: 5504 + hash: "95b57cd3dac3bce56674f2c4143f42d4" + } + Frame { + msec: 5520 + hash: "52d45e8dde81fef5ee93bbd5a40d4851" + } + Frame { + msec: 5536 + hash: "05b3013c9e42ed9ced7009d2e2999357" + } + Frame { + msec: 5552 + hash: "7d03030f5a672d87aeabefdf4f3a39a4" + } + Frame { + msec: 5568 + hash: "79650397b868019909b931a32a115823" + } + Frame { + msec: 5584 + hash: "82f54d7e254edcf499ea12a63118e8a7" + } + Frame { + msec: 5600 + hash: "8517007d5102af238935e93a3b38087f" + } + Frame { + msec: 5616 + hash: "dc272fc8fc98d822a154da1d495d4f7e" + } + Frame { + msec: 5632 + hash: "11120d6de575ffa639b6abb3af4afef7" + } + Frame { + msec: 5648 + hash: "70e522f64236dfa4e1613ffc29b4b23e" + } + Frame { + msec: 5664 + hash: "7a5f69a1eecb5de0fc2295cd287eb449" + } + Frame { + msec: 5680 + hash: "a569789b082296415321ba11c859abe5" + } + Frame { + msec: 5696 + hash: "9f9f85d5f879b0e52ebc751d6668cfb8" + } + Frame { + msec: 5712 + hash: "9f9f85d5f879b0e52ebc751d6668cfb8" + } + Frame { + msec: 5728 + hash: "43fc85bb3b1501f5e12f1fedaaa14c64" + } + Frame { + msec: 5744 + hash: "43fc85bb3b1501f5e12f1fedaaa14c64" + } + Frame { + msec: 5760 + image: "mousearea-flickable.5.png" + } + Frame { + msec: 5776 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 5792 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 5808 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 5824 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5840 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5856 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5872 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5888 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5904 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5920 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5936 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5952 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5968 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 5984 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6000 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6016 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6032 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6048 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6064 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6080 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6096 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6112 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6128 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6144 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6160 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6176 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6192 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6208 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6224 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6240 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6256 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6272 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6288 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6304 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6320 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6336 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6352 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 6368 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 188; y: 180 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 6384 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6400 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6416 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6432 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6448 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6464 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6480 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6496 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6512 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6528 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6544 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6560 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6576 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6592 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6608 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6624 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6640 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6656 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6672 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6688 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6704 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6720 + image: "mousearea-flickable.6.png" + } + Frame { + msec: 6736 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6752 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6768 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6784 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6800 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6816 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6832 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6848 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6864 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6880 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6896 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6912 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6928 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6944 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6960 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6976 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 6992 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7008 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7024 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7040 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7056 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7072 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7088 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7104 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7120 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7136 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7152 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7168 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7184 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7200 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7216 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7232 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7248 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7264 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7280 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7296 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7312 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7328 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7344 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7360 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7376 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7392 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7408 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7424 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7440 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7456 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7472 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7488 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7504 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7520 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7536 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7552 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7568 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7584 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7600 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7616 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7632 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7648 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7664 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7680 + image: "mousearea-flickable.7.png" + } + Frame { + msec: 7696 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7712 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7728 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7744 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7760 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7776 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7792 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7808 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7824 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7840 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7856 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7872 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7888 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7904 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7920 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7936 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7952 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7968 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 7984 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8000 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8016 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8032 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8048 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8064 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8080 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8096 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8112 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8128 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8144 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8160 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8176 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Frame { + msec: 8192 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 188; y: 182 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8208 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 188; y: 183 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8224 + hash: "037386eb30a5e8d53a20a11258ee0f60" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 189; y: 185 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 189; y: 186 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8240 + hash: "9f9f85d5f879b0e52ebc751d6668cfb8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 191; y: 194 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8256 + hash: "70e522f64236dfa4e1613ffc29b4b23e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 191; y: 196 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 198 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8272 + hash: "11120d6de575ffa639b6abb3af4afef7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 201 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 203 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8288 + hash: "dc272fc8fc98d822a154da1d495d4f7e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 211 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 214 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8304 + hash: "4e129ebba85d1f3717d09f71eb5a1a7d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 219 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8320 + hash: "837deeb2a92648d830acf29e829ebb53" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 225 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8336 + hash: "7d2606d432858288dac019e0002ff85a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 231 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 234 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8352 + hash: "c37507a29e3a6d80446ad68f2d92f266" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 240 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8368 + hash: "01bf03313a0229e810a24e2adbbe9775" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 245 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8384 + hash: "8ffbbed46737837e55383833b96d2624" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 248 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 251 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8400 + hash: "6d49fc41fb6d74643c7613df7e417833" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 257 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8416 + hash: "1978cda418856b542d7c5a155b74f09c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 259 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 262 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8432 + hash: "cc6619c7cd6e4e274df4729aad6cca46" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 265 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 267 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8448 + hash: "0b16e524cd5253d07aa9b5855967fa71" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 270 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 272 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8464 + hash: "0121c18897c37481fddbac57db636a60" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 275 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 192; y: 278 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8480 + hash: "091d1ad7aba4b662cba98214c98a4707" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 193; y: 283 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8496 + hash: "f334bfcc3af89bf1405762a215c54ea6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 193; y: 285 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 193; y: 288 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8512 + hash: "66f71641c7a607152f140428ab9621d6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 290 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 293 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8528 + hash: "7b41d651ad46341859d0188db341ae10" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 298 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8544 + hash: "95b57cd3dac3bce56674f2c4143f42d4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 194; y: 299 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 305 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8560 + hash: "80edf52cc9e64a29f677bc2203220ba9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 306 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 308 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8576 + hash: "68c8c95edb8cce11320715266bd62628" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 310 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 312 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8592 + hash: "c09f4002ed9d41f62bb1aaff95723cce" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 316 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8608 + hash: "7bb17b13db811b02c86a24a0051336d9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 318 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 320 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8624 + hash: "6d6cec95a6a2445d88b015ff76af032e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 322 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 324 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8640 + image: "mousearea-flickable.8.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 328 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8656 + hash: "9a9d1e0b1d7b9291480b3ec641f354ce" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 330 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 332 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8672 + hash: "d1372239a681d1fccc25257b4a02fb39" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 335 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 338 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8688 + hash: "2010f6f0c34e59f505bbe1aab262b646" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 196; y: 341 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 198; y: 347 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8704 + hash: "2dc2def0c748ac94d33d90d4a3610136" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 198; y: 350 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 200; y: 356 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8720 + hash: "1eb5f0e1aa014a38e6ca66ddfc2a076b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 200; y: 358 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 200; y: 360 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8736 + hash: "c1570ad4cb688ea51818e0a09e349daa" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 201; y: 364 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8752 + hash: "c6a81be579382f25ac583734897c2570" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 201; y: 366 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8768 + hash: "8cbeb925f039bde9846d37a5ec6cd3f9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 202; y: 368 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8784 + hash: "b34a796f25ad62f952101b296f9c2bac" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 202; y: 369 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8800 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8816 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8832 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8848 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8864 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8880 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8896 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8912 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8928 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8944 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8960 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 8976 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 202; y: 369 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 8992 + hash: "a0814b5ba881e5da8a1ecae8d714b4ce" + } + Frame { + msec: 9008 + hash: "b34a796f25ad62f952101b296f9c2bac" + } + Frame { + msec: 9024 + hash: "8cbeb925f039bde9846d37a5ec6cd3f9" + } + Frame { + msec: 9040 + hash: "c1570ad4cb688ea51818e0a09e349daa" + } + Frame { + msec: 9056 + hash: "237dd62011f4253970b946b335e3fb71" + } + Frame { + msec: 9072 + hash: "c5980322acf00a04efbd5e1b92aa0e98" + } + Frame { + msec: 9088 + hash: "d1372239a681d1fccc25257b4a02fb39" + } + Frame { + msec: 9104 + hash: "524db6ce45674c777d72f9206415be2f" + } + Frame { + msec: 9120 + hash: "021bda841eaefa76ce5e1c97150af6f6" + } + Frame { + msec: 9136 + hash: "ce673b66f695f5b002515a5416bbf913" + } + Frame { + msec: 9152 + hash: "cc6619c7cd6e4e274df4729aad6cca46" + } + Frame { + msec: 9168 + hash: "7fb0ed99b7d751d1f335afd7c0de2f2c" + } + Frame { + msec: 9184 + hash: "3d75735eefbf95f37e2a8605b9167ba1" + } + Frame { + msec: 9200 + hash: "82f54d7e254edcf499ea12a63118e8a7" + } + Frame { + msec: 9216 + hash: "8517007d5102af238935e93a3b38087f" + } + Frame { + msec: 9232 + hash: "dc272fc8fc98d822a154da1d495d4f7e" + } + Frame { + msec: 9248 + hash: "11120d6de575ffa639b6abb3af4afef7" + } + Frame { + msec: 9264 + hash: "70e522f64236dfa4e1613ffc29b4b23e" + } + Frame { + msec: 9280 + hash: "7a5f69a1eecb5de0fc2295cd287eb449" + } + Frame { + msec: 9296 + hash: "a569789b082296415321ba11c859abe5" + } + Frame { + msec: 9312 + hash: "9f9f85d5f879b0e52ebc751d6668cfb8" + } + Frame { + msec: 9328 + hash: "9f9f85d5f879b0e52ebc751d6668cfb8" + } + Frame { + msec: 9344 + hash: "43fc85bb3b1501f5e12f1fedaaa14c64" + } + Frame { + msec: 9360 + hash: "43fc85bb3b1501f5e12f1fedaaa14c64" + } + Frame { + msec: 9376 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 9392 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 9408 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 9424 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 9440 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9456 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9472 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9488 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9504 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9520 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9536 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9552 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9568 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9584 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9600 + image: "mousearea-flickable.9.png" + } + Frame { + msec: 9616 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9632 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9648 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9664 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9680 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9696 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9712 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9728 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 9744 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Mouse { + type: 2 + button: 1 + buttons: 1 + x: 205; y: 307 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 9760 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9776 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9792 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9808 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9824 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9840 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9856 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9872 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9888 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9904 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9920 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9936 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9952 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9968 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 9984 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10000 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10016 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10032 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10048 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10064 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10080 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10096 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10112 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10128 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10144 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10160 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10176 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10192 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10208 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10224 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10240 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10256 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10272 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10288 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10304 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10320 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10336 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10352 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10368 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10384 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10400 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10416 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10432 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10448 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10464 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10480 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10496 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10512 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10528 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10544 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10560 + image: "mousearea-flickable.10.png" + } + Frame { + msec: 10576 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10592 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10608 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10624 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10640 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10656 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10672 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10688 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10704 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10720 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10736 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10752 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10768 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10784 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10800 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10816 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10832 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10848 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10864 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10880 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10896 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10912 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10928 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10944 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10960 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10976 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 10992 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11008 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11024 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11040 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11056 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11072 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11088 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 308 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11104 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11120 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11136 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 309 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11152 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11168 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Frame { + msec: 11184 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 310 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11200 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 311 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11216 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 312 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11232 + hash: "90cdfe8920f115fd55cde6fdbd95e867" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 313 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 314 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11248 + hash: "a569789b082296415321ba11c859abe5" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 316 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 317 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11264 + hash: "86b32befe0dada5bdce82a7dd14777ce" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 319 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 321 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11280 + hash: "70e522f64236dfa4e1613ffc29b4b23e" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 324 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11296 + hash: "11120d6de575ffa639b6abb3af4afef7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 326 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 327 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11312 + hash: "8e05207e0d0d9d15a61a0d21d985a83a" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 330 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 332 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11328 + hash: "6602009ffe3c0f3072640ebc8749b76f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 335 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 337 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11344 + hash: "8517007d5102af238935e93a3b38087f" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 343 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 345 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11360 + hash: "82f54d7e254edcf499ea12a63118e8a7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 348 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 350 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11376 + hash: "572cb62d69ccb973ea18d3b0eaff571b" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 352 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 355 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11392 + hash: "79650397b868019909b931a32a115823" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 357 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 359 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11408 + hash: "43e50f4d4d37373e26af0a5d3cb64c4c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 361 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 363 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11424 + hash: "a0f8eb8a796f67c368b0a479e8d14681" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 365 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 367 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11440 + hash: "01bf03313a0229e810a24e2adbbe9775" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 369 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 371 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11456 + hash: "7fb0ed99b7d751d1f335afd7c0de2f2c" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 373 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 375 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11472 + hash: "363eca81f97f20f14e8d480f83d2bc7d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 379 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11488 + hash: "6d49fc41fb6d74643c7613df7e417833" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 381 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 383 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11504 + hash: "806d22bc3533c729cd10dc889c36902d" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 385 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 387 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11520 + image: "mousearea-flickable.11.png" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 389 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 392 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11536 + hash: "929bf28dcb97e8c93dae5dbe23beecc8" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 203; y: 394 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 396 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11552 + hash: "cb49adcd2c8afe27fd5926bd622added" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 398 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 204; y: 399 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11568 + hash: "0121c18897c37481fddbac57db636a60" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 402 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11584 + hash: "c0a569ee064d844835dddab11eadcd33" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 404 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 406 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11600 + hash: "52d45e8dde81fef5ee93bbd5a40d4851" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 205; y: 407 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 409 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11616 + hash: "ce673b66f695f5b002515a5416bbf913" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 410 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11632 + hash: "f334bfcc3af89bf1405762a215c54ea6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 411 + modifiers: 0 + sendToViewport: true + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 206; y: 412 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11648 + hash: "ee0523fe6a33b59871ad3b311ca0cbeb" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 207; y: 414 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11664 + hash: "66f71641c7a607152f140428ab9621d6" + } + Frame { + msec: 11680 + hash: "66f71641c7a607152f140428ab9621d6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 207; y: 415 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11696 + hash: "66f71641c7a607152f140428ab9621d6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 207; y: 416 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11712 + hash: "ddd3d8cb82e238358cdb16c1df7d27b7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 207; y: 417 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11728 + hash: "ddd3d8cb82e238358cdb16c1df7d27b7" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 418 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11744 + hash: "29ca97cc573d3a1fde65320b61678c60" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 419 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11760 + hash: "29ca97cc573d3a1fde65320b61678c60" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 421 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11776 + hash: "7b41d651ad46341859d0188db341ae10" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 423 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11792 + hash: "6b236864b7d95bf9f76b8afd6ba78613" + } + Frame { + msec: 11808 + hash: "6b236864b7d95bf9f76b8afd6ba78613" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 424 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11824 + hash: "95b57cd3dac3bce56674f2c4143f42d4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 208; y: 425 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11840 + hash: "95b57cd3dac3bce56674f2c4143f42d4" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 426 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11856 + hash: "021bda841eaefa76ce5e1c97150af6f6" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 428 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11872 + hash: "b1ea82b880a2fc35bf1ed117d8ab21b0" + } + Frame { + msec: 11888 + hash: "b1ea82b880a2fc35bf1ed117d8ab21b0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 429 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11904 + hash: "b1ea82b880a2fc35bf1ed117d8ab21b0" + } + Frame { + msec: 11920 + hash: "b1ea82b880a2fc35bf1ed117d8ab21b0" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 430 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11936 + hash: "1709dda08ce7494ff6d082cc5d93f0d2" + } + Frame { + msec: 11952 + hash: "1709dda08ce7494ff6d082cc5d93f0d2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 431 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 11968 + hash: "1709dda08ce7494ff6d082cc5d93f0d2" + } + Frame { + msec: 11984 + hash: "1709dda08ce7494ff6d082cc5d93f0d2" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 432 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 12000 + hash: "80edf52cc9e64a29f677bc2203220ba9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 209; y: 433 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 12016 + hash: "80edf52cc9e64a29f677bc2203220ba9" + } + Frame { + msec: 12032 + hash: "80edf52cc9e64a29f677bc2203220ba9" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 434 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 12048 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12064 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12080 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12096 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12112 + hash: "68c8c95edb8cce11320715266bd62628" + } + Mouse { + type: 5 + button: 0 + buttons: 1 + x: 210; y: 435 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 12128 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12144 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12160 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12176 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12192 + hash: "68c8c95edb8cce11320715266bd62628" + } + Mouse { + type: 3 + button: 1 + buttons: 0 + x: 210; y: 435 + modifiers: 0 + sendToViewport: true + } + Frame { + msec: 12208 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12224 + hash: "68c8c95edb8cce11320715266bd62628" + } + Frame { + msec: 12240 + hash: "80edf52cc9e64a29f677bc2203220ba9" + } + Frame { + msec: 12256 + hash: "b1ea82b880a2fc35bf1ed117d8ab21b0" + } + Frame { + msec: 12272 + hash: "6b236864b7d95bf9f76b8afd6ba78613" + } + Frame { + msec: 12288 + hash: "ddd3d8cb82e238358cdb16c1df7d27b7" + } + Frame { + msec: 12304 + hash: "ce673b66f695f5b002515a5416bbf913" + } + Frame { + msec: 12320 + hash: "0121c18897c37481fddbac57db636a60" + } + Frame { + msec: 12336 + hash: "cc6619c7cd6e4e274df4729aad6cca46" + } + Frame { + msec: 12352 + hash: "aafb12a520eb443ee1348282f2c54e4a" + } + Frame { + msec: 12368 + hash: "c37507a29e3a6d80446ad68f2d92f266" + } + Frame { + msec: 12384 + hash: "6ef4abc294d928381346e8ff9b012475" + } + Frame { + msec: 12400 + hash: "4e129ebba85d1f3717d09f71eb5a1a7d" + } + Frame { + msec: 12416 + hash: "6602009ffe3c0f3072640ebc8749b76f" + } + Frame { + msec: 12432 + hash: "8e05207e0d0d9d15a61a0d21d985a83a" + } + Frame { + msec: 12448 + hash: "144eeb7c2a32cedb6ebba063501c9176" + } + Frame { + msec: 12464 + hash: "7a5f69a1eecb5de0fc2295cd287eb449" + } + Frame { + msec: 12480 + image: "mousearea-flickable.12.png" + } + Frame { + msec: 12496 + hash: "a569789b082296415321ba11c859abe5" + } + Frame { + msec: 12512 + hash: "9f9f85d5f879b0e52ebc751d6668cfb8" + } + Frame { + msec: 12528 + hash: "43fc85bb3b1501f5e12f1fedaaa14c64" + } + Frame { + msec: 12544 + hash: "43fc85bb3b1501f5e12f1fedaaa14c64" + } + Frame { + msec: 12560 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 12576 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 12592 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 12608 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 12624 + hash: "d75a43305e2884759ca41d7b1cbadf52" + } + Frame { + msec: 12640 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12656 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12672 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12688 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12704 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12720 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12736 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12752 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12768 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12784 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12800 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12816 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12832 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12848 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12864 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12880 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12896 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12912 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12928 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12944 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12960 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12976 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 12992 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13008 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13024 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13040 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13056 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13072 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13088 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13104 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13120 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13136 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13152 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13168 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13184 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13200 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13216 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13232 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13248 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13264 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13280 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13296 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13312 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13328 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13344 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13360 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Key { + type: 6 + key: 16777251 + modifiers: 134217728 + text: "" + autorep: false + count: 1 + } + Frame { + msec: 13376 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13392 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13408 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13424 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13440 + image: "mousearea-flickable.13.png" + } + Frame { + msec: 13456 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13472 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13488 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } + Frame { + msec: 13504 + hash: "cc1fd2f4c3be318052254a9b6be7a57b" + } +} diff --git a/tests/auto/declarative/qmlvisual/qdeclarativemousearea/mousearea-flickable.qml b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/mousearea-flickable.qml new file mode 100644 index 0000000..a0b787f --- /dev/null +++ b/tests/auto/declarative/qmlvisual/qdeclarativemousearea/mousearea-flickable.qml @@ -0,0 +1,52 @@ +import Qt 4.7 + +Rectangle { + width: 400; height: 480 + color: "white" + + Flickable { + anchors.fill: parent + contentHeight: 100 + + Rectangle { + id: yellow + width: 400; height: 120 + color: "yellow" + MouseArea { + anchors.fill: parent + onPressedChanged: pressed ? yellow.color = "lightyellow": yellow.color = "yellow" + } + } + Rectangle { + id: blue + width: 400; height: 120 + y: 120 + color: "steelblue" + MouseArea { + anchors.fill: parent + onPressed: blue.color = "lightsteelblue" + onReleased: blue.color = "steelblue" + } + } + Rectangle { + id: red + y: 240 + width: 400; height: 120 + color: "red" + MouseArea { + anchors.fill: parent + onEntered: { red.color = "darkred"; tooltip.opacity = 1 } + onExited: { red.color = "red"; tooltip.opacity = 0 } + } + Rectangle { + id: tooltip + x: 10; y: 20 + width: 100; height: 50 + color: "green" + opacity: 0 + } + } + + } + +} diff --git a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp index 681b530..5f25882 100644 --- a/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp +++ b/tests/auto/declarative/qmlvisual/tst_qmlvisual.cpp @@ -117,6 +117,9 @@ void tst_qmlvisual::visual_data() files << QT_TEST_SOURCE_DIR "/qdeclarativemousearea/drag.qml"; files << QT_TEST_SOURCE_DIR "/fillmode/fillmode.qml"; + // new tests + files << QT_TEST_SOURCE_DIR "/qdeclarativemousearea/mousearea-flickable.qml"; + //these reliably fail in CI, for unknown reasons //files << QT_TEST_SOURCE_DIR "/animation/easing/easing.qml"; //files << QT_TEST_SOURCE_DIR "/animation/pauseAnimation/pauseAnimation-visual.qml"; diff --git a/tests/auto/declarative/qpacketprotocol/tst_qpacketprotocol.cpp b/tests/auto/declarative/qpacketprotocol/tst_qpacketprotocol.cpp index 2621d65..b8e317e 100644 --- a/tests/auto/declarative/qpacketprotocol/tst_qpacketprotocol.cpp +++ b/tests/auto/declarative/qpacketprotocol/tst_qpacketprotocol.cpp @@ -111,14 +111,6 @@ void tst_QPacketProtocol::setMaximumPacketSize() QPacketProtocol out(m_serverConn); QCOMPARE(out.setMaximumPacketSize(size), expected); - - if (size == expected) { - QPacketProtocol in(m_client); - QByteArray b; - b.fill('a', size + 1); - out.send() << b.constData(); - QVERIFY(QDeclarativeDebugTest::waitForSignal(&in, SIGNAL(invalidPacket()))); - } } void tst_QPacketProtocol::setMaximumPacketSize_data() diff --git a/tests/auto/declarative/shared/debugutil.cpp b/tests/auto/declarative/shared/debugutil.cpp index 66f04e5..c0c3eca 100644 --- a/tests/auto/declarative/shared/debugutil.cpp +++ b/tests/auto/declarative/shared/debugutil.cpp @@ -47,11 +47,11 @@ #include "debugutil_p.h" -#include <iostream> bool QDeclarativeDebugTest::waitForSignal(QObject *receiver, const char *member, int timeout) { QEventLoop loop; QTimer timer; + timer.setSingleShot(true); QObject::connect(&timer, SIGNAL(timeout()), &loop, SLOT(quit())); QObject::connect(receiver, member, &loop, SLOT(quit())); timer.start(timeout); @@ -59,25 +59,6 @@ bool QDeclarativeDebugTest::waitForSignal(QObject *receiver, const char *member, return timer.isActive(); } - -QDeclarativeDebugTestData::QDeclarativeDebugTestData(QEventLoop *el) - : exitCode(-1), loop(el) -{ -} - -QDeclarativeDebugTestData::~QDeclarativeDebugTestData() -{ - qDeleteAll(items); -} - -void QDeclarativeDebugTestData::testsFinished(int code) -{ - exitCode = code; - loop->quit(); -} - - - QDeclarativeDebugTestService::QDeclarativeDebugTestService(const QString &s, QObject *parent) : QDeclarativeDebugService(s, parent), enabled(false) { @@ -117,63 +98,3 @@ void QDeclarativeDebugTestClient::messageReceived(const QByteArray &ba) emit serverMessage(ba); } - -tst_QDeclarativeDebug_Thread::tst_QDeclarativeDebug_Thread(QDeclarativeDebugTestData *data, QDeclarativeTestFactory *factory) - : m_data(data), m_factory(factory) -{ -} - -void tst_QDeclarativeDebug_Thread::run() -{ - bool ok = false; - - QDeclarativeDebugConnection conn; - conn.connectToHost("127.0.0.1", 3768); - ok = conn.waitForConnected(); - Q_ASSERT(ok); - - QEventLoop loop; - connect(m_data, SIGNAL(engineCreated()), &loop, SLOT(quit())); - loop.exec(); - - m_data->conn = &conn; - - Q_ASSERT(m_factory); - QObject *test = m_factory->createTest(m_data); - Q_ASSERT(test); - int code = QTest::qExec(test, QCoreApplication::arguments()); - delete test; - emit testsFinished(code); -} - -int QDeclarativeDebugTest::runTests(QDeclarativeTestFactory *factory, const QList<QByteArray> &qml) -{ - qputenv("QML_DEBUG_SERVER_PORT", "3768"); - - QEventLoop loop; - QDeclarativeDebugTestData data(&loop); - - tst_QDeclarativeDebug_Thread thread(&data, factory); - QObject::connect(&thread, SIGNAL(testsFinished(int)), &data, SLOT(testsFinished(int))); - - QDeclarativeDebugService::notifyOnServerStart(&thread, "start"); - - QDeclarativeEngine engine; // blocks until client connects - - foreach (const QByteArray &code, qml) { - QDeclarativeComponent c(&engine); - c.setData(code, QUrl::fromLocalFile("")); - Q_ASSERT(c.isReady()); // fails if bad syntax - data.items << qobject_cast<QDeclarativeItem*>(c.create()); - } - - // start the test - data.engine = &engine; - emit data.engineCreated(); - - loop.exec(); - thread.wait(); - - return data.exitCode; -} - diff --git a/tests/auto/declarative/shared/debugutil_p.h b/tests/auto/declarative/shared/debugutil_p.h index c152b5a..e6bb7ad 100644 --- a/tests/auto/declarative/shared/debugutil_p.h +++ b/tests/auto/declarative/shared/debugutil_p.h @@ -51,50 +51,10 @@ #include <private/qdeclarativedebugservice_p.h> #include <private/qdeclarativeitem_p.h> -class QDeclarativeTestFactory; - class QDeclarativeDebugTest { public: static bool waitForSignal(QObject *receiver, const char *member, int timeout = 5000); - - static int runTests(QDeclarativeTestFactory *factory, const QList<QByteArray> &qml = QList<QByteArray>()); -}; - -class QDeclarativeDebugTestData : public QObject -{ - Q_OBJECT -public: - QDeclarativeDebugTestData(QEventLoop *el); - - ~QDeclarativeDebugTestData(); - - QDeclarativeDebugConnection *conn; - QDeclarativeEngine *engine; - - int exitCode; - QEventLoop *loop; - - QList<QDeclarativeItem *> items; - -signals: - void engineCreated(); - -public slots: - void testsFinished(int code); - -private: - friend class QDeclarativeDebugTest; -}; - - -class QDeclarativeTestFactory -{ -public: - QDeclarativeTestFactory() {} - virtual ~QDeclarativeTestFactory() {} - - virtual QObject *createTest(QDeclarativeDebugTestData *data) = 0; }; class QDeclarativeDebugTestService : public QDeclarativeDebugService @@ -131,20 +91,4 @@ private: QByteArray lastMsg; }; -class tst_QDeclarativeDebug_Thread : public QThread -{ - Q_OBJECT -public: - tst_QDeclarativeDebug_Thread(QDeclarativeDebugTestData *data, QDeclarativeTestFactory *factory); - - void run(); - -signals: - void testsFinished(int); - -private: - QDeclarativeDebugTestData *m_data; - QDeclarativeTestFactory *m_factory; -}; - |