forked from fgmacedo/python-statemachine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtest_state.py
More file actions
85 lines (63 loc) · 2.42 KB
/
Copy pathtest_state.py
File metadata and controls
85 lines (63 loc) · 2.42 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
import pytest
from statemachine.orderedset import OrderedSet
from statemachine import State
from statemachine import StateChart
@pytest.fixture()
def sm_class():
class SM(StateChart):
pending = State(initial=True)
waiting_approval = State()
approved = State(final=True)
start = pending.to(waiting_approval)
approve = waiting_approval.to(approved)
return SM
class TestState:
def test_name_derived_from_id(self, sm_class):
assert sm_class.pending.name == "Pending"
assert sm_class.waiting_approval.name == "Waiting approval"
assert sm_class.approved.name == "Approved"
def test_state_from_instance_is_hashable(self, sm_class):
sm = sm_class()
states_set = {sm.pending, sm.waiting_approval, sm.approved, sm.approved}
assert states_set == {sm.pending, sm.waiting_approval, sm.approved}
def test_state_knows_if_its_initial(self, sm_class):
sm = sm_class()
assert sm.pending.initial
assert not sm.waiting_approval.initial
assert not sm.approved.initial
def test_state_knows_if_its_final(self, sm_class):
sm = sm_class()
assert not sm.pending.final
assert not sm.waiting_approval.final
assert sm.approved.final
def test_ordered_set_clear():
"""OrderedSet.clear empties the set."""
s = OrderedSet([1, 2, 3])
s.clear()
assert len(s) == 0
def test_ordered_set_getitem():
"""OrderedSet supports index access."""
s = OrderedSet([10, 20, 30])
assert s[0] == 10
assert s[2] == 30
def test_ordered_set_getitem_negative_index():
"""OrderedSet supports negative index access like Python sequences."""
s = OrderedSet([10, 20, 30])
assert s[-1] == 30
assert s[-2] == 20
assert s[-3] == 10
def test_ordered_set_getitem_out_of_range():
"""OrderedSet raises IndexError for out-of-range index."""
s = OrderedSet([10, 20])
with pytest.raises(IndexError, match="index 5 out of range"):
s[5]
def test_ordered_set_getitem_negative_out_of_range():
"""OrderedSet raises IndexError for negative out-of-range index."""
s = OrderedSet([10, 20])
with pytest.raises(IndexError, match=r"index -3 out of range"):
s[-3]
def test_ordered_set_union():
"""OrderedSet.union returns new set with elements from both."""
s1 = OrderedSet([1, 2])
result = s1.union([3, 4], [5, 6])
assert list(result) == [1, 2, 3, 4, 5, 6]