diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 01:05:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 01:05:28 +0000 |
commit | 603d7e38226d352911eceeab4da1923650e643f6 (patch) | |
tree | 84d71cbed5a71724f9451147ebf86124f548ec3a /tests/test_style.py | |
parent | Releasing progress-linux version 0.1.29-0.0~progress7.99u1. (diff) | |
download | debputy-603d7e38226d352911eceeab4da1923650e643f6.tar.xz debputy-603d7e38226d352911eceeab4da1923650e643f6.zip |
Merging upstream version 0.1.30.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'tests/test_style.py')
-rw-r--r-- | tests/test_style.py | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/tests/test_style.py b/tests/test_style.py new file mode 100644 index 0000000..9ce83bd --- /dev/null +++ b/tests/test_style.py @@ -0,0 +1,121 @@ +import pytest +from debian.deb822 import Deb822 + +from debputy.lsp.style_prefs import StylePreferenceTable, determine_effective_style +from debputy.packages import SourcePackage + + +def test_load_styles() -> None: + styles = StylePreferenceTable.load_styles() + assert "niels@thykier.net" in styles.maintainer_preferences + nt_style = styles.maintainer_preferences["niels@thykier.net"] + # Note this is data dependent; if it fails because the style changes, update the test + assert nt_style.canonical_name == "Niels Thykier" + assert not nt_style.is_packaging_team + assert nt_style.formatting_deb822_normalize_field_content + assert nt_style.formatting_deb822_short_indent + assert nt_style.formatting_deb822_always_wrap + assert nt_style.formatting_deb822_trailing_separator + assert nt_style.formatting_deb822_max_line_length == 79 + assert nt_style.formatting_deb822_normalize_stanza_order + + # TODO: Not implemented yet + assert not nt_style.formatting_deb822_normalize_field_order + + +def test_load_named_styles() -> None: + styles = StylePreferenceTable.load_styles() + assert "black" in styles.named_styles + black_style = styles.named_styles["black"] + # Note this is data dependent; if it fails because the style changes, update the test + assert black_style.formatting_deb822_normalize_field_content + assert black_style.formatting_deb822_short_indent + assert black_style.formatting_deb822_always_wrap + assert black_style.formatting_deb822_trailing_separator + assert black_style.formatting_deb822_max_line_length == 79 + assert black_style.formatting_deb822_normalize_stanza_order + + # TODO: Not implemented yet + assert not black_style.formatting_deb822_normalize_field_order + + +def test_compat_styles() -> None: + styles = StylePreferenceTable.load_styles() + + # Data dependent; if it breaks, provide a stubbed style preference table + assert "niels@thykier.net" in styles.maintainer_preferences + assert "zeha@debian.org" in styles.maintainer_preferences + assert "random-package@packages.debian.org" not in styles.maintainer_preferences + assert "random@example.org" not in styles.maintainer_preferences + + nt_pref = styles.maintainer_preferences["niels@thykier.net"].as_effective_pref() + zeha_pref = styles.maintainer_preferences["zeha@debian.org"].as_effective_pref() + + # Data dependency + assert nt_pref == zeha_pref + + fields = Deb822( + { + "Package": "foo", + "Maintainer": "Foo <random-package@packages.debian.org>", + "Uploaders": "Niels Thykier <niels@thykier.net>", + }, + ) + src = SourcePackage(fields) + + effective_style = determine_effective_style(styles, src) + assert effective_style == nt_pref + + fields["Uploaders"] = ( + "Niels Thykier <niels@thykier.net>, Chris Hofstaedtler <zeha@debian.org>" + ) + src = SourcePackage(fields) + + effective_style = determine_effective_style(styles, src) + assert effective_style == nt_pref + assert effective_style == zeha_pref + + fields["Uploaders"] = ( + "Niels Thykier <niels@thykier.net>, Chris Hofstaedtler <zeha@debian.org>, Random Developer <random@example.org>" + ) + src = SourcePackage(fields) + + effective_style = determine_effective_style(styles, src) + assert effective_style is None + + +@pytest.mark.xfail +def test_compat_styles_team_maint() -> None: + styles = StylePreferenceTable.load_styles() + fields = Deb822( + { + "Package": "foo", + # Missing a stubbed definition for `team@lists.debian.org` + "Maintainer": "Packaging Team <team@lists.debian.org>", + "Uploaders": "Random Developer <random@example.org>", + }, + ) + src = SourcePackage(fields) + assert "team@lists.debian.org" in styles.maintainer_preferences + assert "random@example.org" not in styles.maintainer_preferences + team_style = styles.maintainer_preferences["team@lists.debian.org"] + assert team_style.is_packaging_team + effective_style = determine_effective_style(styles, src) + assert effective_style == team_style.as_effective_pref() + + +def test_x_style() -> None: + styles = StylePreferenceTable.load_styles() + fields = Deb822( + { + "Package": "foo", + "X-Style": "black", + "Maintainer": "Random Developer <random@example.org>", + }, + ) + src = SourcePackage(fields) + assert "random@example.org" not in styles.maintainer_preferences + assert "black" in styles.named_styles + black_style = styles.named_styles["black"] + effective_style = determine_effective_style(styles, src) + assert effective_style == black_style |