PythonCharmers / python-future

Easy, clean, reliable Python 2/3 compatibility
http://python-future.org
MIT License
1.17k stars 291 forks source link

Changes in Python 3.12 break tests #618

Closed hrnciar closed 4 months ago

hrnciar commented 1 year ago

Hi, in Fedora we are rebuilding all upcoming Python packages with upcoming Python 3.12.0a7. There are two changes in CPython causing troubles.

gh-101446: Change repr of collections.OrderedDict to use regular dictionary formating instead of pairs of keys and values.

gh-96670: The parser now raises SyntaxError when parsing source code containing null bytes. Patch by Pablo Galindo

=================================== FAILURES ===================================
__________________________ TestOrderedDict.test_repr ___________________________

self = <test_future.test_backports.TestOrderedDict testMethod=test_repr>

    def test_repr(self):
        od = OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])
>       self.assertEqual(repr(od),
            "OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])")
E       AssertionError: "OrderedDict({'c': 1, 'b': 2, 'a': 3, 'd': 4, 'e': 5, 'f': 6})" != "OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])"
E       - OrderedDict({'c': 1, 'b': 2, 'a': 3, 'd': 4, 'e': 5, 'f': 6})
E       ?             ^   ^       ^       ^       ^       ^       ^  ^
E       + OrderedDict([('c', 1), ('b', 2), ('a', 3), ('d', 4), ('e', 5), ('f', 6)])
E       ?             ^^   ^  +  +   ^  +  +   ^  +  +   ^  +  +   ^  +  +   ^  ^^

tests/test_future/test_backports.py:602: AssertionError
_____________________ TestOrderedDict.test_repr_recursive ______________________

self = <test_future.test_backports.TestOrderedDict testMethod=test_repr_recursive>

    def test_repr_recursive(self):
        # See issue #9826
        od = OrderedDict.fromkeys('abc')
        od['x'] = od
>       self.assertEqual(repr(od),
            "OrderedDict([('a', None), ('b', None), ('c', None), ('x', ...)])")
E       AssertionError: "OrderedDict({'a': None, 'b': None, 'c': None, 'x': ...})" != "OrderedDict([('a', None), ('b', None), ('c', None), ('x', ...)])"
E       - OrderedDict({'a': None, 'b': None, 'c': None, 'x': ...})
E       ?             ^   ^          ^          ^          ^    ^
E       + OrderedDict([('a', None), ('b', None), ('c', None), ('x', ...)])
E       ?             ^^   ^     +  +   ^     +  +   ^     +  +   ^    ^^

tests/test_future/test_backports.py:611: AssertionError
___________________________ BuiltinTest.test_compile ___________________________

self = <test_future.test_builtins.BuiltinTest testMethod=test_compile>

    def test_compile(self):
        compile('print(1)\n', '', 'exec')
        bom = b'\xef\xbb\xbf'
        compile(bom + b'print(1)\n', '', 'exec')
        compile(source='pass', filename='?', mode='exec')
        compile(dont_inherit=0, filename='tmp', source='0', mode='eval')
        compile('pass', '?', dont_inherit=1, mode='exec')
        # Fails on Py2.7:
        # Was: compile(memoryview(b"text"), "name", "exec")
        self.assertRaises(TypeError, compile)
        self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'badmode')
        self.assertRaises(ValueError, compile, 'print(42)\n', '<string>', 'single', 0xff)
        # Raises TypeError in Python < v3.5, ValueError in v3.5:
>       self.assertRaises((TypeError, ValueError), compile, chr(0), 'f', 'exec')
E       SyntaxError: source code string cannot contain null bytes

tests/test_future/test_builtins.py:527: SyntaxError
=========================== short test summary info ============================
FAILED tests/test_future/test_backports.py::TestOrderedDict::test_repr - Asse...
FAILED tests/test_future/test_backports.py::TestOrderedDict::test_repr_recursive
FAILED tests/test_future/test_builtins.py::BuiltinTest::test_compile - Syntax...
3 failed, 1037 passed, 40 skipped, 15 deselected, 47 xfailed, 55 warnings in 13.50s
mcepl commented 1 year ago

It actually breaks with 3.11.4 as well.

s3v- commented 8 months ago

It actually breaks with 3.11.4 as well.

Upstream has backported those changes to Python 3.11 as well https://github.com/python/cpython/pull/104195