From d54fb6804b261a26a2b689d2e7e5157b545e3c86 Mon Sep 17 00:00:00 2001 From: Erik Verbruggen Date: Tue, 17 Dec 2013 12:30:11 +0100 Subject: V4: re-enable test cases disabled for QTBUG-34047 Task-number: QTBUG-34047 Change-Id: Idcce254f3594e1f7021705704dbe6a2330aa7e65 Reviewed-by: Lars Knoll --- tests/auto/qml/parserstress/tst_parserstress.cpp | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/qml/parserstress/tst_parserstress.cpp b/tests/auto/qml/parserstress/tst_parserstress.cpp index 15b3ff56b6..07d02055c2 100644 --- a/tests/auto/qml/parserstress/tst_parserstress.cpp +++ b/tests/auto/qml/parserstress/tst_parserstress.cpp @@ -93,16 +93,8 @@ void tst_parserstress::ecmascript_data() QStringList files = findJSFiles(dir); QTest::addColumn("file"); - foreach (const QString &file, files) { - // Skip, QTBUG-34047 - if (file.endsWith(QStringLiteral("tests/ecma_3/Statements/regress-324650.js"))) - continue; - if (file.endsWith(QStringLiteral("tests/ecma_3/Statements/regress-74474-002.js"))) - continue; - if (file.endsWith(QStringLiteral("tests/ecma_3/Statements/regress-74474-003.js"))) - continue; + foreach (const QString &file, files) QTest::newRow(qPrintable(file)) << file; - } } void tst_parserstress::ecmascript() -- cgit v1.2.3 From eb3087e4b0b770200512925730c328a8bda7f3d7 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 2 Jan 2014 08:48:55 +0100 Subject: Fix lookups of enums in singletons This is a regression against 5.2.0 (which didn't have this bug), due to optimizations introduced in the stable branch after the release. The code path for optimizing access to the members of C++ based singletons through the regular meta-object properties would end up excluding access to enums when the lookup happens at run-time. The run-time getter for the singleton itself would return a wrapped QObject instead of a QQmlTypeWrapper, and only the latter includes enums. As QML based singletons (composite singletons) cannot declare enums, we can continue to do fast lookups on these, but otherwise have to fall back to the slower code path. Task-number: QTBUG-35721 Change-Id: Icc66bdaf3572622cdb718f82b706e3204afa0167 Reviewed-by: Lars Knoll --- .../qqmlecmascript/data/singletontype/singletonWithEnum.qml | 9 +++++++++ tests/auto/qml/qqmlecmascript/testtypes.cpp | 7 +++++++ tests/auto/qml/qqmlecmascript/testtypes.h | 10 ++++++++++ tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp | 13 +++++++++++++ 4 files changed, 39 insertions(+) create mode 100644 tests/auto/qml/qqmlecmascript/data/singletontype/singletonWithEnum.qml (limited to 'tests/auto') diff --git a/tests/auto/qml/qqmlecmascript/data/singletontype/singletonWithEnum.qml b/tests/auto/qml/qqmlecmascript/data/singletontype/singletonWithEnum.qml new file mode 100644 index 0000000000..166f823667 --- /dev/null +++ b/tests/auto/qml/qqmlecmascript/data/singletontype/singletonWithEnum.qml @@ -0,0 +1,9 @@ +import QtQml 2.0 +import Qt.test.singletonWithEnum 1.0 + +QtObject { + property int testValue: 0 + Component.onCompleted: { + testValue = SingletonWithEnum.TestValue; + } +} diff --git a/tests/auto/qml/qqmlecmascript/testtypes.cpp b/tests/auto/qml/qqmlecmascript/testtypes.cpp index 22fac2013e..eb06b9e57d 100644 --- a/tests/auto/qml/qqmlecmascript/testtypes.cpp +++ b/tests/auto/qml/qqmlecmascript/testtypes.cpp @@ -295,6 +295,11 @@ bool MyInheritedQmlObject::isItYouMyInheritedQmlObject(MyInheritedQmlObject *o) return o && o == theSingletonObject; } +static QObject *create_singletonWithEnum(QQmlEngine *, QJSEngine *) +{ + return new SingletonWithEnum; +} + void registerTypes() { qmlRegisterType("Qt.test", 1,0, "MyQmlObjectAlias"); @@ -374,6 +379,8 @@ void registerTypes() qmlRegisterSingletonType("NamespaceAndType",1,0,"NamespaceAndType",testImportOrder_api); qmlRegisterSingletonType("Qt.test.importOrderApi1",1,0,"Data",testImportOrder_api1); qmlRegisterSingletonType("Qt.test.importOrderApi2",1,0,"Data",testImportOrder_api2); + + qmlRegisterSingletonType("Qt.test.singletonWithEnum", 1, 0, "SingletonWithEnum", create_singletonWithEnum); } #include "testtypes.moc" diff --git a/tests/auto/qml/qqmlecmascript/testtypes.h b/tests/auto/qml/qqmlecmascript/testtypes.h index 556cc32fd3..2aef1d644d 100644 --- a/tests/auto/qml/qqmlecmascript/testtypes.h +++ b/tests/auto/qml/qqmlecmascript/testtypes.h @@ -1651,6 +1651,16 @@ public: QML_DECLARE_TYPEINFO(FallbackBindingsTypeObject, QML_HAS_ATTACHED_PROPERTIES) QML_DECLARE_TYPEINFO(FallbackBindingsTypeDerived, QML_HAS_ATTACHED_PROPERTIES) +class SingletonWithEnum : public QObject +{ + Q_OBJECT + Q_ENUMS(TestEnum) +public: + enum TestEnum { + TestValue = 42 + }; +}; + void registerTypes(); #endif // TESTTYPES_H diff --git a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp index 7b89709923..c45750caac 100644 --- a/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp +++ b/tests/auto/qml/qqmlecmascript/tst_qqmlecmascript.cpp @@ -320,6 +320,7 @@ private slots: void idsAsLValues(); void qtbug_34792(); void noCaptureWhenWritingProperty(); + void singletonWithEnum(); private: // static void propertyVarWeakRefCallback(v8::Persistent object, void* parameter); @@ -7507,6 +7508,18 @@ void tst_qqmlecmascript::noCaptureWhenWritingProperty() QCOMPARE(obj->property("somePropertyEvaluated").toBool(), false); } +void tst_qqmlecmascript::singletonWithEnum() +{ + QQmlComponent component(&engine, testFileUrl("singletontype/singletonWithEnum.qml")); + QScopedPointer obj(component.create()); + if (obj.isNull()) + qDebug() << component.errors().first().toString(); + QVERIFY(!obj.isNull()); + QVariant prop = obj->property("testValue"); + QVERIFY(prop.type() == QVariant::Int); + QCOMPARE(prop.toInt(), int(SingletonWithEnum::TestValue)); +} + QTEST_MAIN(tst_qqmlecmascript) #include "tst_qqmlecmascript.moc" -- cgit v1.2.3 From bf3dfe64068d76f98a2176530e1158d5143e09b2 Mon Sep 17 00:00:00 2001 From: Simon Hausmann Date: Thu, 2 Jan 2014 12:17:31 +0100 Subject: Fix property access to QQmlPropertyMap objects when addressed via id Property access to id objects is optimized at compile time, but we cannot do that for QQmlPropertyMap instances (or generally fully dynamic types). This issue was a regression against Qt 5.1 Task-number: QTBUG-35906 Change-Id: I759a1a899f6a3a1f6466282f455b289ad7451086 Reviewed-by: Albert Astals Cid Reviewed-by: Lars Knoll --- .../qml/qqmlpropertymap/tst_qqmlpropertymap.cpp | 29 ++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) (limited to 'tests/auto') diff --git a/tests/auto/qml/qqmlpropertymap/tst_qqmlpropertymap.cpp b/tests/auto/qml/qqmlpropertymap/tst_qqmlpropertymap.cpp index 17f54508a3..62b64a3ef1 100644 --- a/tests/auto/qml/qqmlpropertymap/tst_qqmlpropertymap.cpp +++ b/tests/auto/qml/qqmlpropertymap/tst_qqmlpropertymap.cpp @@ -72,6 +72,7 @@ private slots: void QTBUG_29836(); void QTBUG_35233(); void disallowExtending(); + void QTBUG_35906(); }; class LazyPropertyMap : public QQmlPropertyMap, public QQmlParserStatus @@ -79,7 +80,7 @@ class LazyPropertyMap : public QQmlPropertyMap, public QQmlParserStatus Q_OBJECT Q_INTERFACES(QQmlParserStatus) - Q_PROPERTY(int someFixedProperty READ someFixedProperty WRITE setSomeFixedProperty) + Q_PROPERTY(int someFixedProperty READ someFixedProperty WRITE setSomeFixedProperty NOTIFY someFixedPropertyChanged) public: LazyPropertyMap() : QQmlPropertyMap(this, /*parent*/0) @@ -92,7 +93,10 @@ public: } int someFixedProperty() const { return value; } - void setSomeFixedProperty(int v) { value = v; } + void setSomeFixedProperty(int v) { value = v; emit someFixedPropertyChanged(); } + +signals: + void someFixedPropertyChanged(); private: int value; @@ -450,6 +454,27 @@ void tst_QQmlPropertyMap::disallowExtending() QCOMPARE(component.errors().at(0).toString(), QStringLiteral(": Fully dynamic types cannot declare new properties.")); } +void tst_QQmlPropertyMap::QTBUG_35906() +{ + QQmlEngine engine; + QQmlComponent component(&engine); + component.setData("import QtQml 2.0\n" + "import QTBUG_35233 1.0\n" + "QtObject {\n" + " property int testValue: mapById.someFixedProperty\n" + "\n" + " property QtObject maProperty: LazyPropertyMap {\n" + " id: mapById\n" + " someFixedProperty: 42\n" + " }\n" + "}\n", QUrl()); + QScopedPointer obj(component.create()); + QVERIFY(!obj.isNull()); + QVariant value = obj->property("testValue"); + QVERIFY(value.type() == QVariant::Int); + QCOMPARE(value.toInt(), 42); +} + QTEST_MAIN(tst_QQmlPropertyMap) #include "tst_qqmlpropertymap.moc" -- cgit v1.2.3