[wpilib] Split DriverStation into smaller classes (#8628)

This commit is contained in:
Thad House
2026-04-18 19:56:45 -07:00
committed by GitHub
parent 58ad633ae2
commit ab2aef2c29
108 changed files with 4406 additions and 3211 deletions

View File

@@ -13,6 +13,7 @@ import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.Arguments;
import org.junit.jupiter.params.provider.MethodSource;
import org.wpilib.driverstation.internal.DriverStationBackend;
import org.wpilib.simulation.DriverStationSim;
class DriverStationTest {
@@ -25,31 +26,31 @@ class DriverStationTest {
DriverStationSim.notifyNewData();
assertEquals(expected, DriverStation.isJoystickConnected(1));
assertEquals(expected, DriverStationBackend.isJoystickConnected(1));
}
@Test
void getOpmodeIdReturnsZeroUntilUserProgramStarts() {
DriverStationSim.setOpMode(0x1234);
DriverStationSim.notifyNewData();
assertEquals(0, DriverStation.getOpModeId());
assertEquals(0, RobotState.getOpModeId());
DriverStation.observeUserProgramStarting();
DriverStationBackend.observeUserProgramStarting();
// need to manually mask because the upper eight bits include robot mode information
assertEquals(0x1234, DriverStation.getOpModeId() & 0xFFFF);
assertEquals(0x1234, RobotState.getOpModeId() & 0xFFFF);
}
@Test
void getOpmodeReturnsEmptyStringUntilUserProgramStarts() {
DriverStationSim.setOpMode(0x1234);
DriverStationSim.notifyNewData();
assertEquals("", DriverStation.getOpMode());
assertEquals("", RobotState.getOpMode());
DriverStation.observeUserProgramStarting();
DriverStationBackend.observeUserProgramStarting();
// in Sim, the opmode string is just the stringified version of the opmode i64 "<0000...0000>"
// we need to parse the string to get the
// need to manually mask because the upper eight bits include robot mode information
String opmodeName = DriverStation.getOpMode();
String opmodeName = RobotState.getOpMode();
assertEquals(
"0x1234",
String.format(
@@ -71,8 +72,8 @@ class DriverStationTest {
DriverStationSim.setFmsAttached(fms);
DriverStationSim.notifyNewData();
DriverStation.silenceJoystickConnectionWarning(silence);
assertEquals(expected, DriverStation.isJoystickConnectionWarningSilenced());
DriverStationBackend.silenceJoystickConnectionWarning(silence);
assertEquals(expected, DriverStationBackend.isJoystickConnectionWarningSilenced());
}
static Stream<Arguments> connectionWarningProvider() {
@@ -86,7 +87,7 @@ class DriverStationTest {
@AfterEach
@SuppressWarnings("PMD.AvoidAccessibilityAlteration")
void resetUserProgramFlag() throws ReflectiveOperationException {
var field = DriverStation.class.getDeclaredField("m_userProgramStarted");
var field = DriverStationBackend.class.getDeclaredField("m_userProgramStarted");
field.setAccessible(true);
field.set(null, false);
}

View File

@@ -14,7 +14,7 @@ import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.parallel.ResourceLock;
import org.wpilib.driverstation.DriverStation;
import org.wpilib.driverstation.internal.DriverStationBackend;
import org.wpilib.hardware.hal.RobotMode;
import org.wpilib.opmode.OpMode;
import org.wpilib.simulation.DriverStationSim;
@@ -99,14 +99,14 @@ class OpModeRobotTest {
@AfterEach
void tearDown() {
DriverStation.clearOpModes();
DriverStationBackend.clearOpModes();
SimHooks.resumeTiming();
}
@AfterEach
@SuppressWarnings("PMD.AvoidAccessibilityAlteration")
void resetUserProgramFlag() throws ReflectiveOperationException {
var field = DriverStation.class.getDeclaredField("m_userProgramStarted");
var field = DriverStationBackend.class.getDeclaredField("m_userProgramStarted");
field.setAccessible(true);
field.set(null, false);
}

View File

@@ -8,7 +8,7 @@ import static org.junit.jupiter.api.Assertions.assertAll;
import static org.junit.jupiter.api.Assertions.assertEquals;
import org.junit.jupiter.api.Test;
import org.wpilib.driverstation.DriverStation.MatchType;
import org.wpilib.driverstation.MatchType;
import org.wpilib.hardware.hal.DriverStationJNI;
import org.wpilib.hardware.hal.MatchInfoData;
import org.wpilib.hardware.hal.simulation.DriverStationDataJNI;

View File

@@ -11,7 +11,11 @@ import static org.junit.jupiter.api.Assertions.assertTrue;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.params.ParameterizedTest;
import org.junit.jupiter.params.provider.EnumSource;
import org.wpilib.driverstation.DriverStation;
import org.wpilib.driverstation.Alliance;
import org.wpilib.driverstation.MatchState;
import org.wpilib.driverstation.MatchType;
import org.wpilib.driverstation.RobotState;
import org.wpilib.driverstation.internal.DriverStationBackend;
import org.wpilib.hardware.hal.AllianceStationID;
import org.wpilib.hardware.hal.HAL;
import org.wpilib.hardware.hal.RobotMode;
@@ -25,13 +29,13 @@ class DriverStationSimTest {
HAL.initialize(500, 0);
DriverStationSim.resetData();
assertFalse(DriverStation.isEnabled());
assertFalse(RobotState.isEnabled());
BooleanCallback callback = new BooleanCallback();
try (CallbackStore cb = DriverStationSim.registerEnabledCallback(callback, false)) {
DriverStationSim.setEnabled(true);
DriverStationSim.notifyNewData();
assertTrue(DriverStationSim.getEnabled());
assertTrue(DriverStation.isEnabled());
assertTrue(RobotState.isEnabled());
assertTrue(callback.wasTriggered());
assertTrue(callback.getSetValue());
}
@@ -42,14 +46,14 @@ class DriverStationSimTest {
HAL.initialize(500, 0);
DriverStationSim.resetData();
assertFalse(DriverStation.isAutonomous());
assertFalse(RobotState.isAutonomous());
EnumCallback callback = new EnumCallback();
try (CallbackStore cb = DriverStationSim.registerRobotModeCallback(callback, false)) {
DriverStationSim.setRobotMode(RobotMode.AUTONOMOUS);
DriverStationSim.notifyNewData();
assertEquals(RobotMode.AUTONOMOUS, DriverStationSim.getRobotMode());
assertTrue(DriverStation.isAutonomous());
assertEquals(RobotMode.AUTONOMOUS, DriverStation.getRobotMode());
assertTrue(RobotState.isAutonomous());
assertEquals(RobotMode.AUTONOMOUS, RobotState.getRobotMode());
assertTrue(callback.wasTriggered());
assertEquals(RobotMode.AUTONOMOUS.getValue(), callback.getSetValue());
}
@@ -60,14 +64,14 @@ class DriverStationSimTest {
HAL.initialize(500, 0);
DriverStationSim.resetData();
assertFalse(DriverStation.isTest());
assertFalse(RobotState.isTest());
EnumCallback callback = new EnumCallback();
try (CallbackStore cb = DriverStationSim.registerRobotModeCallback(callback, false)) {
DriverStationSim.setRobotMode(RobotMode.TEST);
DriverStationSim.notifyNewData();
assertEquals(RobotMode.TEST, DriverStationSim.getRobotMode());
assertTrue(DriverStation.isTest());
assertEquals(RobotMode.TEST, DriverStation.getRobotMode());
assertTrue(RobotState.isTest());
assertEquals(RobotMode.TEST, RobotState.getRobotMode());
assertTrue(callback.wasTriggered());
assertEquals(RobotMode.TEST.getValue(), callback.getSetValue());
}
@@ -78,13 +82,13 @@ class DriverStationSimTest {
HAL.initialize(500, 0);
DriverStationSim.resetData();
assertFalse(DriverStation.isEStopped());
assertFalse(RobotState.isEStopped());
BooleanCallback callback = new BooleanCallback();
try (CallbackStore cb = DriverStationSim.registerEStopCallback(callback, false)) {
DriverStationSim.setEStop(true);
DriverStationSim.notifyNewData();
assertTrue(DriverStationSim.getEStop());
assertTrue(DriverStation.isEStopped());
assertTrue(RobotState.isEStopped());
assertTrue(callback.wasTriggered());
assertTrue(callback.getSetValue());
}
@@ -95,13 +99,13 @@ class DriverStationSimTest {
HAL.initialize(500, 0);
DriverStationSim.resetData();
assertFalse(DriverStation.isFMSAttached());
assertFalse(RobotState.isFMSAttached());
BooleanCallback callback = new BooleanCallback();
try (CallbackStore cb = DriverStationSim.registerFmsAttachedCallback(callback, false)) {
DriverStationSim.setFmsAttached(true);
DriverStationSim.notifyNewData();
assertTrue(DriverStationSim.getFmsAttached());
assertTrue(DriverStation.isFMSAttached());
assertTrue(RobotState.isFMSAttached());
assertTrue(callback.wasTriggered());
assertTrue(callback.getSetValue());
}
@@ -111,20 +115,20 @@ class DriverStationSimTest {
void testDsAttached() {
HAL.initialize(500, 0);
DriverStationSim.resetData();
DriverStation.refreshData();
DriverStationBackend.refreshData();
assertFalse(DriverStationSim.getDsAttached());
assertFalse(DriverStation.isDSAttached());
assertFalse(RobotState.isDSAttached());
DriverStationSim.notifyNewData();
assertTrue(DriverStationSim.getDsAttached());
assertTrue(DriverStation.isDSAttached());
assertTrue(RobotState.isDSAttached());
BooleanCallback callback = new BooleanCallback();
try (CallbackStore cb = DriverStationSim.registerDsAttachedCallback(callback, false)) {
DriverStationSim.setDsAttached(false);
DriverStation.refreshData();
DriverStationBackend.refreshData();
assertFalse(DriverStationSim.getDsAttached());
assertFalse(DriverStation.isDSAttached());
assertFalse(RobotState.isDSAttached());
assertTrue(callback.wasTriggered());
assertFalse(callback.getSetValue());
}
@@ -146,8 +150,8 @@ class DriverStationSimTest {
DriverStationSim.setAllianceStationId(allianceStation);
DriverStationSim.notifyNewData();
assertEquals(allianceStation, DriverStationSim.getAllianceStationId());
assertFalse(DriverStation.getAlliance().isPresent());
assertFalse(DriverStation.getLocation().isPresent());
assertFalse(MatchState.getAlliance().isPresent());
assertFalse(MatchState.getLocation().isPresent());
assertTrue(callback.wasTriggered());
assertEquals(allianceStation.ordinal(), callback.getSetValue());
@@ -156,8 +160,8 @@ class DriverStationSimTest {
DriverStationSim.setAllianceStationId(allianceStation);
DriverStationSim.notifyNewData();
assertEquals(allianceStation, DriverStationSim.getAllianceStationId());
assertEquals(DriverStation.Alliance.BLUE, DriverStation.getAlliance().get());
assertEquals(1, DriverStation.getLocation().getAsInt());
assertEquals(Alliance.BLUE, MatchState.getAlliance().get());
assertEquals(1, MatchState.getLocation().getAsInt());
assertTrue(callback.wasTriggered());
assertEquals(allianceStation.ordinal(), callback.getSetValue());
@@ -166,8 +170,8 @@ class DriverStationSimTest {
DriverStationSim.setAllianceStationId(allianceStation);
DriverStationSim.notifyNewData();
assertEquals(allianceStation, DriverStationSim.getAllianceStationId());
assertEquals(DriverStation.Alliance.BLUE, DriverStation.getAlliance().get());
assertEquals(2, DriverStation.getLocation().getAsInt());
assertEquals(Alliance.BLUE, MatchState.getAlliance().get());
assertEquals(2, MatchState.getLocation().getAsInt());
assertTrue(callback.wasTriggered());
assertEquals(allianceStation.ordinal(), callback.getSetValue());
@@ -176,8 +180,8 @@ class DriverStationSimTest {
DriverStationSim.setAllianceStationId(allianceStation);
DriverStationSim.notifyNewData();
assertEquals(allianceStation, DriverStationSim.getAllianceStationId());
assertEquals(DriverStation.Alliance.BLUE, DriverStation.getAlliance().get());
assertEquals(3, DriverStation.getLocation().getAsInt());
assertEquals(Alliance.BLUE, MatchState.getAlliance().get());
assertEquals(3, MatchState.getLocation().getAsInt());
assertTrue(callback.wasTriggered());
assertEquals(allianceStation.ordinal(), callback.getSetValue());
@@ -186,8 +190,8 @@ class DriverStationSimTest {
DriverStationSim.setAllianceStationId(allianceStation);
DriverStationSim.notifyNewData();
assertEquals(allianceStation, DriverStationSim.getAllianceStationId());
assertEquals(DriverStation.Alliance.RED, DriverStation.getAlliance().get());
assertEquals(1, DriverStation.getLocation().getAsInt());
assertEquals(Alliance.RED, MatchState.getAlliance().get());
assertEquals(1, MatchState.getLocation().getAsInt());
assertTrue(callback.wasTriggered());
assertEquals(allianceStation.ordinal(), callback.getSetValue());
@@ -196,8 +200,8 @@ class DriverStationSimTest {
DriverStationSim.setAllianceStationId(allianceStation);
DriverStationSim.notifyNewData();
assertEquals(allianceStation, DriverStationSim.getAllianceStationId());
assertEquals(DriverStation.Alliance.RED, DriverStation.getAlliance().get());
assertEquals(2, DriverStation.getLocation().getAsInt());
assertEquals(Alliance.RED, MatchState.getAlliance().get());
assertEquals(2, MatchState.getLocation().getAsInt());
assertTrue(callback.wasTriggered());
assertEquals(allianceStation.ordinal(), callback.getSetValue());
@@ -206,22 +210,22 @@ class DriverStationSimTest {
DriverStationSim.setAllianceStationId(allianceStation);
DriverStationSim.notifyNewData();
assertEquals(allianceStation, DriverStationSim.getAllianceStationId());
assertEquals(DriverStation.Alliance.RED, DriverStation.getAlliance().get());
assertEquals(3, DriverStation.getLocation().getAsInt());
assertEquals(Alliance.RED, MatchState.getAlliance().get());
assertEquals(3, MatchState.getLocation().getAsInt());
assertTrue(callback.wasTriggered());
assertEquals(allianceStation.ordinal(), callback.getSetValue());
}
}
@ParameterizedTest
@EnumSource(DriverStation.MatchType.class)
void testMatchType(DriverStation.MatchType matchType) {
@EnumSource(MatchType.class)
void testMatchType(MatchType matchType) {
HAL.initialize(500, 0);
DriverStationSim.resetData();
DriverStationSim.setMatchType(matchType);
DriverStationSim.notifyNewData();
assertEquals(matchType, DriverStation.getMatchType());
assertEquals(matchType, MatchState.getMatchType());
}
@Test
@@ -231,7 +235,7 @@ class DriverStationSimTest {
DriverStationSim.setReplayNumber(4);
DriverStationSim.notifyNewData();
assertEquals(4, DriverStation.getReplayNumber());
assertEquals(4, MatchState.getReplayNumber());
}
@Test
@@ -241,7 +245,7 @@ class DriverStationSimTest {
DriverStationSim.setMatchNumber(3);
DriverStationSim.notifyNewData();
assertEquals(3, DriverStation.getMatchNumber());
assertEquals(3, MatchState.getMatchNumber());
}
@Test
@@ -254,8 +258,8 @@ class DriverStationSimTest {
final double testTime = 19.174;
DriverStationSim.setMatchTime(testTime);
DriverStationSim.notifyNewData();
assertEquals(testTime, DriverStationSim.getMatchTime());
assertEquals(testTime, DriverStation.getMatchTime());
assertEquals(testTime, MatchState.getMatchTime());
assertEquals(testTime, MatchState.getMatchTime());
assertTrue(callback.wasTriggered());
assertEquals(testTime, callback.getSetValue());
}
@@ -269,7 +273,7 @@ class DriverStationSimTest {
final String message = "Hello";
DriverStationSim.setGameData(message);
DriverStationSim.notifyNewData();
var gameData = DriverStation.getGameData();
var gameData = MatchState.getGameData();
assertTrue(gameData.isPresent());
assertEquals(message, gameData.get());
}
@@ -281,7 +285,7 @@ class DriverStationSimTest {
DriverStationSim.setGameData("");
DriverStationSim.notifyNewData();
assertTrue(DriverStation.getGameData().isEmpty());
assertTrue(MatchState.getGameData().isEmpty());
}
@Test
@@ -291,7 +295,7 @@ class DriverStationSimTest {
DriverStationSim.setGameData(null);
DriverStationSim.notifyNewData();
assertTrue(DriverStation.getGameData().isEmpty());
assertTrue(MatchState.getGameData().isEmpty());
}
@Test
@@ -302,6 +306,6 @@ class DriverStationSimTest {
final String message = "The Best Event";
DriverStationSim.setEventName(message);
DriverStationSim.notifyNewData();
assertEquals(message, DriverStation.getEventName());
assertEquals(message, MatchState.getEventName());
}
}