Skip to content

Commit bf572db

Browse files
committed
tests(test_hooks): Test HooksMixin
1 parent 02b5eec commit bf572db

File tree

1 file changed

+309
-0
lines changed

1 file changed

+309
-0
lines changed

tests/test_hooks.py

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

0 commit comments

Comments
 (0)