[hal,tests] Use waitForProgramStart in tests (#8429)

Change setProgramStarted to accept a boolean so it can be set back to
false by tests. This allows properly waiting for program start in tests.
This commit is contained in:
Peter Johnson
2025-11-29 10:10:01 -08:00
committed by GitHub
parent 32d3ec0218
commit a4aad63dd4
23 changed files with 84 additions and 49 deletions

View File

@@ -119,6 +119,7 @@ class TimedRobotTest {
@BeforeEach
void setup() {
SimHooks.pauseTiming();
SimHooks.setProgramStarted(false);
DriverStationSim.resetData();
}
@@ -134,10 +135,10 @@ class TimedRobotTest {
Thread robotThread = new Thread(robot::startCompetition);
robotThread.start();
SimHooks.waitForProgramStart();
DriverStationSim.setEnabled(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.0); // Wait for Notifiers
assertEquals(1, robot.m_simulationInitCount.get());
assertEquals(0, robot.m_disabledInitCount.get());
@@ -214,12 +215,12 @@ class TimedRobotTest {
Thread robotThread = new Thread(robot::startCompetition);
robotThread.start();
SimHooks.waitForProgramStart();
DriverStationSim.setEnabled(true);
DriverStationSim.setAutonomous(true);
DriverStationSim.setTest(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.0); // Wait for Notifiers
assertEquals(1, robot.m_simulationInitCount.get());
assertEquals(0, robot.m_disabledInitCount.get());
@@ -296,12 +297,12 @@ class TimedRobotTest {
Thread robotThread = new Thread(robot::startCompetition);
robotThread.start();
SimHooks.waitForProgramStart();
DriverStationSim.setEnabled(true);
DriverStationSim.setAutonomous(false);
DriverStationSim.setTest(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.0); // Wait for Notifiers
assertEquals(1, robot.m_simulationInitCount.get());
assertEquals(0, robot.m_disabledInitCount.get());
@@ -378,12 +379,12 @@ class TimedRobotTest {
Thread robotThread = new Thread(robot::startCompetition);
robotThread.start();
SimHooks.waitForProgramStart();
DriverStationSim.setEnabled(true);
DriverStationSim.setAutonomous(false);
DriverStationSim.setTest(true);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.0); // Wait for Notifiers
assertEquals(1, robot.m_simulationInitCount.get());
assertEquals(0, robot.m_disabledInitCount.get());
@@ -485,13 +486,13 @@ class TimedRobotTest {
Thread robotThread = new Thread(robot::startCompetition);
robotThread.start();
SimHooks.waitForProgramStart();
// Start in disabled
DriverStationSim.setEnabled(false);
DriverStationSim.setAutonomous(false);
DriverStationSim.setTest(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.0); // Wait for Notifiers
assertEquals(0, robot.m_disabledInitCount.get());
assertEquals(0, robot.m_autonomousInitCount.get());
@@ -607,10 +608,10 @@ class TimedRobotTest {
Thread robotThread = new Thread(robot::startCompetition);
robotThread.start();
SimHooks.waitForProgramStart();
DriverStationSim.setEnabled(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.0); // Wait for Notifiers
assertEquals(0, robot.m_disabledInitCount.get());
assertEquals(0, robot.m_disabledPeriodicCount.get());
@@ -657,10 +658,10 @@ class TimedRobotTest {
Thread robotThread = new Thread(robot::startCompetition);
robotThread.start();
SimHooks.waitForProgramStart();
DriverStationSim.setEnabled(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.0); // Wait for Notifiers
assertEquals(0, robot.m_disabledInitCount.get());
assertEquals(0, robot.m_disabledPeriodicCount.get());

View File

@@ -32,6 +32,7 @@ class TimesliceRobotTest {
@BeforeEach
void setup() {
SimHooks.pauseTiming();
SimHooks.setProgramStarted(false);
}
@AfterEach
@@ -59,10 +60,10 @@ class TimesliceRobotTest {
Thread robotThread = new Thread(robot::startCompetition);
robotThread.start();
SimHooks.waitForProgramStart();
DriverStationSim.setEnabled(false);
DriverStationSim.notifyNewData();
SimHooks.stepTiming(0.0); // Wait for Notifiers
// Functions scheduled with addPeriodic() are delayed by one period before
// their first run (5 ms for this test's callbacks here and 20 ms for