From 6d0140db3bedfb7ff4d0e962ce532bc88852e4d0 Mon Sep 17 00:00:00 2001 From: Dean Brettle Date: Tue, 16 Apr 2024 14:19:58 -0700 Subject: [PATCH 1/2] Make safeMode tests pass even when run alone. Ensures the HAL is initialized before running the safeMode tests because if it isn't SmartDashboard doesn't work properly and the tests fail. This is not normally seen when running all tests because other tests were initializing the HAL. Also rename some classes for clarity. --- .../lib199/MotorControllerFactoryTest.java | 6 +++--- .../lib199/safeMode/SafeModeCommandsTest.java | 5 +++++ .../carlmontrobotics/lib199/safeMode/SafeModeTest.java | 4 ++++ .../lib199/sim/MockPheonixControllerTest.java | 6 +++--- .../lib199/sim/MockedSparkEncoderTest.java | 6 +++--- .../testUtils/{SimDeviceTestRule.java => TestRules.java} | 8 ++++---- 6 files changed, 22 insertions(+), 13 deletions(-) rename src/test/java/org/carlmontrobotics/lib199/testUtils/{SimDeviceTestRule.java => TestRules.java} (83%) diff --git a/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java b/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java index d0791dbf..c887d01a 100644 --- a/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/MotorControllerFactoryTest.java @@ -3,7 +3,7 @@ import static org.junit.Assert.assertEquals; import org.carlmontrobotics.lib199.testUtils.ErrStreamTest; -import org.carlmontrobotics.lib199.testUtils.SimDeviceTestRule; +import org.carlmontrobotics.lib199.testUtils.TestRules; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; @@ -11,9 +11,9 @@ public class MotorControllerFactoryTest extends ErrStreamTest { @ClassRule - public static SimDeviceTestRule.Class simClassRule = new SimDeviceTestRule.Class(); + public static TestRules.InitializeHAL simClassRule = new TestRules.InitializeHAL(); @Rule - public SimDeviceTestRule.Test simTestRule = new SimDeviceTestRule.Test(); + public TestRules.ResetSimDeviceSimData simTestRule = new TestRules.ResetSimDeviceSimData(); @Test // AutoClosable.close() throws Exception diff --git a/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeModeCommandsTest.java b/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeModeCommandsTest.java index 49a33b0f..57cc2f5f 100644 --- a/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeModeCommandsTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeModeCommandsTest.java @@ -4,6 +4,8 @@ import java.util.function.Function; +import org.carlmontrobotics.lib199.testUtils.TestRules; +import org.junit.ClassRule; import org.junit.Test; import edu.wpi.first.wpilibj2.command.Command; @@ -11,6 +13,9 @@ public class SafeModeCommandsTest { + @ClassRule + public static TestRules.InitializeHAL classRule = new TestRules.InitializeHAL(); + @Test public void testSafeCommand() { testCommand(SafeCommand::new, true, false); diff --git a/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeModeTest.java b/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeModeTest.java index 4e993564..bbd596d2 100644 --- a/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeModeTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeModeTest.java @@ -9,6 +9,8 @@ import java.util.function.LongSupplier; import java.util.function.Supplier; +import org.carlmontrobotics.lib199.testUtils.TestRules; +import org.junit.ClassRule; import org.junit.Test; import edu.wpi.first.wpilibj.smartdashboard.SmartDashboard; @@ -16,6 +18,8 @@ public class SafeModeTest { + @ClassRule + public static TestRules.InitializeHAL classRule = new TestRules.InitializeHAL(); // Test SafeMode.java using JUnit @Test diff --git a/src/test/java/org/carlmontrobotics/lib199/sim/MockPheonixControllerTest.java b/src/test/java/org/carlmontrobotics/lib199/sim/MockPheonixControllerTest.java index 717580b2..45873652 100644 --- a/src/test/java/org/carlmontrobotics/lib199/sim/MockPheonixControllerTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/sim/MockPheonixControllerTest.java @@ -8,7 +8,7 @@ import org.carlmontrobotics.lib199.Mocks; import org.carlmontrobotics.lib199.testUtils.SafelyClosable; -import org.carlmontrobotics.lib199.testUtils.SimDeviceTestRule; +import org.carlmontrobotics.lib199.testUtils.TestRules; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; @@ -20,9 +20,9 @@ public abstract class MockPheonixControllerTest { @ClassRule - public static SimDeviceTestRule.Class simClassRule = new SimDeviceTestRule.Class(); + public static TestRules.InitializeHAL simClassRule = new TestRules.InitializeHAL(); @Rule - public SimDeviceTestRule.Test simTestRule = new SimDeviceTestRule.Test(); + public TestRules.ResetSimDeviceSimData simTestRule = new TestRules.ResetSimDeviceSimData(); protected abstract BaseMotorController createController(int portPWM); diff --git a/src/test/java/org/carlmontrobotics/lib199/sim/MockedSparkEncoderTest.java b/src/test/java/org/carlmontrobotics/lib199/sim/MockedSparkEncoderTest.java index dff7b958..95595f96 100644 --- a/src/test/java/org/carlmontrobotics/lib199/sim/MockedSparkEncoderTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/sim/MockedSparkEncoderTest.java @@ -13,7 +13,7 @@ import org.carlmontrobotics.lib199.Mocks; import org.carlmontrobotics.lib199.REVLibErrorAnswer; import org.carlmontrobotics.lib199.testUtils.SafelyClosable; -import org.carlmontrobotics.lib199.testUtils.SimDeviceTestRule; +import org.carlmontrobotics.lib199.testUtils.TestRules; import org.junit.ClassRule; import org.junit.Rule; import org.junit.Test; @@ -24,9 +24,9 @@ public class MockedSparkEncoderTest { @ClassRule - public static SimDeviceTestRule.Class simClassRule = new SimDeviceTestRule.Class(); + public static TestRules.InitializeHAL simClassRule = new TestRules.InitializeHAL(); @Rule - public SimDeviceTestRule.Test simTestRule = new SimDeviceTestRule.Test(); + public TestRules.ResetSimDeviceSimData simTestRule = new TestRules.ResetSimDeviceSimData(); @Test public void testDeviceCreation() { diff --git a/src/test/java/org/carlmontrobotics/lib199/testUtils/SimDeviceTestRule.java b/src/test/java/org/carlmontrobotics/lib199/testUtils/TestRules.java similarity index 83% rename from src/test/java/org/carlmontrobotics/lib199/testUtils/SimDeviceTestRule.java rename to src/test/java/org/carlmontrobotics/lib199/testUtils/TestRules.java index 0a3fdc23..cf0e991b 100644 --- a/src/test/java/org/carlmontrobotics/lib199/testUtils/SimDeviceTestRule.java +++ b/src/test/java/org/carlmontrobotics/lib199/testUtils/TestRules.java @@ -7,15 +7,15 @@ import edu.wpi.first.hal.HAL; import edu.wpi.first.wpilibj.simulation.SimDeviceSim; -public class SimDeviceTestRule { +public class TestRules { - public static class Class implements TestRule { + public static class InitializeHAL implements TestRule { @Override public Statement apply(Statement base, Description description) { return new Statement(){ @Override public void evaluate() throws Throwable { - // HAL must be initialized or SimDeviceSim.resetData() will crash + // HAL must be initialized or SimDeviceSim.resetData() will crash and SmartDashboard might not work. HAL.initialize(500, 0); base.evaluate(); HAL.shutdown(); @@ -24,7 +24,7 @@ public void evaluate() throws Throwable { } } - public static class Test implements TestRule { + public static class ResetSimDeviceSimData implements TestRule { @Override public Statement apply(Statement base, Description description) { return new Statement(){ From b565744bbbd487ec26505f06801c10258af26137 Mon Sep 17 00:00:00 2001 From: CoolSpy3 Date: Tue, 16 Apr 2024 14:45:37 -0700 Subject: [PATCH 2/2] fix SafeJoystickTest --- .../carlmontrobotics/lib199/safeMode/SafeJoystick.java | 2 +- .../lib199/safeMode/SafeJoystickTest.java | 10 +++++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/carlmontrobotics/lib199/safeMode/SafeJoystick.java b/src/main/java/org/carlmontrobotics/lib199/safeMode/SafeJoystick.java index de1f1fc6..036eb08f 100644 --- a/src/main/java/org/carlmontrobotics/lib199/safeMode/SafeJoystick.java +++ b/src/main/java/org/carlmontrobotics/lib199/safeMode/SafeJoystick.java @@ -108,7 +108,7 @@ public double getRawAxis(int axis) { * @param pov The POV to read * @return The value of the POV */ - public double getPOV(int pov) { + public int getPOV(int pov) { if (SafeMode.isEnabled() && safeDisabledPOV.containsKey(pov) && safeDisabledPOV.get(pov).contains(unsafeJoystick.getPOV(pov))) { return -1; } else { diff --git a/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeJoystickTest.java b/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeJoystickTest.java index 7483c553..68509dc8 100644 --- a/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeJoystickTest.java +++ b/src/test/java/org/carlmontrobotics/lib199/safeMode/SafeJoystickTest.java @@ -2,10 +2,18 @@ import static org.junit.Assert.*; +import org.carlmontrobotics.lib199.testUtils.TestRules; +import org.junit.ClassRule; +import org.junit.Test; + import edu.wpi.first.wpilibj.GenericHID; public class SafeJoystickTest { + @ClassRule + public static TestRules.InitializeHAL classRule = new TestRules.InitializeHAL(); + + @Test public void testSafeJoystick() { GenericHID normalJoystick = createDummyJoystick(0); GenericHID unsafeJoystick1 = createDummyJoystick(1); @@ -85,7 +93,7 @@ public void testSafeJoystick() { assertTrue(safeJoystick1.getRawButton(1)); assertTrue(safeJoystick1.getRawButtonPressed(1)); assertTrue(safeJoystick1.getRawButtonReleased(1)); - assertEquals(0.5, safeJoystick1.getRawAxis(0), 0.01); + assertEquals(0.0, safeJoystick1.getRawAxis(0), 0.01); assertEquals(0.5, safeJoystick1.getRawAxis(1), 0.01); assertEquals(1.0, safeJoystick1.getRawAxis(2), 0.01); assertEquals(-1, safeJoystick1.getPOV(0));