Skip to content

Commit 2809c77

Browse files
committed
tests for choose
1 parent 260a3f3 commit 2809c77

File tree

2 files changed

+84
-0
lines changed

2 files changed

+84
-0
lines changed

pyproject.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -73,3 +73,4 @@ ignore = [
7373
"tests/test_main.py" = [ "S101", "ANN201"]
7474
"tests/test_profiles.py" = [ "S101", "ANN201"]
7575
"tests/test_desktop.py" = [ "S101", "ANN201"]
76+
"tests/test_choose.py" = [ "S101", "ANN201"]

tests/test_choose.py

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
from os import environ
2+
from pathlib import Path
3+
4+
from qbpm.choose import choose_profile, find_menu
5+
6+
7+
def write_script(parent_dir: Path, name: str = "menu", contents: str = "") -> Path:
8+
parent_dir.mkdir(exist_ok=True)
9+
menu = parent_dir / name
10+
menu.write_text(f"#!/bin/sh\n{contents}")
11+
menu.chmod(0o700)
12+
return menu
13+
14+
15+
def test_choose(tmp_path: Path):
16+
log = tmp_path / "log"
17+
log.touch()
18+
menu = write_script(tmp_path / "bin", contents=f"cat > {log}\necho p1")
19+
write_script(
20+
tmp_path / "bin",
21+
name="qutebrowser",
22+
contents=f'echo qutebrowser "$@" >> {log}',
23+
)
24+
environ["PATH"] = str(tmp_path / "bin") + ":" + environ["PATH"]
25+
26+
profile_dir = tmp_path / "profiles"
27+
profile_dir.mkdir()
28+
(profile_dir / "p1").mkdir()
29+
(profile_dir / "p2").mkdir()
30+
assert choose_profile(profile_dir, str(menu), False, ())
31+
assert log.read_text().startswith(
32+
f"""p1
33+
p2
34+
qutebrowser
35+
qutebrowser -B {profile_dir / "p1"}"""
36+
)
37+
38+
39+
def test_find_installed_menu(tmp_path: Path):
40+
write_script(tmp_path / "bin", name="dmenu")
41+
environ["PATH"] = str(tmp_path / "bin")
42+
environ["DISPLAY"] = ":1"
43+
assert getattr(find_menu(None), "name", None) == "dmenu"
44+
45+
46+
def test_override_menu_priority(tmp_path: Path):
47+
write_script(tmp_path / "bin", name="fuzzel")
48+
write_script(tmp_path / "bin", name="dmenu-wl")
49+
environ["PATH"] = str(tmp_path / "bin")
50+
environ["WAYLAND_DISPLAY"] = "wayland-2"
51+
assert getattr(find_menu(None), "name", None) == "fuzzel"
52+
assert getattr(find_menu("dmenu-wl"), "name", None) == "dmenu-wl"
53+
54+
55+
def test_custom_menu():
56+
dmenu = find_menu("/bin/sh -c")
57+
assert dmenu is not None
58+
assert (
59+
dmenu.commandline(["p1", "p2"], "", "").strip() == 'echo "p1\np2" | /bin/sh -c'
60+
)
61+
62+
63+
def test_invalid_custom_menu():
64+
assert find_menu("fake_command") is None
65+
66+
67+
def test_custom_menu_default_args(tmp_path: Path):
68+
menu = write_script(tmp_path / "bin", name="rofi")
69+
environ["PATH"] = str(tmp_path / "bin")
70+
environ["DISPLAY"] = ":1"
71+
dmenu = find_menu(str(menu))
72+
assert dmenu is not None
73+
assert f"{menu} -dmenu" in dmenu.commandline(["p1", "p2"], "", "")
74+
75+
76+
def test_custom_menu_custom_args(tmp_path: Path):
77+
menu = write_script(tmp_path / "bin", name="rofi")
78+
command = f"{menu} -custom -dmenu"
79+
environ["PATH"] = str(tmp_path / "bin")
80+
environ["DISPLAY"] = ":1"
81+
dmenu = find_menu(command)
82+
assert dmenu is not None
83+
assert command in dmenu.commandline(["p1", "p2"], "", "")

0 commit comments

Comments
 (0)