Code Duplication    Length = 13-17 lines in 3 locations

didyoumean/didyoumean_sugg_tests.py 3 locations

@@ 1574-1590 (lines=17) @@
1571
        self.runs(key_arg)
1572
        self.runs(cmp_to_key, from_version((2, 7)))
1573
1574
    def test_c_func_takes_no_keyword_arguments(self):
1575
        """TODO."""
1576
        # http://stackoverflow.com/questions/24463202/typeerror-get-takes-no-keyword-arguments
1577
        # https://www.python.org/dev/peps/pep-0457/
1578
        # https://www.python.org/dev/peps/pep-0436/#functions-with-positional-only-parameters
1579
        sugg = NO_KEYWORD_ARG_MSG
1580
        code = 'dict().get(0, {0}None)'
1581
        good_code, bad_code = format_str(code, '', 'default=')
1582
        self.runs(good_code)
1583
        self.throws(bad_code, NOKWARGS, sugg, interpreters='cpython')
1584
        self.runs(bad_code, interpreters='pypy')
1585
        # It would be better to have the suggestion only when the function
1586
        # doesn't accept keyword arguments but does accept positional
1587
        # arguments but we cannot use introspection on builtin function.
1588
        code2 = 'globals({0})'
1589
        good_code, bad_code1, bad_code2 = format_str(code2, '', '2', 'foo=2')
1590
        self.runs(good_code)
1591
        self.throws(bad_code1, NBARGERROR)
1592
        self.throws(bad_code2, NBARGERROR, interpreters='pypy')
1593
        self.throws(bad_code2, NOKWARGS, sugg, interpreters='cpython')
@@ 1504-1518 (lines=15) @@
1501
        typo, good = 'abcdf', 'abcdef'
1502
        sugg = quote(good)
1503
        code = 'f = lambda arg1, ' + good + ': None\nf(42, {0}=None)'
1504
        bad_code, good_code = format_str(code, typo, good)
1505
        self.throws(bad_code, UNEXPECTEDKWARG, sugg)
1506
        self.runs(good_code)
1507
1508
    def test_keyword_arg_lambda_method(self):
1509
        """Test with lambda methods instead of usual methods."""
1510
        typo, good = 'abcdf', 'abcdef'
1511
        sugg = quote(good)
1512
        code = 'class MyClass:\n\tfunc = lambda self, ' + good + ': None' \
1513
               '\nMyClass().func({0}=1)'
1514
        bad_code, good_code = format_str(code, typo, good)
1515
        self.throws(bad_code, UNEXPECTEDKWARG, sugg)
1516
        self.runs(good_code)
1517
1518
    def test_keyword_arg_other_objects_with_name(self):
1519
        """Mix of previous tests but with more objects defined.
1520
1521
        Non-function object with same same as the function tested are defined
@@ 2240-2252 (lines=13) @@
2237
        self.throws(bad_code, NOBINDING, sugg, after)
2238
2239
    def test_nonlocal4(self):
2240
        """suggest close matches to variable name."""
2241
        # NICE_TO_HAVE (needs access to variable in enclosing scope)
2242
        before, after = before_and_after((3, 0))
2243
        code = 'def func():\n\tfoo = 1\n\tdef nested():\n\t\tnonlocal {0}'
2244
        typo, good = 'foob', 'foo'
2245
        bad_code, good_code = format_str(code, typo, good)
2246
        self.throws(good_code, INVALIDSYNTAX, [], before)
2247
        self.runs(good_code, after)
2248
        self.throws(bad_code, INVALIDSYNTAX, [], before)
2249
        self.throws(bad_code, NOBINDING, [], after)
2250
2251
    def test_nonlocal_at_module_level(self):
2252
        """nonlocal must be used in function."""
2253
        before, mid, after = before_mid_and_after((2, 7), (3, 0))
2254
        code = 'nonlocal foo'
2255
        self.throws(code, UNEXPECTED_OEF, [], before)