summaryrefslogtreecommitdiffstats
path: root/tests/test_style.py
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 01:05:28 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 01:05:28 +0000
commit603d7e38226d352911eceeab4da1923650e643f6 (patch)
tree84d71cbed5a71724f9451147ebf86124f548ec3a /tests/test_style.py
parentReleasing progress-linux version 0.1.29-0.0~progress7.99u1. (diff)
downloaddebputy-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 '')
-rw-r--r--tests/test_style.py121
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