|
7 | 7 | def _make_robot_module(pytester): |
8 | 8 | pytester.makepyfile(robot_module=""" |
9 | 9 | import wpilib |
| 10 | +from hal import RobotMode |
10 | 11 |
|
11 | 12 |
|
12 | 13 | class DummyRobot(wpilib.TimedRobot): |
@@ -50,6 +51,42 @@ def teleopInit(self): |
50 | 51 | def teleopPeriodic(self): |
51 | 52 | self.did_teleop_periodic = True |
52 | 53 |
|
| 54 | +
|
| 55 | +class OpModeAuto(wpilib.OpMode): |
| 56 | + label = "OpModeAuto" |
| 57 | +
|
| 58 | + def __init__(self, robot): |
| 59 | + super().__init__() |
| 60 | + self._robot = robot |
| 61 | +
|
| 62 | + def opModeRun(self, op_mode_id: int): |
| 63 | + self._robot.opmode_test_observed.add(self.label) |
| 64 | +
|
| 65 | + def opModeStop(self): |
| 66 | + pass |
| 67 | +
|
| 68 | +
|
| 69 | +class OpModeTeleop(wpilib.OpMode): |
| 70 | + label = "OpModeTeleop" |
| 71 | +
|
| 72 | + def __init__(self, robot): |
| 73 | + super().__init__() |
| 74 | + self._robot = robot |
| 75 | +
|
| 76 | + def opModeRun(self, op_mode_id: int): |
| 77 | + self._robot.opmode_test_observed.add(self.label) |
| 78 | +
|
| 79 | + def opModeStop(self): |
| 80 | + pass |
| 81 | +
|
| 82 | +
|
| 83 | +class OpModeDemoRobot(wpilib.OpModeRobot): |
| 84 | + def __init__(self): |
| 85 | + super().__init__() |
| 86 | + self.opmode_test_observed = set() |
| 87 | + self.addOpMode(OpModeAuto, RobotMode.AUTONOMOUS, "OpModeAuto") |
| 88 | + self.addOpMode(OpModeTeleop, RobotMode.TELEOPERATED, "OpModeTeleop") |
| 89 | + self.publishOpModes() |
53 | 90 | """) |
54 | 91 |
|
55 | 92 |
|
@@ -275,7 +312,42 @@ def test_builtin_tests_module(pytester, isolated): |
275 | 312 |
|
276 | 313 | result = pytester.runpytest_subprocess("-q") |
277 | 314 |
|
278 | | - result.assert_outcomes(passed=4) |
| 315 | + result.assert_outcomes(passed=4, skipped=1) |
| 316 | + |
| 317 | + |
| 318 | +@pytest.mark.parametrize("isolated", [False, True]) |
| 319 | +def test_builtin_tests_module_opmode(pytester, isolated): |
| 320 | + _make_robot_module(pytester) |
| 321 | + if isolated: |
| 322 | + _configure_isolated_plugin(pytester, robot_class="OpModeDemoRobot") |
| 323 | + else: |
| 324 | + _configure_robot_testing_plugin(pytester, robot_class="OpModeDemoRobot") |
| 325 | + pytester.makepyfile(pyfrc_test="from wpilib.testing.robot_tests import *\n") |
| 326 | + |
| 327 | + result = pytester.runpytest_subprocess("-q") |
| 328 | + |
| 329 | + result.assert_outcomes(passed=5) |
| 330 | + |
| 331 | + |
| 332 | +@pytest.mark.parametrize("isolated", [False, True]) |
| 333 | +def test_opmode_robot_runs_opmodes(pytester, isolated): |
| 334 | + _make_robot_module(pytester) |
| 335 | + if isolated: |
| 336 | + _configure_isolated_plugin(pytester, robot_class="OpModeDemoRobot") |
| 337 | + else: |
| 338 | + _configure_robot_testing_plugin(pytester, robot_class="OpModeDemoRobot") |
| 339 | + pytester.makepyfile(test_robot=""" |
| 340 | +from wpilib.testing.robot_tests import test_all_opmodes |
| 341 | +
|
| 342 | +
|
| 343 | +def test_opmodes_run(robot, control): |
| 344 | + test_all_opmodes(control) |
| 345 | + assert robot.opmode_test_observed == {"OpModeAuto", "OpModeTeleop"} |
| 346 | +""") |
| 347 | + |
| 348 | + result = pytester.runpytest_subprocess("-q") |
| 349 | + |
| 350 | + result.assert_outcomes(passed=2) |
279 | 351 |
|
280 | 352 |
|
281 | 353 | def _run_robot_suite(pytester, isolated, robot_class, test_source, *args): |
|
0 commit comments