Skip to content

Commit 8cab76f

Browse files
Add functional tests for issue #4273
1 parent 9d890bf commit 8cab76f

File tree

2 files changed

+67
-44
lines changed

2 files changed

+67
-44
lines changed

tests/functional/s/string/string_formatting.py

+24-3
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
1-
"""test for Python 3 string formatting error
2-
"""
3-
# pylint: disable=too-few-public-methods, import-error, unused-argument, line-too-long, no-absolute-import, useless-object-inheritance
1+
"""Test for Python 3 string formatting error"""
2+
3+
# pylint: disable=too-few-public-methods, import-error, unused-argument, line-too-long, no-absolute-import,
4+
# pylint: disable=useless-object-inheritance
45
import os
56
import sys
7+
import logging
68
from missing import Missing
79

810

@@ -11,24 +13,29 @@ class Custom(object):
1113
def __getattr__(self, _):
1214
return self
1315

16+
1417
class Test(object):
1518
""" test format attribute access """
1619
custom = Custom()
1720
ids = [1, 2, 3, [4, 5, 6]]
1821

22+
1923
class Getitem(object):
2024
""" test custom getitem for lookup access """
2125
def __getitem__(self, index):
2226
return 42
2327

28+
2429
class ReturnYes(object):
2530
""" can't be properly infered """
2631
missing = Missing()
2732

33+
2834
def log(message, message_type="error"):
2935
""" Test """
3036
return message
3137

38+
3239
def print_good():
3340
""" Good format strings """
3441
"{0} {1}".format(1, 2)
@@ -52,6 +59,9 @@ def print_good():
5259
"{0} {1}".format(*[1, 2])
5360
"{a} {b}".format(**{'a': 1, 'b': 2})
5461
"{a}".format(a=Missing())
62+
logging.debug("%s", 42)
63+
logging.debug("%s %s", 42, 43)
64+
5565

5666
def pprint_bad():
5767
"""Test string format """
@@ -86,6 +96,9 @@ def pprint_bad():
8696
"{0} {a}".format(a=4) # [too-few-format-args]
8797
"{[0]} {}".format([4]) # [too-few-format-args]
8898
"{[0]} {}".format([4], 5, 6) # [too-many-format-args]
99+
logging.debug("%s %s", 42) # [logging-too-few-args]
100+
logging.debug("%s", 42, 43) # [logging-too-many-args]
101+
89102

90103
def good_issue288(*args, **kwargs):
91104
""" Test that using kwargs does not emit a false
@@ -94,6 +107,7 @@ def good_issue288(*args, **kwargs):
94107
'Hello John Doe {0[0]}'.format(args)
95108
'Hello {0[name]}'.format(kwargs)
96109

110+
97111
def good_issue287():
98112
""" Test that the string format checker skips
99113
format nodes which don't have a string as a parent
@@ -105,6 +119,7 @@ def good_issue287():
105119
ret['comment'] = ret['comment'].format(name)
106120
return ret, name
107121

122+
108123
def nested_issue294():
109124
""" Test nested format fields. """
110125
'{0:>{1}}'.format(42, 24)
@@ -115,11 +130,13 @@ def nested_issue294():
115130
'{0:{a[1]}}'.format(1) # [missing-format-argument-key]
116131
'{0:{a.x}}'.format(1, a=2) # [missing-format-attribute]
117132

133+
118134
def issue310():
119135
""" Test a regression using duplicate manual position arguments. """
120136
'{0} {1} {0}'.format(1, 2)
121137
'{0} {1} {0}'.format(1) # [too-few-format-args]
122138

139+
123140
def issue322():
124141
""" Test a regression using mixed manual position arguments
125142
and attribute access arguments.
@@ -128,6 +145,7 @@ def issue322():
128145
'{0}{1[FOO]}'.format(123, {'FOO': 456}, 321) # [too-many-format-args]
129146
'{0}{1[FOO]}'.format(123) # [too-few-format-args]
130147

148+
131149
def issue338():
132150
"""
133151
Check that using a namedtuple subclass doesn't crash when
@@ -144,6 +162,7 @@ def __str__(self):
144162
return "{0.foo}: {0.bar}".format(self)
145163
return Crash
146164

