diff --git a/wpilibj/wpilibJava/src/main/java/edu/wpi/first/wpilibj/CANJaguar.java b/wpilibj/wpilibJava/src/main/java/edu/wpi/first/wpilibj/CANJaguar.java
index 257345b603..e623645b0c 100644
--- a/wpilibj/wpilibJava/src/main/java/edu/wpi/first/wpilibj/CANJaguar.java
+++ b/wpilibj/wpilibJava/src/main/java/edu/wpi/first/wpilibj/CANJaguar.java
@@ -245,15 +245,15 @@ public class CANJaguar implements MotorSafety, PIDOutput, SpeedController, LiveW
}
/**
- * set the output set-point value.
- *
- * The scale and the units depend on the mode the Jaguar is in.
- * In PercentVbus Mode, the outputValue is from -1.0 to 1.0 (same as PWM Jaguar).
- * In Voltage Mode, the outputValue is in Volts.
- * In Current Mode, the outputValue is in Amps.
- * In Speed Mode, the outputValue is in Rotations/Minute.
+ * Sets the output set-point value.
+ *
+ * The scale and the units depend on the mode the Jaguar is in.
+ * In PercentVbus Mode, the outputValue is from -1.0 to 1.0 (same as PWMJaguar).
+ * In Voltage Mode, the outputValue is in Volts.
+ * In Current Mode, the outputValue is in Amps. In Speed Mode, the outputValue is in
+ * Rotations/Minute.
* In Position Mode, the outputValue is in Rotations.
- *
+ *
* @param outputValue The set-point to sent to the motor controller.
* @param syncGroup The update group to add this set() to, pending UpdateSyncGroup(). If 0, update immediately.
*/
@@ -306,6 +306,19 @@ public class CANJaguar implements MotorSafety, PIDOutput, SpeedController, LiveW
verify();
}
+ /**
+ * Sets the output set-point value.
+ *
+ * The scale and the units depend on the mode the Jaguar is in.
+ * In PercentVbus Mode, the outputValue is from -1.0 to 1.0 (same as PWMJaguar).
+ * In Voltage Mode, the outputValue is in Volts.
+ * In Current Mode, the outputValue is in Amps. In Speed Mode, the outputValue is in
+ * Rotations/Minute.
+ * In Position Mode, the outputValue is in Rotations.
+ *
+ * @param value
+ * The set-point to sent to the motor controller.
+ */
public void set(double value) {
set(value, (byte)0);
}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/CANJaguarTest.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/CANJaguarTest.java
index 2c4df211d7..f62cb693a2 100644
--- a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/CANJaguarTest.java
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/CANJaguarTest.java
@@ -18,23 +18,21 @@ import org.junit.BeforeClass;
import org.junit.Ignore;
import org.junit.Test;
+import edu.wpi.first.wpilibj.can.ICANData;
+import edu.wpi.first.wpilibj.can.AbstractCANTest;
import edu.wpi.first.wpilibj.command.AbstractCommandTest;
import edu.wpi.first.wpilibj.fixtures.CANMotorEncoderFixture;
import edu.wpi.first.wpilibj.fixtures.MotorEncoderFixture;
+import edu.wpi.first.wpilibj.test.AbstractComsSetup;
import edu.wpi.first.wpilibj.test.TestBench;
/**
* @author jonathanleitschuh
*
*/
-public class CANJaguarTest extends AbstractCommandTest {
+public class CANJaguarTest extends AbstractComsSetup implements ICANData{
private static final Logger logger = Logger.getLogger(CANJaguarTest.class.getName());
private CANMotorEncoderFixture me;
- private static final double kPotentiometerSettlingTime = 0.05;
- private static final double kMotorTime = 0.5;
- private static final double kEncoderSettlingTime = 0.25;
- private static final double kEncoderPositionTolerance = 5.0/360.0; // +/-5 degrees
- private static final double kPotentiometerPositionTolerance = 10.0/360.0; // +/-10 degrees
@Override
protected Logger getClassLogger() {
@@ -110,49 +108,6 @@ public class CANJaguarTest extends AbstractCommandTest {
assertEquals(0, me.getMotor().getFaults());
}
- @Test
- public void testPercentForwards() {
- me.getMotor().setPercentMode(CANJaguar.kQuadEncoder, 360);
- me.getMotor().enableControl();
- me.getMotor().set(0.0f);
-
- /* The motor might still have momentum from the previous test. */
- Timer.delay(kEncoderSettlingTime);
-
- double initialPosition = me.getMotor().getPosition();
-
- /* Drive the speed controller briefly to move the encoder */
- me.getMotor().set(1.0f);
- Timer.delay(kMotorTime);
- me.getMotor().set(0.0f);
-
- /* The position should have increased */
- assertThat("CAN Jaguar position should have increased after the motor moved", me.getMotor().getPosition(), is(greaterThan(initialPosition)));
- }
-
- /**
- * Test if we can drive the motor backwards in percentage mode and get a
- * position back
- */
- @Test
- public void testPercentReverse() {
- me.getMotor().setPercentMode(CANJaguar.kQuadEncoder, 360);
- me.getMotor().enableControl();
- me.getMotor().set(0.0f);
-
- /* The motor might still have momentum from the previous test. */
- Timer.delay(kEncoderSettlingTime);
-
- double initialPosition = me.getMotor().getPosition();
-
- /* Drive the speed controller briefly to move the encoder */
- me.getMotor().set(-1.0f);
- Timer.delay(kMotorTime);
- me.getMotor().set(0.0f);
-
- /* The position should have decreased */
- assertThat( "CAN Jaguar position should have decreased after the motor moved", me.getMotor().getPosition(), is(lessThan(initialPosition)));
- }
/**
* Test if we can set a position and reach that position with PID control on
@@ -279,4 +234,5 @@ public class CANJaguarTest extends AbstractCommandTest {
/* The position should have increased */
assertThat("CAN Jaguar should have moved forwards while the reverse limit was on", me.getMotor().getPosition(), is(greaterThan(initialPosition)));
}
+
}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/AbstractCANTest.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/AbstractCANTest.java
new file mode 100644
index 0000000000..563027bdb7
--- /dev/null
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/AbstractCANTest.java
@@ -0,0 +1,78 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008-2014. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+package edu.wpi.first.wpilibj.can;
+
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.lessThan;
+import static org.junit.Assert.assertThat;
+
+import org.junit.After;
+
+import edu.wpi.first.wpilibj.Timer;
+import edu.wpi.first.wpilibj.fixtures.CANMotorEncoderFixture;
+import edu.wpi.first.wpilibj.test.AbstractComsSetup;
+
+/**
+ * @author jonathanleitschuh
+ *
+ */
+public abstract class AbstractCANTest extends AbstractComsSetup implements ICANData{
+ protected CANMotorEncoderFixture me;
+ /**
+ * Tests that CAN in a certain mode will rotate forwards. The implementation of this method is left up to the extending class because each will require difrent values.
+ * Should call {@link AbstractCANTest#testRotateForward(double, double)}
+ */
+ abstract public void testRotateForward();
+
+ /**
+ * Tests that CAN in a certain mode will rotate forwards. The implementation of this method is left up to the extending class because each will require difrent values.
+ * Should call {@link AbstractCANTest#testRotateReverse(double, double)}
+ */
+ abstract public void testRotateReverse();
+
+
+ @After
+ public final void tearDown() throws Exception {
+ me.teardown();
+ }
+
+ /**
+ * Tests that a CANMotorEncoderFixture can rotate forward.
+ * Called by extending TestClasses
+ * @param stoppedValue the value where the motor will not be spinning in the current mode
+ * @param runningValue the value where the motor will be spinning in the current mode
+ */
+ protected void testRotateForward(double stoppedValue, double runningValue){
+ double initialPosition = me.getMotor().getPosition();
+ /* Drive the speed controller briefly to move the encoder */
+ me.getMotor().set(runningValue);
+ Timer.delay(kMotorTime);
+ me.getMotor().set(stoppedValue);
+
+ /* The position should have increased */
+ assertThat("CAN Jaguar position should have increased after the motor moved", me.getMotor().getPosition(), is(greaterThan(initialPosition)));
+ }
+
+
+ /**
+ * Tests that a CANMotorEncoderFixture can rotate in reverse.
+ * Called by extending TestClasses
+ * @param stoppedValue the value where the motor will not be spinning in the current mode
+ * @param runningValue the value where the motor will be spinning in the current mode
+ */
+ protected void testRotateReverse(double stoppedValue, double runningValue){
+ double initialPosition = me.getMotor().getPosition();
+ /* Drive the speed controller briefly to move the encoder */
+ me.getMotor().set(runningValue);
+ Timer.delay(kMotorTime);
+ me.getMotor().set(stoppedValue);
+
+ /* The position should have decreased */
+ assertThat( "CAN Jaguar position should have decreased after the motor moved", me.getMotor().getPosition(), is(lessThan(initialPosition)));
+ }
+}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CANTestSuite.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CANTestSuite.java
new file mode 100644
index 0000000000..df7dec9f84
--- /dev/null
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CANTestSuite.java
@@ -0,0 +1,26 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008-2014. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+package edu.wpi.first.wpilibj.can;
+
+import org.junit.runner.RunWith;
+import org.junit.runners.Suite;
+import org.junit.runners.Suite.SuiteClasses;
+
+/**
+ * @author jonathanleitschuh
+ *
+ */
+@RunWith(Suite.class)
+@SuiteClasses({ CurrentQuadEncoderModeTest.class,
+ PercentQuadEncoderModeTest.class,
+ PositionQuadEncoderModeTest.class,
+ SpeedQuadEncoderModeTest.class,
+ VoltageQuadEncoderModeTest.class
+ })
+public class CANTestSuite {
+
+}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CurrentQuadEncoderModeTest.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CurrentQuadEncoderModeTest.java
new file mode 100644
index 0000000000..0f6113ca5b
--- /dev/null
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/CurrentQuadEncoderModeTest.java
@@ -0,0 +1,56 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008-2014. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+package edu.wpi.first.wpilibj.can;
+
+import static org.junit.Assert.*;
+
+import java.util.logging.Logger;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import edu.wpi.first.wpilibj.CANJaguar;
+import edu.wpi.first.wpilibj.Timer;
+import edu.wpi.first.wpilibj.test.TestBench;
+
+/**
+ * @author jonathanleitschuh
+ *
+ */
+public class CurrentQuadEncoderModeTest extends AbstractCANTest {
+ private static Logger logger = Logger.getLogger(CurrentQuadEncoderModeTest.class.getName());
+ @Override
+ protected Logger getClassLogger() {
+ return logger;
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ me = TestBench.getInstance().getCanJaguarPair();
+ me.setup();
+ me.getMotor().setCurrentMode(CANJaguar.kQuadEncoder, 360, 5.0, 0.1, 2.0);
+ me.getMotor().enableControl();
+ me.getMotor().set(0.0f);
+ /* The motor might still have momentum from the previous test. */
+ Timer.delay(kEncoderSettlingTime);
+ }
+
+
+ @Test
+ @Override
+ public void testRotateForward() {
+ testRotateForward(0, 1.5);
+ }
+
+ @Test
+ @Override
+ public void testRotateReverse() {
+ testRotateReverse(0, -1.5);
+ }
+
+}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/ICANData.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/ICANData.java
new file mode 100644
index 0000000000..a1e881469a
--- /dev/null
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/ICANData.java
@@ -0,0 +1,19 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008-2014. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+package edu.wpi.first.wpilibj.can;
+
+/**
+ * @author jonathanleitschuh
+ *
+ */
+public interface ICANData {
+ static final double kPotentiometerSettlingTime = 0.05;
+ static final double kMotorTime = 0.5;
+ static final double kEncoderSettlingTime = 0.25;
+ static final double kEncoderPositionTolerance = 5.0/360.0; // +/-5 degrees
+ static final double kPotentiometerPositionTolerance = 10.0/360.0; // +/-10 degrees
+}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/PercentQuadEncoderModeTest.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/PercentQuadEncoderModeTest.java
new file mode 100644
index 0000000000..ac7c57c42f
--- /dev/null
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/PercentQuadEncoderModeTest.java
@@ -0,0 +1,69 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008-2014. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+package edu.wpi.first.wpilibj.can;
+
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.lessThan;
+import static org.junit.Assert.*;
+
+import java.util.logging.Logger;
+
+import org.junit.After;
+import org.junit.AfterClass;
+import org.junit.Before;
+import org.junit.Test;
+
+import edu.wpi.first.wpilibj.CANJaguar;
+import edu.wpi.first.wpilibj.Timer;
+import edu.wpi.first.wpilibj.fixtures.CANMotorEncoderFixture;
+import edu.wpi.first.wpilibj.test.AbstractComsSetup;
+import edu.wpi.first.wpilibj.test.TestBench;
+import edu.wpi.first.wpilibj.test.TestBench.BaseCANMotorEncoderFixture;
+
+/**
+ * @author jonathanleitschuh
+ *
+ */
+public class PercentQuadEncoderModeTest extends AbstractCANTest implements ICANData{
+ private static final Logger logger = Logger.getLogger(PercentQuadEncoderModeTest.class.getName());
+
+ @Override
+ protected Logger getClassLogger() {
+ return logger;
+ }
+ @Before
+ public void setUp() {
+ me = TestBench.getInstance().getCanJaguarPair();
+ me.setup();
+ me.getMotor().setPercentMode(CANJaguar.kQuadEncoder, 360);
+ me.getMotor().enableControl();
+ me.getMotor().set(0.0f);
+ /* The motor might still have momentum from the previous test. */
+ Timer.delay(kEncoderSettlingTime);
+ }
+
+ /**
+ * Test if we can drive the motor forwards in percentage mode and get a
+ * position back
+ */
+ @Test
+ @Override
+ public void testRotateForward() {
+ testRotateForward(0, 1);
+ }
+
+ /**
+ * Test if we can drive the motor backwards in percentage mode and get a
+ * position back
+ */
+ @Test
+ @Override
+ public void testRotateReverse() {
+ testRotateReverse(0, -1);
+ }
+}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/PositionQuadEncoderModeTest.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/PositionQuadEncoderModeTest.java
new file mode 100644
index 0000000000..071d07107e
--- /dev/null
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/PositionQuadEncoderModeTest.java
@@ -0,0 +1,58 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008-2014. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+package edu.wpi.first.wpilibj.can;
+
+import static org.junit.Assert.*;
+
+import java.util.logging.Logger;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import edu.wpi.first.wpilibj.CANJaguar;
+import edu.wpi.first.wpilibj.Timer;
+import edu.wpi.first.wpilibj.test.TestBench;
+
+/**
+ * @author jonathanleitschuh
+ *
+ */
+public class PositionQuadEncoderModeTest extends AbstractCANTest {
+ private static final Logger logger = Logger.getLogger(PositionQuadEncoderModeTest.class.getName());
+ @Override
+ protected Logger getClassLogger() {
+ return logger;
+ }
+
+ /**
+ * @throws java.lang.Exception
+ */
+ @Before
+ public void setUp() throws Exception {
+ me = TestBench.getInstance().getCanJaguarPair();
+ me.setup();
+ me.getMotor().setPositionMode(CANJaguar.kQuadEncoder, 360, 5.0, 0.1, 2.0);
+ me.getMotor().enableControl();
+ /* The motor might still have momentum from the previous test. */
+ Timer.delay(kEncoderSettlingTime);
+ }
+
+ @Test
+ @Override
+ public void testRotateForward() {
+ double initial = me.getMotor().getPosition();
+ testRotateForward(initial, initial + 50);
+ }
+
+ @Test
+ @Override
+ public void testRotateReverse() {
+ double initial = me.getMotor().getPosition();
+ testRotateReverse(initial, initial - 50);
+ }
+}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/SpeedQuadEncoderModeTest.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/SpeedQuadEncoderModeTest.java
new file mode 100644
index 0000000000..f58fabc628
--- /dev/null
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/SpeedQuadEncoderModeTest.java
@@ -0,0 +1,70 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008-2014. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+package edu.wpi.first.wpilibj.can;
+
+import static org.hamcrest.Matchers.greaterThan;
+import static org.hamcrest.Matchers.is;
+import static org.hamcrest.Matchers.lessThan;
+import static org.junit.Assert.*;
+
+import java.util.logging.Logger;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import edu.wpi.first.wpilibj.CANJaguar;
+import edu.wpi.first.wpilibj.Timer;
+import edu.wpi.first.wpilibj.fixtures.CANMotorEncoderFixture;
+import edu.wpi.first.wpilibj.test.AbstractComsSetup;
+import edu.wpi.first.wpilibj.test.TestBench;
+
+/**
+ * @author jonathanleitschuh
+ *
+ */
+public class SpeedQuadEncoderModeTest extends AbstractCANTest implements ICANData {
+ private static final Logger logger = Logger.getLogger(PercentQuadEncoderModeTest.class.getName());
+
+ @Override
+ protected Logger getClassLogger() {
+ return logger;
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ me = TestBench.getInstance().getCanJaguarPair();
+ me.setup();
+ me.getMotor().setSpeedMode(CANJaguar.kQuadEncoder, 360, 5.0, 0.1, 2.0);
+ me.getMotor().enableControl();
+ me.getMotor().set(0.0f);
+ /* The motor might still have momentum from the previous test. */
+ Timer.delay(kEncoderSettlingTime);
+ }
+
+ /**
+ * Test if we can drive the motor forward in Speed mode and get a
+ * position back
+ */
+ @Test
+ public void testRotateForward() {
+ //Speed is rev/min
+ testRotateForward(0, 1000);
+ }
+
+ /**
+ * Test if we can drive the motor backwards in Speed mode and get a
+ * position back
+ */
+ @Test
+ public void testRotateReverse() {
+ //Speed is rev/min
+ testRotateReverse(0, -1000);
+ }
+
+
+}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/VoltageQuadEncoderModeTest.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/VoltageQuadEncoderModeTest.java
new file mode 100644
index 0000000000..998af3ed87
--- /dev/null
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/can/VoltageQuadEncoderModeTest.java
@@ -0,0 +1,60 @@
+/*----------------------------------------------------------------------------*/
+/* Copyright (c) FIRST 2008-2014. All Rights Reserved. */
+/* Open Source Software - may be modified and shared by FRC teams. The code */
+/* must be accompanied by the FIRST BSD license file in the root directory of */
+/* the project. */
+/*----------------------------------------------------------------------------*/
+package edu.wpi.first.wpilibj.can;
+
+import static org.junit.Assert.*;
+
+import java.util.logging.Logger;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+import edu.wpi.first.wpilibj.CANJaguar;
+import edu.wpi.first.wpilibj.Timer;
+import edu.wpi.first.wpilibj.fixtures.CANMotorEncoderFixture;
+import edu.wpi.first.wpilibj.test.AbstractComsSetup;
+import edu.wpi.first.wpilibj.test.TestBench;
+
+/**
+ * @author jonathanleitschuh
+ *
+ */
+public class VoltageQuadEncoderModeTest extends AbstractCANTest implements ICANData {
+ private static final Logger logger = Logger.getLogger(VoltageQuadEncoderModeTest.class.getName());
+
+ @Override
+ protected Logger getClassLogger() {
+ return logger;
+ }
+
+ @Before
+ public void setUp() throws Exception {
+ me = TestBench.getInstance().getCanJaguarPair();
+ me.setup();
+ me.getMotor().setPercentMode(CANJaguar.kQuadEncoder, 360);
+ me.getMotor().enableControl();
+ me.getMotor().set(0.0f);
+ /* The motor might still have momentum from the previous test. */
+ Timer.delay(kEncoderSettlingTime);
+ }
+
+ @Test
+ @Override
+ public void testRotateForward() {
+ testRotateForward(0, 14);
+ }
+
+ @Test
+ @Override
+ public void testRotateReverse() {
+ testRotateReverse(0, -14);
+ }
+
+
+
+}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/fixtures/MotorEncoderFixture.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/fixtures/MotorEncoderFixture.java
index 97a323bc8f..a3fb56de2a 100644
--- a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/fixtures/MotorEncoderFixture.java
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/fixtures/MotorEncoderFixture.java
@@ -34,9 +34,6 @@ public abstract class MotorEncoderFixture implements
/**
* Default constructor for a MotorEncoderFixture
- * @param motor The SpeedControler for this MotorEncoder pair
- * @param aSource One of the inputs for the encoder
- * @param bSource The other input for the encoder
*/
public MotorEncoderFixture(){
}
@@ -155,27 +152,47 @@ public abstract class MotorEncoderFixture implements
+ /**
+ * Safely tears down the MotorEncoder Fixture in a way that makes sure that even if an object fails
+ * to initialize the reset of the fixture can still be torn down and the resources deallocated
+ */
@Override
public boolean teardown() {
String type = getType();
if(!tornDown){
+ boolean wasNull = false;
initialize();
reset();
- if(motor instanceof PWM){
+ if(motor instanceof PWM && motor != null){
((PWM) motor).free();
motor = null;
- }
- encoder.free();
- counters[0].free();
- counters[0] = null;
- counters[1].free();
- counters[1] = null;
-
- aSource.free();
- aSource = null;
- bSource.free();
- bSource = null;
+ } else if(motor == null) wasNull = true;
+ if(encoder != null){
+ encoder.free();
+ encoder = null;
+ } else wasNull = true;
+ if(counters[0] != null){
+ counters[0].free();
+ counters[0] = null;
+ } else wasNull = true;
+ if(counters[1] != null){
+ counters[1].free();
+ counters[1] = null;
+ } else wasNull = true;
+ if(aSource != null){
+ aSource.free();
+ aSource = null;
+ } else wasNull = true;
+ if(bSource != null){
+ bSource.free();
+ bSource = null;
+ } else wasNull = true;
+
tornDown = true;
+
+ if(wasNull){
+ throw new NullPointerException("MotorEncoderFixture had null params at teardown");
+ }
} else {
throw new RuntimeException(type + " Motor Encoder torn down multiple times");
}
diff --git a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/test/TestSuite.java b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/test/TestSuite.java
index 896d177789..fd53851b29 100644
--- a/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/test/TestSuite.java
+++ b/wpilibj/wpilibJavaIntegrationTests/src/main/java/edu/wpi/first/wpilibj/test/TestSuite.java
@@ -29,6 +29,7 @@ import edu.wpi.first.wpilibj.SampleTest;
import edu.wpi.first.wpilibj.TiltPanCameraTest;
import edu.wpi.first.wpilibj.TimerTest;
import edu.wpi.first.wpilibj.WpiLibJTestSuite;
+import edu.wpi.first.wpilibj.can.CANTestSuite;
import edu.wpi.first.wpilibj.command.ButtonTest;
import edu.wpi.first.wpilibj.command.CommandParallelGroupTest;
import edu.wpi.first.wpilibj.command.CommandScheduleTest;
@@ -49,6 +50,7 @@ import edu.wpi.first.wpilibj.smartdashboard.SmartDashboardTestSuite;
@RunWith(Suite.class)
@SuiteClasses({
WpiLibJTestSuite.class,
+ CANTestSuite.class,
CommandTestSuite.class,
SmartDashboardTestSuite.class
})