RAHHH
This commit is contained in:
142
backend/lib/python3.12/site-packages/automat/_test/test_trace.py
Normal file
142
backend/lib/python3.12/site-packages/automat/_test/test_trace.py
Normal file
@@ -0,0 +1,142 @@
|
||||
from unittest import TestCase
|
||||
from .._methodical import MethodicalMachine
|
||||
|
||||
|
||||
class SampleObject(object):
|
||||
mm = MethodicalMachine()
|
||||
|
||||
@mm.state(initial=True)
|
||||
def begin(self):
|
||||
"initial state"
|
||||
|
||||
@mm.state()
|
||||
def middle(self):
|
||||
"middle state"
|
||||
|
||||
@mm.state()
|
||||
def end(self):
|
||||
"end state"
|
||||
|
||||
@mm.input()
|
||||
def go1(self):
|
||||
"sample input"
|
||||
|
||||
@mm.input()
|
||||
def go2(self):
|
||||
"sample input"
|
||||
|
||||
@mm.input()
|
||||
def back(self):
|
||||
"sample input"
|
||||
|
||||
@mm.output()
|
||||
def out(self):
|
||||
"sample output"
|
||||
|
||||
setTrace = mm._setTrace
|
||||
|
||||
begin.upon(go1, middle, [out])
|
||||
middle.upon(go2, end, [out])
|
||||
end.upon(back, middle, [])
|
||||
middle.upon(back, begin, [])
|
||||
|
||||
|
||||
class TraceTests(TestCase):
|
||||
def test_only_inputs(self):
|
||||
traces = []
|
||||
|
||||
def tracer(old_state, input, new_state):
|
||||
traces.append((old_state, input, new_state))
|
||||
return None # "I only care about inputs, not outputs"
|
||||
|
||||
s = SampleObject()
|
||||
s.setTrace(tracer)
|
||||
|
||||
s.go1()
|
||||
self.assertEqual(
|
||||
traces,
|
||||
[
|
||||
("begin", "go1", "middle"),
|
||||
],
|
||||
)
|
||||
|
||||
s.go2()
|
||||
self.assertEqual(
|
||||
traces,
|
||||
[
|
||||
("begin", "go1", "middle"),
|
||||
("middle", "go2", "end"),
|
||||
],
|
||||
)
|
||||
s.setTrace(None)
|
||||
s.back()
|
||||
self.assertEqual(
|
||||
traces,
|
||||
[
|
||||
("begin", "go1", "middle"),
|
||||
("middle", "go2", "end"),
|
||||
],
|
||||
)
|
||||
s.go2()
|
||||
self.assertEqual(
|
||||
traces,
|
||||
[
|
||||
("begin", "go1", "middle"),
|
||||
("middle", "go2", "end"),
|
||||
],
|
||||
)
|
||||
|
||||
def test_inputs_and_outputs(self):
|
||||
traces = []
|
||||
|
||||
def tracer(old_state, input, new_state):
|
||||
traces.append((old_state, input, new_state, None))
|
||||
|
||||
def trace_outputs(output):
|
||||
traces.append((old_state, input, new_state, output))
|
||||
|
||||
return trace_outputs # "I care about outputs too"
|
||||
|
||||
s = SampleObject()
|
||||
s.setTrace(tracer)
|
||||
|
||||
s.go1()
|
||||
self.assertEqual(
|
||||
traces,
|
||||
[
|
||||
("begin", "go1", "middle", None),
|
||||
("begin", "go1", "middle", "out"),
|
||||
],
|
||||
)
|
||||
|
||||
s.go2()
|
||||
self.assertEqual(
|
||||
traces,
|
||||
[
|
||||
("begin", "go1", "middle", None),
|
||||
("begin", "go1", "middle", "out"),
|
||||
("middle", "go2", "end", None),
|
||||
("middle", "go2", "end", "out"),
|
||||
],
|
||||
)
|
||||
s.setTrace(None)
|
||||
s.back()
|
||||
self.assertEqual(
|
||||
traces,
|
||||
[
|
||||
("begin", "go1", "middle", None),
|
||||
("begin", "go1", "middle", "out"),
|
||||
("middle", "go2", "end", None),
|
||||
("middle", "go2", "end", "out"),
|
||||
],
|
||||
)
|
||||
s.go2()
|
||||
self.assertEqual(
|
||||
traces,
|
||||
[
|
||||
("begin", "go1", "middle", None),
|
||||
("begin", "go1", "middle", "out"),
|
||||
("middle", "go2", "end", None),
|
||||
("middle", "go2", "end", "out"),
|
||||
],
|
||||
)
|
||||
Reference in New Issue
Block a user