summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools/moc
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@woboq.com>2011-12-10 10:53:39 +0100
committerOlivier Goffart <ogoffart@woboq.com>2015-01-13 17:52:14 +0100
commit14583137ae445fbfdc82922266f5c0736454f6c4 (patch)
tree6fdb1e07eb10f6ee9e389ad7cd3b5cecfd105211 /tests/auto/tools/moc
parent74443d7bbb319e949928dd081fde04bccb5f7845 (diff)
Introduce Q_ENUM and Q_FLAG macros
In replacement for Q_ENUMS and Q_FLAGS. Q_ENUM(Foo) has to be put after the declaration of Foo in an object. It will tell moc to include the enum in the meta object (just like Q_ENUMS) and will allow templated code to get the metaobject for that enum. Will be used by QDebug and QMetaType Change-Id: Iefaf8ae07dc0359828102bf384809346629b3e23 Reviewed-by: Jędrzej Nowacki <jedrzej.nowacki@theqtcompany.com>
Diffstat (limited to 'tests/auto/tools/moc')
-rw-r--r--tests/auto/tools/moc/cstyle-enums.h4
-rw-r--r--tests/auto/tools/moc/cxx11-enums.h22
-rw-r--r--tests/auto/tools/moc/gadgetwithnoenums.h2
-rw-r--r--tests/auto/tools/moc/namespaced-flags.h3
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp41
5 files changed, 55 insertions, 17 deletions
diff --git a/tests/auto/tools/moc/cstyle-enums.h b/tests/auto/tools/moc/cstyle-enums.h
index a930fa1117..ce89878e97 100644
--- a/tests/auto/tools/moc/cstyle-enums.h
+++ b/tests/auto/tools/moc/cstyle-enums.h
@@ -39,8 +39,10 @@ class CStyleEnums
{
Q_GADGET
public:
- Q_ENUMS(Baz)
typedef enum { Foo, Bar } Baz;
+ typedef enum { Foo2, Bar2 } Baz2;
+ Q_ENUM(Baz)
+ Q_ENUMS(Baz2)
};
#endif // CSTYLE_ENUMS_H
diff --git a/tests/auto/tools/moc/cxx11-enums.h b/tests/auto/tools/moc/cxx11-enums.h
index 21d17d0039..32acb25515 100644
--- a/tests/auto/tools/moc/cxx11-enums.h
+++ b/tests/auto/tools/moc/cxx11-enums.h
@@ -40,11 +40,26 @@ class CXX11Enums
{
Q_GADGET
public:
- Q_ENUMS(EnumClass TypedEnum TypedEnumClass NormalEnum)
enum class EnumClass { A0, A1, A2, A3 };
enum TypedEnum : char { B0, B1 , B2, B3 };
enum class TypedEnumClass : char { C0, C1, C2, C3 };
enum NormalEnum { D2 = 2, D3, D0 =0 , D1 };
+ Q_ENUM(EnumClass)
+ Q_ENUM(TypedEnum)
+ Q_ENUM(TypedEnumClass)
+ Q_ENUM(NormalEnum)
+};
+
+// Also test the Q_ENUMS macro
+class CXX11Enums2
+{
+ Q_GADGET
+public:
+ enum class EnumClass { A0, A1, A2, A3 };
+ enum TypedEnum : char { B0, B1 , B2, B3 };
+ enum class TypedEnumClass : char { C0, C1, C2, C3 };
+ enum NormalEnum { D2 = 2, D3, D0 =0 , D1 };
+ Q_ENUMS(EnumClass TypedEnum TypedEnumClass NormalEnum)
};
#else
@@ -58,5 +73,10 @@ public:
enum NormalEnum { D2 = 2, D3, D0 =0 , D1 };
enum TypedEnum { B0, B1 , B2, B3 };
};
+
+class CXX11Enums2 : public CXX11Enums
+{
+ Q_GADGET
+};
#endif
#endif // CXX11_ENUMS_H
diff --git a/tests/auto/tools/moc/gadgetwithnoenums.h b/tests/auto/tools/moc/gadgetwithnoenums.h
index a19b970ab9..6a515862de 100644
--- a/tests/auto/tools/moc/gadgetwithnoenums.h
+++ b/tests/auto/tools/moc/gadgetwithnoenums.h
@@ -47,10 +47,10 @@ public:
class DerivedGadgetWithEnums : public GadgetWithNoEnums
{
Q_GADGET
- Q_ENUMS( FooEnum )
public:
enum FooEnum { FooValue };
+ Q_ENUM( FooEnum )
DerivedGadgetWithEnums() {}
~DerivedGadgetWithEnums() {}
};
diff --git a/tests/auto/tools/moc/namespaced-flags.h b/tests/auto/tools/moc/namespaced-flags.h
index 2b63ed0ae1..9448176218 100644
--- a/tests/auto/tools/moc/namespaced-flags.h
+++ b/tests/auto/tools/moc/namespaced-flags.h
@@ -38,13 +38,14 @@
namespace Foo {
class Bar : public QObject {
Q_OBJECT
- Q_FLAGS( Flags )
Q_PROPERTY( Flags flags READ flags WRITE setFlags )
public:
explicit Bar( QObject * parent=0 ) : QObject( parent ), mFlags() {}
enum Flag { Read=1, Write=2 };
Q_DECLARE_FLAGS( Flags, Flag )
+ Q_FLAG(Flags)
+
void setFlags( Flags f ) { mFlags = f; }
Flags flags() const { return mFlags; }
diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp
index 8e5de04718..2813da1ef7 100644
--- a/tests/auto/tools/moc/tst_moc.cpp
+++ b/tests/auto/tools/moc/tst_moc.cpp
@@ -75,6 +75,9 @@
#include "non-gadget-parent-class.h"
#include "grand-parent-gadget-class.h"
+Q_DECLARE_METATYPE(const QMetaObject*);
+
+
QT_USE_NAMESPACE
template <bool b> struct QTBUG_31218 {};
@@ -418,7 +421,7 @@ public:
enum TestEnum { One, Two, Three };
- Q_ENUMS(TestEnum)
+ Q_ENUM(TestEnum)
};
class PropertyUseClass : public QObject
@@ -437,7 +440,7 @@ class EnumSourceClass : public QObject
public:
enum TestEnum { Value = 37 };
- Q_ENUMS(TestEnum)
+ Q_ENUM(TestEnum)
};
class EnumUserClass : public QObject
@@ -1142,12 +1145,18 @@ void tst_Moc::frameworkSearchPath()
void tst_Moc::cstyleEnums()
{
const QMetaObject &obj = CStyleEnums::staticMetaObject;
- QCOMPARE(obj.enumeratorCount(), 1);
+ QCOMPARE(obj.enumeratorCount(), 2);
QMetaEnum metaEnum = obj.enumerator(0);
QCOMPARE(metaEnum.name(), "Baz");
QCOMPARE(metaEnum.keyCount(), 2);
QCOMPARE(metaEnum.key(0), "Foo");
QCOMPARE(metaEnum.key(1), "Bar");
+
+ QMetaEnum metaEnum2 = obj.enumerator(1);
+ QCOMPARE(metaEnum2.name(), "Baz2");
+ QCOMPARE(metaEnum2.keyCount(), 2);
+ QCOMPARE(metaEnum2.key(0), "Foo2");
+ QCOMPARE(metaEnum2.key(1), "Bar2");
}
void tst_Moc::templateGtGt()
@@ -1644,7 +1653,6 @@ class VersionTest : public QObject
Q_OBJECT
Q_PROPERTY(int prop1 READ foo)
Q_PROPERTY(int prop2 READ foo REVISION 2)
- Q_ENUMS(TestEnum);
public:
int foo() const { return 0; }
@@ -1653,6 +1661,8 @@ public:
Q_INVOKABLE Q_REVISION(4) void method2() {}
enum TestEnum { One, Two };
+ Q_ENUM(TestEnum);
+
public slots:
void slot1() {}
@@ -1677,7 +1687,6 @@ class VersionTestNotify : public QObject
Q_OBJECT
Q_PROPERTY(int prop1 READ foo NOTIFY fooChanged)
Q_PROPERTY(int prop2 READ foo REVISION 2)
- Q_ENUMS(TestEnum);
public:
int foo() const { return 0; }
@@ -1686,6 +1695,7 @@ public:
Q_INVOKABLE Q_REVISION(4) void method2() {}
enum TestEnum { One, Two };
+ Q_ENUM(TestEnum);
public slots:
void slot1() {}
@@ -1915,19 +1925,26 @@ void tst_Moc::privateClass()
void tst_Moc::cxx11Enums_data()
{
+ QTest::addColumn<const QMetaObject *>("meta");
QTest::addColumn<QByteArray>("enumName");
QTest::addColumn<char>("prefix");
- QTest::newRow("EnumClass") << QByteArray("EnumClass") << 'A';
- QTest::newRow("TypedEnum") << QByteArray("TypedEnum") << 'B';
- QTest::newRow("TypedEnumClass") << QByteArray("TypedEnumClass") << 'C';
- QTest::newRow("NormalEnum") << QByteArray("NormalEnum") << 'D';
-}
+ const QMetaObject *meta1 = &CXX11Enums::staticMetaObject;
+ const QMetaObject *meta2 = &CXX11Enums2::staticMetaObject;
+ QTest::newRow("EnumClass") << meta1 << QByteArray("EnumClass") << 'A';
+ QTest::newRow("EnumClass 2") << meta2 << QByteArray("EnumClass") << 'A';
+ QTest::newRow("TypedEnum") << meta1 << QByteArray("TypedEnum") << 'B';
+ QTest::newRow("TypedEnum 2") << meta2 << QByteArray("TypedEnum") << 'B';
+ QTest::newRow("TypedEnumClass") << meta1 << QByteArray("TypedEnumClass") << 'C';
+ QTest::newRow("TypedEnumClass 2") << meta2 << QByteArray("TypedEnumClass") << 'C';
+ QTest::newRow("NormalEnum") << meta1 << QByteArray("NormalEnum") << 'D';
+ QTest::newRow("NormalEnum 2") << meta2 << QByteArray("NormalEnum") << 'D';
+}
void tst_Moc::cxx11Enums()
{
- const QMetaObject *meta = &CXX11Enums::staticMetaObject;
+ QFETCH(const QMetaObject *,meta);
QCOMPARE(meta->enumeratorOffset(), 0);
QFETCH(QByteArray, enumName);
@@ -2535,8 +2552,6 @@ void tst_Moc::finalClasses()
QCOMPARE(className, expected);
}
-Q_DECLARE_METATYPE(const QMetaObject*);
-
void tst_Moc::explicitOverrideControl_data()
{
QTest::addColumn<const QMetaObject*>("mo");