summaryrefslogtreecommitdiffstats
path: root/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp')
-rw-r--r--tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp65
1 files changed, 61 insertions, 4 deletions
diff --git a/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp b/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
index 4584b6ce31..8450537019 100644
--- a/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
+++ b/tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp
@@ -48,6 +48,9 @@ private slots:
void fromSignal();
void gadget();
+
+ void returnMetaType();
+ void parameterMetaType();
};
struct CustomType { };
@@ -378,10 +381,11 @@ void tst_QMetaMethod::method_data()
<< QMetaMethod::Public
<< QMetaMethod::Constructor;
+ // since Qt 6.0, parameter types get automatically registered
QTest::newRow("voidSignalCustomUnregisteredType")
<< QByteArray("voidSignalCustomUnregisteredType(CustomUnregisteredType)")
<< int(QMetaType::Void) << QByteArray("void")
- << (QList<int>() << 0)
+ << (QList<int>() << QMetaType::fromType<CustomUnregisteredType>().id())
<< (QList<QByteArray>() << QByteArray("CustomUnregisteredType"))
<< (QList<QByteArray>() << QByteArray("voidSignalCustomUnregisteredTypeArg"))
<< QMetaMethod::Public
@@ -390,7 +394,7 @@ void tst_QMetaMethod::method_data()
QTest::newRow("voidInvokableCustomUnregisteredType")
<< QByteArray("voidInvokableCustomUnregisteredType(CustomUnregisteredType)")
<< int(QMetaType::Void) << QByteArray("void")
- << (QList<int>() << 0)
+ << (QList<int>() << QMetaType::fromType<CustomUnregisteredType>().id())
<< (QList<QByteArray>() << QByteArray("CustomUnregisteredType"))
<< (QList<QByteArray>() << QByteArray("voidInvokableCustomUnregisteredTypeArg"))
<< QMetaMethod::Public
@@ -399,7 +403,7 @@ void tst_QMetaMethod::method_data()
QTest::newRow("voidSlotCustomUnregisteredType")
<< QByteArray("voidSlotCustomUnregisteredType(CustomUnregisteredType)")
<< int(QMetaType::Void) << QByteArray("void")
- << (QList<int>() << 0)
+ << (QList<int>() << QMetaType::fromType<CustomUnregisteredType>().id())
<< (QList<QByteArray>() << QByteArray("CustomUnregisteredType"))
<< (QList<QByteArray>() << QByteArray("voidSlotCustomUnregisteredTypeArg"))
<< QMetaMethod::Public
@@ -408,7 +412,7 @@ void tst_QMetaMethod::method_data()
QTest::newRow("MethodTestObject(CustomUnregisteredType)")
<< QByteArray("MethodTestObject(CustomUnregisteredType)")
<< int(QMetaType::UnknownType) << QByteArray("")
- << (QList<int>() << 0)
+ << (QList<int>() << QMetaType::fromType<CustomUnregisteredType>().id())
<< (QList<QByteArray>() << QByteArray("CustomUnregisteredType"))
<< (QList<QByteArray>() << QByteArray("constructorCustomUnregisteredTypeArg"))
<< QMetaMethod::Public
@@ -770,6 +774,59 @@ void tst_QMetaMethod::gadget()
}
}
+class MyTestClass : public QObject
+{
+ Q_OBJECT
+
+public:
+ MyTestClass() {};
+public Q_SLOTS:
+ MyGadget doStuff(int, float, MyGadget) {return {};}
+Q_SIGNALS:
+ QObject *mySignal();
+};
+
+void tst_QMetaMethod::returnMetaType()
+{
+ {
+ QMetaMethod mm = QMetaMethod::fromSignal(&MyTestClass::mySignal);
+ QCOMPARE(mm.returnMetaType(), QMetaType::fromType<QObject*>());
+ }
+ auto mo = MyTestClass::staticMetaObject;
+ {
+ const auto normalized = QMetaObject::normalizedSignature("doStuff(int, float, MyGadget)");
+ const int idx = mo.indexOfSlot(normalized);
+ QMetaMethod mm = mo.method(idx);
+ QVERIFY(mm.isValid());
+ QCOMPARE(mm.returnMetaType(), QMetaType::fromType<MyGadget>());
+ }
+ {
+ // access of parent class meta methods works, too
+ const auto normalized = QMetaObject::normalizedSignature("deleteLater()");
+ const int idx = mo.indexOfSlot(normalized);
+ QMetaMethod mm = mo.method(idx);
+ QVERIFY(mm.isValid());
+ QCOMPARE(mm.returnMetaType(), QMetaType::fromType<void>());
+ }
+}
+
+void tst_QMetaMethod::parameterMetaType()
+{
+ auto mo = MyTestClass::staticMetaObject;
+ const auto normalized = QMetaObject::normalizedSignature("doStuff(int, float, MyGadget)");
+ const int idx = mo.indexOfSlot(normalized);
+ QMetaMethod mm = mo.method(idx);
+ {
+ QVERIFY(!mm.parameterMetaType(-1).isValid());
+ QVERIFY(!mm.parameterMetaType(3).isValid());
+ }
+ {
+ QCOMPARE(mm.parameterMetaType(0), QMetaType::fromType<int>());
+ QCOMPARE(mm.parameterMetaType(1), QMetaType::fromType<float>());
+ QCOMPARE(mm.parameterMetaType(2), QMetaType::fromType<MyGadget>());
+ }
+}
+
QTEST_MAIN(tst_QMetaMethod)
#include "tst_qmetamethod.moc"