From ed546ff216010c979b94263aab4773a1a6afd5bb Mon Sep 17 00:00:00 2001 From: Sona Kurazyan Date: Thu, 9 Dec 2021 21:49:40 +0100 Subject: QtFuture::connect: exclude QPrivateSignal from the resulting future type MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Filter out the last argument of type QPrivateSignal from the signal's arguments passed to QtFuture::connect(). Pick-to: 6.2 Fixes: QTBUG-92501 Change-Id: Idcd6baba1f01fcc94fa64b1c7030a629d01ed7a1 Reviewed-by: Marc Mutz Reviewed-by: MÃ¥rten Nordheim Reviewed-by: Qt CI Bot --- tests/auto/corelib/thread/qfuture/tst_qfuture.cpp | 47 ++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) (limited to 'tests/auto/corelib/thread') diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp index f97caa0633..7b272cf5a3 100644 --- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp +++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp @@ -70,11 +70,23 @@ public: emit multipleArgs(value1, value2, value3); } + void emitNoArgPrivateSignal() { emit noArgPrivateSignal(QPrivateSignal()); } + void emitIntArgPrivateSignal(int value) { emit intArgPrivateSignal(value, QPrivateSignal()); } + void emitMultiArgsPrivateSignal(int value1, double value2, const QString &value3) + { + emit multiArgsPrivateSignal(value1, value2, value3, QPrivateSignal()); + } + signals: void noArgSignal(); void intArgSignal(int value); void constRefArg(const QString &value); void multipleArgs(int value1, double value2, const QString &value3); + + // Private signals + void noArgPrivateSignal(QPrivateSignal); + void intArgPrivateSignal(int value, QPrivateSignal); + void multiArgsPrivateSignal(int value1, double value2, const QString &value3, QPrivateSignal); }; class LambdaThread : public QThread @@ -3433,7 +3445,7 @@ void tst_QFuture::signalConnect() { SenderObject sender; auto future = - QtFuture::connect(&sender, &SenderObject::noArgSignal).then([&] { return true; }); + QtFuture::connect(&sender, &SenderObject::noArgSignal).then([] { return true; }); sender.emitNoArg(); QCOMPARE(future.result(), true); } @@ -3474,6 +3486,39 @@ void tst_QFuture::signalConnect() QCOMPARE(std::get<2>(result), "42"); } + // No arg private signal + { + SenderObject sender; + auto future = QtFuture::connect(&sender, &SenderObject::noArgPrivateSignal).then([] { + return true; + }); + sender.emitNoArgPrivateSignal(); + QCOMPARE(future.result(), true); + } + + // One arg private signal + { + SenderObject sender; + auto future = + QtFuture::connect(&sender, &SenderObject::intArgPrivateSignal).then([](int value) { + return value; + }); + sender.emitIntArgPrivateSignal(42); + QCOMPARE(future.result(), 42); + } + + // Multi-args private signal + { + SenderObject sender; + auto future = QtFuture::connect(&sender, &SenderObject::multiArgsPrivateSignal) + .then([](std::tuple values) { return values; }); + sender.emitMultiArgsPrivateSignal(42, 42.5, "42"); + const auto [i, d, s] = future.result(); + QCOMPARE(i, 42); + QCOMPARE(d, 42.5); + QCOMPARE(s, "42"); + } + // Sender destroyed { SenderObject *sender = new SenderObject(); -- cgit v1.2.3