diff options
author | Marc Mutz <[email protected]> | 2025-05-23 16:13:35 +0200 |
---|---|---|
committer | Marc Mutz <[email protected]> | 2025-06-04 23:22:45 +0200 |
commit | 5c563a98a5ffe2a72a641bfa9ed30e17ecffd893 (patch) | |
tree | 92d8f36203604c0bf0e404a4598a19c50ce69cf9 | |
parent | e51675b891d2a4c64dda0094be0c84070833b82a (diff) |
Check that a slot that was declared using QVector ends up stored as,
and can be called with, QList (and QVector).
Also check that the various indexOf*() methods do the QVector</QList<
normalization, even though they're documented to require normalized
input. A subsequent patch will deprecate that behavior, so make sure
we don't break it as we change it.
Amends 1fa31be7ce3a6899f1c1597311d7593648ecd1d8.
Pick-to: 6.10 6.9 6.8 6.5
Task-number: QTBUG-135572
Change-Id: Id28bf3c4163099f07213bfbf7d296b4fd76b71a5
Reviewed-by: Fabian Kosmale <[email protected]>
Reviewed-by: Thiago Macieira <[email protected]>
Reviewed-by: Ahmad Samir <[email protected]>
-rw-r--r-- | tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp index 28ea814d90d..7137cef7ec2 100644 --- a/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp +++ b/tests/auto/corelib/kernel/qmetaobject/tst_qmetaobject.cpp @@ -501,6 +501,8 @@ public: Q_INVOKABLE QtTestObject(QObject *parent); Q_INVOKABLE QtTestObject(QObject *parent, int, int); Q_INVOKABLE QtTestObject(QObject *parent, int); + Q_INVOKABLE QtTestObject(QList<int>, QObject *parent) : QtTestObject(parent) {} + Q_INVOKABLE QtTestObject(QObject *parent, QVector<int>) : QtTestObject(parent) {} public slots: void sl0(); @@ -520,6 +522,8 @@ public slots: QObject *sl11(); const char *sl12(); QList<QString> sl13(QList<QString> l1); + // check Qt 6 QVector/QList alias: + QVector<QString> sl13v(QVector<QString> v1); qint64 sl14(); qlonglong *sl15(qlonglong *); MyForwardDeclaredType *sl16(MyForwardDeclaredType *); @@ -628,6 +632,8 @@ const char *QtTestObject::sl12() { slotResult = "sl12"; return "foo"; } QList<QString> QtTestObject::sl13(QList<QString> l1) { slotResult = "sl13"; return l1; } +QVector<QString> QtTestObject::sl13v(QVector<QString> v1) +{ slotResult = "sl13v"; return v1; } qint64 QtTestObject::sl14() { slotResult = "sl14"; return Q_INT64_C(123456789)*123456789; } qlonglong *QtTestObject::sl15(qlonglong *ptr) @@ -797,11 +803,50 @@ void tst_QMetaObject::invokeMetaMember() QCOMPARE(returnValue, argument); QCOMPARE(obj.slotResult, QString("sl13")); // same, testing the QList/QVector aliasing: + returnValue.clear(); QVERIFY(QMetaObject::invokeMethod(&obj, "sl13", Q_RETURN_ARG(QVector<QString>, returnValue), Q_ARG(QVector<QString>, argument))); QCOMPARE(returnValue, argument); QCOMPARE(obj.slotResult, QString("sl13")); + returnValue.clear(); + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13", + Q_RETURN_ARG(QList<QString>, returnValue), + Q_ARG(QVector<QString>, argument))); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13"_L1); + returnValue.clear(); + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13", + Q_RETURN_ARG(QVector<QString>, returnValue), + Q_ARG(QList<QString>, argument))); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13"_L1); + returnValue.clear(); + + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13v", + Q_RETURN_ARG(QList<QString>, returnValue), + Q_ARG(QList<QString>, argument))); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13v"_L1); + returnValue.clear(); + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13v", + Q_RETURN_ARG(QVector<QString>, returnValue), + Q_ARG(QVector<QString>, argument))); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13v"_L1); + returnValue.clear(); + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13v", + Q_RETURN_ARG(QList<QString>, returnValue), + Q_ARG(QVector<QString>, argument))); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13v"_L1); + returnValue.clear(); + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13v", + Q_RETURN_ARG(QVector<QString>, returnValue), + Q_ARG(QList<QString>, argument))); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13v"_L1); + returnValue.clear(); // return qint64 qint64 return64; @@ -970,6 +1015,12 @@ void tst_QMetaObject::invokeMetaMemberNoMacros() argument)); QCOMPARE(returnValue, argument); QCOMPARE(obj.slotResult, QString("sl13")); + returnValue.clear(); + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13v", + qReturnArg(returnValue), + argument)); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13v"_L1); // return qint64 qint64 return64; @@ -1589,12 +1640,25 @@ void tst_QMetaObject::invokeBlockingQueuedMetaMember() Q_ARG(QList<QString>, argument))); QCOMPARE(returnValue, argument); QCOMPARE(obj.slotResult, QString("sl13")); + returnValue.clear(); // same, testing QVector/QList aliasing: QVERIFY(QMetaObject::invokeMethod(&obj, "sl13", Qt::BlockingQueuedConnection, Q_RETURN_ARG(QVector<QString>, returnValue), Q_ARG(QVector<QString>, argument))); QCOMPARE(returnValue, argument); QCOMPARE(obj.slotResult, QString("sl13")); + returnValue.clear(); + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13v", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QList<QString>, returnValue), + Q_ARG(QList<QString>, argument))); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13v"_L1); + returnValue.clear(); + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13v", Qt::BlockingQueuedConnection, + Q_RETURN_ARG(QVector<QString>, returnValue), + Q_ARG(QVector<QString>, argument))); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13v"_L1); // return qint64 qint64 return64; @@ -1768,6 +1832,12 @@ void tst_QMetaObject::invokeBlockingQueuedMetaMemberNoMacros() argument)); QCOMPARE(returnValue, argument); QCOMPARE(obj.slotResult, QString("sl13")); + returnValue.clear(); + QVERIFY(QMetaObject::invokeMethod(&obj, "sl13v", Qt::BlockingQueuedConnection, + qReturnArg(returnValue), + argument)); + QCOMPARE(returnValue, argument); + QCOMPARE(obj.slotResult, "sl13v"_L1); // return qint64 qint64 return64; @@ -2641,6 +2711,13 @@ void tst_QMetaObject::metaMethod() QVERIFY(method.invoke(&obj, Q_ARG(QString, "1"), Q_ARG(QString, "2"), Q_ARG(QString, "3"), Q_ARG(QString, "4"), Q_ARG(QString, "5"))); QCOMPARE(obj.slotResult, QString("sl5:12345")); + // check Qt 6 QVector/QList alias: + index = QtTestObject::staticMetaObject.indexOfMethod("sl13v(QVector<QString>)"); + QVERIFY(index > 0); + index = QtTestObject::staticMetaObject.indexOfMethod("sl13v(QList<QString>)"); + QVERIFY(index > 0); + index = QtTestObject::staticMetaObject.indexOfMethod("sl13(QVector<QString>)"); + QVERIFY(index > 0); index = QtTestObject::staticMetaObject.indexOfMethod("sl13(QList<QString>)"); QVERIFY(index > 0); QMetaMethod sl13 = QtTestObject::staticMetaObject.method(index); @@ -2654,6 +2731,19 @@ void tst_QMetaObject::metaMethod() QVERIFY(sl13.invoke(&obj, Q_RETURN_ARG(QList<QString>, returnValue), Q_ARG(QVector<QString>, argument))); QCOMPARE(returnValue, argument); QCOMPARE(obj.slotResult, QString("sl13")); + + index = QtTestObject::staticMetaObject.indexOfConstructor("QtTestObject(QObject*,QList<int>)"); + QVERIFY(index > 0); + index = QtTestObject::staticMetaObject.indexOfConstructor("QtTestObject(QObject*,QVector<int>)"); + QVERIFY(index > 0); + QCOMPARE(QtTestObject::staticMetaObject.constructor(index).methodSignature(), + "QtTestObject(QObject*,QList<int>)"_L1); + index = QtTestObject::staticMetaObject.indexOfConstructor("QtTestObject(QList<int>,QObject*)"); + QVERIFY(index > 0); + index = QtTestObject::staticMetaObject.indexOfConstructor("QtTestObject(QVector<int>,QObject*)"); + QVERIFY(index > 0); + QCOMPARE(QtTestObject::staticMetaObject.constructor(index).methodSignature(), + "QtTestObject(QList<int>,QObject*)"_L1); } // this is a copy-paste-adapt of the above @@ -2694,6 +2784,9 @@ void tst_QMetaObject::metaMethodNoMacro() QVERIFY(method.invoke(&obj, QStringLiteral("1"), QStringLiteral("2"), QStringLiteral("3"), QStringLiteral("4"), QStringLiteral("5"))); QCOMPARE(obj.slotResult, QString("sl5:12345")); + // check Qt 6 QVector/QList alias: + index = QtTestObject::staticMetaObject.indexOfMethod("sl13(QVector<QString>)"); + QVERIFY(index > 0); index = QtTestObject::staticMetaObject.indexOfMethod("sl13(QList<QString>)"); QVERIFY(index > 0); QMetaMethod sl13 = QtTestObject::staticMetaObject.method(index); |