diff options
author | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-07-26 13:55:19 +0200 |
---|---|---|
committer | Allan Sandfeld Jensen <allan.jensen@qt.io> | 2018-08-11 07:59:15 +0000 |
commit | 1c623bc6d1c0a7ca52d81ca72c64f36898b3e12c (patch) | |
tree | 1a8d9ff271d8b752fc5eaadcea3e48021692970e /tests/auto/tools/moc | |
parent | 8f58e1319c064fbdf5ec00a2b261c9d8069c6cfb (diff) |
Fix QMetaObject naming of class enum flag
Adds an enumName to QMetaEnum to carry the name of the enum since for
flags that doesn't match the name of the Qt type, but is needed if the
flag is scoped.
Change-Id: I1c0f77eb9e40e6fd1eb6a59bea77caf0f33fcf43
Reviewed-by: Olivier Goffart (Woboq GmbH) <ogoffart@woboq.com>
Diffstat (limited to 'tests/auto/tools/moc')
-rw-r--r-- | tests/auto/tools/moc/cxx11-enums.h | 4 | ||||
-rw-r--r-- | tests/auto/tools/moc/tst_moc.cpp | 36 |
2 files changed, 23 insertions, 17 deletions
diff --git a/tests/auto/tools/moc/cxx11-enums.h b/tests/auto/tools/moc/cxx11-enums.h index 209ec4eb43..93ab16c157 100644 --- a/tests/auto/tools/moc/cxx11-enums.h +++ b/tests/auto/tools/moc/cxx11-enums.h @@ -39,7 +39,7 @@ public: enum TypedEnum : char { B0, B1 , B2, B3 }; enum class TypedEnumClass : char { C0, C1, C2, C3 }; enum NormalEnum { D2 = 2, D3, D0 =0 , D1 }; - enum class ClassFlag { F0, F1, F2, F3 }; + enum class ClassFlag { F0 = 1, F1 = 2, F2 = 4, F3 = 8}; Q_DECLARE_FLAGS(ClassFlags, ClassFlag) Q_ENUM(EnumClass) @@ -58,7 +58,7 @@ public: enum TypedEnum : char { B0, B1 , B2, B3 }; enum class TypedEnumClass : char { C0, C1, C2, C3 }; enum NormalEnum { D2 = 2, D3, D0 =0 , D1 }; - enum class ClassFlag { F0, F1, F2, F3 }; + enum class ClassFlag { F0 = 1, F1 = 2, F2 = 4, F3 = 8 }; Q_DECLARE_FLAGS(ClassFlags, ClassFlag) Q_ENUMS(EnumClass TypedEnum TypedEnumClass NormalEnum) Q_FLAGS(ClassFlags) diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp index 8a08de9bc6..92a94055a4 100644 --- a/tests/auto/tools/moc/tst_moc.cpp +++ b/tests/auto/tools/moc/tst_moc.cpp @@ -2248,6 +2248,7 @@ void tst_Moc::privateClass() void tst_Moc::cxx11Enums_data() { QTest::addColumn<const QMetaObject *>("meta"); + QTest::addColumn<QByteArray>("typeName"); QTest::addColumn<QByteArray>("enumName"); QTest::addColumn<char>("prefix"); QTest::addColumn<bool>("isScoped"); @@ -2255,16 +2256,16 @@ void tst_Moc::cxx11Enums_data() const QMetaObject *meta1 = &CXX11Enums::staticMetaObject; const QMetaObject *meta2 = &CXX11Enums2::staticMetaObject; - QTest::newRow("EnumClass") << meta1 << QByteArray("EnumClass") << 'A' << true; - QTest::newRow("EnumClass 2") << meta2 << QByteArray("EnumClass") << 'A' << true; - QTest::newRow("TypedEnum") << meta1 << QByteArray("TypedEnum") << 'B' << false; - QTest::newRow("TypedEnum 2") << meta2 << QByteArray("TypedEnum") << 'B' << false; - QTest::newRow("TypedEnumClass") << meta1 << QByteArray("TypedEnumClass") << 'C' << true; - QTest::newRow("TypedEnumClass 2") << meta2 << QByteArray("TypedEnumClass") << 'C' << true; - QTest::newRow("NormalEnum") << meta1 << QByteArray("NormalEnum") << 'D' << false; - QTest::newRow("NormalEnum 2") << meta2 << QByteArray("NormalEnum") << 'D' << false; - QTest::newRow("ClassFlags") << meta1 << QByteArray("ClassFlags") << 'F' << true; - QTest::newRow("ClassFlags 2") << meta2 << QByteArray("ClassFlags") << 'F' << true; + QTest::newRow("EnumClass") << meta1 << QByteArray("EnumClass") << QByteArray("EnumClass") << 'A' << true; + QTest::newRow("EnumClass 2") << meta2 << QByteArray("EnumClass") << QByteArray("EnumClass") << 'A' << true; + QTest::newRow("TypedEnum") << meta1 << QByteArray("TypedEnum") << QByteArray("TypedEnum") << 'B' << false; + QTest::newRow("TypedEnum 2") << meta2 << QByteArray("TypedEnum") << QByteArray("TypedEnum") << 'B' << false; + QTest::newRow("TypedEnumClass") << meta1 << QByteArray("TypedEnumClass") << QByteArray("TypedEnumClass") << 'C' << true; + QTest::newRow("TypedEnumClass 2") << meta2 << QByteArray("TypedEnumClass") << QByteArray("TypedEnumClass") << 'C' << true; + QTest::newRow("NormalEnum") << meta1 << QByteArray("NormalEnum") << QByteArray("NormalEnum") << 'D' << false; + QTest::newRow("NormalEnum 2") << meta2 << QByteArray("NormalEnum") << QByteArray("NormalEnum") << 'D' << false; + QTest::newRow("ClassFlags") << meta1 << QByteArray("ClassFlags") << QByteArray("ClassFlag") << 'F' << true; + QTest::newRow("ClassFlags 2") << meta2 << QByteArray("ClassFlags") << QByteArray("ClassFlag") << 'F' << true; } void tst_Moc::cxx11Enums() @@ -2272,21 +2273,26 @@ void tst_Moc::cxx11Enums() QFETCH(const QMetaObject *,meta); QCOMPARE(meta->enumeratorOffset(), 0); + QFETCH(QByteArray, typeName); QFETCH(QByteArray, enumName); QFETCH(char, prefix); QFETCH(bool, isScoped); - int idx; - idx = meta->indexOfEnumerator(enumName); + int idx = meta->indexOfEnumerator(typeName); QVERIFY(idx != -1); + QCOMPARE(meta->indexOfEnumerator(enumName), idx); + QCOMPARE(meta->enumerator(idx).enclosingMetaObject(), meta); QCOMPARE(meta->enumerator(idx).isValid(), true); QCOMPARE(meta->enumerator(idx).keyCount(), 4); - QCOMPARE(meta->enumerator(idx).name(), enumName.constData()); + QCOMPARE(meta->enumerator(idx).name(), typeName.constData()); + QCOMPARE(meta->enumerator(idx).enumName(), enumName.constData()); + bool isFlag = meta->enumerator(idx).isFlag(); for (int i = 0; i < 4; i++) { QByteArray v = prefix + QByteArray::number(i); - QCOMPARE(meta->enumerator(idx).keyToValue(v), i); - QCOMPARE(meta->enumerator(idx).valueToKey(i), v.constData()); + const int value = isFlag ? (1 << i) : i; + QCOMPARE(meta->enumerator(idx).keyToValue(v), value); + QCOMPARE(meta->enumerator(idx).valueToKey(value), v.constData()); } QCOMPARE(meta->enumerator(idx).isScoped(), isScoped); } |