Closed danvratil closed 1 year ago
On this note, can one use QCoro in general with QTest? Specifically slumming it and doing waitFor? So far I can't do it since waitFor (and I wager QCoro::Task) needs a QApplication, and it's mysterious to me how to satisfy that requirement
QTest actually requires QApplication (that's what's hidden inside the QTEST_(GUILESS)_MAIN
macro), so QCoro coroutines work very well with QTest. You can use waitFor()
just fine, it waits with a nested event loop, so the test doesn't get stuck or anything. You can check the test
folder in this repo, although the infrastructure here is slightly more complex than just waitFor
.
What you need (and what this ticket is about) are coroutine-compatible assertions, i.e. you can't use QVERIFY
inside a coroutine, because the macro calls return
internally. I have most of the basic QTest assertions reimplemented in coroutine-compatible way in QCoro (= they use co_return
instead of return
, see here: https://github.com/danvratil/qcoro/blob/main/tests/testlibs/testmacros.h for the list. This ticket is basically about making that header more complete and public :)
@danvratil Thank you for the clarifications. I was overthinking my problem to the max. Keep up the good work!
QCoro has a re-defined some of the common QTest macros (
QCOMPARE
,QVERIFY
, ...) to a be coroutine-friendly (i.e. usingco_return
instead ofreturn
) in its own test suite. This might be useful for our users who want to test their QCoro-based code. With a little bit of polishing we could have a QCoroTest module with those macros as part of public API