Small improvements to QObject unit test
Remove duplicate test and outdated comment about move-only functors, and include return value in move-only functor test. Change-Id: I58dffe0ccf3ec12e7e05e2c9588303da4a7e75ff Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
This commit is contained in:
parent
106c2fd19d
commit
02cac26ef5
@ -8376,7 +8376,7 @@ public:
|
|||||||
static void staticCallback0() {}
|
static void staticCallback0() {}
|
||||||
static void staticCallback1(const QString &) {}
|
static void staticCallback1(const QString &) {}
|
||||||
|
|
||||||
using Prototype0 = void(*)();
|
using Prototype0 = int(*)();
|
||||||
using Prototype1 = void(*)(QString);
|
using Prototype1 = void(*)(QString);
|
||||||
|
|
||||||
template<typename Functor>
|
template<typename Functor>
|
||||||
@ -8429,8 +8429,9 @@ inline constexpr bool compiles(Functor &&) {
|
|||||||
|
|
||||||
void tst_QObject::asyncCallbackHelper()
|
void tst_QObject::asyncCallbackHelper()
|
||||||
{
|
{
|
||||||
|
int result = 0;
|
||||||
QString arg1 = "Parameter";
|
QString arg1 = "Parameter";
|
||||||
void *argv[] = { nullptr, &arg1 };
|
void *argv[] = { &result, &arg1 };
|
||||||
|
|
||||||
auto lambda0 = []{};
|
auto lambda0 = []{};
|
||||||
auto lambda1 = [](const QString &) {};
|
auto lambda1 = [](const QString &) {};
|
||||||
@ -8477,11 +8478,6 @@ void tst_QObject::asyncCallbackHelper()
|
|||||||
static_assert(!compiles<AsyncCaller::Prototype0>(freeFunction1));
|
static_assert(!compiles<AsyncCaller::Prototype0>(freeFunction1));
|
||||||
static_assert(!compiles<AsyncCaller::Prototype0>(functor1));
|
static_assert(!compiles<AsyncCaller::Prototype0>(functor1));
|
||||||
|
|
||||||
// move-only functor - should work, but doesn't because QFunctorSlotObject requires
|
|
||||||
// the functor to be of a copyable type!
|
|
||||||
static_assert(!compiles<AsyncCaller::Prototype0>(moveOnlyLambda));
|
|
||||||
static_assert(!compiles<AsyncCaller::Prototype1>(moveOnlyLambda));
|
|
||||||
|
|
||||||
// wrong parameter type
|
// wrong parameter type
|
||||||
static_assert(!compiles<AsyncCaller::Prototype1>(&AsyncCaller::callbackInt));
|
static_assert(!compiles<AsyncCaller::Prototype1>(&AsyncCaller::callbackInt));
|
||||||
|
|
||||||
@ -8520,19 +8516,25 @@ void tst_QObject::asyncCallbackHelper()
|
|||||||
QVERIFY(caller.callMe1(std::move(moveOnlyLambda1)));
|
QVERIFY(caller.callMe1(std::move(moveOnlyLambda1)));
|
||||||
QVERIFY(caller.callMe1(freeFunction1));
|
QVERIFY(caller.callMe1(freeFunction1));
|
||||||
|
|
||||||
|
static const char *expectedPayload = "Hello World!";
|
||||||
{
|
{
|
||||||
struct MoveOnlyFunctor {
|
struct MoveOnlyFunctor {
|
||||||
MoveOnlyFunctor() : payload("Hello World!") {}
|
MoveOnlyFunctor() = default;
|
||||||
MoveOnlyFunctor(MoveOnlyFunctor &&) = default;
|
MoveOnlyFunctor(MoveOnlyFunctor &&) = default;
|
||||||
MoveOnlyFunctor(const MoveOnlyFunctor &) = delete;
|
MoveOnlyFunctor(const MoveOnlyFunctor &) = delete;
|
||||||
~MoveOnlyFunctor() = default;
|
~MoveOnlyFunctor() = default;
|
||||||
|
|
||||||
void operator()() const { qDebug() << payload; }
|
int operator()() const {
|
||||||
QString payload;
|
qDebug().noquote() << payload;
|
||||||
|
return int(payload.length());
|
||||||
|
}
|
||||||
|
QString payload = expectedPayload;
|
||||||
} moveOnlyFunctor;
|
} moveOnlyFunctor;
|
||||||
QVERIFY(caller.callMe0(std::move(moveOnlyFunctor)));
|
QVERIFY(caller.callMe0(std::move(moveOnlyFunctor)));
|
||||||
}
|
}
|
||||||
|
QTest::ignoreMessage(QtDebugMsg, expectedPayload);
|
||||||
caller.slotObject->call(nullptr, argv);
|
caller.slotObject->call(nullptr, argv);
|
||||||
|
QCOMPARE(result, QLatin1String(expectedPayload).length());
|
||||||
|
|
||||||
// mutable lambda; same behavior as mutableFunctor - we copy the functor
|
// mutable lambda; same behavior as mutableFunctor - we copy the functor
|
||||||
// in the QFunctorSlotObject, so the original is not modified
|
// in the QFunctorSlotObject, so the original is not modified
|
||||||
|
Loading…
x
Reference in New Issue
Block a user