|
@@
-198,15
+198,9
private slots:
|
|
198
|
/// Input data for @sa testSync()
|
|
198
|
/// Input data for @sa testSync()
|
|
199
|
void testSync_data();
|
|
199
|
void testSync_data();
|
|
200
|
|
|
200
|
|
|
201
|
/// Input data for @sa testSyncWithAborting()
|
|
|
|
|
202
|
void testSyncWithAborting_data();
|
|
|
|
|
203
|
|
|
|
|
|
204
|
/// Input data for @sa testSyncOneVar()
|
|
201
|
/// Input data for @sa testSyncOneVar()
|
|
205
|
void testSyncOneVar_data();
|
|
202
|
void testSyncOneVar_data();
|
|
206
|
|
|
203
|
|
|
207
|
/// Tests synchronization between variables through several operations with automatic aborting
|
|
|
|
|
208
|
void testSyncWithAborting();
|
|
|
|
|
209
|
|
|
|
|
|
210
|
/// Tests synchronization between variables through several operations
|
|
204
|
/// Tests synchronization between variables through several operations
|
|
211
|
void testSync();
|
|
205
|
void testSync();
|
|
212
|
|
|
206
|
|
|
@@
-291,78
+285,6
void testSyncCase1()
|
|
291
|
QTest::newRow("sync1") << syncId << initialRange << std::move(iterations) << 200;
|
|
285
|
QTest::newRow("sync1") << syncId << initialRange << std::move(iterations) << 200;
|
|
292
|
}
|
|
286
|
}
|
|
293
|
|
|
287
|
|
|
294
|
void testSyncCase1WithAborting()
|
|
|
|
|
295
|
{
|
|
|
|
|
296
|
// Id used to synchronize variables in the controller
|
|
|
|
|
297
|
auto syncId = QUuid::createUuid();
|
|
|
|
|
298
|
|
|
|
|
|
299
|
/// Generates a range according to a start time and a end time (the date is the same)
|
|
|
|
|
300
|
auto range = [](const QTime &startTime, const QTime &endTime) {
|
|
|
|
|
301
|
return SqpRange{DateUtils::secondsSinceEpoch(QDateTime{{2017, 1, 1}, startTime, Qt::UTC}),
|
|
|
|
|
302
|
DateUtils::secondsSinceEpoch(QDateTime{{2017, 1, 1}, endTime, Qt::UTC})};
|
|
|
|
|
303
|
};
|
|
|
|
|
304
|
|
|
|
|
|
305
|
auto initialRange = range({12, 0}, {13, 0});
|
|
|
|
|
306
|
|
|
|
|
|
307
|
Iterations creations{};
|
|
|
|
|
308
|
// Creates variables var0, var1 and var2
|
|
|
|
|
309
|
creations.push_back({std::make_shared<Create>(0), {{0, initialRange}}});
|
|
|
|
|
310
|
creations.push_back({std::make_shared<Create>(1), {{0, initialRange}, {1, initialRange}}});
|
|
|
|
|
311
|
|
|
|
|
|
312
|
// Adds variables into the sync group (ranges don't need to be tested here)
|
|
|
|
|
313
|
Iterations iterations{};
|
|
|
|
|
314
|
iterations.push_back({std::make_shared<Synchronize>(0, syncId)});
|
|
|
|
|
315
|
iterations.push_back({std::make_shared<Synchronize>(1, syncId)});
|
|
|
|
|
316
|
|
|
|
|
|
317
|
// Moves var0: ranges of var0, var1
|
|
|
|
|
318
|
auto currentRange = range({12, 30}, {13, 30});
|
|
|
|
|
319
|
iterations.push_back(
|
|
|
|
|
320
|
{std::make_shared<Move>(0, currentRange), {{0, currentRange}, {1, currentRange}}});
|
|
|
|
|
321
|
|
|
|
|
|
322
|
// Moves var0: ranges of var0, var1
|
|
|
|
|
323
|
auto pendingRange = range({13, 0}, {14, 0});
|
|
|
|
|
324
|
iterations.push_back(
|
|
|
|
|
325
|
{std::make_shared<Move>(0, pendingRange), {{0, pendingRange}, {1, pendingRange}}});
|
|
|
|
|
326
|
|
|
|
|
|
327
|
// Moves var0: ranges of var0, var1
|
|
|
|
|
328
|
pendingRange = range({13, 30}, {14, 30});
|
|
|
|
|
329
|
iterations.push_back(
|
|
|
|
|
330
|
{std::make_shared<Move>(0, pendingRange), {{0, pendingRange}, {1, pendingRange}}});
|
|
|
|
|
331
|
|
|
|
|
|
332
|
// moves var0:
|
|
|
|
|
333
|
// - ranges of var0 and var1 change
|
|
|
|
|
334
|
auto var2Range = pendingRange;
|
|
|
|
|
335
|
pendingRange = range({13, 45}, {14, 45});
|
|
|
|
|
336
|
iterations.push_back(
|
|
|
|
|
337
|
{std::make_shared<Move>(0, pendingRange), {{0, pendingRange}, {1, pendingRange}}});
|
|
|
|
|
338
|
|
|
|
|
|
339
|
// Shifts var0: although var1 is synchronized with var0, its range doesn't change
|
|
|
|
|
340
|
auto var1Range = pendingRange;
|
|
|
|
|
341
|
pendingRange = range({14, 45}, {15, 45});
|
|
|
|
|
342
|
iterations.push_back(
|
|
|
|
|
343
|
{std::make_shared<Move>(0, pendingRange, false), {{0, pendingRange}, {1, pendingRange}}});
|
|
|
|
|
344
|
|
|
|
|
|
345
|
// Moves var0 through several operations:
|
|
|
|
|
346
|
// - range of var0 changes
|
|
|
|
|
347
|
// - range or var1 changes according to the previous shift (one hour)
|
|
|
|
|
348
|
auto moveVar0 = [&iterations](const auto &var0NewRange, const auto &var1ExpectedRange) {
|
|
|
|
|
349
|
iterations.push_back(
|
|
|
|
|
350
|
{std::make_shared<Move>(0, var0NewRange), {{0, var0NewRange}, {1, var1ExpectedRange}}});
|
|
|
|
|
351
|
};
|
|
|
|
|
352
|
|
|
|
|
|
353
|
// Pan left
|
|
|
|
|
354
|
moveVar0(range({14, 30}, {15, 30}), range({14, 30}, {15, 30}));
|
|
|
|
|
355
|
// Pan right
|
|
|
|
|
356
|
moveVar0(range({16, 0}, {17, 0}), range({16, 0}, {17, 0}));
|
|
|
|
|
357
|
// Zoom in
|
|
|
|
|
358
|
moveVar0(range({16, 30}, {16, 45}), range({16, 30}, {16, 45}));
|
|
|
|
|
359
|
// Zoom out
|
|
|
|
|
360
|
moveVar0(range({16, 15}, {17, 0}), range({16, 15}, {17, 0}));
|
|
|
|
|
361
|
|
|
|
|
|
362
|
QTest::newRow("syncWithAborting1") << syncId << currentRange << std::move(creations)
|
|
|
|
|
363
|
<< std::move(iterations) << 200;
|
|
|
|
|
364
|
}
|
|
|
|
|
365
|
|
|
|
|
|
366
|
void testSyncCase2()
|
|
288
|
void testSyncCase2()
|
|
367
|
{
|
|
289
|
{
|
|
368
|
// Id used to synchronize variables in the controller
|
|
290
|
// Id used to synchronize variables in the controller
|
|
@@
-500,25
+422,6
void TestVariableSync::testSync_data()
|
|
500
|
testSyncCase2();
|
|
422
|
testSyncCase2();
|
|
501
|
}
|
|
423
|
}
|
|
502
|
|
|
424
|
|
|
503
|
void TestVariableSync::testSyncWithAborting_data()
|
|
|
|
|
504
|
{
|
|
|
|
|
505
|
// ////////////// //
|
|
|
|
|
506
|
// Test structure //
|
|
|
|
|
507
|
// ////////////// //
|
|
|
|
|
508
|
|
|
|
|
|
509
|
QTest::addColumn<QUuid>("syncId");
|
|
|
|
|
510
|
QTest::addColumn<SqpRange>("initialRange");
|
|
|
|
|
511
|
QTest::addColumn<Iterations>("creations");
|
|
|
|
|
512
|
QTest::addColumn<Iterations>("iterations");
|
|
|
|
|
513
|
QTest::addColumn<int>("operationDelay");
|
|
|
|
|
514
|
|
|
|
|
|
515
|
// ////////// //
|
|
|
|
|
516
|
// Test cases //
|
|
|
|
|
517
|
// ////////// //
|
|
|
|
|
518
|
|
|
|
|
|
519
|
testSyncCase1WithAborting();
|
|
|
|
|
520
|
}
|
|
|
|
|
521
|
|
|
|
|
|
522
|
void TestVariableSync::testSyncOneVar_data()
|
|
425
|
void TestVariableSync::testSyncOneVar_data()
|
|
523
|
{
|
|
426
|
{
|
|
524
|
// ////////////// //
|
|
427
|
// ////////////// //
|
|
@@
-564,40
+467,6
void TestVariableSync::testSync()
|
|
564
|
}
|
|
467
|
}
|
|
565
|
}
|
|
468
|
}
|
|
566
|
|
|
469
|
|
|
567
|
void TestVariableSync::testSyncWithAborting()
|
|
|
|
|
568
|
{
|
|
|
|
|
569
|
// Inits controllers
|
|
|
|
|
570
|
TimeController timeController{};
|
|
|
|
|
571
|
VariableController variableController{};
|
|
|
|
|
572
|
variableController.setTimeController(&timeController);
|
|
|
|
|
573
|
|
|
|
|
|
574
|
QFETCH(QUuid, syncId);
|
|
|
|
|
575
|
QFETCH(SqpRange, initialRange);
|
|
|
|
|
576
|
timeController.onTimeToUpdate(initialRange);
|
|
|
|
|
577
|
|
|
|
|
|
578
|
// Synchronization group used
|
|
|
|
|
579
|
variableController.onAddSynchronizationGroupId(syncId);
|
|
|
|
|
580
|
|
|
|
|
|
581
|
// For each iteration:
|
|
|
|
|
582
|
// - execute operation
|
|
|
|
|
583
|
// - compare the variables' state to the expected states
|
|
|
|
|
584
|
QFETCH(Iterations, iterations);
|
|
|
|
|
585
|
QFETCH(Iterations, creations);
|
|
|
|
|
586
|
QFETCH(int, operationDelay);
|
|
|
|
|
587
|
|
|
|
|
|
588
|
for (const auto &creation : creations) {
|
|
|
|
|
589
|
creation.m_Operation->exec(variableController);
|
|
|
|
|
590
|
QTest::qWait(operationDelay);
|
|
|
|
|
591
|
}
|
|
|
|
|
592
|
|
|
|
|
|
593
|
for (const auto &iteration : iterations) {
|
|
|
|
|
594
|
iteration.m_Operation->exec(variableController);
|
|
|
|
|
595
|
}
|
|
|
|
|
596
|
|
|
|
|
|
597
|
QTest::qWait(operationDelay);
|
|
|
|
|
598
|
validateRanges(variableController, iterations.back().m_ExpectedRanges);
|
|
|
|
|
599
|
}
|
|
|
|
|
600
|
|
|
|
|
|
601
|
void TestVariableSync::testSyncOneVar()
|
|
470
|
void TestVariableSync::testSyncOneVar()
|
|
602
|
{
|
|
471
|
{
|
|
603
|
// Inits controllers
|
|
472
|
// Inits controllers
|