Changeset View
Changeset View
Standalone View
Standalone View
autotests/libkwineffects/timelinetest.cpp
- This file was added.
1 | /******************************************************************** | ||||
---|---|---|---|---|---|
2 | KWin - the KDE window manager | ||||
3 | This file is part of the KDE project. | ||||
4 | | ||||
5 | Copyright (C) 2018 Vlad Zagorodniy <vladzzag@gmail.com> | ||||
6 | | ||||
7 | This program is free software; you can redistribute it and/or modify | ||||
8 | it under the terms of the GNU General Public License as published by | ||||
9 | the Free Software Foundation; either version 2 of the License, or | ||||
10 | (at your option) any later version. | ||||
11 | | ||||
12 | This program is distributed in the hope that it will be useful, | ||||
13 | but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
14 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||||
15 | GNU General Public License for more details. | ||||
16 | | ||||
17 | You should have received a copy of the GNU General Public License | ||||
18 | along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
19 | *********************************************************************/ | ||||
20 | | ||||
21 | #include <kwineffects.h> | ||||
22 | | ||||
23 | #include <QtTest> | ||||
24 | | ||||
25 | using namespace std::chrono_literals; | ||||
26 | | ||||
27 | // FIXME: Delete it in the future. | ||||
28 | Q_DECLARE_METATYPE(std::chrono::milliseconds) | ||||
29 | | ||||
30 | class TimeLineTest : public QObject | ||||
31 | { | ||||
32 | Q_OBJECT | ||||
33 | | ||||
34 | private Q_SLOTS: | ||||
35 | void testUpdateForward(); | ||||
36 | void testUpdateBackward(); | ||||
37 | void testUpdateFinished(); | ||||
38 | void testToggleDirection(); | ||||
39 | void testReset(); | ||||
40 | void testSetElapsed_data(); | ||||
41 | void testSetElapsed(); | ||||
42 | void testSetDuration(); | ||||
43 | void testSetDurationRetargeting(); | ||||
44 | void testSetDurationRetargetingSmallDuration(); | ||||
45 | void testRunning(); | ||||
46 | }; | ||||
47 | | ||||
48 | void TimeLineTest::testUpdateForward() | ||||
49 | { | ||||
50 | KWin::TimeLine timeLine(1000ms, KWin::TimeLine::Forward); | ||||
51 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
52 | | ||||
53 | // 0/1000 | ||||
54 | QCOMPARE(timeLine.value(), 0.0); | ||||
55 | QVERIFY(!timeLine.done()); | ||||
56 | | ||||
57 | // 100/1000 | ||||
58 | timeLine.update(100ms); | ||||
59 | QCOMPARE(timeLine.value(), 0.1); | ||||
60 | QVERIFY(!timeLine.done()); | ||||
61 | | ||||
62 | // 400/1000 | ||||
63 | timeLine.update(300ms); | ||||
64 | QCOMPARE(timeLine.value(), 0.4); | ||||
65 | QVERIFY(!timeLine.done()); | ||||
66 | | ||||
67 | // 900/1000 | ||||
68 | timeLine.update(500ms); | ||||
69 | QCOMPARE(timeLine.value(), 0.9); | ||||
70 | QVERIFY(!timeLine.done()); | ||||
71 | | ||||
72 | // 1000/1000 | ||||
73 | timeLine.update(3000ms); | ||||
74 | QCOMPARE(timeLine.value(), 1.0); | ||||
75 | QVERIFY(timeLine.done()); | ||||
76 | } | ||||
77 | | ||||
78 | void TimeLineTest::testUpdateBackward() | ||||
79 | { | ||||
80 | KWin::TimeLine timeLine(1000ms, KWin::TimeLine::Backward); | ||||
81 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
82 | | ||||
83 | // 0/1000 | ||||
84 | QCOMPARE(timeLine.value(), 1.0); | ||||
85 | QVERIFY(!timeLine.done()); | ||||
86 | | ||||
87 | // 100/1000 | ||||
88 | timeLine.update(100ms); | ||||
89 | QCOMPARE(timeLine.value(), 0.9); | ||||
90 | QVERIFY(!timeLine.done()); | ||||
91 | | ||||
92 | // 400/1000 | ||||
93 | timeLine.update(300ms); | ||||
94 | QCOMPARE(timeLine.value(), 0.6); | ||||
95 | QVERIFY(!timeLine.done()); | ||||
96 | | ||||
97 | // 900/1000 | ||||
98 | timeLine.update(500ms); | ||||
99 | QCOMPARE(timeLine.value(), 0.1); | ||||
100 | QVERIFY(!timeLine.done()); | ||||
101 | | ||||
102 | // 1000/1000 | ||||
103 | timeLine.update(3000ms); | ||||
104 | QCOMPARE(timeLine.value(), 0.0); | ||||
105 | QVERIFY(timeLine.done()); | ||||
106 | } | ||||
107 | | ||||
108 | void TimeLineTest::testUpdateFinished() | ||||
109 | { | ||||
110 | KWin::TimeLine timeLine(1000ms, KWin::TimeLine::Forward); | ||||
111 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
112 | | ||||
113 | timeLine.update(1000ms); | ||||
114 | QCOMPARE(timeLine.value(), 1.0); | ||||
115 | QVERIFY(timeLine.done()); | ||||
116 | | ||||
117 | timeLine.update(42ms); | ||||
118 | QCOMPARE(timeLine.value(), 1.0); | ||||
119 | QVERIFY(timeLine.done()); | ||||
120 | } | ||||
121 | | ||||
122 | void TimeLineTest::testToggleDirection() | ||||
123 | { | ||||
124 | KWin::TimeLine timeLine(1000ms, KWin::TimeLine::Forward); | ||||
125 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
126 | | ||||
127 | QCOMPARE(timeLine.value(), 0.0); | ||||
128 | QVERIFY(!timeLine.done()); | ||||
129 | | ||||
130 | timeLine.update(600ms); | ||||
131 | QCOMPARE(timeLine.value(), 0.6); | ||||
132 | QVERIFY(!timeLine.done()); | ||||
133 | | ||||
134 | timeLine.toggleDirection(); | ||||
135 | QCOMPARE(timeLine.value(), 0.6); | ||||
136 | QVERIFY(!timeLine.done()); | ||||
137 | | ||||
138 | timeLine.update(200ms); | ||||
139 | QCOMPARE(timeLine.value(), 0.4); | ||||
140 | QVERIFY(!timeLine.done()); | ||||
141 | | ||||
142 | timeLine.update(3000ms); | ||||
143 | QCOMPARE(timeLine.value(), 0.0); | ||||
144 | QVERIFY(timeLine.done()); | ||||
145 | } | ||||
146 | | ||||
147 | void TimeLineTest::testReset() | ||||
148 | { | ||||
149 | KWin::TimeLine timeLine(1000ms, KWin::TimeLine::Forward); | ||||
150 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
151 | | ||||
152 | timeLine.update(1000ms); | ||||
153 | QCOMPARE(timeLine.value(), 1.0); | ||||
154 | QVERIFY(timeLine.done()); | ||||
155 | | ||||
156 | timeLine.reset(); | ||||
157 | QCOMPARE(timeLine.value(), 0.0); | ||||
158 | QVERIFY(!timeLine.done()); | ||||
159 | } | ||||
160 | | ||||
161 | void TimeLineTest::testSetElapsed_data() | ||||
162 | { | ||||
163 | QTest::addColumn<std::chrono::milliseconds>("duration"); | ||||
164 | QTest::addColumn<std::chrono::milliseconds>("elapsed"); | ||||
165 | QTest::addColumn<std::chrono::milliseconds>("expectedElapsed"); | ||||
166 | QTest::addColumn<bool>("expectedDone"); | ||||
167 | QTest::addColumn<bool>("initiallyDone"); | ||||
168 | | ||||
169 | QTest::newRow("Less than duration, not finished") << 1000ms << 300ms << 300ms << false << false; | ||||
170 | QTest::newRow("Less than duration, finished") << 1000ms << 300ms << 300ms << false << true; | ||||
171 | QTest::newRow("Greater than duration, not finished") << 1000ms << 3000ms << 1000ms << true << false; | ||||
172 | QTest::newRow("Greater than duration, finished") << 1000ms << 3000ms << 1000ms << true << true; | ||||
173 | QTest::newRow("Equal to duration, not finished") << 1000ms << 1000ms << 1000ms << true << false; | ||||
174 | QTest::newRow("Equal to duration, finished") << 1000ms << 1000ms << 1000ms << true << true; | ||||
175 | } | ||||
176 | | ||||
177 | void TimeLineTest::testSetElapsed() | ||||
178 | { | ||||
179 | QFETCH(std::chrono::milliseconds, duration); | ||||
180 | QFETCH(std::chrono::milliseconds, elapsed); | ||||
181 | QFETCH(std::chrono::milliseconds, expectedElapsed); | ||||
182 | QFETCH(bool, expectedDone); | ||||
183 | QFETCH(bool, initiallyDone); | ||||
184 | | ||||
185 | KWin::TimeLine timeLine(duration, KWin::TimeLine::Forward); | ||||
186 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
187 | | ||||
188 | if (initiallyDone) { | ||||
189 | timeLine.update(duration); | ||||
190 | QVERIFY(timeLine.done()); | ||||
191 | } | ||||
192 | | ||||
193 | timeLine.setElapsed(elapsed); | ||||
194 | QCOMPARE(timeLine.elapsed(), expectedElapsed); | ||||
195 | QCOMPARE(timeLine.done(), expectedDone); | ||||
196 | } | ||||
197 | | ||||
198 | void TimeLineTest::testSetDuration() | ||||
199 | { | ||||
200 | KWin::TimeLine timeLine(1000ms, KWin::TimeLine::Forward); | ||||
201 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
202 | | ||||
203 | QCOMPARE(timeLine.duration(), 1000ms); | ||||
204 | | ||||
205 | timeLine.setDuration(3000ms); | ||||
206 | QCOMPARE(timeLine.duration(), 3000ms); | ||||
207 | } | ||||
208 | | ||||
209 | void TimeLineTest::testSetDurationRetargeting() | ||||
210 | { | ||||
211 | KWin::TimeLine timeLine(1000ms, KWin::TimeLine::Forward); | ||||
212 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
213 | | ||||
214 | timeLine.update(500ms); | ||||
215 | QCOMPARE(timeLine.value(), 0.5); | ||||
216 | QVERIFY(!timeLine.done()); | ||||
217 | | ||||
218 | timeLine.setDuration(3000ms); | ||||
219 | QCOMPARE(timeLine.value(), 0.5); | ||||
220 | QVERIFY(!timeLine.done()); | ||||
221 | } | ||||
222 | | ||||
223 | void TimeLineTest::testSetDurationRetargetingSmallDuration() | ||||
224 | { | ||||
225 | KWin::TimeLine timeLine(1000ms, KWin::TimeLine::Forward); | ||||
226 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
227 | | ||||
228 | timeLine.update(999ms); | ||||
229 | QCOMPARE(timeLine.value(), 0.999); | ||||
230 | QVERIFY(!timeLine.done()); | ||||
231 | | ||||
232 | timeLine.setDuration(3ms); | ||||
233 | QCOMPARE(timeLine.value(), 1.0); | ||||
234 | QVERIFY(timeLine.done()); | ||||
235 | } | ||||
236 | | ||||
237 | void TimeLineTest::testRunning() | ||||
238 | { | ||||
239 | KWin::TimeLine timeLine(1000ms, KWin::TimeLine::Forward); | ||||
240 | timeLine.setEasingCurve(QEasingCurve::Linear); | ||||
241 | | ||||
242 | QVERIFY(!timeLine.running()); | ||||
243 | QVERIFY(!timeLine.done()); | ||||
244 | | ||||
245 | timeLine.update(100ms); | ||||
246 | QVERIFY(timeLine.running()); | ||||
247 | QVERIFY(!timeLine.done()); | ||||
248 | | ||||
249 | timeLine.update(900ms); | ||||
250 | QVERIFY(!timeLine.running()); | ||||
251 | QVERIFY(timeLine.done()); | ||||
252 | } | ||||
253 | | ||||
254 | QTEST_MAIN(TimeLineTest) | ||||
255 | | ||||
256 | #include "timelinetest.moc" |