1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
import textwrap
from typing import List, TYPE_CHECKING
from collections.abc import Sequence
import pytest
from debputy.lsp.languages.lsp_debian_control import _reformat_debian_control
from debputy.lsp.maint_prefs import MaintainerPreferenceTable
from debputy.lsp.text_edit import apply_text_edits
from debputy.packages import DctrlParser
from debputy.plugin.api.feature_set import PluginProvidedFeatureSet
from lint_tests.lint_tutil import (
ReformatWrapper,
apply_formatting_edits,
)
if TYPE_CHECKING:
import lsprotocol.types as types
else:
import debputy.lsprotocol.types as types
ALL_REQUIRED_FILES = [
"debian/changelog",
"debian/copyright",
]
@pytest.fixture
def reformater(
debputy_plugin_feature_set: PluginProvidedFeatureSet,
lint_dctrl_parser: DctrlParser,
maintainer_preference_table: MaintainerPreferenceTable,
) -> ReformatWrapper:
return ReformatWrapper(
"/nowhere/debian/control",
_reformat_debian_control,
debputy_plugin_feature_set,
lint_dctrl_parser,
maintainer_preference_table,
)
def test_dctrl_reformat(reformater: ReformatWrapper) -> None:
lines = textwrap.dedent(
"""\
Source: foo
Some-Other-Field: bar
Build-Depends: debhelper-compat (= 13)
Homepage: https://example.com
Package: foo
Architecture: all
Section: devel
"""
).splitlines(keepends=True)
edits = reformater.reformat(lines)
# By default, we do nothing
assert not edits
edits_black = reformater.reformat_with_named_style("black", lines)
assert edits_black
actual_reformatted_black = apply_formatting_edits(lines, edits_black)
expected_reformatted_black = textwrap.dedent(
"""\
Source: foo
Some-Other-Field: bar
Build-Depends:
debhelper-compat (= 13),
Homepage: https://example.com
Package: foo
Architecture: all
Section: devel
"""
)
assert actual_reformatted_black == expected_reformatted_black
def test_dctrl_reformat_canonicalize_field_names(reformater: ReformatWrapper) -> None:
lines = textwrap.dedent(
"""\
source: foo
# This field will not change case, since it is unknown
some-other-field: bar
BUILD-DEPENDS:
debhelper-compat (= 13),
# In memory of Steve (#1068220)
HoMEpaGe: https://example.com
package: foo
architecture: all
Section: devel
"""
).splitlines(keepends=True)
edits = reformater.reformat(lines)
# By default, we do nothing
assert not edits
edits_black = reformater.reformat_with_named_style("black", lines)
assert edits_black
actual_reformatted_black = apply_formatting_edits(lines, edits_black)
expected_reformatted_black = textwrap.dedent(
"""\
Source: foo
# This field will not change case, since it is unknown
some-other-field: bar
Build-Depends:
debhelper-compat (= 13),
# In memory of Steve (#1068220)
Homepage: https://example.com
Package: foo
Architecture: all
Section: devel
"""
)
assert actual_reformatted_black == expected_reformatted_black
def test_dctrl_reformat_preserve_comments(reformater: ReformatWrapper) -> None:
# Based on an example observed in sbuild`. Thanks to zeha fore reporting.
lines = textwrap.dedent(
"""\
Source: foo
# Test
Build-Depends:
foo,
bar,
Package: foo
# Test
architecture: i386 amd64
Section: devel
# Test
Depends: foo
# Test
recommends:
bar,
"""
).splitlines(keepends=True)
edits = reformater.reformat(lines)
# By default, we do nothing
assert not edits
edits_black = reformater.reformat_with_named_style("black", lines)
assert edits_black
actual_reformatted_black = apply_formatting_edits(lines, edits_black)
expected_reformatted_black = textwrap.dedent(
"""\
Source: foo
# Test
Build-Depends:
bar,
foo,
Package: foo
# Test
Architecture: amd64 i386
Section: devel
# Test
Depends:
foo,
# Test
Recommends:
bar,
"""
)
assert actual_reformatted_black == expected_reformatted_black
|