Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 135f9ab

Browse filesBrowse files
committed
test(common): Convert version validation tests to use NamedTuple fixture
1 parent d2e3aea commit 135f9ab
Copy full SHA for 135f9ab

File tree

Expand file treeCollapse file tree

1 file changed

+144
-40
lines changed
Filter options
Expand file treeCollapse file tree

1 file changed

+144
-40
lines changed

‎tests/test_common.py

Copy file name to clipboardExpand all lines: tests/test_common.py
+144-40Lines changed: 144 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -32,46 +32,6 @@
3232
version_regex = re.compile(r"([0-9]\.[0-9])|(master)")
3333

3434

35-
def test_ignores_letter_versions(monkeypatch: pytest.MonkeyPatch) -> None:
36-
"""Tests version utilities ignores letters such as 1.8b.
37-
38-
See ticket https://github.com/tmux-python/tmuxp/issues/55.
39-
40-
In version 0.1.7 this is adjusted to use LooseVersion, in order to
41-
allow letters.
42-
43-
"""
44-
monkeypatch.setattr(libtmux.common, "TMUX_MIN_VERSION", "1.9a")
45-
result = has_minimum_version()
46-
assert result
47-
48-
monkeypatch.setattr(libtmux.common, "TMUX_MIN_VERSION", "1.8a")
49-
result = has_minimum_version()
50-
assert result
51-
52-
# Should not throw
53-
assert isinstance(has_version("1.8"), bool)
54-
assert isinstance(has_version("1.8a"), bool)
55-
assert isinstance(has_version("1.9a"), bool)
56-
57-
58-
def test_error_version_less_1_7(monkeypatch: pytest.MonkeyPatch) -> None:
59-
"""Test raises if tmux version less than 1.7."""
60-
61-
def mock_get_version() -> LooseVersion:
62-
return LooseVersion("1.7")
63-
64-
monkeypatch.setattr(libtmux.common, "get_version", mock_get_version)
65-
with pytest.raises(LibTmuxException) as excinfo:
66-
has_minimum_version()
67-
excinfo.match(r"libtmux only supports")
68-
69-
with pytest.raises(LibTmuxException) as excinfo:
70-
has_minimum_version()
71-
72-
excinfo.match(r"libtmux only supports")
73-
74-
7535
def test_has_version() -> None:
7636
"""Test has_version()."""
7737
assert has_version(str(get_version()))
@@ -404,3 +364,147 @@ def mock_tmux_cmd(*args: t.Any, **kwargs: t.Any) -> MockTmuxOutput:
404364
assert has_minimum_version()
405365
assert has_gte_version(TMUX_MIN_VERSION)
406366
assert has_gt_version(TMUX_MAX_VERSION)
367+
368+
369+
class VersionValidationFixture(t.NamedTuple):
370+
"""Test fixture for version validation tests."""
371+
372+
test_id: str
373+
mock_min_version: str | None
374+
mock_version: str | None
375+
check_type: t.Literal["min_version", "has_version", "type_check"]
376+
raises: bool
377+
exc_msg_regex: str | None
378+
379+
380+
VERSION_VALIDATION_FIXTURES: list[VersionValidationFixture] = [
381+
# Letter version tests
382+
VersionValidationFixture(
383+
test_id="accepts_letter_in_min_version_1_9a",
384+
mock_min_version="1.9a",
385+
mock_version=None,
386+
check_type="min_version",
387+
raises=False,
388+
exc_msg_regex=None,
389+
),
390+
VersionValidationFixture(
391+
test_id="accepts_letter_in_min_version_1_8a",
392+
mock_min_version="1.8a",
393+
mock_version=None,
394+
check_type="min_version",
395+
raises=False,
396+
exc_msg_regex=None,
397+
),
398+
VersionValidationFixture(
399+
test_id="accepts_version_1_8",
400+
mock_min_version=None,
401+
mock_version="1.8",
402+
check_type="type_check",
403+
raises=False,
404+
exc_msg_regex=None,
405+
),
406+
VersionValidationFixture(
407+
test_id="accepts_version_1_8a",
408+
mock_min_version=None,
409+
mock_version="1.8a",
410+
check_type="type_check",
411+
raises=False,
412+
exc_msg_regex=None,
413+
),
414+
VersionValidationFixture(
415+
test_id="accepts_version_1_9a",
416+
mock_min_version=None,
417+
mock_version="1.9a",
418+
check_type="type_check",
419+
raises=False,
420+
exc_msg_regex=None,
421+
),
422+
# Version too low tests
423+
VersionValidationFixture(
424+
test_id="rejects_version_1_7",
425+
mock_min_version=None,
426+
mock_version="1.7",
427+
check_type="min_version",
428+
raises=True,
429+
exc_msg_regex=r"libtmux only supports",
430+
),
431+
# Additional test cases for version validation
432+
VersionValidationFixture(
433+
test_id="accepts_master_version",
434+
mock_min_version=None,
435+
mock_version="master",
436+
check_type="type_check",
437+
raises=False,
438+
exc_msg_regex=None,
439+
),
440+
VersionValidationFixture(
441+
test_id="accepts_next_version",
442+
mock_min_version=None,
443+
mock_version="next-3.4",
444+
check_type="type_check",
445+
raises=False,
446+
exc_msg_regex=None,
447+
),
448+
VersionValidationFixture(
449+
test_id="accepts_openbsd_version",
450+
mock_min_version=None,
451+
mock_version="3.3-openbsd",
452+
check_type="type_check",
453+
raises=False,
454+
exc_msg_regex=None,
455+
),
456+
VersionValidationFixture(
457+
test_id="accepts_dev_version",
458+
mock_min_version=None,
459+
mock_version="3.3-dev",
460+
check_type="type_check",
461+
raises=False,
462+
exc_msg_regex=None,
463+
),
464+
VersionValidationFixture(
465+
test_id="accepts_rc_version",
466+
mock_min_version=None,
467+
mock_version="3.3-rc2",
468+
check_type="type_check",
469+
raises=False,
470+
exc_msg_regex=None,
471+
),
472+
]
473+
474+
475+
@pytest.mark.parametrize(
476+
list(VersionValidationFixture._fields),
477+
VERSION_VALIDATION_FIXTURES,
478+
ids=[test.test_id for test in VERSION_VALIDATION_FIXTURES],
479+
)
480+
def test_version_validation(
481+
monkeypatch: pytest.MonkeyPatch,
482+
test_id: str,
483+
mock_min_version: str | None,
484+
mock_version: str | None,
485+
check_type: t.Literal["min_version", "has_version", "type_check"],
486+
raises: bool,
487+
exc_msg_regex: str | None,
488+
) -> None:
489+
"""Test version validation."""
490+
if mock_min_version is not None:
491+
monkeypatch.setattr(libtmux.common, "TMUX_MIN_VERSION", mock_min_version)
492+
493+
if mock_version is not None:
494+
495+
def mock_get_version() -> LooseVersion:
496+
return LooseVersion(mock_version)
497+
498+
monkeypatch.setattr(libtmux.common, "get_version", mock_get_version)
499+
500+
if check_type == "min_version":
501+
if raises:
502+
with pytest.raises(LibTmuxException) as exc_info:
503+
has_minimum_version()
504+
if exc_msg_regex is not None:
505+
exc_info.match(exc_msg_regex)
506+
else:
507+
assert has_minimum_version()
508+
elif check_type == "type_check":
509+
assert mock_version is not None # For type checker
510+
assert isinstance(has_version(mock_version), bool)

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.