From 10977b90bffeb675650b049df6585c296c6980cb Mon Sep 17 00:00:00 2001 From: Christian Mollekopf Date: Fri, 16 Jan 2015 13:38:29 +0100 Subject: Async test for nested jobs. --- async/autotests/asynctest.cpp | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'async/autotests') diff --git a/async/autotests/asynctest.cpp b/async/autotests/asynctest.cpp index 714e2e4..1ee3843 100644 --- a/async/autotests/asynctest.cpp +++ b/async/autotests/asynctest.cpp @@ -41,6 +41,7 @@ private Q_SLOTS: void testSyncPromises(); void testAsyncPromises(); void testAsyncPromises2(); + void testNestedAsync(); void testSyncEach(); void testSyncReduce(); }; @@ -120,6 +121,39 @@ void AsyncTest::testAsyncPromises2() QCOMPARE(future.value(), 42); } +void AsyncTest::testNestedAsync() +{ + bool done = false; + + auto job = Async::start( + [](Async::Future &future) { + auto innerJob = Async::start([](Async::Future &innerFuture) { + QTimer *timer = new QTimer(); + QObject::connect(timer, &QTimer::timeout, + [&]() { + innerFuture.setValue(42); + innerFuture.setFinished(); + }); + QObject::connect(timer, &QTimer::timeout, + timer, &QObject::deleteLater); + timer->setSingleShot(true); + timer->start(0); + }).then([&future](Async::Future &innerThenFuture) { + future.setFinished(); + innerThenFuture.setFinished(); + }); + innerJob.exec(); + } + ).then([&done](int result, Async::Future &future) { + done = true; + future.setValue(result); + future.setFinished(); + }); + job.exec(); + + QTRY_VERIFY(done); +} + void AsyncTest::testSyncEach() { auto job = Async::start>( -- cgit v1.2.3