Skip to content

Commit 57b2e5d

Browse files
committed
Fix to close mocked encoders associated with mocked Spark when the Spark is closed.
1 parent 400693b commit 57b2e5d

2 files changed

Lines changed: 33 additions & 2 deletions

File tree

src/main/java/org/carlmontrobotics/lib199/sim/MockSparkBase.java

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,10 @@ public class MockSparkBase extends MockedMotorBase {
3434
private final SparkPIDController pidController;
3535
private final MockedSparkMaxPIDController pidControllerImpl;
3636
private SparkAbsoluteEncoder absoluteEncoder = null;
37+
private MockedEncoder absoluteEncoderImpl = null;
3738
private MockedEncoder alternateEncoder = null;
3839
private SparkAnalogSensor analogSensor = null;
40+
private MockedEncoder analogSensorImpl = null;
3941
private final String name;
4042

4143
/**
@@ -183,6 +185,18 @@ public double getBusVoltage() {
183185
@Override
184186
public void close() {
185187
controllers.remove(port);
188+
if (encoder != null) {
189+
encoder.close();
190+
}
191+
if (absoluteEncoderImpl != null) {
192+
absoluteEncoderImpl.close();
193+
}
194+
if (analogSensorImpl != null) {
195+
analogSensorImpl.close();
196+
}
197+
if (alternateEncoder != null) {
198+
alternateEncoder.close();
199+
}
186200
super.close();
187201
}
188202

@@ -196,7 +210,7 @@ public void close() {
196210
*/
197211
public synchronized SparkAbsoluteEncoder getAbsoluteEncoder(SparkAbsoluteEncoder.Type encoderType) {
198212
if(absoluteEncoder == null) {
199-
MockedEncoder absoluteEncoderImpl = new MockedEncoder(
213+
absoluteEncoderImpl = new MockedEncoder(
200214
SimDevice.create("CANDutyCycle:" + name, port), 0, false,
201215
true, true);
202216
absoluteEncoder = Mocks.createMock(SparkAbsoluteEncoder.class, absoluteEncoderImpl, new REVLibErrorAnswer());
@@ -243,7 +257,8 @@ public synchronized RelativeEncoder getAlternateEncoder(SparkMaxAlternateEncoder
243257
*/
244258
public synchronized SparkAnalogSensor getAnalog(SparkAnalogSensor.Mode mode) {
245259
if(analogSensor == null) {
246-
MockedEncoder analogSensorImpl = new MockedEncoder(SimDevice.create("CANAIn:" + name, port), 0, true, true);
260+
analogSensorImpl = new MockedEncoder(
261+
SimDevice.create("CANAIn:" + name, port), 0, true, true);
247262
analogSensor = Mocks.createMock(SparkAnalogSensor.class, analogSensorImpl, new REVLibErrorAnswer());
248263
}
249264
return analogSensor;

src/test/java/org/carlmontrobotics/lib199/sim/MockSparkMaxTest.java

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,22 @@ public void testHasEncoder() {
3030
assertNotNull(simPosition);
3131
}
3232

33+
@Test
34+
public void testCanRecreateIfClosed() {
35+
for (int i = 0; i < 2; i++) {
36+
try (var mockSpark = new MockSparkMax(0, MotorType.kBrushless)) {
37+
SimDeviceSim simSpark =
38+
new SimDeviceSim("CANMotor:CANSparkMax", 0);
39+
assertNotNull(simSpark);
40+
SimDeviceSim simEncoder =
41+
new SimDeviceSim("CANEncoder:CANSparkMax", 0);
42+
assertNotNull(simEncoder);
43+
SimDouble simPosition = simEncoder.getDouble("position");
44+
assertNotNull(simPosition);
45+
}
46+
}
47+
}
48+
3349
@Test
3450
public void testGetOutputCurrent() {
3551
var mockSpark = new MockSparkMax(0, MotorType.kBrushless);

0 commit comments

Comments
 (0)