summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel
diff options
context:
space:
mode:
authorFriedemann Kleint <Friedemann.Kleint@qt.io>2020-04-22 08:25:18 +0200
committerFabian Kosmale <fabian.kosmale@qt.io>2020-04-22 09:49:48 +0200
commit26a0a8942135fed725ec3067ba05bae31bb4e645 (patch)
tree1e9b18d9a51f8e300d6bab042645a5a72c73eac6 /tests/auto/corelib/kernel
parent1c80d056e4f45b4ee7c4863cd792e83c889513c5 (diff)
Fix assigning int QFlag-type properties
Ensure they are handled as enumerations in QMetaType. This is required for handling QFlag-type properties in Qt Designer Fixes: QTBUG-83689 Change-Id: Ifbfb5c5b5cd34fce462e299505d063e22e725c2e Reviewed-by: Friedemann Kleint <Friedemann.Kleint@qt.io> Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto/corelib/kernel')
-rw-r--r--tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp51
1 files changed, 51 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp b/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp
index 43ed535019..9bce6a7a28 100644
--- a/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp
+++ b/tests/auto/corelib/kernel/qmetaproperty/tst_qmetaproperty.cpp
@@ -65,6 +65,7 @@ private slots:
void readAndWriteWithLazyRegistration();
void mapProperty();
void conversion();
+ void enumsFlags();
public:
enum EnumType { EnumType1 };
@@ -181,6 +182,33 @@ public:
{}
};
+class EnumFlagsTester : public QObject
+{
+ Q_OBJECT
+ Q_PROPERTY(TestEnum enumProperty READ enumProperty WRITE setEnumProperty)
+ Q_PROPERTY(TestFlags flagProperty READ flagProperty WRITE setFlagProperty)
+public:
+ enum TestEnum { e1, e2 };
+ Q_ENUM(TestEnum)
+
+ enum TestFlag { flag1 = 0x1, flag2 = 0x2 };
+ Q_DECLARE_FLAGS(TestFlags, TestFlag)
+
+ using QObject::QObject;
+
+ TestEnum enumProperty() const { return m_enum; }
+ void setEnumProperty(TestEnum e) { m_enum = e; }
+
+ TestFlags flagProperty() const { return m_flags; }
+ void setFlagProperty(TestFlags f) { m_flags = f; }
+
+private:
+ TestEnum m_enum = e1;
+ TestFlags m_flags;
+};
+
+Q_DECLARE_OPERATORS_FOR_FLAGS(EnumFlagsTester::TestFlags)
+
void tst_QMetaProperty::readAndWriteWithLazyRegistration()
{
QCOMPARE(QMetaType::type("CustomReadObject*"), int(QMetaType::UnknownType));
@@ -246,5 +274,28 @@ void tst_QMetaProperty::conversion()
QCOMPARE(value7, QLatin1String("reset"));
}
+void tst_QMetaProperty::enumsFlags()
+{
+ // QTBUG-83689, verify that enumerations and flags can be assigned from int,
+ // which is important for Qt Designer.
+ EnumFlagsTester t;
+
+ auto mo = t.metaObject();
+
+ const int enumIndex = mo->indexOfProperty("enumProperty");
+ QVERIFY(enumIndex >= 0);
+ auto enumProperty = mo->property(enumIndex);
+ QVERIFY(enumProperty.metaType().flags().testFlag(QMetaType::IsEnumeration));
+ QVERIFY(enumProperty.write(&t, QVariant(int(EnumFlagsTester::e2))));
+ QCOMPARE(t.enumProperty(), EnumFlagsTester::e2);
+
+ const int flagsIndex = mo->indexOfProperty("flagProperty");
+ QVERIFY(flagsIndex >= 0);
+ auto flagsProperty = mo->property(flagsIndex);
+ QVERIFY(flagsProperty.metaType().flags().testFlag(QMetaType::IsEnumeration));
+ QVERIFY(flagsProperty.write(&t, QVariant(int(EnumFlagsTester::flag2))));
+ QCOMPARE(t.flagProperty(), EnumFlagsTester::flag2);
+}
+
QTEST_MAIN(tst_QMetaProperty)
#include "tst_qmetaproperty.moc"