##// END OF EJS Templates
tests: use NO_CHECK_EOF as heredoc limit mark to omit checking code fragments...
FUJIWARA Katsunori -
r40130:ff47ba7a default
parent child Browse files
Show More
@@ -1,375 +1,375 b''
1 $ cat > correct.py <<EOF
1 $ cat > correct.py <<NO_CHECK_EOF
2 2 > def toto(arg1, arg2):
3 3 > del arg2
4 4 > return (5 + 6, 9)
5 > EOF
6 $ cat > wrong.py <<EOF
5 > NO_CHECK_EOF
6 $ cat > wrong.py <<NO_CHECK_EOF
7 7 > def toto( arg1, arg2):
8 8 > del(arg2)
9 9 > return ( 5+6, 9)
10 > EOF
11 $ cat > quote.py <<EOF
10 > NO_CHECK_EOF
11 $ cat > quote.py <<NO_CHECK_EOF
12 12 > # let's use quote in comments
13 13 > (''' ( 4x5 )
14 14 > but """\\''' and finally''',
15 15 > """let's fool checkpatch""", '1+2',
16 16 > '"""', 42+1, """and
17 17 > ( 4-1 ) """, "( 1+1 )\" and ")
18 18 > a, '\\\\\\\\', "\\\\\\" x-2", "c-1"
19 > EOF
20 $ cat > classstyle.py <<EOF
19 > NO_CHECK_EOF
20 $ cat > classstyle.py <<NO_CHECK_EOF
21 21 > class newstyle_class(object):
22 22 > pass
23 23 >
24 24 > class oldstyle_class:
25 25 > pass
26 26 >
27 27 > class empty():
28 28 > pass
29 29 >
30 30 > no_class = 1:
31 31 > pass
32 > EOF
32 > NO_CHECK_EOF
33 33 $ check_code="$TESTDIR"/../contrib/check-code.py
34 34 $ "$check_code" ./wrong.py ./correct.py ./quote.py ./classstyle.py
35 35 ./wrong.py:1:
36 36 > def toto( arg1, arg2):
37 37 gratuitous whitespace in () or []
38 38 ./wrong.py:2:
39 39 > del(arg2)
40 40 Python keyword is not a function
41 41 ./wrong.py:3:
42 42 > return ( 5+6, 9)
43 43 gratuitous whitespace in () or []
44 44 missing whitespace in expression
45 45 ./quote.py:5:
46 46 > '"""', 42+1, """and
47 47 missing whitespace in expression
48 48 ./classstyle.py:4:
49 49 > class oldstyle_class:
50 50 old-style class, use class foo(object)
51 51 ./classstyle.py:7:
52 52 > class empty():
53 53 class foo() creates old style object, use class foo(object)
54 54 [1]
55 $ cat > python3-compat.py << EOF
55 $ cat > python3-compat.py << NO_CHECK_EOF
56 56 > foo <> bar
57 57 > reduce(lambda a, b: a + b, [1, 2, 3, 4])
58 58 > dict(key=value)
59 > EOF
59 > NO_CHECK_EOF
60 60 $ "$check_code" python3-compat.py
61 61 python3-compat.py:1:
62 62 > foo <> bar
63 63 <> operator is not available in Python 3+, use !=
64 64 python3-compat.py:2:
65 65 > reduce(lambda a, b: a + b, [1, 2, 3, 4])
66 66 reduce is not available in Python 3+
67 67 python3-compat.py:3:
68 68 > dict(key=value)
69 69 dict() is different in Py2 and 3 and is slower than {}
70 70 [1]
71 71
72 $ cat > foo.c <<EOF
72 $ cat > foo.c <<NO_CHECK_EOF
73 73 > void narf() {
74 74 > strcpy(foo, bar);
75 75 > // strcpy_s is okay, but this comment is not
76 76 > strcpy_s(foo, bar);
77 77 > }
78 > EOF
78 > NO_CHECK_EOF
79 79 $ "$check_code" ./foo.c
80 80 ./foo.c:2:
81 81 > strcpy(foo, bar);
82 82 don't use strcpy, use strlcpy or memcpy
83 83 ./foo.c:3:
84 84 > // strcpy_s is okay, but this comment is not
85 85 don't use //-style comments
86 86 [1]
87 87
88 $ cat > is-op.py <<EOF
88 $ cat > is-op.py <<NO_CHECK_EOF
89 89 > # is-operator comparing number or string literal
90 90 > x = None
91 91 > y = x is 'foo'
92 92 > y = x is "foo"
93 93 > y = x is 5346
94 94 > y = x is -6
95 95 > y = x is not 'foo'
96 96 > y = x is not "foo"
97 97 > y = x is not 5346
98 98 > y = x is not -6
99 > EOF
99 > NO_CHECK_EOF
100 100
101 101 $ "$check_code" ./is-op.py
102 102 ./is-op.py:3:
103 103 > y = x is 'foo'
104 104 object comparison with literal
105 105 ./is-op.py:4:
106 106 > y = x is "foo"
107 107 object comparison with literal
108 108 ./is-op.py:5:
109 109 > y = x is 5346
110 110 object comparison with literal
111 111 ./is-op.py:6:
112 112 > y = x is -6
113 113 object comparison with literal
114 114 ./is-op.py:7:
115 115 > y = x is not 'foo'
116 116 object comparison with literal
117 117 ./is-op.py:8:
118 118 > y = x is not "foo"
119 119 object comparison with literal
120 120 ./is-op.py:9:
121 121 > y = x is not 5346
122 122 object comparison with literal
123 123 ./is-op.py:10:
124 124 > y = x is not -6
125 125 object comparison with literal
126 126 [1]
127 127
128 $ cat > for-nolineno.py <<EOF
128 $ cat > for-nolineno.py <<NO_CHECK_EOF
129 129 > except:
130 > EOF
130 > NO_CHECK_EOF
131 131 $ "$check_code" for-nolineno.py --nolineno
132 132 for-nolineno.py:0:
133 133 > except:
134 134 naked except clause
135 135 [1]
136 136
137 $ cat > warning.t <<EOF
137 $ cat > warning.t <<NO_CHECK_EOF
138 138 > $ function warnonly {
139 139 > > }
140 140 > $ diff -N aaa
141 141 > $ function onwarn {}
142 > EOF
142 > NO_CHECK_EOF
143 143 $ "$check_code" warning.t
144 144 $ "$check_code" --warn warning.t
145 145 warning.t:1:
146 146 > $ function warnonly {
147 147 warning: don't use 'function', use old style
148 148 warning.t:3:
149 149 > $ diff -N aaa
150 150 warning: don't use 'diff -N'
151 151 warning.t:4:
152 152 > $ function onwarn {}
153 153 warning: don't use 'function', use old style
154 154 [1]
155 $ cat > error.t <<EOF
155 $ cat > error.t <<NO_CHECK_EOF
156 156 > $ [ foo == bar ]
157 > EOF
157 > NO_CHECK_EOF
158 158 $ "$check_code" error.t
159 159 error.t:1:
160 160 > $ [ foo == bar ]
161 161 [ foo == bar ] is a bashism, use [ foo = bar ] instead
162 162 [1]
163 163 $ rm error.t
164 $ cat > raise-format.py <<EOF
164 $ cat > raise-format.py <<NO_CHECK_EOF
165 165 > raise SomeException, message
166 166 > # this next line is okay
167 167 > raise SomeException(arg1, arg2)
168 > EOF
168 > NO_CHECK_EOF
169 169 $ "$check_code" not-existing.py raise-format.py
170 170 Skipping*not-existing.py* (glob)
171 171 raise-format.py:1:
172 172 > raise SomeException, message
173 173 don't use old-style two-argument raise, use Exception(message)
174 174 [1]
175 175
176 $ cat <<EOF > tab.t
176 $ cat <<NO_CHECK_EOF > tab.t
177 177 > indent
178 178 > > heredoc
179 > EOF
179 > NO_CHECK_EOF
180 180 $ "$check_code" tab.t
181 181 tab.t:1:
182 182 > indent
183 183 don't use tabs to indent
184 184 [1]
185 185 $ rm tab.t
186 186
187 $ cat > rst.py <<EOF
187 $ cat > rst.py <<NO_CHECK_EOF
188 188 > """problematic rst text
189 189 >
190 190 > .. note::
191 191 > wrong
192 192 > """
193 193 >
194 194 > '''
195 195 >
196 196 > .. note::
197 197 >
198 198 > valid
199 199 >
200 200 > new text
201 201 >
202 202 > .. note::
203 203 >
204 204 > also valid
205 205 > '''
206 206 >
207 207 > """mixed
208 208 >
209 209 > .. note::
210 210 >
211 211 > good
212 212 >
213 213 > .. note::
214 214 > plus bad
215 215 > """
216 > EOF
216 > NO_CHECK_EOF
217 217 $ $check_code -w rst.py
218 218 rst.py:3:
219 219 > .. note::
220 220 warning: add two newlines after '.. note::'
221 221 rst.py:26:
222 222 > .. note::
223 223 warning: add two newlines after '.. note::'
224 224 [1]
225 225
226 $ cat > ./map-inside-gettext.py <<EOF
226 $ cat > ./map-inside-gettext.py <<NO_CHECK_EOF
227 227 > print(_("map inside gettext %s" % v))
228 228 >
229 229 > print(_("concatenating " " by " " space %s" % v))
230 230 > print(_("concatenating " + " by " + " '+' %s" % v))
231 231 >
232 232 > print(_("mapping operation in different line %s"
233 233 > % v))
234 234 >
235 235 > print(_(
236 236 > "leading spaces inside of '(' %s" % v))
237 > EOF
237 > NO_CHECK_EOF
238 238 $ "$check_code" ./map-inside-gettext.py
239 239 ./map-inside-gettext.py:1:
240 240 > print(_("map inside gettext %s" % v))
241 241 don't use % inside _()
242 242 ./map-inside-gettext.py:3:
243 243 > print(_("concatenating " " by " " space %s" % v))
244 244 don't use % inside _()
245 245 ./map-inside-gettext.py:4:
246 246 > print(_("concatenating " + " by " + " '+' %s" % v))
247 247 don't use % inside _()
248 248 ./map-inside-gettext.py:6:
249 249 > print(_("mapping operation in different line %s"
250 250 don't use % inside _()
251 251 ./map-inside-gettext.py:9:
252 252 > print(_(
253 253 don't use % inside _()
254 254 [1]
255 255
256 256 web templates
257 257
258 258 $ mkdir -p mercurial/templates
259 $ cat > mercurial/templates/example.tmpl <<EOF
259 $ cat > mercurial/templates/example.tmpl <<NO_CHECK_EOF
260 260 > {desc}
261 261 > {desc|escape}
262 262 > {desc|firstline}
263 263 > {desc|websub}
264 > EOF
264 > NO_CHECK_EOF
265 265
266 266 $ "$check_code" --warnings mercurial/templates/example.tmpl
267 267 mercurial/templates/example.tmpl:2:
268 268 > {desc|escape}
269 269 warning: follow desc keyword with either firstline or websub
270 270 [1]
271 271
272 272 'string join across lines with no space' detection
273 273
274 $ cat > stringjoin.py <<EOF
274 $ cat > stringjoin.py <<NO_CHECK_EOF
275 275 > foo = (' foo'
276 276 > 'bar foo.'
277 277 > 'bar foo:'
278 278 > 'bar foo@'
279 279 > 'bar foo%'
280 280 > 'bar foo*'
281 281 > 'bar foo+'
282 282 > 'bar foo-'
283 283 > 'bar')
284 > EOF
284 > NO_CHECK_EOF
285 285
286 286 'missing _() in ui message' detection
287 287
288 $ cat > uigettext.py <<EOF
288 $ cat > uigettext.py <<NO_CHECK_EOF
289 289 > ui.status("% 10s %05d % -3.2f %*s %%"
290 290 > # this use '\\\\' instead of '\\', because the latter in
291 291 > # heredoc on shell becomes just '\'
292 292 > '\\\\ \n \t \0'
293 293 > """12345
294 294 > """
295 295 > '''.:*+-=
296 296 > ''' "%-6d \n 123456 .:*+-= foobar")
297 > EOF
297 > NO_CHECK_EOF
298 298
299 299 superfluous pass
300 300
301 $ cat > superfluous_pass.py <<EOF
301 $ cat > superfluous_pass.py <<NO_CHECK_EOF
302 302 > # correct examples
303 303 > if foo:
304 304 > pass
305 305 > else:
306 306 > # comment-only line means still need pass
307 307 > pass
308 308 > def nothing():
309 309 > pass
310 310 > class empty(object):
311 311 > pass
312 312 > if whatever:
313 313 > passvalue(value)
314 314 > # bad examples
315 315 > if foo:
316 316 > "foo"
317 317 > pass
318 318 > else: # trailing comment doesn't fool checker
319 319 > wat()
320 320 > pass
321 321 > def nothing():
322 322 > "docstring means no pass"
323 323 > pass
324 324 > class empty(object):
325 325 > """multiline
326 326 > docstring also
327 327 > means no pass"""
328 328 > pass
329 > EOF
329 > NO_CHECK_EOF
330 330
331 331 (Checking multiple invalid files at once examines whether caching
332 332 translation table for repquote() works as expected or not. All files
333 333 should break rules depending on result of repquote(), in this case)
334 334
335 335 $ "$check_code" stringjoin.py uigettext.py superfluous_pass.py
336 336 stringjoin.py:1:
337 337 > foo = (' foo'
338 338 string join across lines with no space
339 339 stringjoin.py:2:
340 340 > 'bar foo.'
341 341 string join across lines with no space
342 342 stringjoin.py:3:
343 343 > 'bar foo:'
344 344 string join across lines with no space
345 345 stringjoin.py:4:
346 346 > 'bar foo@'
347 347 string join across lines with no space
348 348 stringjoin.py:5:
349 349 > 'bar foo%'
350 350 string join across lines with no space
351 351 stringjoin.py:6:
352 352 > 'bar foo*'
353 353 string join across lines with no space
354 354 stringjoin.py:7:
355 355 > 'bar foo+'
356 356 string join across lines with no space
357 357 stringjoin.py:8:
358 358 > 'bar foo-'
359 359 string join across lines with no space
360 360 uigettext.py:1:
361 361 > ui.status("% 10s %05d % -3.2f %*s %%"
362 362 missing _() in ui message (use () to hide false-positives)
363 363 superfluous_pass.py:14:
364 364 > if foo:
365 365 omit superfluous pass
366 366 superfluous_pass.py:17:
367 367 > else: # trailing comment doesn't fool checker
368 368 omit superfluous pass
369 369 superfluous_pass.py:20:
370 370 > def nothing():
371 371 omit superfluous pass
372 372 superfluous_pass.py:23:
373 373 > class empty(object):
374 374 omit superfluous pass
375 375 [1]
General Comments 0
You need to be logged in to leave comments. Login now