diff options
Diffstat (limited to 'pocketbook/tests/test_app_toggle.py')
| -rw-r--r-- | pocketbook/tests/test_app_toggle.py | 96 |
1 files changed, 96 insertions, 0 deletions
diff --git a/pocketbook/tests/test_app_toggle.py b/pocketbook/tests/test_app_toggle.py new file mode 100644 index 0000000..cb5ab89 --- /dev/null +++ b/pocketbook/tests/test_app_toggle.py @@ -0,0 +1,96 @@ +from pocketbook.app import ToggleStateMachine, EscapeStateMachine, navigate + + +class TestToggleStateMachine: + def test_initial_state_visible(self): + sm = ToggleStateMachine(start_hidden=False) + assert sm.visible is True + + def test_initial_state_hidden(self): + sm = ToggleStateMachine(start_hidden=True) + assert sm.visible is False + + def test_toggle_alternates(self): + sm = ToggleStateMachine(start_hidden=False) + assert sm.visible is True + sm.toggle() + assert sm.visible is False + sm.toggle() + assert sm.visible is True + + def test_toggle_from_hidden(self): + sm = ToggleStateMachine(start_hidden=True) + assert sm.visible is False + sm.toggle() + assert sm.visible is True + sm.toggle() + assert sm.visible is False + + +class TestEscapeStateMachine: + def test_escape_while_editing_returns_exit_edit(self): + esc = EscapeStateMachine() + toggle = ToggleStateMachine(start_hidden=False) + action = esc.escape(is_editing=True, toggle=toggle) + assert action == "exit_edit" + # Toggle state should not change + assert toggle.visible is True + + def test_escape_while_browsing_returns_hide(self): + esc = EscapeStateMachine() + toggle = ToggleStateMachine(start_hidden=False) + action = esc.escape(is_editing=False, toggle=toggle) + assert action == "hide" + assert toggle.visible is False + + def test_escape_edit_then_browse_hides(self): + """Simulates: editing → Escape (exit edit) → Escape (hide).""" + esc = EscapeStateMachine() + toggle = ToggleStateMachine(start_hidden=False) + + # First escape: exit edit mode + action1 = esc.escape(is_editing=True, toggle=toggle) + assert action1 == "exit_edit" + assert toggle.visible is True + + # Second escape: now in browse mode, hide panel + action2 = esc.escape(is_editing=False, toggle=toggle) + assert action2 == "hide" + assert toggle.visible is False + + def test_escape_hide_does_not_change_when_already_hidden(self): + esc = EscapeStateMachine() + toggle = ToggleStateMachine(start_hidden=True) + assert toggle.visible is False + action = esc.escape(is_editing=False, toggle=toggle) + assert action == "hide" + # Toggled again — now visible (edge case if called when hidden) + assert toggle.visible is True + + +class TestNavigate: + def test_no_notes(self): + assert navigate(None, 0, 1) is None + assert navigate(None, 0, -1) is None + + def test_no_focus_next_goes_to_first(self): + assert navigate(None, 3, 1) == 0 + + def test_no_focus_prev_goes_to_last(self): + assert navigate(None, 3, -1) == 2 + + def test_next_from_middle(self): + assert navigate(1, 3, 1) == 2 + + def test_prev_from_middle(self): + assert navigate(1, 3, -1) == 0 + + def test_next_clamps_at_end(self): + assert navigate(2, 3, 1) == 2 + + def test_prev_clamps_at_start(self): + assert navigate(0, 3, -1) == 0 + + def test_single_note(self): + assert navigate(0, 1, 1) == 0 + assert navigate(0, 1, -1) == 0 |
