mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-21 01:01:43 +00:00
[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:
@@ -21,7 +21,10 @@ inline constexpr auto kPeriod = 20_ms;
|
||||
namespace {
|
||||
class TimedRobotTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override { wpi::sim::PauseTiming(); }
|
||||
void SetUp() override {
|
||||
wpi::sim::PauseTiming();
|
||||
wpi::sim::SetProgramStarted(false);
|
||||
}
|
||||
|
||||
void TearDown() override { wpi::sim::ResumeTiming(); }
|
||||
};
|
||||
@@ -84,10 +87,10 @@ TEST_F(TimedRobotTest, DisabledMode) {
|
||||
MockRobot robot;
|
||||
|
||||
std::thread robotThread{[&] { robot.StartCompetition(); }};
|
||||
wpi::sim::WaitForProgramStart();
|
||||
|
||||
wpi::sim::DriverStationSim::SetEnabled(false);
|
||||
wpi::sim::DriverStationSim::NotifyNewData();
|
||||
wpi::sim::StepTiming(0_ms); // Wait for Notifiers
|
||||
|
||||
EXPECT_EQ(1u, robot.m_simulationInitCount);
|
||||
EXPECT_EQ(0u, robot.m_disabledInitCount);
|
||||
@@ -155,12 +158,12 @@ TEST_F(TimedRobotTest, AutonomousMode) {
|
||||
MockRobot robot;
|
||||
|
||||
std::thread robotThread{[&] { robot.StartCompetition(); }};
|
||||
wpi::sim::WaitForProgramStart();
|
||||
|
||||
wpi::sim::DriverStationSim::SetEnabled(true);
|
||||
wpi::sim::DriverStationSim::SetAutonomous(true);
|
||||
wpi::sim::DriverStationSim::SetTest(false);
|
||||
wpi::sim::DriverStationSim::NotifyNewData();
|
||||
wpi::sim::StepTiming(0_ms); // Wait for Notifiers
|
||||
|
||||
EXPECT_EQ(1u, robot.m_simulationInitCount);
|
||||
EXPECT_EQ(0u, robot.m_disabledInitCount);
|
||||
@@ -228,12 +231,12 @@ TEST_F(TimedRobotTest, TeleopMode) {
|
||||
MockRobot robot;
|
||||
|
||||
std::thread robotThread{[&] { robot.StartCompetition(); }};
|
||||
wpi::sim::WaitForProgramStart();
|
||||
|
||||
wpi::sim::DriverStationSim::SetEnabled(true);
|
||||
wpi::sim::DriverStationSim::SetAutonomous(false);
|
||||
wpi::sim::DriverStationSim::SetTest(false);
|
||||
wpi::sim::DriverStationSim::NotifyNewData();
|
||||
wpi::sim::StepTiming(0_ms); // Wait for Notifiers
|
||||
|
||||
EXPECT_EQ(1u, robot.m_simulationInitCount);
|
||||
EXPECT_EQ(0u, robot.m_disabledInitCount);
|
||||
@@ -300,12 +303,12 @@ TEST_F(TimedRobotTest, TeleopMode) {
|
||||
TEST_F(TimedRobotTest, TestMode) {
|
||||
MockRobot robot;
|
||||
std::thread robotThread{[&] { robot.StartCompetition(); }};
|
||||
wpi::sim::WaitForProgramStart();
|
||||
|
||||
wpi::sim::DriverStationSim::SetEnabled(true);
|
||||
wpi::sim::DriverStationSim::SetAutonomous(false);
|
||||
wpi::sim::DriverStationSim::SetTest(true);
|
||||
wpi::sim::DriverStationSim::NotifyNewData();
|
||||
wpi::sim::StepTiming(0_ms); // Wait for Notifiers
|
||||
|
||||
EXPECT_EQ(1u, robot.m_simulationInitCount);
|
||||
EXPECT_EQ(0u, robot.m_disabledInitCount);
|
||||
@@ -397,13 +400,13 @@ TEST_F(TimedRobotTest, ModeChange) {
|
||||
MockRobot robot;
|
||||
|
||||
std::thread robotThread{[&] { robot.StartCompetition(); }};
|
||||
wpi::sim::WaitForProgramStart();
|
||||
|
||||
// Start in disabled
|
||||
wpi::sim::DriverStationSim::SetEnabled(false);
|
||||
wpi::sim::DriverStationSim::SetAutonomous(false);
|
||||
wpi::sim::DriverStationSim::SetTest(false);
|
||||
wpi::sim::DriverStationSim::NotifyNewData();
|
||||
wpi::sim::StepTiming(0_ms); // Wait for Notifiers
|
||||
|
||||
EXPECT_EQ(0u, robot.m_disabledInitCount);
|
||||
EXPECT_EQ(0u, robot.m_autonomousInitCount);
|
||||
@@ -510,10 +513,10 @@ TEST_F(TimedRobotTest, AddPeriodic) {
|
||||
robot.AddPeriodic([&] { callbackCount++; }, kPeriod / 2.0);
|
||||
|
||||
std::thread robotThread{[&] { robot.StartCompetition(); }};
|
||||
wpi::sim::WaitForProgramStart();
|
||||
|
||||
wpi::sim::DriverStationSim::SetEnabled(false);
|
||||
wpi::sim::DriverStationSim::NotifyNewData();
|
||||
wpi::sim::StepTiming(0_ms); // Wait for Notifiers
|
||||
|
||||
EXPECT_EQ(0u, robot.m_disabledInitCount);
|
||||
EXPECT_EQ(0u, robot.m_disabledPeriodicCount);
|
||||
@@ -549,10 +552,10 @@ TEST_F(TimedRobotTest, AddPeriodicWithOffset) {
|
||||
// 2p | 1.25p
|
||||
|
||||
std::thread robotThread{[&] { robot.StartCompetition(); }};
|
||||
wpi::sim::WaitForProgramStart();
|
||||
|
||||
wpi::sim::DriverStationSim::SetEnabled(false);
|
||||
wpi::sim::DriverStationSim::NotifyNewData();
|
||||
wpi::sim::StepTiming(0_ms); // Wait for Notifiers
|
||||
|
||||
EXPECT_EQ(0u, robot.m_disabledInitCount);
|
||||
EXPECT_EQ(0u, robot.m_disabledPeriodicCount);
|
||||
|
||||
@@ -19,7 +19,10 @@ using namespace wpi;
|
||||
namespace {
|
||||
class TimesliceRobotTest : public ::testing::Test {
|
||||
protected:
|
||||
void SetUp() override { wpi::sim::PauseTiming(); }
|
||||
void SetUp() override {
|
||||
wpi::sim::PauseTiming();
|
||||
wpi::sim::SetProgramStarted(false);
|
||||
}
|
||||
|
||||
void TearDown() override { wpi::sim::ResumeTiming(); }
|
||||
};
|
||||
@@ -51,10 +54,10 @@ TEST_F(TimesliceRobotTest, Schedule) {
|
||||
robot.Schedule([&] { callbackCount2++; }, 1_ms);
|
||||
|
||||
std::thread robotThread{[&] { robot.StartCompetition(); }};
|
||||
wpi::sim::WaitForProgramStart();
|
||||
|
||||
wpi::sim::DriverStationSim::SetEnabled(false);
|
||||
wpi::sim::DriverStationSim::NotifyNewData();
|
||||
wpi::sim::StepTiming(0_ms); // 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
|
||||
|
||||
Reference in New Issue
Block a user