Skip to content

Commit d2e3aea

Browse files
committed
test(common): Convert version parsing tests to use NamedTuple fixture
1 parent 33f6533 commit d2e3aea

File tree

1 file changed

+92
-73
lines changed

1 file changed

+92
-73
lines changed

Diff for: tests/test_common.py

+92-73
Original file line numberDiff line numberDiff line change
@@ -32,79 +32,6 @@
3232
version_regex = re.compile(r"([0-9]\.[0-9])|(master)")
3333

3434

35-
def test_allows_master_version(monkeypatch: pytest.MonkeyPatch) -> None:
36-
"""Assert get_version() works with builds from git trunk."""
37-
38-
class Hi:
39-
stdout: t.ClassVar = ["tmux master"]
40-
stderr = None
41-
42-
def mock_tmux_cmd(*args: t.Any, **kwargs: t.Any) -> Hi:
43-
return Hi()
44-
45-
monkeypatch.setattr(libtmux.common, "tmux_cmd", mock_tmux_cmd)
46-
47-
assert has_minimum_version()
48-
assert has_gte_version(TMUX_MIN_VERSION)
49-
assert has_gt_version(TMUX_MAX_VERSION), "Greater than the max-supported version"
50-
assert get_version() == f"{TMUX_MAX_VERSION}-master", (
51-
"Is the latest supported version with -master appended"
52-
)
53-
54-
55-
def test_allows_next_version(monkeypatch: pytest.MonkeyPatch) -> None:
56-
"""Assert get_version() supports next version."""
57-
TMUX_NEXT_VERSION = str(float(TMUX_MAX_VERSION) + 0.1)
58-
59-
class Hi:
60-
stdout: t.ClassVar = [f"tmux next-{TMUX_NEXT_VERSION}"]
61-
stderr = None
62-
63-
def mock_tmux_cmd(*args: t.Any, **kwargs: t.Any) -> Hi:
64-
return Hi()
65-
66-
monkeypatch.setattr(libtmux.common, "tmux_cmd", mock_tmux_cmd)
67-
68-
assert has_minimum_version()
69-
assert has_gte_version(TMUX_MIN_VERSION)
70-
assert has_gt_version(TMUX_MAX_VERSION), "Greater than the max-supported version"
71-
assert get_version() == TMUX_NEXT_VERSION
72-
73-
74-
def test_get_version_openbsd(monkeypatch: pytest.MonkeyPatch) -> None:
75-
"""Assert get_version() with OpenBSD versions."""
76-
77-
class Hi:
78-
stderr: t.ClassVar = ["tmux: unknown option -- V"]
79-
80-
def mock_tmux_cmd(*args: t.Any, **kwargs: t.Any) -> Hi:
81-
return Hi()
82-
83-
monkeypatch.setattr(libtmux.common, "tmux_cmd", mock_tmux_cmd)
84-
monkeypatch.setattr(sys, "platform", "openbsd 5.2")
85-
assert has_minimum_version()
86-
assert has_gte_version(TMUX_MIN_VERSION)
87-
assert has_gt_version(TMUX_MAX_VERSION), "Greater than the max-supported version"
88-
assert get_version() == f"{TMUX_MAX_VERSION}-openbsd", (
89-
"Is the latest supported version with -openbsd appended"
90-
)
91-
92-
93-
def test_get_version_too_low(monkeypatch: pytest.MonkeyPatch) -> None:
94-
"""Assert get_version() raises if tmux version too low."""
95-
96-
class Hi:
97-
stderr: t.ClassVar = ["tmux: unknown option -- V"]
98-
99-
def mock_tmux_cmd(*args: t.Any, **kwargs: t.Any) -> Hi:
100-
return Hi()
101-
102-
monkeypatch.setattr(libtmux.common, "tmux_cmd", mock_tmux_cmd)
103-
with pytest.raises(LibTmuxException) as exc_info:
104-
get_version()
105-
exc_info.match("is running tmux 1.3 or earlier")
106-
107-
10835
def test_ignores_letter_versions(monkeypatch: pytest.MonkeyPatch) -> None:
10936
"""Tests version utilities ignores letters such as 1.8b.
11037
@@ -385,3 +312,95 @@ def test_version_comparison(
385312
"lte": has_lte_version,
386313
}
387314
assert comparison_funcs[comparison_type](version) == expected
315+
316+
317+
class VersionParsingFixture(t.NamedTuple):
318+
"""Test fixture for version parsing and validation."""
319+
320+
test_id: str
321+
mock_stdout: list[str] | None
322+
mock_stderr: list[str] | None
323+
mock_platform: str | None
324+
expected_version: str | None
325+
raises: bool
326+
exc_msg_regex: str | None
327+
328+
329+
VERSION_PARSING_FIXTURES: list[VersionParsingFixture] = [
330+
VersionParsingFixture(
331+
test_id="master_version",
332+
mock_stdout=["tmux master"],
333+
mock_stderr=None,
334+
mock_platform=None,
335+
expected_version=f"{TMUX_MAX_VERSION}-master",
336+
raises=False,
337+
exc_msg_regex=None,
338+
),
339+
VersionParsingFixture(
340+
test_id="next_version",
341+
mock_stdout=[f"tmux next-{float(TMUX_MAX_VERSION) + 0.1!s}"],
342+
mock_stderr=None,
343+
mock_platform=None,
344+
expected_version=str(float(TMUX_MAX_VERSION) + 0.1),
345+
raises=False,
346+
exc_msg_regex=None,
347+
),
348+
VersionParsingFixture(
349+
test_id="openbsd_version",
350+
mock_stdout=None,
351+
mock_stderr=["tmux: unknown option -- V"],
352+
mock_platform="openbsd 5.2",
353+
expected_version=f"{TMUX_MAX_VERSION}-openbsd",
354+
raises=False,
355+
exc_msg_regex=None,
356+
),
357+
VersionParsingFixture(
358+
test_id="too_low_version",
359+
mock_stdout=None,
360+
mock_stderr=["tmux: unknown option -- V"],
361+
mock_platform=None,
362+
expected_version=None,
363+
raises=True,
364+
exc_msg_regex="is running tmux 1.3 or earlier",
365+
),
366+
]
367+
368+
369+
@pytest.mark.parametrize(
370+
list(VersionParsingFixture._fields),
371+
VERSION_PARSING_FIXTURES,
372+
ids=[test.test_id for test in VERSION_PARSING_FIXTURES],
373+
)
374+
def test_version_parsing(
375+
monkeypatch: pytest.MonkeyPatch,
376+
test_id: str,
377+
mock_stdout: list[str] | None,
378+
mock_stderr: list[str] | None,
379+
mock_platform: str | None,
380+
expected_version: str | None,
381+
raises: bool,
382+
exc_msg_regex: str | None,
383+
) -> None:
384+
"""Test version parsing and validation."""
385+
386+
class MockTmuxOutput:
387+
stdout = mock_stdout
388+
stderr = mock_stderr
389+
390+
def mock_tmux_cmd(*args: t.Any, **kwargs: t.Any) -> MockTmuxOutput:
391+
return MockTmuxOutput()
392+
393+
monkeypatch.setattr(libtmux.common, "tmux_cmd", mock_tmux_cmd)
394+
if mock_platform is not None:
395+
monkeypatch.setattr(sys, "platform", mock_platform)
396+
397+
if raises:
398+
with pytest.raises(LibTmuxException) as exc_info:
399+
get_version()
400+
if exc_msg_regex is not None:
401+
exc_info.match(exc_msg_regex)
402+
else:
403+
assert get_version() == expected_version
404+
assert has_minimum_version()
405+
assert has_gte_version(TMUX_MIN_VERSION)
406+
assert has_gt_version(TMUX_MAX_VERSION)

0 commit comments

Comments
 (0)