Skip to content

Commit 0a5c8c8

Browse files
committed
tests(test_hooks): Test HooksMixin
1 parent ff7b2b6 commit 0a5c8c8

File tree

1 file changed

+306
-0
lines changed

1 file changed

+306
-0
lines changed

tests/test_hooks.py

+306
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,306 @@
1+
"""Testsuite for libtmux hook management."""
2+
3+
import typing as t
4+
5+
import pytest
6+
7+
from libtmux._internal.constants import Hooks, TmuxArray
8+
from libtmux.common import has_gte_version, has_lt_version
9+
10+
if t.TYPE_CHECKING:
11+
from libtmux.server import Server
12+
13+
if has_lt_version("3.0"):
14+
pytest.skip(
15+
reason="only support hooks in tmux 3.0 and above",
16+
allow_module_level=True,
17+
)
18+
19+
20+
def test_hooks_raw_cmd(
21+
server: "Server",
22+
) -> None:
23+
"""Raw hook set, show, unset via cmd."""
24+
session = server.new_session(session_name="test hooks")
25+
window = session.attached_window
26+
pane = window.attached_pane
27+
assert pane is not None
28+
29+
#
30+
# Global
31+
#
32+
set_hook_proc = server.cmd(
33+
"set-hook",
34+
"-g",
35+
"session-renamed[0]",
36+
"set -g status-left-style bg=red",
37+
)
38+
39+
assert not set_hook_proc.stdout
40+
assert not set_hook_proc.stderr
41+
assert not server.cmd("show-hooks").stdout
42+
43+
show_hooks_proc = server.cmd("show-hooks", "-g", "session-renamed[0]")
44+
45+
assert "set-option -g status-left-style bg=red" in show_hooks_proc.stdout[0]
46+
47+
# Server: Unset
48+
49+
# Server: Unset: Index
50+
set_hook_proc = server.cmd(
51+
"set-hook",
52+
"-g",
53+
"-u",
54+
"session-renamed[0]",
55+
)
56+
assert server.cmd("show-hooks", "-g", "session-renamed[0]").stdout == [
57+
"session-renamed[0] ",
58+
]
59+
60+
# Server: Unset variable
61+
set_hook_proc = server.cmd(
62+
"set-hook",
63+
"-g",
64+
"-u",
65+
"session-renamed",
66+
)
67+
assert server.cmd("show-hooks", "-g", "session-renamed[0]").stdout == [
68+
"session-renamed[0] ",
69+
]
70+
71+
#
72+
# Session
73+
#
74+
set_hook_proc = session.cmd(
75+
"set-hook",
76+
"session-renamed[0]",
77+
"set -g status-left-style bg=red",
78+
)
79+
80+
assert not set_hook_proc.stdout
81+
assert not set_hook_proc.stderr
82+
83+
assert not session.cmd(
84+
"show-hooks",
85+
"-s",
86+
).stdout
87+
show_hooks_proc = session.cmd(
88+
"show-hooks",
89+
"session-renamed[0]",
90+
)
91+
92+
assert "set-option -g status-left-style bg=red" in show_hooks_proc.stdout[0]
93+
94+
# Session: Unset
95+
96+
# Session: Unset: Index
97+
set_hook_proc = session.cmd(
98+
"set-hook",
99+
"-u",
100+
"session-renamed[0]",
101+
)
102+
assert session.cmd("show-hooks", "-s", "session-renamed[0]").stdout == []
103+
104+
# Session: Unset variable
105+
set_hook_proc = session.cmd(
106+
"set-hook",
107+
"-u",
108+
"session-renamed",
109+
)
110+
assert session.cmd("show-hooks", "-s", "session-renamed[0]").stdout == []
111+
112+
if has_gte_version("3.2"):
113+
#
114+
# Window
115+
#
116+
set_hook_proc = window.cmd(
117+
"set-hook",
118+
"-w",
119+
"session-renamed[0]",
120+
"set -g status-left-style bg=red",
121+
)
122+
123+
assert not set_hook_proc.stdout
124+
assert not set_hook_proc.stderr
125+
126+
show_hooks_proc = server.cmd(
127+
"show-hooks",
128+
"session-renamed[0]",
129+
)
130+
131+
assert "set-option -g status-left-style bg=red" in show_hooks_proc.stdout[0]
132+
133+
# Window: Unset
134+
135+
# Window: Unset: Index
136+
set_hook_proc = window.cmd(
137+
"set-hook",
138+
"-w",
139+
"-u",
140+
"session-renamed[0]",
141+
)
142+
assert window.cmd("show-hooks", "-w", "session-renamed[0]").stdout == [
143+
"session-renamed[0] ",
144+
]
145+
146+
# Window: Unset variable
147+
set_hook_proc = window.cmd(
148+
"set-hook",
149+
"-w",
150+
"-u",
151+
"session-renamed",
152+
)
153+
assert window.cmd("show-hooks", "-w", "session-renamed[0]").stdout == []
154+
155+
#
156+
# Pane
157+
#
158+
set_hook_proc = pane.cmd(
159+
"set-hook",
160+
"-p",
161+
"session-renamed[0]",
162+
"set -g status-left-style bg=red",
163+
)
164+
165+
assert not set_hook_proc.stdout
166+
assert not set_hook_proc.stderr
167+
168+
show_hooks_proc = server.cmd(
169+
"show-hooks",
170+
"-p",
171+
"session-renamed[0]",
172+
)
173+
174+
assert "set-option -g status-left-style bg=red" in show_hooks_proc.stdout[0]
175+
176+
# Pane: Unset
177+
178+
# Pane: Unset: Index
179+
set_hook_proc = pane.cmd(
180+
"set-hook",
181+
"-p",
182+
"-u",
183+
"session-renamed[0]",
184+
)
185+
assert pane.cmd("show-hooks", "-p", "session-renamed[0]").stdout == [
186+
"session-renamed[0] ",
187+
]
188+
189+
# Pane: Unset variable
190+
set_hook_proc = pane.cmd(
191+
"set-hook",
192+
"-p",
193+
"-u",
194+
"session-renamed",
195+
)
196+
assert pane.cmd("show-hooks", "-p", "session-renamed[0]").stdout == []
197+
198+
199+
def test_hooks_dataclass(
200+
server: "Server",
201+
) -> None:
202+
"""Tests for hooks dataclass."""
203+
session = server.new_session(session_name="test hooks")
204+
window = session.attached_window
205+
pane = window.attached_pane
206+
assert pane is not None
207+
208+
#
209+
# Session
210+
#
211+
set_hook_proc = session.cmd(
212+
"set-hook",
213+
"session-renamed[0]",
214+
"set -g status-left-style bg=red",
215+
)
216+
217+
assert not set_hook_proc.stdout
218+
assert not set_hook_proc.stderr
219+
220+
show_hooks_proc = server.cmd(
221+
"show-hooks",
222+
"session-renamed[0]",
223+
)
224+
225+
hooks = Hooks.from_stdout(show_hooks_proc.stdout)
226+
assert hooks.session_renamed.as_list() == [
227+
"set-option -g status-left-style bg=red",
228+
]
229+
230+
set_hook_proc = session.cmd(
231+
"set-hook",
232+
"-p",
233+
"session-renamed[0]",
234+
"set -g status-left-style bg=red",
235+
)
236+
set_hook_proc = session.cmd(
237+
"set-hook",
238+
"session-renamed[1]",
239+
"set -g status-left-style bg=white",
240+
)
241+
set_hook_proc = session.cmd(
242+
"set-hook",
243+
"session-renamed[2]",
244+
"set -g status-left-style bg=blue",
245+
)
246+
set_hook_proc = session.cmd(
247+
"set-hook",
248+
"after-set-buffer[2]",
249+
"set -g status-left-style bg=pink",
250+
)
251+
252+
global_out = server.cmd("show-hooks", "-g").stdout
253+
session_out = server.cmd("show-hooks").stdout
254+
255+
window_out = server.cmd("show-hooks", "-w").stdout
256+
pane_out = server.cmd("show-hooks", "-p").stdout
257+
258+
session_out_processed = Hooks.from_stdout(session_out)
259+
assert session_out_processed.session_renamed is not None
260+
261+
assert (
262+
session_out_processed.session_renamed[2]
263+
== "set-option -g status-left-style bg=blue"
264+
)
265+
266+
hooks = Hooks.from_stdout(global_out + session_out + window_out + pane_out)
267+
268+
assert hooks.session_renamed.as_list() == [
269+
"set-option -g status-left-style bg=red",
270+
"set-option -g status-left-style bg=white",
271+
"set-option -g status-left-style bg=blue",
272+
]
273+
assert hooks.after_set_buffer.as_list() == [
274+
"set-option -g status-left-style bg=pink",
275+
]
276+
277+
278+
def test_hooks_mixin(
279+
server: "Server",
280+
) -> None:
281+
"""Tests for hooks."""
282+
session = server.new_session(session_name="test hooks")
283+
window = session.attached_window
284+
pane = window.attached_pane
285+
assert pane is not None
286+
287+
pane.set_hook("session-renamed[0]", "set -g status-left-style bg=red")
288+
289+
#
290+
# Pane
291+
#
292+
assert not pane.show_hooks()
293+
294+
show_hooks_raw = pane._show_hook(
295+
"session-renamed[0]",
296+
)
297+
298+
assert show_hooks_raw is not None
299+
300+
hooks = Hooks.from_stdout(show_hooks_raw)
301+
302+
assert hooks.session_renamed == TmuxArray(
303+
{
304+
0: "set-option -g status-left-style bg=red",
305+
},
306+
)

0 commit comments

Comments
 (0)