Testsuite fixes to pass with python 3.11.4 and python 3.12 Fixes taken from upstream commits: e20394e5cbd8d440c9c1868ddc25d036afcbfe45 e8d84098da10d013ee686027e174814dbe4dd908 diff -Nrua pycodestyle-2.10.0.original/pycodestyle.py pycodestyle-2.10.0/pycodestyle.py --- pycodestyle-2.10.0.original/pycodestyle.py 2022-11-23 19:26:34.000000000 +0100 +++ pycodestyle-2.10.0/pycodestyle.py 2023-07-18 13:15:24.537262524 +0200 @@ -196,7 +196,6 @@ These options are highly recommended! Okay: if a == 0:\n a = 1\n b = 1 - E101: if a == 0:\n a = 1\n\tb = 1 """ indent = INDENT_REGEX.match(physical_line).group(1) for offset, char in enumerate(indent): @@ -802,9 +801,10 @@ (index < 2 or tokens[index - 2][1] != 'class') and # Allow "return (a.foo for a in range(5))" not keyword.iskeyword(prev_text) and - # 'match' and 'case' are only soft keywords ( sys.version_info < (3, 9) or + # 3.12+: type is a soft keyword but no braces after + prev_text == 'type' or not keyword.issoftkeyword(prev_text) ) ): diff -Nrua pycodestyle-2.10.0.original/testsuite/E10.py pycodestyle-2.10.0/testsuite/E10.py --- pycodestyle-2.10.0.original/testsuite/E10.py 2022-11-23 19:26:34.000000000 +0100 +++ pycodestyle-2.10.0/testsuite/E10.py 2023-07-18 13:15:24.537262524 +0200 @@ -1,8 +1,3 @@ -#: E101 W191 -for a in 'abc': - for b in 'xyz': - print a # indented with 8 spaces - print b # indented with 1 tab #: E101 E122 W191 W191 if True: pass diff -Nrua pycodestyle-2.10.0.original/testsuite/E90.py pycodestyle-2.10.0/testsuite/E90.py --- pycodestyle-2.10.0.original/testsuite/E90.py 2022-11-23 19:26:34.000000000 +0100 +++ pycodestyle-2.10.0/testsuite/E90.py 2023-07-18 13:15:24.541262682 +0200 @@ -1,6 +1,4 @@ #: E901 -} -#: E901 = [x #: E901 E101 W191 while True: @@ -8,14 +6,6 @@ pass except: print 'Whoops' -#: E122 E225 E251 E251 - -# Do not crash if code is invalid -if msg: - errmsg = msg % progress.get(cr_dbname)) - -def lasting(self, duration=300): - progress = self._progress.setdefault('foo', {} #: Okay # Issue #119 diff -Nrua pycodestyle-2.10.0.original/testsuite/python312.py pycodestyle-2.10.0/testsuite/python312.py --- pycodestyle-2.10.0.original/testsuite/python312.py 1970-01-01 01:00:00.000000000 +0100 +++ pycodestyle-2.10.0/testsuite/python312.py 2023-07-18 13:15:24.541262682 +0200 @@ -0,0 +1,9 @@ +#: Okay +# https://github.com/python/cpython/issues/90432: fixed in 3.12 +def foo(): + pas + +\ + +def bar(): + pass diff -Nrua pycodestyle-2.10.0.original/testsuite/test_api.py pycodestyle-2.10.0/testsuite/test_api.py --- pycodestyle-2.10.0.original/testsuite/test_api.py 2022-11-23 19:26:34.000000000 +0100 +++ pycodestyle-2.10.0/testsuite/test_api.py 2023-07-18 13:15:24.541262682 +0200 @@ -329,12 +329,18 @@ count_errors = pep8style.input_file('stdin', lines=['\x00\n']) stdout = sys.stdout.getvalue() - expected = "stdin:1:1: E901 ValueError" - self.assertTrue(stdout.startswith(expected), - msg='Output %r does not start with %r' % - (stdout, expected)) + if sys.version_info < (3, 11, 4): + expected = ["stdin:1:1: E901 ValueError: source code string cannot contain null bytes"] # noqa: E501 + elif sys.version_info < (3, 12): + expected = ["stdin:1:1: E901 SyntaxError: source code string cannot contain null bytes"] # noqa: E501 + else: + expected = [ + "stdin:1:1: E901 SyntaxError: source code string cannot contain null bytes", # noqa: E501 + "stdin:1:1: E901 TokenError: source code cannot contain null bytes", # noqa: E501 + ] + self.assertEqual(stdout.splitlines(), expected) self.assertFalse(sys.stderr) - self.assertEqual(count_errors, 1) + self.assertEqual(count_errors, len(expected)) def test_styleguide_unmatched_triple_quotes(self): pycodestyle.register_check(DummyChecker, ['Z701']) @@ -347,35 +353,22 @@ pep8style.input_file('stdin', lines=lines) stdout = sys.stdout.getvalue() - expected = 'stdin:2:5: E901 TokenError: EOF in multi-line string' - self.assertTrue(expected in stdout) - - def test_styleguide_continuation_line_outdented(self): - pycodestyle.register_check(DummyChecker, ['Z701']) - lines = [ - 'def foo():\n', - ' pass\n', - '\n', - '\\\n', - '\n', - 'def bar():\n', - ' pass\n', - ] - - pep8style = pycodestyle.StyleGuide() - count_errors = pep8style.input_file('stdin', lines=lines) - self.assertEqual(count_errors, 2) - stdout = sys.stdout.getvalue() - expected = ( - 'stdin:6:1: ' - 'E122 continuation line missing indentation or outdented' - ) - self.assertTrue(expected in stdout) - expected = 'stdin:6:1: E302 expected 2 blank lines, found 1' - self.assertTrue(expected in stdout) - - # TODO: runner - # TODO: input_file + if sys.version_info < (3, 10): + expected = [ + 'stdin:2:5: E901 TokenError: EOF in multi-line string', + 'stdin:2:26: E901 SyntaxError: EOF while scanning triple-quoted string literal', # noqa: E501 + ] + elif sys.version_info < (3, 12): + expected = [ + 'stdin:2:5: E901 TokenError: EOF in multi-line string', + 'stdin:2:6: E901 SyntaxError: unterminated triple-quoted string literal (detected at line 2)', # noqa: E501 + ] + else: + expected = [ + 'stdin:2:6: E901 SyntaxError: unterminated triple-quoted string literal (detected at line 2)', # noqa: E501 + 'stdin:2:6: E901 TokenError: EOF in multi-line string', + ] + self.assertEqual(stdout.splitlines(), expected) def test_styleguides_other_indent_size(self): pycodestyle.register_check(DummyChecker, ['Z701'])