Skip to content

Commit 68fab08

Browse files
committed
tests(test_hooks): Test HooksMixin
1 parent 94d1397 commit 68fab08

File tree

1 file changed

+307
-0
lines changed

1 file changed

+307
-0
lines changed

tests/test_hooks.py

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

0 commit comments

Comments
 (0)