示例#1
0
 def gen_rules(cls, cfg):
     for topic, properties in cfg.subscribers.iteritems():
         rule_name = "pub" + topic.replace("/", "__")
         method = RosRandomTester._gen_publish(topic, rule_name)
         pre_wrapper = precondition(cls._rule_precondition)
         rule_wrapper = rule(msg=properties._strategy())
         method = pre_wrapper(rule_wrapper(method))
         method.__name__ = rule_name
         setattr(cls, rule_name, method)
示例#2
0
        @rule()
        def do_stuff(self):
            pass

    run_state_machine_as_test(Invariant)


@pytest.mark.parametrize(
    "decorators",
    [
        (invariant(), rule()),
        (rule(), invariant()),
        (invariant(), initialize()),
        (initialize(), invariant()),
        (invariant(), precondition(lambda self: True), rule()),
        (rule(), precondition(lambda self: True), invariant()),
        (precondition(lambda self: True), invariant(), rule()),
        (precondition(lambda self: True), rule(), invariant()),
    ],
    ids=lambda x: "-".join(f.__qualname__.split(".")[0] for f in x),
)
def test_invariant_and_rule_are_incompatible(decorators):
    """It's an error to apply @invariant and @rule to the same method."""

    def method(self):
        pass

    for d in decorators[:-1]:
        method = d(method)
    with pytest.raises(InvalidDefinition):
示例#3
0
def srulep(precond=lambda s: True, **kwargs):
    return compose(precondition(precond), rule(**kwargs), stateful)
示例#4
0
def preconditions(*conditions):
    def combined_condition(self):
        return all(condition(self) for condition in conditions)
    return precondition(combined_condition)