summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools
diff options
context:
space:
mode:
authorGlenn Watson <glenn.watson@nokia.com>2011-11-25 11:58:37 +1000
committerQt by Nokia <qt-info@nokia.com>2011-11-27 22:51:39 +0100
commitde9d845441eeb699da85c98d163451bc127fa1de (patch)
tree3742721b9ef20feade31b32797aa36199c6469ed /tests/auto/tools
parentff049be0726e020937a0fb8aab92b67d88d25188 (diff)
Add support to moc for registering non-local enums via Q_ENUMS.
When using the Q_ENUMS macro to register an enumeration in a class with moc, it's now possible to provide a scoped enumeration that exists in another class. This adds the enum class scope to a metaobject's list of related classes stored in the extradata field. This allows the declarative code to handle non-local enums in signal and slot functions that are exposed to QML. Task-number: QTBUG-20639 Change-Id: I94f5292818095fda75762bd1508ba5c69de19503 Reviewed-by: Martin Jones <martin.jones@nokia.com> Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Diffstat (limited to 'tests/auto/tools')
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp
index cfe516d999..6d3ee2611e 100644
--- a/tests/auto/tools/moc/tst_moc.cpp
+++ b/tests/auto/tools/moc/tst_moc.cpp
@@ -410,6 +410,24 @@ public:
inline PropertyTestClass::TestEnum foo() const { return PropertyTestClass::One; }
};
+class EnumSourceClass : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum TestEnum { Value = 37 };
+
+ Q_ENUMS(TestEnum)
+};
+
+class EnumUserClass : public QObject
+{
+ Q_OBJECT
+
+public:
+ Q_ENUMS(EnumSourceClass::TestEnum)
+};
+
#if defined(Q_MOC_RUN)
// Task #119503
#define _TASK_119503
@@ -483,6 +501,7 @@ private slots:
void blackslashNewlines();
void slotWithSillyConst();
void testExtraData();
+ void testExtraDataForEnum();
void namespaceTypeProperty();
void slotsWithVoidTemplate();
void structQObject();
@@ -810,6 +829,25 @@ void tst_Moc::testExtraData()
QCOMPARE(QByteArray(en.name()), QByteArray("TestEnum"));
}
+// QTBUG-20639 - Accept non-local enums for QML signal/slot parameters.
+void tst_Moc::testExtraDataForEnum()
+{
+ const QMetaObject *mobjSource = &EnumSourceClass::staticMetaObject;
+ QCOMPARE(mobjSource->enumeratorCount(), 1);
+ QCOMPARE(QByteArray(mobjSource->enumerator(0).name()), QByteArray("TestEnum"));
+
+ const QMetaObject *mobjUser = &EnumUserClass::staticMetaObject;
+ QCOMPARE(mobjUser->enumeratorCount(), 0);
+
+ const QMetaObjectExtraData *extra = reinterpret_cast<const QMetaObjectExtraData *>(mobjUser->d.extradata);
+ QVERIFY(extra);
+
+ const QMetaObject **objects = extra->objects;
+ QVERIFY(objects);
+ QVERIFY(objects[0] == mobjSource);
+ QVERIFY(objects[1] == 0);
+}
+
void tst_Moc::namespaceTypeProperty()
{
qRegisterMetaType<myNS::Points>("myNS::Points");