// Tests #include "../../shared/utils.h" // QtPromise #include // Qt #include // STL #include using namespace QtPromise; class tst_helpers_reject : public QObject { Q_OBJECT private Q_SLOTS: void rejectWithValue(); void rejectWithQSharedPtr(); void rejectWithStdSharedPtr(); }; QTEST_MAIN(tst_helpers_reject) #include "tst_reject.moc" void tst_helpers_reject::rejectWithValue() { auto p = QPromise::reject(42); QCOMPARE(p.isRejected(), true); QCOMPARE(waitForError(p, -1), 42); } // https://github.com/simonbrunel/qtpromise/issues/6 void tst_helpers_reject::rejectWithQSharedPtr() { QWeakPointer wptr; { QSharedPointer sptr(new int(42)); auto p = QPromise::reject(sptr); QCOMPARE(waitForError(p, QSharedPointer()), sptr); wptr = sptr; sptr.reset(); QCOMPARE(wptr.isNull(), false); // "p" still holds a reference } QCOMPARE(wptr.isNull(), true); } // https://github.com/simonbrunel/qtpromise/issues/6 void tst_helpers_reject::rejectWithStdSharedPtr() { std::weak_ptr wptr; { std::shared_ptr sptr(new int(42)); auto p = QPromise::reject(sptr); QCOMPARE(waitForError(p, std::shared_ptr()), sptr); wptr = sptr; sptr.reset(); QCOMPARE(wptr.use_count(), 1l); // "p" still holds a reference } QCOMPARE(wptr.use_count(), 0l); }