14using namespace std::chrono_literals;
24 void testUpdateForward();
25 void testUpdateBackward();
26 void testUpdateFinished();
27 void testToggleDirection();
29 void testSetElapsed_data();
30 void testSetElapsed();
31 void testSetDuration();
32 void testSetDurationRetargeting();
33 void testSetDurationRetargetingSmallDuration();
35 void testStrictRedirectSourceMode_data();
36 void testStrictRedirectSourceMode();
37 void testRelaxedRedirectSourceMode_data();
38 void testRelaxedRedirectSourceMode();
39 void testStrictRedirectTargetMode_data();
40 void testStrictRedirectTargetMode();
41 void testRelaxedRedirectTargetMode_data();
42 void testRelaxedRedirectTargetMode();
45void TimeLineTest::testUpdateForward()
48 timeLine.setEasingCurve(QEasingCurve::Linear);
51 timeLine.advance(0ms);
52 QCOMPARE(timeLine.value(), 0.0);
53 QVERIFY(!timeLine.done());
56 timeLine.advance(100ms);
57 QCOMPARE(timeLine.value(), 0.1);
58 QVERIFY(!timeLine.done());
61 timeLine.advance(400ms);
62 QCOMPARE(timeLine.value(), 0.4);
63 QVERIFY(!timeLine.done());
66 timeLine.advance(900ms);
67 QCOMPARE(timeLine.value(), 0.9);
68 QVERIFY(!timeLine.done());
71 timeLine.advance(3000ms);
72 QCOMPARE(timeLine.value(), 1.0);
73 QVERIFY(timeLine.done());
76void TimeLineTest::testUpdateBackward()
79 timeLine.setEasingCurve(QEasingCurve::Linear);
82 timeLine.advance(0ms);
83 QCOMPARE(timeLine.value(), 1.0);
84 QVERIFY(!timeLine.done());
87 timeLine.advance(100ms);
88 QCOMPARE(timeLine.value(), 0.9);
89 QVERIFY(!timeLine.done());
92 timeLine.advance(400ms);
93 QCOMPARE(timeLine.value(), 0.6);
94 QVERIFY(!timeLine.done());
97 timeLine.advance(900ms);
98 QCOMPARE(timeLine.value(), 0.1);
99 QVERIFY(!timeLine.done());
102 timeLine.advance(3000ms);
103 QCOMPARE(timeLine.value(), 0.0);
104 QVERIFY(timeLine.done());
107void TimeLineTest::testUpdateFinished()
110 timeLine.advance(0ms);
111 timeLine.setEasingCurve(QEasingCurve::Linear);
113 timeLine.advance(1000ms);
114 QCOMPARE(timeLine.value(), 1.0);
115 QVERIFY(timeLine.done());
117 timeLine.advance(1042ms);
118 QCOMPARE(timeLine.value(), 1.0);
119 QVERIFY(timeLine.done());
122void TimeLineTest::testToggleDirection()
125 timeLine.setEasingCurve(QEasingCurve::Linear);
127 timeLine.advance(0ms);
128 QCOMPARE(timeLine.value(), 0.0);
129 QVERIFY(!timeLine.done());
131 timeLine.advance(600ms);
132 QCOMPARE(timeLine.value(), 0.6);
133 QVERIFY(!timeLine.done());
135 timeLine.toggleDirection();
136 QCOMPARE(timeLine.value(), 0.6);
137 QVERIFY(!timeLine.done());
139 timeLine.advance(800ms);
140 QCOMPARE(timeLine.value(), 0.4);
141 QVERIFY(!timeLine.done());
143 timeLine.advance(3000ms);
144 QCOMPARE(timeLine.value(), 0.0);
145 QVERIFY(timeLine.done());
148void TimeLineTest::testReset()
151 timeLine.setEasingCurve(QEasingCurve::Linear);
152 timeLine.advance(0ms);
154 timeLine.advance(1000ms);
155 QCOMPARE(timeLine.value(), 1.0);
156 QVERIFY(timeLine.done());
159 QCOMPARE(timeLine.value(), 0.0);
160 QVERIFY(!timeLine.done());
163void TimeLineTest::testSetElapsed_data()
165 QTest::addColumn<std::chrono::milliseconds>(
"duration");
166 QTest::addColumn<std::chrono::milliseconds>(
"elapsed");
167 QTest::addColumn<std::chrono::milliseconds>(
"expectedElapsed");
168 QTest::addColumn<bool>(
"expectedDone");
169 QTest::addColumn<bool>(
"initiallyDone");
171 QTest::newRow(
"Less than duration, not finished") << 1000ms << 300ms << 300ms <<
false <<
false;
172 QTest::newRow(
"Less than duration, finished") << 1000ms << 300ms << 300ms <<
false <<
true;
173 QTest::newRow(
"Greater than duration, not finished") << 1000ms << 3000ms << 1000ms <<
true <<
false;
174 QTest::newRow(
"Greater than duration, finished") << 1000ms << 3000ms << 1000ms <<
true <<
true;
175 QTest::newRow(
"Equal to duration, not finished") << 1000ms << 1000ms << 1000ms <<
true <<
false;
176 QTest::newRow(
"Equal to duration, finished") << 1000ms << 1000ms << 1000ms <<
true <<
true;
179void TimeLineTest::testSetElapsed()
181 QFETCH(std::chrono::milliseconds, duration);
182 QFETCH(std::chrono::milliseconds, elapsed);
183 QFETCH(std::chrono::milliseconds, expectedElapsed);
184 QFETCH(
bool, expectedDone);
185 QFETCH(
bool, initiallyDone);
188 timeLine.setEasingCurve(QEasingCurve::Linear);
189 timeLine.advance(0ms);
192 timeLine.advance(duration);
193 QVERIFY(timeLine.done());
196 timeLine.setElapsed(elapsed);
197 QCOMPARE(timeLine.elapsed(), expectedElapsed);
198 QCOMPARE(timeLine.done(), expectedDone);
201void TimeLineTest::testSetDuration()
204 timeLine.setEasingCurve(QEasingCurve::Linear);
206 QCOMPARE(timeLine.duration(), 1000ms);
208 timeLine.setDuration(3000ms);
209 QCOMPARE(timeLine.duration(), 3000ms);
212void TimeLineTest::testSetDurationRetargeting()
215 timeLine.setEasingCurve(QEasingCurve::Linear);
216 timeLine.advance(0ms);
218 timeLine.advance(500ms);
219 QCOMPARE(timeLine.value(), 0.5);
220 QVERIFY(!timeLine.done());
222 timeLine.setDuration(3000ms);
223 QCOMPARE(timeLine.value(), 0.5);
224 QVERIFY(!timeLine.done());
227void TimeLineTest::testSetDurationRetargetingSmallDuration()
230 timeLine.setEasingCurve(QEasingCurve::Linear);
231 timeLine.advance(0ms);
233 timeLine.advance(999ms);
234 QCOMPARE(timeLine.value(), 0.999);
235 QVERIFY(!timeLine.done());
237 timeLine.setDuration(3ms);
238 QCOMPARE(timeLine.value(), 1.0);
239 QVERIFY(timeLine.done());
242void TimeLineTest::testRunning()
245 timeLine.setEasingCurve(QEasingCurve::Linear);
246 timeLine.advance(0ms);
248 QVERIFY(!timeLine.running());
249 QVERIFY(!timeLine.done());
251 timeLine.advance(100ms);
252 QVERIFY(timeLine.running());
253 QVERIFY(!timeLine.done());
255 timeLine.advance(1000ms);
256 QVERIFY(!timeLine.running());
257 QVERIFY(timeLine.done());
260void TimeLineTest::testStrictRedirectSourceMode_data()
262 QTest::addColumn<KWin::TimeLine::Direction>(
"initialDirection");
263 QTest::addColumn<qreal>(
"initialValue");
264 QTest::addColumn<KWin::TimeLine::Direction>(
"finalDirection");
265 QTest::addColumn<qreal>(
"finalValue");
271void TimeLineTest::testStrictRedirectSourceMode()
275 timeLine.setEasingCurve(QEasingCurve::Linear);
278 QTEST(timeLine.direction(),
"initialDirection");
279 QTEST(timeLine.value(),
"initialValue");
281 QVERIFY(!timeLine.running());
282 QVERIFY(!timeLine.done());
285 timeLine.setDirection(finalDirection);
287 QTEST(timeLine.direction(),
"finalDirection");
288 QTEST(timeLine.value(),
"finalValue");
290 QVERIFY(!timeLine.running());
291 QVERIFY(timeLine.done());
294void TimeLineTest::testRelaxedRedirectSourceMode_data()
296 QTest::addColumn<KWin::TimeLine::Direction>(
"initialDirection");
297 QTest::addColumn<qreal>(
"initialValue");
298 QTest::addColumn<KWin::TimeLine::Direction>(
"finalDirection");
299 QTest::addColumn<qreal>(
"finalValue");
305void TimeLineTest::testRelaxedRedirectSourceMode()
309 timeLine.setEasingCurve(QEasingCurve::Linear);
312 QTEST(timeLine.direction(),
"initialDirection");
313 QTEST(timeLine.value(),
"initialValue");
315 QVERIFY(!timeLine.running());
316 QVERIFY(!timeLine.done());
319 timeLine.setDirection(finalDirection);
321 QTEST(timeLine.direction(),
"finalDirection");
322 QTEST(timeLine.value(),
"finalValue");
324 QVERIFY(!timeLine.running());
325 QVERIFY(!timeLine.done());
328void TimeLineTest::testStrictRedirectTargetMode_data()
330 QTest::addColumn<KWin::TimeLine::Direction>(
"initialDirection");
331 QTest::addColumn<qreal>(
"initialValue");
332 QTest::addColumn<KWin::TimeLine::Direction>(
"finalDirection");
333 QTest::addColumn<qreal>(
"finalValue");
339void TimeLineTest::testStrictRedirectTargetMode()
343 timeLine.setEasingCurve(QEasingCurve::Linear);
345 timeLine.advance(0ms);
347 QTEST(timeLine.direction(),
"initialDirection");
348 QTEST(timeLine.value(),
"initialValue");
350 QVERIFY(!timeLine.running());
351 QVERIFY(!timeLine.done());
353 timeLine.advance(1000ms);
354 QTEST(timeLine.value(),
"finalValue");
355 QVERIFY(!timeLine.running());
356 QVERIFY(timeLine.done());
359 timeLine.setDirection(finalDirection);
361 QTEST(timeLine.direction(),
"finalDirection");
362 QTEST(timeLine.value(),
"finalValue");
363 QVERIFY(!timeLine.running());
364 QVERIFY(timeLine.done());
367void TimeLineTest::testRelaxedRedirectTargetMode_data()
369 QTest::addColumn<KWin::TimeLine::Direction>(
"initialDirection");
370 QTest::addColumn<qreal>(
"initialValue");
371 QTest::addColumn<KWin::TimeLine::Direction>(
"finalDirection");
372 QTest::addColumn<qreal>(
"finalValue");
378void TimeLineTest::testRelaxedRedirectTargetMode()
382 timeLine.setEasingCurve(QEasingCurve::Linear);
384 timeLine.advance(0ms);
386 QTEST(timeLine.direction(),
"initialDirection");
387 QTEST(timeLine.value(),
"initialValue");
389 QVERIFY(!timeLine.running());
390 QVERIFY(!timeLine.done());
392 timeLine.advance(1000ms);
393 QTEST(timeLine.value(),
"finalValue");
394 QVERIFY(!timeLine.running());
395 QVERIFY(timeLine.done());
398 timeLine.setDirection(finalDirection);
399 timeLine.advance(1000ms);
401 QTEST(timeLine.direction(),
"finalDirection");
402 QTEST(timeLine.value(),
"finalValue");
403 QVERIFY(!timeLine.running());
404 QVERIFY(!timeLine.done());
406 timeLine.advance(2000ms);
407 QTEST(timeLine.direction(),
"finalDirection");
408 QTEST(timeLine.value(),
"initialValue");
409 QVERIFY(!timeLine.running());
410 QVERIFY(timeLine.done());
415#include "timelinetest.moc"
QTEST_MAIN(OnScreenNotificationTest)