diff --git a/core/tests/Variable/TestVariableSync.cpp b/core/tests/Variable/TestVariableSync.cpp index 3178719..61daa00 100644 --- a/core/tests/Variable/TestVariableSync.cpp +++ b/core/tests/Variable/TestVariableSync.cpp @@ -185,7 +185,76 @@ void TestVariableSync::testSync_data() // Test cases // // ////////// // - /// @todo + // Id used to synchronize variables in the controller + auto syncId = QUuid::createUuid(); + + /// Generates a range according to a start time and a end time (the date is the same) + auto range = [](const QTime &startTime, const QTime &endTime) { + return SqpRange{DateUtils::secondsSinceEpoch(QDateTime{{2017, 1, 1}, startTime, Qt::UTC}), + DateUtils::secondsSinceEpoch(QDateTime{{2017, 1, 1}, endTime, Qt::UTC})}; + }; + + auto initialRange = range({12, 0}, {13, 0}); + + Iterations iterations{}; + // Creates variables var0, var1 and var2 + iterations.push_back({std::make_shared(0), {{0, initialRange}}}); + iterations.push_back({std::make_shared(1), {{0, initialRange}, {1, initialRange}}}); + iterations.push_back( + {std::make_shared(2), {{0, initialRange}, {1, initialRange}, {2, initialRange}}}); + + // Adds variables into the sync group (ranges don't need to be tested here) + iterations.push_back({std::make_shared(0, syncId)}); + iterations.push_back({std::make_shared(1, syncId)}); + iterations.push_back({std::make_shared(2, syncId)}); + + // Moves var0: ranges of var0, var1 and var2 change + auto newRange = range({12, 30}, {13, 30}); + iterations.push_back( + {std::make_shared(0, newRange), {{0, newRange}, {1, newRange}, {2, newRange}}}); + + // Moves var1: ranges of var0, var1 and var2 change + newRange = range({13, 0}, {14, 0}); + iterations.push_back( + {std::make_shared(0, newRange), {{0, newRange}, {1, newRange}, {2, newRange}}}); + + // Moves var2: ranges of var0, var1 and var2 change + newRange = range({13, 30}, {14, 30}); + iterations.push_back( + {std::make_shared(0, newRange), {{0, newRange}, {1, newRange}, {2, newRange}}}); + + // Desyncs var2 and moves var0: + // - ranges of var0 and var1 change + // - range of var2 doesn't change anymore + auto var2Range = newRange; + newRange = range({13, 45}, {14, 45}); + iterations.push_back({std::make_shared(2, syncId, false)}); + iterations.push_back( + {std::make_shared(0, newRange), {{0, newRange}, {1, newRange}, {2, var2Range}}}); + + // Shifts var0: although var1 is synchronized with var0, its range doesn't change + auto var1Range = newRange; + newRange = range({14, 45}, {15, 45}); + iterations.push_back({std::make_shared(0, newRange, true), + {{0, newRange}, {1, var1Range}, {2, var2Range}}}); + + // Moves var0 through several operations: + // - range of var0 changes + // - range or var1 changes according to the previous shift (one hour) + auto moveVar0 = [&iterations](const auto &var0NewRange, const auto &var1ExpectedRange) { + iterations.push_back( + {std::make_shared(0, var0NewRange), {{0, var0NewRange}, {1, var1ExpectedRange}}}); + }; + // Pan left + moveVar0(range({14, 30}, {15, 30}), range({13, 30}, {14, 30})); + // Pan right + moveVar0(range({16, 0}, {17, 0}), range({15, 0}, {16, 0})); + // Zoom in + moveVar0(range({16, 30}, {16, 45}), range({15, 30}, {15, 45})); + // Zoom out + moveVar0(range({12, 0}, {18, 0}), range({11, 0}, {17, 0})); + + QTest::newRow("sync1") << syncId << initialRange << std::move(iterations); } void TestVariableSync::testSync()