diff options
author | Ulf Hermann <ulf.hermann@qt.io> | 2023-05-02 11:08:13 +0200 |
---|---|---|
committer | Ulf Hermann <ulf.hermann@qt.io> | 2023-05-04 11:48:09 +0200 |
commit | b8814dfb364e1316e3ee049d5d7cda9e23537d93 (patch) | |
tree | 094fc9d7bb1b88142b4aa8ca51edc4160497c77d /tests/auto | |
parent | 9a0fe2eddb1b3b37e43aec116278def48edd98ad (diff) | |
download | qtdeclarative-b8814dfb364e1316e3ee049d5d7cda9e23537d93.tar.gz |
QmlCompiler: Do not crash when converting number literals to enums
Amends commit 2a21efb5f7a6cac6f6101f2f42fe38f16dc68149.
Change-Id: Id7d739b58c723eed9f165951b51ee2e5e55d7fe2
Reviewed-by: Sami Shalayel <sami.shalayel@qt.io>
Diffstat (limited to 'tests/auto')
-rw-r--r-- | tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt | 1 | ||||
-rw-r--r-- | tests/auto/qml/qmlcppcodegen/data/enumProperty.h | 24 | ||||
-rw-r--r-- | tests/auto/qml/qmlcppcodegen/data/intToEnum.qml | 7 | ||||
-rw-r--r-- | tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp | 14 |
4 files changed, 44 insertions, 2 deletions
diff --git a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt index 9640500910..7e3ffc06c6 100644 --- a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt +++ b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt @@ -123,6 +123,7 @@ set(qml_files infinitiesToInt.qml intEnumCompare.qml intOverflow.qml + intToEnum.qml interactive.qml interceptor.qml invisibleBase.qml diff --git a/tests/auto/qml/qmlcppcodegen/data/enumProperty.h b/tests/auto/qml/qmlcppcodegen/data/enumProperty.h index 8c13e860a3..82815660a2 100644 --- a/tests/auto/qml/qmlcppcodegen/data/enumProperty.h +++ b/tests/auto/qml/qmlcppcodegen/data/enumProperty.h @@ -15,20 +15,40 @@ public: Tri = 0x04, }; Q_ENUM(MyEnum) - Q_PROPERTY(MyEnum type READ type) + Q_PROPERTY(MyEnum type READ type CONSTANT) MyEnum type() const { return MyEnum::Tri; } }; class MyType : public QObject { Q_OBJECT - Q_PROPERTY(MyEnumType myEnumType READ myEnumType) + Q_PROPERTY(MyEnumType myEnumType READ myEnumType CONSTANT) + Q_PROPERTY(A a READ a WRITE setA NOTIFY aChanged FINAL) QML_ELEMENT public: + enum A { B, C, D }; + Q_ENUM(A) + MyEnumType myEnumType() const { return m_type; } + A a() const { return m_a; } + void setA(A newA) + { + if (m_a == newA) + return; + m_a = newA; + emit aChanged(); + } + + Q_INVOKABLE int method(quint16, const QString &) { return 24; } + Q_INVOKABLE int method(quint16, MyType::A a) { return int(a); } + +Q_SIGNALS: + void aChanged(); + private: MyEnumType m_type; + A m_a = B; }; #endif // ENUMPROPERTY_H diff --git a/tests/auto/qml/qmlcppcodegen/data/intToEnum.qml b/tests/auto/qml/qmlcppcodegen/data/intToEnum.qml new file mode 100644 index 0000000000..e255f4e8f4 --- /dev/null +++ b/tests/auto/qml/qmlcppcodegen/data/intToEnum.qml @@ -0,0 +1,7 @@ +pragma Strict +import TestTypes + +MyType { + a: myEnumType.type === 4 ? 2 : 1 + property int b: method("12", "hh") +} diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp index 0814d92429..0cad3eb68e 100644 --- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp +++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp @@ -1,6 +1,7 @@ // Copyright (C) 2021 The Qt Company Ltd. #include "data/druggeljug.h" +#include "data/enumProperty.h" #include "data/withlength.h" #include <data/birthdayparty.h> #include <data/cppbaseclass.h> @@ -185,6 +186,7 @@ private slots: void jsArrayMethodsWithParams(); void shadowedMethod(); void topLevelComponent(); + void intToEnum(); }; void tst_QmlCppCodegen::initTestCase() @@ -3793,6 +3795,18 @@ void tst_QmlCppCodegen::topLevelComponent() QCOMPARE(o2->objectName(), u"foo"_s); } +void tst_QmlCppCodegen::intToEnum() +{ + QQmlEngine engine; + QQmlComponent c(&engine, QUrl(u"qrc:/qt/qml/TestTypes/intToEnum.qml"_s)); + QVERIFY2(c.isReady(), qPrintable(c.errorString())); + QScopedPointer<QObject> o(c.create()); + QVERIFY(!o.isNull()); + MyType *m = qobject_cast<MyType *>(o.data()); + QCOMPARE(m->a(), MyType::D); + QCOMPARE(m->property("b").toInt(), 24); +} + QTEST_MAIN(tst_QmlCppCodegen) #include "tst_qmlcppcodegen.moc" |