Skip to content

Commit e09f953

Browse files
committed
tests(test_hooks): Add show_hooks parsing edge case tests
why: Increase coverage for show_hooks output parsing what: - Add ShowHooksParseTestCase NamedTuple for parametrized testing - Test normal single hook value parsing - Test multiple indexed hooks (sparse indices) - Test multiple different hook types - Test empty result handling
1 parent 698f386 commit e09f953

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

tests/test_hooks.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -966,3 +966,86 @@ def test_hook_scope_handling(
966966
window.unset_hook(hook_name)
967967
else:
968968
pane.unset_hook(hook_name)
969+
970+
971+
# =============================================================================
972+
# show_hooks Parsing Edge Cases
973+
# =============================================================================
974+
975+
976+
class ShowHooksParseTestCase(t.NamedTuple):
977+
"""Test case for show_hooks output parsing edge cases."""
978+
979+
test_id: str
980+
setup_commands: list[tuple[str, str]] # List of (hook[idx], value) to set
981+
expected_keys: list[str] # Expected keys in result
982+
check_values: bool = True # Whether to verify specific values
983+
984+
985+
SHOW_HOOKS_PARSE_TEST_CASES: list[ShowHooksParseTestCase] = [
986+
ShowHooksParseTestCase(
987+
"normal_hook_value",
988+
[("session-renamed[0]", "display-message 'test'")],
989+
["session-renamed[0]"],
990+
),
991+
ShowHooksParseTestCase(
992+
"multiple_indexed_hooks",
993+
[
994+
("session-renamed[0]", "display-message 'first'"),
995+
("session-renamed[1]", "display-message 'second'"),
996+
("session-renamed[5]", "display-message 'fifth'"),
997+
],
998+
["session-renamed[0]", "session-renamed[1]", "session-renamed[5]"],
999+
),
1000+
ShowHooksParseTestCase(
1001+
"multiple_different_hooks",
1002+
[
1003+
("session-renamed[0]", "display-message 'renamed'"),
1004+
("after-split-window[0]", "display-message 'split'"),
1005+
],
1006+
["session-renamed[0]", "after-split-window[0]"],
1007+
),
1008+
]
1009+
1010+
1011+
@pytest.mark.parametrize(
1012+
"test_case",
1013+
[pytest.param(tc, id=tc.test_id) for tc in SHOW_HOOKS_PARSE_TEST_CASES],
1014+
)
1015+
def test_show_hooks_parsing_edge_cases(
1016+
server: Server,
1017+
test_case: ShowHooksParseTestCase,
1018+
) -> None:
1019+
"""Test show_hooks parses various output formats correctly."""
1020+
session = server.new_session(session_name="test_parsing")
1021+
1022+
# Setup hooks
1023+
for hook, value in test_case.setup_commands:
1024+
session.set_hook(hook, value)
1025+
1026+
# Get all hooks via show_hooks
1027+
hooks = session.show_hooks()
1028+
1029+
# Verify expected keys are present
1030+
for key in test_case.expected_keys:
1031+
assert key in hooks, f"Expected key {key} not found in {list(hooks.keys())}"
1032+
1033+
if test_case.check_values:
1034+
for key in test_case.expected_keys:
1035+
assert hooks[key] is not None, f"Expected value for {key} to be non-None"
1036+
1037+
# Cleanup
1038+
for hook, _ in test_case.setup_commands:
1039+
base_hook = hook.split("[")[0]
1040+
session.unset_hook(base_hook)
1041+
1042+
1043+
def test_show_hooks_empty_result(server: Server) -> None:
1044+
"""Test show_hooks returns empty dict when no hooks are set."""
1045+
session = server.new_session(session_name="test_empty_hooks")
1046+
1047+
# Fresh session should have no session-level hooks
1048+
hooks = session.show_hooks()
1049+
1050+
# Should be a dict (possibly empty)
1051+
assert isinstance(hooks, dict)

0 commit comments

Comments
 (0)