mirror of
https://github.com/RustPython/RustPython.git
synced 2026-10-29 03:04:38 +08:00
* Sync Python 3.15 core library tests and repr type errors Synchronize ten selected library paths from CPython 3.15.0 at d220409a13b77de7a6c30abe16ea90db01528edc using the canonical updater, retaining existing RustPython adapters and failure markers. Match generic __repr__ invalid-result errors to the qualified type-name format required by the canonical ExceptionGroup regression, preserving string results and exceptions raised by the implementation. Implementation, source review, and validation were AI-assisted. The model version identifier is unavailable; automated checks are not human verification. Bounded validation covers 43 passes and one canonical skip, not the full repository suites. Assisted-by: OpenAI Codex:model version unavailable * Preserve original escape decoder consumed length after callbacks Keep the original input length as consumed after successful unicode-escape and raw-unicode-escape decoding, including error-handler input replacement. Only report the current cursor when a non-final decode stops on incomplete input, matching CPython's codec wrappers and incomplete exits. Fix the canonical Unicode escape mutation regression that failed CI on Linux, macOS and Windows. Preserve all Lib tests and existing assertions. Bounded Linux validation: 55 passes and one canonical skip, CLI build and strict common/VM Clippy passed. Full repository suites were not run. Implementation, source review, and validation were AI-assisted. The model version identifier is unavailable; automated checks are not human verification. Assisted-by: OpenAI Codex:model version unavailable --------- Co-authored-by: youknowdot <336763669+youknowdot@users.noreply.github.com>
71 lines
2.6 KiB
Python
Vendored
71 lines
2.6 KiB
Python
Vendored
import os
|
|
import json
|
|
import doctest
|
|
import unittest
|
|
|
|
from test import support
|
|
from test.support import import_helper
|
|
|
|
|
|
# import json with and without accelerations
|
|
# XXX RUSTPYTHON: we don't import _json as fresh since the fresh module isn't placed
|
|
# into the sys.modules cache, and therefore the vm can't recognize the _json.Scanner class
|
|
cjson = import_helper.import_fresh_module('json') #, fresh=['_json'])
|
|
pyjson = import_helper.import_fresh_module('json', blocked=['_json'])
|
|
# JSONDecodeError is cached inside the _json module
|
|
cjson.JSONDecodeError = cjson.decoder.JSONDecodeError = json.JSONDecodeError
|
|
|
|
# create two base classes that will be used by the other tests
|
|
class PyTest(unittest.TestCase):
|
|
json = pyjson
|
|
loads = staticmethod(pyjson.loads)
|
|
dumps = staticmethod(pyjson.dumps)
|
|
JSONDecodeError = staticmethod(pyjson.JSONDecodeError)
|
|
|
|
@unittest.skipUnless(cjson, 'requires _json')
|
|
class CTest(unittest.TestCase):
|
|
if cjson is not None:
|
|
json = cjson
|
|
loads = staticmethod(cjson.loads)
|
|
dumps = staticmethod(cjson.dumps)
|
|
JSONDecodeError = staticmethod(cjson.JSONDecodeError)
|
|
|
|
# test PyTest and CTest checking if the functions come from the right module
|
|
class TestPyTest(PyTest):
|
|
def test_pyjson(self):
|
|
self.assertEqual(self.json.scanner.make_scanner.__module__,
|
|
'json.scanner')
|
|
self.assertEqual(self.json.decoder.scanstring.__module__,
|
|
'json.decoder')
|
|
self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__,
|
|
'json.encoder')
|
|
|
|
class TestCTest(CTest):
|
|
def test_cjson(self):
|
|
self.assertEqual(self.json.scanner.make_scanner.__module__, '_json')
|
|
self.assertEqual(self.json.decoder.scanstring.__module__, '_json')
|
|
self.assertEqual(self.json.encoder.c_make_encoder.__module__, '_json')
|
|
self.assertEqual(self.json.encoder.encode_basestring_ascii.__module__,
|
|
'_json')
|
|
|
|
|
|
class TestModule(unittest.TestCase):
|
|
def test_deprecated__version__(self):
|
|
with self.assertWarnsRegex(
|
|
DeprecationWarning,
|
|
"'__version__' is deprecated and slated for removal in Python 3.20",
|
|
) as cm:
|
|
getattr(json, "__version__")
|
|
self.assertEqual(cm.filename, __file__)
|
|
|
|
|
|
def load_tests(loader, _, pattern):
|
|
suite = unittest.TestSuite()
|
|
for mod in (json, json.encoder, json.decoder):
|
|
suite.addTest(doctest.DocTestSuite(mod))
|
|
suite.addTest(TestPyTest('test_pyjson'))
|
|
suite.addTest(TestCTest('test_cjson'))
|
|
|
|
pkg_dir = os.path.dirname(__file__)
|
|
return support.load_package_tests(pkg_dir, loader, suite, pattern)
|