diff options
Diffstat (limited to 'tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp')
-rw-r--r-- | tests/auto/corelib/kernel/qmetamethod/tst_qmetamethod.cpp | 65 |
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" |