From 8958b2a4da2770f9f4a951a41bb92083339d0dab Mon Sep 17 00:00:00 2001
From: Starlight220 <53231611+Starlight220@users.noreply.github.com>
Date: Mon, 28 Nov 2022 02:23:56 +0200
Subject: [PATCH] [commands] Add property tests for command compositions
(#4715)
---
styleguide/spotbugs-exclude.xml | 4 +
.../command/ParallelCommandGroup.java | 9 +
.../command/ParallelDeadlineGroup.java | 9 +
.../wpilibj2/command/ParallelRaceGroup.java | 9 +
.../first/wpilibj2/command/SelectCommand.java | 25 ++-
.../command/SequentialCommandGroup.java | 9 +
.../cpp/frc2/command/ParallelCommandGroup.cpp | 9 +
.../frc2/command/ParallelDeadlineGroup.cpp | 9 +
.../cpp/frc2/command/ParallelRaceGroup.cpp | 9 +
.../frc2/command/SequentialCommandGroup.cpp | 9 +
.../frc2/command/ParallelCommandGroup.h | 4 +
.../frc2/command/ParallelDeadlineGroup.h | 4 +
.../include/frc2/command/ParallelRaceGroup.h | 4 +
.../include/frc2/command/SelectCommand.h | 14 ++
.../frc2/command/SequentialCommandGroup.h | 4 +
.../wpilibj2/command/CommandTestBase.java | 2 +
.../command/MultiCompositionTestBase.java | 115 ++++++++++
.../command/ParallelCommandGroupTest.java | 8 +-
.../command/ParallelDeadlineGroupTest.java | 9 +-
.../command/ParallelRaceGroupTest.java | 8 +-
.../wpilibj2/command/RepeatCommandTest.java | 22 +-
.../wpilibj2/command/SelectCommandTest.java | 12 +-
.../command/SequentialCommandGroupTest.java | 8 +-
.../command/SingleCompositionTestBase.java | 32 +++
.../cpp/frc2/command/CompositionTestBase.h | 204 ++++++++++++++++++
.../frc2/command/ParallelCommandGroupTest.cpp | 4 +
.../command/ParallelDeadlineGroupTest.cpp | 21 ++
.../frc2/command/ParallelRaceGroupTest.cpp | 4 +
.../cpp/frc2/command/RepeatCommandTest.cpp | 32 +--
.../cpp/frc2/command/SelectCommandTest.cpp | 22 ++
.../command/SequentialCommandGroupTest.cpp | 4 +
31 files changed, 579 insertions(+), 59 deletions(-)
create mode 100644 wpilibNewCommands/src/test/java/edu/wpi/first/wpilibj2/command/MultiCompositionTestBase.java
create mode 100644 wpilibNewCommands/src/test/java/edu/wpi/first/wpilibj2/command/SingleCompositionTestBase.java
create mode 100644 wpilibNewCommands/src/test/native/cpp/frc2/command/CompositionTestBase.h
diff --git a/styleguide/spotbugs-exclude.xml b/styleguide/spotbugs-exclude.xml
index 0c0156d346..58d82d1e74 100644
--- a/styleguide/spotbugs-exclude.xml
+++ b/styleguide/spotbugs-exclude.xml
@@ -64,6 +64,10 @@
+
+
+
+
diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelCommandGroup.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelCommandGroup.java
index fa6ab8db92..40a85a714c 100644
--- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelCommandGroup.java
+++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelCommandGroup.java
@@ -19,6 +19,7 @@ public class ParallelCommandGroup extends CommandGroupBase {
// maps commands in this group to whether they are still running
private final Map m_commands = new HashMap<>();
private boolean m_runWhenDisabled = true;
+ private InterruptionBehavior m_interruptBehavior = InterruptionBehavior.kCancelIncoming;
/**
* Creates a new ParallelCommandGroup. The given commands will be executed simultaneously. The
@@ -50,6 +51,9 @@ public class ParallelCommandGroup extends CommandGroupBase {
m_commands.put(command, false);
m_requirements.addAll(command.getRequirements());
m_runWhenDisabled &= command.runsWhenDisabled();
+ if (command.getInterruptionBehavior() == InterruptionBehavior.kCancelSelf) {
+ m_interruptBehavior = InterruptionBehavior.kCancelSelf;
+ }
}
}
@@ -95,4 +99,9 @@ public class ParallelCommandGroup extends CommandGroupBase {
public boolean runsWhenDisabled() {
return m_runWhenDisabled;
}
+
+ @Override
+ public InterruptionBehavior getInterruptionBehavior() {
+ return m_interruptBehavior;
+ }
}
diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelDeadlineGroup.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelDeadlineGroup.java
index f0e192958e..e3ac8fd85f 100644
--- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelDeadlineGroup.java
+++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelDeadlineGroup.java
@@ -22,6 +22,7 @@ public class ParallelDeadlineGroup extends CommandGroupBase {
private boolean m_runWhenDisabled = true;
private boolean m_finished = true;
private Command m_deadline;
+ private InterruptionBehavior m_interruptBehavior = InterruptionBehavior.kCancelIncoming;
/**
* Creates a new ParallelDeadlineGroup. The given commands (including the deadline) will be
@@ -72,6 +73,9 @@ public class ParallelDeadlineGroup extends CommandGroupBase {
m_commands.put(command, false);
m_requirements.addAll(command.getRequirements());
m_runWhenDisabled &= command.runsWhenDisabled();
+ if (command.getInterruptionBehavior() == InterruptionBehavior.kCancelSelf) {
+ m_interruptBehavior = InterruptionBehavior.kCancelSelf;
+ }
}
}
@@ -119,4 +123,9 @@ public class ParallelDeadlineGroup extends CommandGroupBase {
public boolean runsWhenDisabled() {
return m_runWhenDisabled;
}
+
+ @Override
+ public InterruptionBehavior getInterruptionBehavior() {
+ return m_interruptBehavior;
+ }
}
diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelRaceGroup.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelRaceGroup.java
index edbb83d6de..43172af6df 100644
--- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelRaceGroup.java
+++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/ParallelRaceGroup.java
@@ -20,6 +20,7 @@ public class ParallelRaceGroup extends CommandGroupBase {
private final Set m_commands = new HashSet<>();
private boolean m_runWhenDisabled = true;
private boolean m_finished = true;
+ private InterruptionBehavior m_interruptBehavior = InterruptionBehavior.kCancelIncoming;
/**
* Creates a new ParallelCommandRace. The given commands will be executed simultaneously, and will
@@ -51,6 +52,9 @@ public class ParallelRaceGroup extends CommandGroupBase {
m_commands.add(command);
m_requirements.addAll(command.getRequirements());
m_runWhenDisabled &= command.runsWhenDisabled();
+ if (command.getInterruptionBehavior() == InterruptionBehavior.kCancelSelf) {
+ m_interruptBehavior = InterruptionBehavior.kCancelSelf;
+ }
}
}
@@ -88,4 +92,9 @@ public class ParallelRaceGroup extends CommandGroupBase {
public boolean runsWhenDisabled() {
return m_runWhenDisabled;
}
+
+ @Override
+ public InterruptionBehavior getInterruptionBehavior() {
+ return m_interruptBehavior;
+ }
}
diff --git a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/SelectCommand.java b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/SelectCommand.java
index e7748160cd..3cf9f261fb 100644
--- a/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/SelectCommand.java
+++ b/wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/SelectCommand.java
@@ -31,6 +31,8 @@ public class SelectCommand extends CommandBase {
private final Supplier