@@ 1574-1590 (lines=17) @@ | ||
1571 | good_code, bad_code1, bad_code2 = format_str(code2, '', '2', 'foo=2') |
|
1572 | self.runs(good_code) |
|
1573 | self.throws(bad_code1, NBARGERROR) |
|
1574 | self.throws(bad_code2, NBARGERROR, interpreters='pypy') |
|
1575 | self.throws(bad_code2, NOKWARGS, sugg, interpreters='cpython') |
|
1576 | # The explanation is only relevant for C functions |
|
1577 | code3 = 'def func_no_arg(n):\n\tpass\nfunc_no_arg({0}2)' |
|
1578 | good_code, good_code2, bad_code = format_str(code3, '', 'n=', 'foo=') |
|
1579 | self.runs(good_code) |
|
1580 | self.runs(good_code2) |
|
1581 | self.throws(bad_code, UNEXPECTEDKWARG) |
|
1582 | ||
1583 | def test_iter_cannot_be_interpreted_as_int(self): |
|
1584 | """Trying to call `range(len(iterable))` (bad) and forget the len.""" |
|
1585 | before, after = before_and_after((3, 0)) |
|
1586 | bad_code = 'range([0, 1, 2])' |
|
1587 | good_code = 'range(len([0, 1, 2]))' |
|
1588 | sugg = "'len(list)'" |
|
1589 | self.runs(good_code) |
|
1590 | self.throws(bad_code, INTEXPECTED, sugg, before) |
|
1591 | self.throws(bad_code, CANNOTBEINTERPRETED, sugg, after) |
|
1592 | ||
1593 | RANGE_CODE_TEMPLATES = [ |
|
@@ 1504-1518 (lines=15) @@ | ||
1501 | """Mix of previous tests but with more objects defined. |
|
1502 | ||
1503 | Non-function object with same same as the function tested are defined |
|
1504 | to ensure that things do work fine. |
|
1505 | """ |
|
1506 | code = 'func = "not_a_func"\nclass MyClass:\n\tdef func(self, a):' \ |
|
1507 | '\n\t\tpass\nMyClass().func({0}=1)' |
|
1508 | bad_code, good_code = format_str(code, 'babar', 'a') |
|
1509 | self.throws(bad_code, UNEXPECTEDKWARG) |
|
1510 | self.runs(good_code) |
|
1511 | ||
1512 | def test_keyword_builtin(self): |
|
1513 | """A few builtins (like int()) have a different error message.""" |
|
1514 | # NICE_TO_HAVE |
|
1515 | # 'max', 'input', 'len', 'abs', 'all', etc have a specific error |
|
1516 | # message and are not relevant here |
|
1517 | before, after = before_and_after((3, 7)) |
|
1518 | for builtin, kwarg in [ |
|
1519 | ('float', False), ('bool', False), |
|
1520 | ('int', True), ('complex', True)]: |
|
1521 | code = builtin + '(this_doesnt_exist=2)' |
|
@@ 2240-2252 (lines=13) @@ | ||
2237 | self.throws(code, UNEXPECTED_OEF, [], before) |
|
2238 | self.throws(code, INVALIDSYNTAX, [], mid) |
|
2239 | self.throws(code, NONLOCALMODULE, [], after) |
|
2240 | ||
2241 | def test_octal_literal(self): |
|
2242 | """Syntax for octal liberals has changed.""" |
|
2243 | # NICE_TO_HAVE |
|
2244 | before, after = before_and_after((3, 0)) |
|
2245 | bad, good = '0720', '0o720' |
|
2246 | self.runs(good) |
|
2247 | self.runs(bad, before) |
|
2248 | self.throws(bad, INVALIDTOKEN, [], after, 'cpython') |
|
2249 | self.throws(bad, INVALIDSYNTAX, [], after, 'pypy') |
|
2250 | ||
2251 | def test_extended_unpacking(self): |
|
2252 | """Extended iterable unpacking is added with Python 3.""" |
|
2253 | before, after = before_and_after((3, 0)) |
|
2254 | code = '(a, *rest, b) = range(5)' |
|
2255 | self.throws(code, INVALIDSYNTAX, [], before) |