mirror of
https://github.com/wpilibsuite/allwpilib
synced 2026-06-19 00:41:43 +00:00
Project import generated by Copybara. GitOrigin-RevId: 715c8e8372d936f447f2937aab6b1a22dc619126
167 lines
6.8 KiB
Python
167 lines
6.8 KiB
Python
from typing import Generic, TypeVar
|
|
|
|
import commands2
|
|
import pytest
|
|
|
|
# T = TypeVar("T", bound=commands2.Command)
|
|
# T = commands2.Command
|
|
|
|
from util import *
|
|
|
|
|
|
class SingleCompositionTestBase:
|
|
def composeSingle(self, member: commands2.Command):
|
|
raise NotImplementedError
|
|
|
|
@pytest.mark.parametrize(
|
|
"interruptionBehavior",
|
|
[
|
|
commands2.InterruptionBehavior.kCancelSelf,
|
|
commands2.InterruptionBehavior.kCancelIncoming,
|
|
],
|
|
)
|
|
def test_interruptible(self, interruptionBehavior: commands2.InterruptionBehavior):
|
|
command = self.composeSingle(
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
interruptionBehavior
|
|
)
|
|
)
|
|
assert command.getInterruptionBehavior() == interruptionBehavior
|
|
|
|
@pytest.mark.parametrize("runsWhenDisabled", [True, False])
|
|
def test_runWhenDisabled(self, runsWhenDisabled: bool):
|
|
command = self.composeSingle(
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(runsWhenDisabled)
|
|
)
|
|
assert command.runsWhenDisabled() == runsWhenDisabled
|
|
|
|
def test_command_in_other_composition(self):
|
|
command = commands2.InstantCommand()
|
|
wrapped = commands2.WrapperCommand(command)
|
|
with pytest.raises(commands2.IllegalCommandUse):
|
|
self.composeSingle(command)
|
|
|
|
def test_command_in_multiple_compositions(self):
|
|
command = commands2.InstantCommand()
|
|
self.composeSingle(command)
|
|
with pytest.raises(commands2.IllegalCommandUse):
|
|
self.composeSingle(command)
|
|
|
|
def test_compose_then_schedule(self, scheduler: commands2.CommandScheduler):
|
|
command = commands2.InstantCommand()
|
|
self.composeSingle(command)
|
|
with pytest.raises(commands2.IllegalCommandUse):
|
|
scheduler.schedule(command)
|
|
|
|
def test_schedule_then_compose(self, scheduler: commands2.CommandScheduler):
|
|
command = commands2.RunCommand(lambda: None)
|
|
scheduler.schedule(command)
|
|
with pytest.raises(commands2.IllegalCommandUse):
|
|
self.composeSingle(command)
|
|
|
|
|
|
class MultiCompositionTestBase(SingleCompositionTestBase):
|
|
def compose(self, *members: commands2.Command):
|
|
raise NotImplementedError
|
|
|
|
def composeSingle(self, member: commands2.Command):
|
|
return self.compose(member)
|
|
|
|
@pytest.mark.parametrize(
|
|
"expected,command1,command2,command3",
|
|
[
|
|
pytest.param(
|
|
commands2.InterruptionBehavior.kCancelSelf,
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelSelf
|
|
),
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelSelf
|
|
),
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelSelf
|
|
),
|
|
id="AllCancelSelf",
|
|
),
|
|
pytest.param(
|
|
commands2.InterruptionBehavior.kCancelIncoming,
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelIncoming
|
|
),
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelIncoming
|
|
),
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelIncoming
|
|
),
|
|
id="AllCancelIncoming",
|
|
),
|
|
pytest.param(
|
|
commands2.InterruptionBehavior.kCancelSelf,
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelSelf
|
|
),
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelSelf
|
|
),
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelIncoming
|
|
),
|
|
id="TwoCancelSelfOneIncoming",
|
|
),
|
|
pytest.param(
|
|
commands2.InterruptionBehavior.kCancelSelf,
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelIncoming
|
|
),
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelIncoming
|
|
),
|
|
commands2.WaitUntilCommand(lambda: False).withInterruptBehavior(
|
|
commands2.InterruptionBehavior.kCancelSelf
|
|
),
|
|
id="TwoCancelIncomingOneSelf",
|
|
),
|
|
],
|
|
)
|
|
def test_interruptible(self, expected, command1, command2, command3):
|
|
command = self.compose(command1, command2, command3)
|
|
assert command.getInterruptionBehavior() == expected
|
|
|
|
@pytest.mark.parametrize(
|
|
"expected,command1,command2,command3",
|
|
[
|
|
pytest.param(
|
|
False,
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(False),
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(False),
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(False),
|
|
id="AllFalse",
|
|
),
|
|
pytest.param(
|
|
True,
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(True),
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(True),
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(True),
|
|
id="AllTrue",
|
|
),
|
|
pytest.param(
|
|
False,
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(True),
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(True),
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(False),
|
|
id="TwoTrueOneFalse",
|
|
),
|
|
pytest.param(
|
|
False,
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(False),
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(False),
|
|
commands2.WaitUntilCommand(lambda: False).ignoringDisable(True),
|
|
id="TwoFalseOneTrue",
|
|
),
|
|
],
|
|
)
|
|
def test_runWhenDisabled(self, expected, command1, command2, command3):
|
|
command = self.compose(command1, command2, command3)
|
|
assert command.runsWhenDisabled() == expected
|