Differential D18758 Diff 58398 kdevplatform/3rdparty/qtpromise/qtpromise-0.5.0/tests/auto/qtpromise/deprecations/qpromise/all/tst_all.cpp
Changeset View
Changeset View
Standalone View
Standalone View
kdevplatform/3rdparty/qtpromise/qtpromise-0.5.0/tests/auto/qtpromise/deprecations/qpromise/all/tst_all.cpp
- This file was added.
1 | #include "../../../shared/utils.h" | ||||
---|---|---|---|---|---|
2 | | ||||
3 | // QtPromise | ||||
4 | #include <QtPromise> | ||||
5 | | ||||
6 | // Qt | ||||
7 | #include <QtTest> | ||||
8 | | ||||
9 | using namespace QtPromise; | ||||
10 | | ||||
11 | class tst_deprecations_qpromise_all : public QObject | ||||
12 | { | ||||
13 | Q_OBJECT | ||||
14 | | ||||
15 | private Q_SLOTS: | ||||
16 | void emptySequence(); | ||||
17 | void emptySequence_void(); | ||||
18 | void allPromisesSucceed(); | ||||
19 | void allPromisesSucceed_void(); | ||||
20 | void atLeastOnePromiseReject(); | ||||
21 | void atLeastOnePromiseReject_void(); | ||||
22 | void preserveOrder(); | ||||
23 | void sequenceTypes(); | ||||
24 | void sequenceTypes_void(); | ||||
25 | }; | ||||
26 | | ||||
27 | QTEST_MAIN(tst_deprecations_qpromise_all) | ||||
28 | #include "tst_all.moc" | ||||
29 | | ||||
30 | namespace { | ||||
31 | | ||||
32 | template <class Sequence> | ||||
33 | struct SequenceTester | ||||
34 | { | ||||
35 | Q_STATIC_ASSERT((std::is_same<typename Sequence::value_type, QPromise<int>>::value)); | ||||
36 | | ||||
37 | static void exec() | ||||
38 | { | ||||
39 | Sequence promises{ | ||||
40 | QtPromise::resolve(42), | ||||
41 | QtPromise::resolve(43), | ||||
42 | QtPromise::resolve(44) | ||||
43 | }; | ||||
44 | | ||||
45 | promises.push_back(QtPromise::resolve(45)); | ||||
46 | promises.insert(++promises.begin(), QtPromise::resolve(46)); | ||||
47 | promises.pop_back(); | ||||
48 | | ||||
49 | auto p = QPromise<int>::all(promises); | ||||
50 | | ||||
51 | Q_STATIC_ASSERT((std::is_same<decltype(p), QPromise<QVector<int>>>::value)); | ||||
52 | | ||||
53 | QCOMPARE(p.isPending(), true); | ||||
54 | QCOMPARE(waitForValue(p, QVector<int>()), QVector<int>({42, 46, 43, 44})); | ||||
55 | } | ||||
56 | }; | ||||
57 | | ||||
58 | template <template <typename, typename...> class Sequence, typename ...Args> | ||||
59 | struct SequenceTester<Sequence<QPromise<void>, Args...>> | ||||
60 | { | ||||
61 | static void exec() | ||||
62 | { | ||||
63 | Sequence<QPromise<void>, Args...> promises{ | ||||
64 | QtPromise::resolve(), | ||||
65 | QtPromise::resolve(), | ||||
66 | QtPromise::resolve() | ||||
67 | }; | ||||
68 | | ||||
69 | promises.push_back(QtPromise::resolve()); | ||||
70 | promises.insert(++promises.begin(), QtPromise::resolve()); | ||||
71 | promises.pop_back(); | ||||
72 | | ||||
73 | auto p = QPromise<void>::all(promises); | ||||
74 | | ||||
75 | Q_STATIC_ASSERT((std::is_same<decltype(p), QPromise<void>>::value)); | ||||
76 | | ||||
77 | QCOMPARE(p.isPending(), true); | ||||
78 | QCOMPARE(waitForValue(p, -1, 42), 42); | ||||
79 | } | ||||
80 | }; | ||||
81 | | ||||
82 | } // anonymous namespace | ||||
83 | | ||||
84 | void tst_deprecations_qpromise_all::emptySequence() | ||||
85 | { | ||||
86 | auto p = QPromise<int>::all({}); | ||||
87 | | ||||
88 | Q_STATIC_ASSERT((std::is_same<decltype(p), QPromise<QVector<int>>>::value)); | ||||
89 | | ||||
90 | QCOMPARE(p.isFulfilled(), true); | ||||
91 | QCOMPARE(waitForValue(p, QVector<int>()), QVector<int>{}); | ||||
92 | } | ||||
93 | | ||||
94 | void tst_deprecations_qpromise_all::emptySequence_void() | ||||
95 | { | ||||
96 | auto p = QPromise<void>::all({}); | ||||
97 | | ||||
98 | Q_STATIC_ASSERT((std::is_same<decltype(p), QPromise<void>>::value)); | ||||
99 | | ||||
100 | QCOMPARE(p.isFulfilled(), true); | ||||
101 | QCOMPARE(waitForValue(p, -1, 42), 42); | ||||
102 | } | ||||
103 | | ||||
104 | void tst_deprecations_qpromise_all::allPromisesSucceed() | ||||
105 | { | ||||
106 | auto p0 = QtPromise::resolve(42); | ||||
107 | auto p1 = QtPromise::resolve(44); | ||||
108 | auto p2 = QPromise<int>([](const QPromiseResolve<int>& resolve) { | ||||
109 | QtPromisePrivate::qtpromise_defer([=](){ | ||||
110 | resolve(43); | ||||
111 | }); | ||||
112 | }); | ||||
113 | | ||||
114 | auto p = QPromise<int>::all({p0, p2, p1}); | ||||
115 | | ||||
116 | Q_STATIC_ASSERT((std::is_same<decltype(p), QPromise<QVector<int>>>::value)); | ||||
117 | | ||||
118 | QCOMPARE(p0.isFulfilled(), true); | ||||
119 | QCOMPARE(p1.isFulfilled(), true); | ||||
120 | QCOMPARE(p2.isPending(), true); | ||||
121 | QCOMPARE(p.isPending(), true); | ||||
122 | QCOMPARE(waitForValue(p, QVector<int>()), QVector<int>({42, 43, 44})); | ||||
123 | QCOMPARE(p2.isFulfilled(), true); | ||||
124 | } | ||||
125 | | ||||
126 | void tst_deprecations_qpromise_all::allPromisesSucceed_void() | ||||
127 | { | ||||
128 | auto p0 = QtPromise::resolve(); | ||||
129 | auto p1 = QtPromise::resolve(); | ||||
130 | auto p2 = QPromise<void>([](const QPromiseResolve<void>& resolve) { | ||||
131 | QtPromisePrivate::qtpromise_defer([=](){ | ||||
132 | resolve(); | ||||
133 | }); | ||||
134 | }); | ||||
135 | | ||||
136 | auto p = QPromise<void>::all({p0, p2, p1}); | ||||
137 | | ||||
138 | Q_STATIC_ASSERT((std::is_same<decltype(p), QPromise<void>>::value)); | ||||
139 | | ||||
140 | QCOMPARE(p0.isFulfilled(), true); | ||||
141 | QCOMPARE(p1.isFulfilled(), true); | ||||
142 | QCOMPARE(p2.isPending(), true); | ||||
143 | QCOMPARE(p.isPending(), true); | ||||
144 | QCOMPARE(waitForValue(p, -1, 42), 42); | ||||
145 | QCOMPARE(p2.isFulfilled(), true); | ||||
146 | } | ||||
147 | | ||||
148 | void tst_deprecations_qpromise_all::atLeastOnePromiseReject() | ||||
149 | { | ||||
150 | auto p0 = QtPromise::resolve(42); | ||||
151 | auto p1 = QtPromise::resolve(44); | ||||
152 | auto p2 = QPromise<int>([](const QPromiseResolve<int>&, const QPromiseReject<int>& reject) { | ||||
153 | QtPromisePrivate::qtpromise_defer([=](){ | ||||
154 | reject(QString("foo")); | ||||
155 | }); | ||||
156 | }); | ||||
157 | | ||||
158 | auto p = QPromise<int>::all({p0, p2, p1}); | ||||
159 | | ||||
160 | Q_STATIC_ASSERT((std::is_same<decltype(p), QPromise<QVector<int>>>::value)); | ||||
161 | | ||||
162 | QCOMPARE(p0.isFulfilled(), true); | ||||
163 | QCOMPARE(p1.isFulfilled(), true); | ||||
164 | QCOMPARE(p2.isPending(), true); | ||||
165 | QCOMPARE(p.isPending(), true); | ||||
166 | QCOMPARE(waitForError(p, QString()), QString("foo")); | ||||
167 | QCOMPARE(p2.isRejected(), true); | ||||
168 | } | ||||
169 | | ||||
170 | void tst_deprecations_qpromise_all::atLeastOnePromiseReject_void() | ||||
171 | { | ||||
172 | auto p0 = QtPromise::resolve(); | ||||
173 | auto p1 = QtPromise::resolve(); | ||||
174 | auto p2 = QPromise<void>([](const QPromiseResolve<void>&, const QPromiseReject<void>& reject) { | ||||
175 | QtPromisePrivate::qtpromise_defer([=](){ | ||||
176 | reject(QString("foo")); | ||||
177 | }); | ||||
178 | }); | ||||
179 | | ||||
180 | auto p = QPromise<void>::all({p0, p2, p1}); | ||||
181 | | ||||
182 | Q_STATIC_ASSERT((std::is_same<decltype(p), QPromise<void>>::value)); | ||||
183 | | ||||
184 | QCOMPARE(p0.isFulfilled(), true); | ||||
185 | QCOMPARE(p1.isFulfilled(), true); | ||||
186 | QCOMPARE(p2.isPending(), true); | ||||
187 | QCOMPARE(p.isPending(), true); | ||||
188 | QCOMPARE(waitForError(p, QString()), QString("foo")); | ||||
189 | QCOMPARE(p2.isRejected(), true); | ||||
190 | } | ||||
191 | | ||||
192 | void tst_deprecations_qpromise_all::preserveOrder() | ||||
193 | { | ||||
194 | auto p0 = QtPromise::resolve(42).delay(500); | ||||
195 | auto p1 = QtPromise::resolve(43).delay(100); | ||||
196 | auto p2 = QtPromise::resolve(44).delay(250); | ||||
197 | | ||||
198 | auto p = QPromise<int>::all({p0, p1, p2}); | ||||
199 | | ||||
200 | Q_STATIC_ASSERT((std::is_same<decltype(p), QPromise<QVector<int>>>::value)); | ||||
201 | | ||||
202 | QCOMPARE(p0.isPending(), true); | ||||
203 | QCOMPARE(p1.isPending(), true); | ||||
204 | QCOMPARE(p2.isPending(), true); | ||||
205 | QCOMPARE(p.isPending(), true); | ||||
206 | QCOMPARE(waitForValue(p, QVector<int>()), QVector<int>({42, 43, 44})); | ||||
207 | QCOMPARE(p0.isFulfilled(), true); | ||||
208 | QCOMPARE(p1.isFulfilled(), true); | ||||
209 | QCOMPARE(p2.isFulfilled(), true); | ||||
210 | } | ||||
211 | | ||||
212 | // QVector::push_back/append isn't supported since it requires a default | ||||
213 | // constructor (see https://github.com/simonbrunel/qtpromise/issues/3) | ||||
214 | | ||||
215 | void tst_deprecations_qpromise_all::sequenceTypes() | ||||
216 | { | ||||
217 | SequenceTester<QList<QPromise<int>>>::exec(); | ||||
218 | //SequenceTester<QVector<QPromise<int>>>::exec(); | ||||
219 | SequenceTester<std::list<QPromise<int>>>::exec(); | ||||
220 | SequenceTester<std::vector<QPromise<int>>>::exec(); | ||||
221 | } | ||||
222 | | ||||
223 | void tst_deprecations_qpromise_all::sequenceTypes_void() | ||||
224 | { | ||||
225 | SequenceTester<QList<QPromise<void>>>::exec(); | ||||
226 | //SequenceTester<QVector<QPromise<void>>>::exec(); | ||||
227 | SequenceTester<std::list<QPromise<void>>>::exec(); | ||||
228 | SequenceTester<std::vector<QPromise<void>>>::exec(); | ||||
229 | } |