|
@@ 1574-1590 (lines=17) @@
|
| 1571 |
|
|
| 1572 |
|
def test_iter_cannot_be_interpreted_as_int(self): |
| 1573 |
|
"""Trying to call `range(len(iterable))` (bad) and forget the len.""" |
| 1574 |
|
before, after = before_and_after((3, 0)) |
| 1575 |
|
bad_code = 'range([0, 1, 2])' |
| 1576 |
|
good_code = 'range(len([0, 1, 2]))' |
| 1577 |
|
sugg = "'len(list)'" |
| 1578 |
|
self.runs(good_code) |
| 1579 |
|
self.throws(bad_code, INTEXPECTED, sugg, before) |
| 1580 |
|
self.throws(bad_code, CANNOTBEINTERPRETED, sugg, after) |
| 1581 |
|
|
| 1582 |
|
RANGE_CODE_TEMPLATES = [ |
| 1583 |
|
'range({0})', |
| 1584 |
|
'range({0}, 14)', |
| 1585 |
|
'range(0, 24, {0})' |
| 1586 |
|
] |
| 1587 |
|
INDEX_CODE_TEMPLATES = ['[1, 2, 3][{0}]', '(1, 2, 3)[{0}]'] |
| 1588 |
|
|
| 1589 |
|
def test_str_cannot_be_interpreted_as_int(self): |
| 1590 |
|
"""Forget to convert str to int.""" |
| 1591 |
|
before, after = before_and_after((3, 0)) |
| 1592 |
|
suggs = ["'int(str)'", "'len(str)'"] |
| 1593 |
|
for code in self.RANGE_CODE_TEMPLATES: |
|
@@ 1504-1518 (lines=15) @@
|
| 1501 |
|
def test_keyword_builtin(self): |
| 1502 |
|
"""A few builtins (like int()) have a different error message.""" |
| 1503 |
|
# NICE_TO_HAVE |
| 1504 |
|
# 'max', 'input', 'len', 'abs', 'all', etc have a specific error |
| 1505 |
|
# message and are not relevant here |
| 1506 |
|
before, after = before_and_after((3, 7)) |
| 1507 |
|
for builtin, kwarg in [ |
| 1508 |
|
('float', False), ('bool', False), |
| 1509 |
|
('int', True), ('complex', True)]: |
| 1510 |
|
code = builtin + '(this_doesnt_exist=2)' |
| 1511 |
|
old_exc = UNEXPECTEDKWARG2 |
| 1512 |
|
new_exc = UNEXPECTEDKWARG4 if kwarg else NOKWARGS |
| 1513 |
|
sugg = [] if kwarg else NO_KEYWORD_ARG_MSG |
| 1514 |
|
self.throws(code, old_exc, [], before, interpreters='cpython') |
| 1515 |
|
self.throws(code, new_exc, sugg, after, interpreters='cpython') |
| 1516 |
|
self.throws(code, UNEXPECTEDKWARG, interpreters='pypy') |
| 1517 |
|
|
| 1518 |
|
def test_keyword_builtin_print(self): |
| 1519 |
|
"""Builtin "print" has a different error message.""" |
| 1520 |
|
# It would be NICE_TO_HAVE suggestions on keyword arguments |
| 1521 |
|
before, mid, after = before_mid_and_after((3, 0), (3, 7)) |
|
@@ 2240-2252 (lines=13) @@
|
| 2237 |
|
self.throws(bad, INVALIDTOKEN, [], after, 'cpython') |
| 2238 |
|
self.throws(bad, INVALIDSYNTAX, [], after, 'pypy') |
| 2239 |
|
|
| 2240 |
|
def test_extended_unpacking(self): |
| 2241 |
|
"""Extended iterable unpacking is added with Python 3.""" |
| 2242 |
|
before, after = before_and_after((3, 0)) |
| 2243 |
|
code = '(a, *rest, b) = range(5)' |
| 2244 |
|
self.throws(code, INVALIDSYNTAX, [], before) |
| 2245 |
|
self.runs(code, after) |
| 2246 |
|
|
| 2247 |
|
def test_ellipsis(self): |
| 2248 |
|
"""Triple dot (...) aka Ellipsis can be used anywhere in Python 3.""" |
| 2249 |
|
before, after = before_and_after((3, 0)) |
| 2250 |
|
code = '...' |
| 2251 |
|
self.throws(code, INVALIDSYNTAX, [], before) |
| 2252 |
|
self.runs(code, after) |
| 2253 |
|
|
| 2254 |
|
def test_fstring(self): |
| 2255 |
|
"""Fstring (see PEP 498) appeared in Python 3.6.""" |