165+
147166
def issue351():
148167
"""
149168
Check that the format method can be assigned to a variable, ie:
@@ -153,6 +172,7 @@ def issue351():
153172
fmt('arg1', 'arg2')
154173
fmt('arg1', 'arg2', 'arg3') # [too-many-format-args]
155174

175+
156176
def issue373():
157177
"""
158178
Ignore any object coming from an argument.
@@ -172,6 +192,7 @@ def func(self):
172192

173193
return SomeClass
174194

195+
175196
def issue_463():
176197
"""
177198
Mix positional arguments, `{0}`, with positional
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,43 @@
1-
too-many-format-args:58:4:pprint_bad:Too many arguments for format string
2-
bad-format-string:59:4:pprint_bad:Invalid format string
3-
bad-format-string:60:4:pprint_bad:Invalid format string
4-
format-combined-specification:61:4:pprint_bad:Format string contains both automatic field numbering and manual field specification
5-
missing-format-argument-key:63:4:pprint_bad:Missing keyword argument 'b' for format string
6-
unused-format-string-argument:63:4:pprint_bad:Unused format argument 'c'
7-
missing-format-argument-key:64:4:pprint_bad:Missing keyword argument 'a' for format string
8-
too-few-format-args:65:4:pprint_bad:Not enough arguments for format string
9-
too-many-format-args:66:4:pprint_bad:Too many arguments for format string
10-
missing-format-argument-key:68:4:pprint_bad:Missing keyword argument 'a' for format string
11-
missing-format-argument-key:68:4:pprint_bad:Missing keyword argument 'b' for format string
12-
missing-format-argument-key:68:4:pprint_bad:Missing keyword argument 'c' for format string
13-
too-few-format-args:69:4:pprint_bad:Not enough arguments for format string
14-
missing-format-argument-key:71:4:pprint_bad:Missing keyword argument 'a' for format string
15-
missing-format-argument-key:71:4:pprint_bad:Missing keyword argument 'b' for format string
16-
missing-format-argument-key:72:4:pprint_bad:Missing keyword argument 'a' for format string
17-
missing-format-attribute:74:4:pprint_bad:Missing format attribute 'length' in format specifier 'a.ids.__len__.length'
18-
invalid-format-index:75:4:pprint_bad:Using invalid lookup key 400 in format specifier 'a.ids[3][400]'
19-
invalid-format-index:76:4:pprint_bad:"Using invalid lookup key ""'string'"" in format specifier 'a.ids[3][""\'string\'""]'"
20-
invalid-format-index:77:4:pprint_bad:Using invalid lookup key 1 in format specifier '0[0][1]'
21-
invalid-format-index:78:4:pprint_bad:Using invalid lookup key 0 in format specifier '0[0][0]'
22-
missing-format-argument-key:80:4:pprint_bad:Missing keyword argument 'b' for format string
23-
unused-format-string-argument:80:4:pprint_bad:Unused format argument 'a'
24-
invalid-format-index:81:4:pprint_bad:Using invalid lookup key 0 in format specifier 'a[0]'
25-
too-many-format-args:82:8:pprint_bad:Too many arguments for format string
26-
missing-format-attribute:83:4:pprint_bad:Missing format attribute 'missing' in format specifier '0.missing'
27-
too-few-format-args:84:4:pprint_bad:Not enough arguments for format string
28-
too-many-format-args:85:4:pprint_bad:Too many arguments for format string
29-
too-few-format-args:86:4:pprint_bad:Not enough arguments for format string
30-
too-few-format-args:87:4:pprint_bad:Not enough arguments for format string
31-
too-many-format-args:88:4:pprint_bad:Too many arguments for format string
32-
too-few-format-args:113:4:nested_issue294:Not enough arguments for format string
33-
too-many-format-args:114:4:nested_issue294:Too many arguments for format string
34-
missing-format-argument-key:115:4:nested_issue294:Missing keyword argument 'a' for format string
35-
missing-format-attribute:116:4:nested_issue294:Missing format attribute 'x' in format specifier 'a.x'
36-
too-few-format-args:121:4:issue310:Not enough arguments for format string
37-
too-many-format-args:128:4:issue322:Too many arguments for format string
38-
too-few-format-args:129:4:issue322:Not enough arguments for format string
39-
too-few-format-args:152:4:issue351:Not enough arguments for format string
40-
too-many-format-args:154:4:issue351:Too many arguments for format string
41-
bad-format-string:188:11:avoid_empty_attribute:Invalid format string
1+
too-many-format-args:68:4:pprint_bad:Too many arguments for format string
2+
bad-format-string:69:4:pprint_bad:Invalid format string
3+
bad-format-string:70:4:pprint_bad:Invalid format string
4+
format-combined-specification:71:4:pprint_bad:Format string contains both automatic field numbering and manual field specification
5+
missing-format-argument-key:73:4:pprint_bad:Missing keyword argument 'b' for format string
6+
unused-format-string-argument:73:4:pprint_bad:Unused format argument 'c'
7+
missing-format-argument-key:74:4:pprint_bad:Missing keyword argument 'a' for format string
8+
too-few-format-args:75:4:pprint_bad:Not enough arguments for format string
9+
too-many-format-args:76:4:pprint_bad:Too many arguments for format string
10+
missing-format-argument-key:78:4:pprint_bad:Missing keyword argument 'a' for format string
11+
missing-format-argument-key:78:4:pprint_bad:Missing keyword argument 'b' for format string
12+
missing-format-argument-key:78:4:pprint_bad:Missing keyword argument 'c' for format string
13+
too-few-format-args:79:4:pprint_bad:Not enough arguments for format string
14+
missing-format-argument-key:81:4:pprint_bad:Missing keyword argument 'a' for format string
15+
missing-format-argument-key:81:4:pprint_bad:Missing keyword argument 'b' for format string
16+
missing-format-argument-key:82:4:pprint_bad:Missing keyword argument 'a' for format string
17+
missing-format-attribute:84:4:pprint_bad:Missing format attribute 'length' in format specifier 'a.ids.__len__.length'
18+
invalid-format-index:85:4:pprint_bad:Using invalid lookup key 400 in format specifier 'a.ids[3][400]'
19+
invalid-format-index:86:4:pprint_bad:"Using invalid lookup key ""'string'"" in format specifier 'a.ids[3][""\'string\'""]'"
20+
invalid-format-index:87:4:pprint_bad:Using invalid lookup key 1 in format specifier '0[0][1]'
21+
invalid-format-index:88:4:pprint_bad:Using invalid lookup key 0 in format specifier '0[0][0]'
22+
missing-format-argument-key:90:4:pprint_bad:Missing keyword argument 'b' for format string
23+
unused-format-string-argument:90:4:pprint_bad:Unused format argument 'a'
24+
invalid-format-index:91:4:pprint_bad:Using invalid lookup key 0 in format specifier 'a[0]'
25+
too-many-format-args:92:8:pprint_bad:Too many arguments for format string
26+
missing-format-attribute:93:4:pprint_bad:Missing format attribute 'missing' in format specifier '0.missing'
27+
too-few-format-args:94:4:pprint_bad:Not enough arguments for format string
28+
too-many-format-args:95:4:pprint_bad:Too many arguments for format string
29+
too-few-format-args:96:4:pprint_bad:Not enough arguments for format string
30+
too-few-format-args:97:4:pprint_bad:Not enough arguments for format string
31+
too-many-format-args:98:4:pprint_bad:Too many arguments for format string
32+
logging-too-few-args:99:4:pprint_bad:Not enough arguments for logging format string
33+
logging-too-many-args:100:4:pprint_bad:Too many arguments for logging format string
34+
too-few-format-args:128:4:nested_issue294:Not enough arguments for format string
35+
too-many-format-args:129:4:nested_issue294:Too many arguments for format string
36+
missing-format-argument-key:130:4:nested_issue294:Missing keyword argument 'a' for format string
37+
missing-format-attribute:131:4:nested_issue294:Missing format attribute 'x' in format specifier 'a.x'
38+
too-few-format-args:137:4:issue310:Not enough arguments for format string
39+
too-many-format-args:145:4:issue322:Too many arguments for format string
40+
too-few-format-args:146:4:issue322:Not enough arguments for format string
41+
too-few-format-args:171:4:issue351:Not enough arguments for format string
42+
too-many-format-args:173:4:issue351:Too many arguments for format string
43+
bad-format-string:209:11:avoid_empty_attribute:Invalid format string

0 commit comments

Comments
 (0)