@@ -185,7 +185,76 void TestVariableSync::testSync_data() | |||
|
185 | 185 | // Test cases // |
|
186 | 186 | // ////////// // |
|
187 | 187 | |
|
188 | /// @todo | |
|
188 | // Id used to synchronize variables in the controller | |
|
189 | auto syncId = QUuid::createUuid(); | |
|
190 | ||
|
191 | /// Generates a range according to a start time and a end time (the date is the same) | |
|
192 | auto range = [](const QTime &startTime, const QTime &endTime) { | |
|
193 | return SqpRange{DateUtils::secondsSinceEpoch(QDateTime{{2017, 1, 1}, startTime, Qt::UTC}), | |
|
194 | DateUtils::secondsSinceEpoch(QDateTime{{2017, 1, 1}, endTime, Qt::UTC})}; | |
|
195 | }; | |
|
196 | ||
|
197 | auto initialRange = range({12, 0}, {13, 0}); | |
|
198 | ||
|
199 | Iterations iterations{}; | |
|
200 | // Creates variables var0, var1 and var2 | |
|
201 | iterations.push_back({std::make_shared<Create>(0), {{0, initialRange}}}); | |
|
202 | iterations.push_back({std::make_shared<Create>(1), {{0, initialRange}, {1, initialRange}}}); | |
|
203 | iterations.push_back( | |
|
204 | {std::make_shared<Create>(2), {{0, initialRange}, {1, initialRange}, {2, initialRange}}}); | |
|
205 | ||
|
206 | // Adds variables into the sync group (ranges don't need to be tested here) | |
|
207 | iterations.push_back({std::make_shared<Synchronize>(0, syncId)}); | |
|
208 | iterations.push_back({std::make_shared<Synchronize>(1, syncId)}); | |
|
209 | iterations.push_back({std::make_shared<Synchronize>(2, syncId)}); | |
|
210 | ||
|
211 | // Moves var0: ranges of var0, var1 and var2 change | |
|
212 | auto newRange = range({12, 30}, {13, 30}); | |
|
213 | iterations.push_back( | |
|
214 | {std::make_shared<Move>(0, newRange), {{0, newRange}, {1, newRange}, {2, newRange}}}); | |
|
215 | ||
|
216 | // Moves var1: ranges of var0, var1 and var2 change | |
|
217 | newRange = range({13, 0}, {14, 0}); | |
|
218 | iterations.push_back( | |
|
219 | {std::make_shared<Move>(0, newRange), {{0, newRange}, {1, newRange}, {2, newRange}}}); | |
|
220 | ||
|
221 | // Moves var2: ranges of var0, var1 and var2 change | |
|
222 | newRange = range({13, 30}, {14, 30}); | |
|
223 | iterations.push_back( | |
|
224 | {std::make_shared<Move>(0, newRange), {{0, newRange}, {1, newRange}, {2, newRange}}}); | |
|
225 | ||
|
226 | // Desyncs var2 and moves var0: | |
|
227 | // - ranges of var0 and var1 change | |
|
228 | // - range of var2 doesn't change anymore | |
|
229 | auto var2Range = newRange; | |
|
230 | newRange = range({13, 45}, {14, 45}); | |
|
231 | iterations.push_back({std::make_shared<Synchronize>(2, syncId, false)}); | |
|
232 | iterations.push_back( | |
|
233 | {std::make_shared<Move>(0, newRange), {{0, newRange}, {1, newRange}, {2, var2Range}}}); | |
|
234 | ||
|
235 | // Shifts var0: although var1 is synchronized with var0, its range doesn't change | |
|
236 | auto var1Range = newRange; | |
|
237 | newRange = range({14, 45}, {15, 45}); | |
|
238 | iterations.push_back({std::make_shared<Move>(0, newRange, true), | |
|
239 | {{0, newRange}, {1, var1Range}, {2, var2Range}}}); | |
|
240 | ||
|
241 | // Moves var0 through several operations: | |
|
242 | // - range of var0 changes | |
|
243 | // - range or var1 changes according to the previous shift (one hour) | |
|
244 | auto moveVar0 = [&iterations](const auto &var0NewRange, const auto &var1ExpectedRange) { | |
|
245 | iterations.push_back( | |
|
246 | {std::make_shared<Move>(0, var0NewRange), {{0, var0NewRange}, {1, var1ExpectedRange}}}); | |
|
247 | }; | |
|
248 | // Pan left | |
|
249 | moveVar0(range({14, 30}, {15, 30}), range({13, 30}, {14, 30})); | |
|
250 | // Pan right | |
|
251 | moveVar0(range({16, 0}, {17, 0}), range({15, 0}, {16, 0})); | |
|
252 | // Zoom in | |
|
253 | moveVar0(range({16, 30}, {16, 45}), range({15, 30}, {15, 45})); | |
|
254 | // Zoom out | |
|
255 | moveVar0(range({12, 0}, {18, 0}), range({11, 0}, {17, 0})); | |
|
256 | ||
|
257 | QTest::newRow("sync1") << syncId << initialRange << std::move(iterations); | |
|
189 | 258 | } |
|
190 | 259 | |
|
191 | 260 | void TestVariableSync::testSync() |
General Comments 0
You need to be logged in to leave comments.
Login now