@@ 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.""" |