diff options
author | Kent Hansen <kent.hansen@nokia.com> | 2011-11-11 09:39:15 +0100 |
---|---|---|
committer | Qt by Nokia <qt-info@nokia.com> | 2011-11-16 13:04:50 +0100 |
commit | 92660b13bb138d219f49ea203fa5e5aed9de74cb (patch) | |
tree | f3a0264cdbeacb7c23719a2a74b0ffa09fffa59b /tests/auto/declarative | |
parent | ddf9883f8d00dcdfd908b38c60114a06ce8af185 (diff) |
Add autotest for qml/v8 optimization bug
After a function that accesses a qml context property was
inlined, calls to global functions would fail with
"TypeError: Illegal invocation".
Fixed in qtbase's v8.
Task-number: QTBUG-22679
Change-Id: Id6e2604e5151585febfe1b667869dc3b1fad6e5e
Reviewed-by: Aaron Kennedy <aaron.kennedy@nokia.com>
Diffstat (limited to 'tests/auto/declarative')
-rw-r--r-- | tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22679.qml | 14 | ||||
-rw-r--r-- | tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp | 17 |
2 files changed, 31 insertions, 0 deletions
diff --git a/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22679.qml b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22679.qml new file mode 100644 index 0000000000..b38a84b4c0 --- /dev/null +++ b/tests/auto/declarative/qdeclarativeecmascript/data/qtbug_22679.qml @@ -0,0 +1,14 @@ +import QtQuick 2.0 + +QtObject { + function accessContextProperty() { + for (var i = 0; i < contextProp.stringProperty.length; ++i) ; + } + + Component.onCompleted: { + for (var i = 0; i < 1000; ++i) + accessContextProperty(); + // Shouldn't cause "Illegal invocation" error. + gc(); + } +} diff --git a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp index e784ffbce3..7d9819b193 100644 --- a/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp +++ b/tests/auto/declarative/qdeclarativeecmascript/tst_qdeclarativeecmascript.cpp @@ -223,6 +223,7 @@ private slots: void invokableObjectArg(); void invokableObjectRet(); void qtbug_20344(); + void qtbug_22679(); void revisionErrors(); void revision(); @@ -5148,6 +5149,22 @@ void tst_qdeclarativeecmascript::deleteWhileBindingRunning() delete object; } +void tst_qdeclarativeecmascript::qtbug_22679() +{ + MyQmlObject object; + object.setStringProperty(QLatin1String("Please work correctly")); + engine.rootContext()->setContextProperty("contextProp", &object); + + QDeclarativeComponent component(&engine, TEST_FILE("qtbug_22679.qml")); + qRegisterMetaType<QList<QDeclarativeError> >("QList<QDeclarativeError>"); + QSignalSpy warningsSpy(&engine, SIGNAL(warnings(QList<QDeclarativeError>))); + + QObject *o = component.create(); + QVERIFY(o != 0); + QCOMPARE(warningsSpy.count(), 0); + delete o; +} + QTEST_MAIN(tst_qdeclarativeecmascript) #include "tst_qdeclarativeecmascript.moc" |