-
Notifications
You must be signed in to change notification settings - Fork 612
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[commands] Add static Trigger factories for robot mode changes (#5902)
- Loading branch information
1 parent
79dd795
commit 09f3ed6
Showing
7 changed files
with
249 additions
and
0 deletions.
There are no files selected for viewing
52 changes: 52 additions & 0 deletions
52
wpilibNewCommands/src/main/java/edu/wpi/first/wpilibj2/command/button/RobotModeTriggers.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
// Copyright (c) FIRST and other WPILib contributors. | ||
// Open Source Software; you can modify and/or share it under the terms of | ||
// the WPILib BSD license file in the root directory of this project. | ||
|
||
package edu.wpi.first.wpilibj2.command.button; | ||
|
||
import edu.wpi.first.wpilibj.DriverStation; | ||
|
||
/** | ||
* A class containing static {@link Trigger} factories for running callbacks when the robot mode | ||
* changes. | ||
*/ | ||
public final class RobotModeTriggers { | ||
// Utility class | ||
private RobotModeTriggers() {} | ||
|
||
/** | ||
* Returns a trigger that is true when the robot is enabled in autonomous mode. | ||
* | ||
* @return A trigger that is true when the robot is enabled in autonomous mode. | ||
*/ | ||
public static Trigger autonomous() { | ||
return new Trigger(DriverStation::isAutonomousEnabled); | ||
} | ||
|
||
/** | ||
* Returns a trigger that is true when the robot is enabled in teleop mode. | ||
* | ||
* @return A trigger that is true when the robot is enabled in teleop mode. | ||
*/ | ||
public static Trigger teleop() { | ||
return new Trigger(DriverStation::isTeleopEnabled); | ||
} | ||
|
||
/** | ||
* Returns a trigger that is true when the robot is disabled. | ||
* | ||
* @return A trigger that is true when the robot is disabled. | ||
*/ | ||
public static Trigger disabled() { | ||
return new Trigger(DriverStation::isDisabled); | ||
} | ||
|
||
/** | ||
* Returns a trigger that is true when the robot is enabled in test mode. | ||
* | ||
* @return A trigger that is true when the robot is enabled in test mode. | ||
*/ | ||
public static Trigger test() { | ||
return new Trigger(DriverStation::isTestEnabled); | ||
} | ||
} |
25 changes: 25 additions & 0 deletions
25
wpilibNewCommands/src/main/native/cpp/frc2/command/button/RobotModeTriggers.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,25 @@ | ||
// Copyright (c) FIRST and other WPILib contributors. | ||
// Open Source Software; you can modify and/or share it under the terms of | ||
// the WPILib BSD license file in the root directory of this project. | ||
|
||
#include "frc2/command/button/RobotModeTriggers.h" | ||
|
||
#include <frc/DriverStation.h> | ||
|
||
using namespace frc2; | ||
|
||
Trigger RobotModeTriggers::Autonomous() { | ||
return Trigger{&frc::DriverStation::IsAutonomousEnabled}; | ||
} | ||
|
||
Trigger RobotModeTriggers::Teleop() { | ||
return Trigger{&frc::DriverStation::IsTeleopEnabled}; | ||
} | ||
|
||
Trigger RobotModeTriggers::Disabled() { | ||
return Trigger{&frc::DriverStation::IsDisabled}; | ||
} | ||
|
||
Trigger RobotModeTriggers::Test() { | ||
return Trigger{&frc::DriverStation::IsTestEnabled}; | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
50 changes: 50 additions & 0 deletions
50
wpilibNewCommands/src/main/native/include/frc2/command/button/RobotModeTriggers.h
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,50 @@ | ||
// Copyright (c) FIRST and other WPILib contributors. | ||
// Open Source Software; you can modify and/or share it under the terms of | ||
// the WPILib BSD license file in the root directory of this project. | ||
|
||
#pragma once | ||
|
||
#include "frc2/command/button/Trigger.h" | ||
|
||
namespace frc2 { | ||
|
||
/** | ||
* A class containing static Trigger factories for running callbacks when robot | ||
* mode changes. | ||
*/ | ||
class RobotModeTriggers { | ||
public: | ||
RobotModeTriggers() = delete; | ||
|
||
/** | ||
* Returns a trigger that is true when the robot is enabled in autonomous | ||
* mode. | ||
* | ||
* @return A trigger that is true when the robot is enabled in autonomous | ||
* mode. | ||
*/ | ||
static Trigger Autonomous(); | ||
|
||
/** | ||
* Returns a trigger that is true when the robot is enabled in teleop mode. | ||
* | ||
* @return A trigger that is true when the robot is enabled in teleop mode. | ||
*/ | ||
static Trigger Teleop(); | ||
|
||
/** | ||
* Returns a trigger that is true when the robot is disabled. | ||
* | ||
* @return A trigger that is true when the robot is disabled. | ||
*/ | ||
static Trigger Disabled(); | ||
|
||
/** | ||
* Returns a trigger that is true when the robot is enabled in test mode. | ||
* | ||
* @return A trigger that is true when the robot is enabled in test mode. | ||
*/ | ||
static Trigger Test(); | ||
}; | ||
|
||
} // namespace frc2 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
58 changes: 58 additions & 0 deletions
58
...ewCommands/src/test/java/edu/wpi/first/wpilibj2/command/button/RobotModeTriggersTest.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,58 @@ | ||
// Copyright (c) FIRST and other WPILib contributors. | ||
// Open Source Software; you can modify and/or share it under the terms of | ||
// the WPILib BSD license file in the root directory of this project. | ||
|
||
package edu.wpi.first.wpilibj2.command.button; | ||
|
||
import static org.junit.jupiter.api.Assertions.assertTrue; | ||
|
||
import edu.wpi.first.wpilibj.DriverStation; | ||
import edu.wpi.first.wpilibj.simulation.DriverStationSim; | ||
import edu.wpi.first.wpilibj2.command.CommandTestBase; | ||
import org.junit.jupiter.api.Test; | ||
|
||
class RobotModeTriggersTest extends CommandTestBase { | ||
@Test | ||
void autonomousTest() { | ||
DriverStationSim.resetData(); | ||
DriverStationSim.setAutonomous(true); | ||
DriverStationSim.setTest(false); | ||
DriverStationSim.setEnabled(true); | ||
DriverStation.refreshData(); | ||
Trigger auto = RobotModeTriggers.autonomous(); | ||
assertTrue(auto.getAsBoolean()); | ||
} | ||
|
||
@Test | ||
void teleopTest() { | ||
DriverStationSim.resetData(); | ||
DriverStationSim.setAutonomous(false); | ||
DriverStationSim.setTest(false); | ||
DriverStationSim.setEnabled(true); | ||
DriverStation.refreshData(); | ||
Trigger teleop = RobotModeTriggers.teleop(); | ||
assertTrue(teleop.getAsBoolean()); | ||
} | ||
|
||
@Test | ||
void testModeTest() { | ||
DriverStationSim.resetData(); | ||
DriverStationSim.setAutonomous(false); | ||
DriverStationSim.setTest(true); | ||
DriverStationSim.setEnabled(true); | ||
DriverStation.refreshData(); | ||
Trigger test = RobotModeTriggers.test(); | ||
assertTrue(test.getAsBoolean()); | ||
} | ||
|
||
@Test | ||
void disabledTest() { | ||
DriverStationSim.resetData(); | ||
DriverStationSim.setAutonomous(false); | ||
DriverStationSim.setTest(false); | ||
DriverStationSim.setEnabled(false); | ||
DriverStation.refreshData(); | ||
Trigger disabled = RobotModeTriggers.disabled(); | ||
assertTrue(disabled.getAsBoolean()); | ||
} | ||
} |
54 changes: 54 additions & 0 deletions
54
wpilibNewCommands/src/test/native/cpp/frc2/command/button/RobotModeTriggersTest.cpp
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,54 @@ | ||
// Copyright (c) FIRST and other WPILib contributors. | ||
// Open Source Software; you can modify and/or share it under the terms of | ||
// the WPILib BSD license file in the root directory of this project. | ||
|
||
#include <frc/DriverStation.h> | ||
#include <frc/simulation/DriverStationSim.h> | ||
|
||
#include "../CommandTestBase.h" | ||
#include "frc2/command/button/RobotModeTriggers.h" | ||
#include "frc2/command/button/Trigger.h" | ||
|
||
using namespace frc2; | ||
using namespace frc::sim; | ||
class RobotModeTriggersTest : public CommandTestBase {}; | ||
|
||
TEST(RobotModeTriggersTest, Autonomous) { | ||
DriverStationSim::ResetData(); | ||
DriverStationSim::SetAutonomous(true); | ||
DriverStationSim::SetTest(false); | ||
DriverStationSim::SetEnabled(true); | ||
frc::DriverStation::RefreshData(); | ||
Trigger autonomous = RobotModeTriggers::Autonomous(); | ||
EXPECT_TRUE(autonomous.Get()); | ||
} | ||
|
||
TEST(RobotModeTriggersTest, Teleop) { | ||
DriverStationSim::ResetData(); | ||
DriverStationSim::SetAutonomous(false); | ||
DriverStationSim::SetTest(false); | ||
DriverStationSim::SetEnabled(true); | ||
frc::DriverStation::RefreshData(); | ||
Trigger teleop = RobotModeTriggers::Teleop(); | ||
EXPECT_TRUE(teleop.Get()); | ||
} | ||
|
||
TEST(RobotModeTriggersTest, Disabled) { | ||
DriverStationSim::ResetData(); | ||
DriverStationSim::SetAutonomous(false); | ||
DriverStationSim::SetTest(false); | ||
DriverStationSim::SetEnabled(false); | ||
frc::DriverStation::RefreshData(); | ||
Trigger disabled = RobotModeTriggers::Disabled(); | ||
EXPECT_TRUE(disabled.Get()); | ||
} | ||
|
||
TEST(RobotModeTriggersTest, TestMode) { | ||
DriverStationSim::ResetData(); | ||
DriverStationSim::SetAutonomous(false); | ||
DriverStationSim::SetTest(true); | ||
DriverStationSim::SetEnabled(true); | ||
frc::DriverStation::RefreshData(); | ||
Trigger test = RobotModeTriggers::Test(); | ||
EXPECT_TRUE(test.Get()); | ||
} |