diff options
author | Vitaly Fanaskov <vitaly.fanaskov@qt.io> | 2020-04-14 12:51:14 +0200 |
---|---|---|
committer | Vitaly Fanaskov <vitaly.fanaskov@qt.io> | 2020-04-23 17:09:52 +0200 |
commit | 9ba0715f08a64758453b941c4add22a269a30f71 (patch) | |
tree | fb99f735af3ed5e020317bdfb4f6866720722e43 /tests | |
parent | 23b998fa454ca021aa595f66d2e1964da4a119a4 (diff) |
QFuture: the result type doesn't have to be a default-constructible
Added asserts to insure the invariant declared in the documentation.
Canceled future object is not valid, hence we don't need to handle
this case separately.
Fixes: QTBUG-83389
Change-Id: Ib0653ef40cd3135574a91740e4ce2c6dc4da8a71
Reviewed-by: Sona Kurazyan <sona.kurazyan@qt.io>
Reviewed-by: Timur Pocheptsov <timur.pocheptsov@qt.io>
Diffstat (limited to 'tests')
-rw-r--r-- | tests/auto/corelib/thread/qfuture/tst_qfuture.cpp | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp index 4784cf16db..8d4ae41fd5 100644 --- a/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp +++ b/tests/auto/corelib/thread/qfuture/tst_qfuture.cpp @@ -116,6 +116,8 @@ private slots: void runAndTake(); void resultsReadyAt_data(); void resultsReadyAt(); + void takeResultWorksForTypesWithoutDefaultCtor(); + void canceledFutureIsNotValid(); private: using size_type = std::vector<int>::size_type; @@ -2744,5 +2746,40 @@ void tst_QFuture::resultsReadyAt() QCOMPARE(taken, 0b1111); } +template <class T> +auto makeFutureInterface(T &&result) +{ + QFutureInterface<T> f; + + f.reportStarted(); + f.reportResult(std::forward<T>(result)); + f.reportFinished(); + + return f; +} + +void tst_QFuture::takeResultWorksForTypesWithoutDefaultCtor() +{ + struct Foo + { + Foo() = delete; + explicit Foo(int i) : _i(i) {} + + int _i = -1; + }; + + auto f = makeFutureInterface(Foo(42)); + + QCOMPARE(f.takeResult()._i, 42); +} +void tst_QFuture::canceledFutureIsNotValid() +{ + auto f = makeFutureInterface(42); + + f.cancel(); + + QVERIFY(!f.isValid()); +} + QTEST_MAIN(tst_QFuture) #include "tst_qfuture.moc" |