From 1c623bc6d1c0a7ca52d81ca72c64f36898b3e12c Mon Sep 17 00:00:00 2001 From: Allan Sandfeld Jensen Date: Thu, 26 Jul 2018 13:55:19 +0200 Subject: 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) --- tests/auto/tools/moc/tst_moc.cpp | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) (limited to 'tests/auto/tools/moc/tst_moc.cpp') 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("meta"); + QTest::addColumn("typeName"); QTest::addColumn("enumName"); QTest::addColumn("prefix"); QTest::addColumn("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); } -- cgit v1.2.3