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 ", "Uploaders": "Niels Thykier ", }, ) src = SourcePackage(fields) effective_style = determine_effective_style(styles, src) assert effective_style == nt_pref fields["Uploaders"] = ( "Niels Thykier , Chris Hofstaedtler " ) src = SourcePackage(fields) effective_style = determine_effective_style(styles, src) assert effective_style == nt_pref assert effective_style == zeha_pref fields["Uploaders"] = ( "Niels Thykier , Chris Hofstaedtler , Random Developer " ) 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 ", "Uploaders": "Random Developer ", }, ) 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 ", }, ) 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