From 5be58c6490c30eb7bd294baddf8285a7d3343f49 Mon Sep 17 00:00:00 2001 From: stepan Date: Fri, 16 Oct 2026 11:28:51 +0200 Subject: [PATCH] Use _testcapi availability guards for CPython compatibility tests --- .../src/tests/unittest_tags/test_buffer.txt | 1 + .../src/tests/unittest_tags/test_bytes.txt | 1 + .../src/tests/unittest_tags/test_capi.txt | 23 ++++ .../src/tests/unittest_tags/test_cmath.txt | 1 + .../src/tests/unittest_tags/test_code.txt | 1 + .../tests/unittest_tags/test_coroutines.txt | 3 + .../tests/unittest_tags/test_dataclasses.txt | 1 + .../src/tests/unittest_tags/test_descr.txt | 1 + .../tests/unittest_tags/test_exceptions.txt | 4 + .../src/tests/unittest_tags/test_fcntl.txt | 1 + .../tests/unittest_tags/test_genericclass.txt | 1 + .../src/tests/unittest_tags/test_import.txt | 1 + .../src/tests/unittest_tags/test_inspect.txt | 2 + .../src/tests/unittest_tags/test_poll.txt | 1 + .../src/tests/unittest_tags/test_pydoc.txt | 3 + .../src/tests/unittest_tags/test_socket.txt | 3 + .../src/tests/unittest_tags/test_support.txt | 1 + .../src/tests/unittest_tags/test_sys.txt | 2 + .../tests/unittest_tags/test_threading.txt | 1 + graalpython/lib-python/3/test/string_tests.py | 2 + .../lib-python/3/test/support/__init__.py | 13 ++- graalpython/lib-python/3/test/test_array.py | 3 +- graalpython/lib-python/3/test/test_buffer.py | 3 +- graalpython/lib-python/3/test/test_bytes.py | 3 +- .../3/test/test_capi/test_number.py | 7 +- .../lib-python/3/test/test_capi/test_sys.py | 6 +- .../3/test/test_capi/test_unicode.py | 101 ++++++++++-------- graalpython/lib-python/3/test/test_cmath.py | 7 +- graalpython/lib-python/3/test/test_code.py | 5 +- .../lib-python/3/test/test_coroutines.py | 3 +- .../3/test/test_ctypes/test_structures.py | 2 + .../3/test/test_dataclasses/__init__.py | 3 +- graalpython/lib-python/3/test/test_descr.py | 3 +- graalpython/lib-python/3/test/test_devpoll.py | 6 +- .../lib-python/3/test/test_exceptions.py | 17 ++- graalpython/lib-python/3/test/test_fcntl.py | 10 +- graalpython/lib-python/3/test/test_fileio.py | 7 +- graalpython/lib-python/3/test/test_format.py | 2 + .../lib-python/3/test/test_genericclass.py | 3 +- .../lib-python/3/test/test_import/__init__.py | 5 +- .../3/test/test_inspect/test_inspect.py | 17 ++- graalpython/lib-python/3/test/test_marshal.py | 3 +- .../lib-python/3/test/test_multibytecodec.py | 3 +- graalpython/lib-python/3/test/test_os.py | 3 +- graalpython/lib-python/3/test/test_poll.py | 7 +- graalpython/lib-python/3/test/test_posix.py | 3 +- .../3/test/test_pydoc/test_pydoc.py | 18 ++-- graalpython/lib-python/3/test/test_socket.py | 18 ++-- graalpython/lib-python/3/test/test_str.py | 2 + graalpython/lib-python/3/test/test_support.py | 24 +++++ graalpython/lib-python/3/test/test_sys.py | 5 +- .../lib-python/3/test/test_sys_settrace.py | 6 +- graalpython/lib-python/3/test/test_tcl.py | 6 ++ .../lib-python/3/test/test_threading.py | 5 +- .../lib-python/3/test/test_traceback.py | 26 +++-- graalpython/lib-python/3/test/test_ucn.py | 2 + 56 files changed, 303 insertions(+), 108 deletions(-) diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_buffer.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_buffer.txt index 3dc5cb7fc1..03aa60ed6c 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_buffer.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_buffer.txt @@ -45,3 +45,4 @@ test.test_buffer.TestPythonBufferProtocol.test_c_fill_buffer_readonly_and_writab test.test_buffer.TestPythonBufferProtocol.test_inheritance @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_buffer.TestPythonBufferProtocol.test_multiple_inheritance_buffer_last_raising @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_buffer.TestPythonBufferProtocol.test_override_only_release @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_buffer.TestBufferProtocol.test_pybuffer_size_from_format @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_bytes.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_bytes.txt index 1ef903e259..6988b7f4b5 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_bytes.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_bytes.txt @@ -285,3 +285,4 @@ test.test_bytes.BytesTest.test_strip_int_error @ darwin-arm64,linux-aarch64,linu test.test_bytes.BytesTest.test_strip_string_error @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_bytes.BytesTest.test_translate @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_bytes.BytesTest.test_xjust_int_error @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_bytes.ByteArrayTest.test_obsolete_write_lock @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_capi.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_capi.txt index 5b85a5a1bb..9a0de61d50 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_capi.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_capi.txt @@ -502,3 +502,26 @@ test.test_capi.test_unicode.CAPITest.test_from_format @ darwin-arm64,linux-aarch test.test_capi.test_weakref.CAPIWeakrefTest.test_pyweakref_check @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_capi.test_weakref.CAPIWeakrefTest.test_pyweakref_checkproxy @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_capi.test_weakref.CAPIWeakrefTest.test_pyweakref_checkref @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_capi.test_number.CAPITest.test_rshift_print @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_asucs4 @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_asucs4copy @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_asutf8 @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_aswidechar @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_aswidecharstring @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_compare @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_concat @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_contains @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_count @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_equaltoutf8 @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_equaltoutf8andsize @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_find @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_format @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_fromkindanddata @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_fromobject @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_fromordinal @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_fromstring @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_getdefaultencoding @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_getlength @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_interninplace @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_readchar @ linux-x86_64 +test.test_capi.test_unicode.CAPITest.test_substring @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_cmath.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_cmath.txt index 1c43b6bfa2..813c363193 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_cmath.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_cmath.txt @@ -30,3 +30,4 @@ test.test_cmath.IsCloseTests.test_near_zero @ darwin-arm64,linux-aarch64,linux-a test.test_cmath.IsCloseTests.test_negative_tolerances @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_cmath.IsCloseTests.test_reject_complex_tolerances @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_cmath.IsCloseTests.test_zero_tolerance @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_cmath.CMathTests.test_polar_errno @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_code.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_code.txt index 704332ee15..44ccca42ad 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_code.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_code.txt @@ -4,3 +4,4 @@ test.test_code.CodeTest.test_constructor @ darwin-arm64,linux-aarch64,linux-aarc test.test_code.CodeTest.test_qualname @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_code.CodeTest.test_replace @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_code.CodeTest.test_shrinking_localsplus @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_code.CodeTest.test_newempty @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_coroutines.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_coroutines.txt index 3630a11750..e0229f55e4 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_coroutines.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_coroutines.txt @@ -74,3 +74,6 @@ test.test_coroutines.CoroutineTest.test_with_5 @ darwin-arm64,linux-aarch64,linu test.test_coroutines.CoroutineTest.test_with_9 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_coroutines.TokenizerRegrTest.test_oneline_defs @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_coroutines.UnawaitedWarningDuringShutdownTest.test_unawaited_warning_during_shutdown @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_coroutines.CAPITest.test_tp_await_1 @ linux-x86_64 +test.test_coroutines.CAPITest.test_tp_await_2 @ linux-x86_64 +test.test_coroutines.CAPITest.test_tp_await_3 @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_dataclasses.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_dataclasses.txt index 7d98689341..5a619eb976 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_dataclasses.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_dataclasses.txt @@ -243,3 +243,4 @@ test.test_dataclasses.TestStringAnnotations.test_initvar @ darwin-arm64,linux-aa test.test_dataclasses.TestStringAnnotations.test_isnt_classvar @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_dataclasses.TestStringAnnotations.test_isnt_initvar @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_dataclasses.TestStringAnnotations.test_text_annotations @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_dataclasses.TestSlots.test_dataclass_slot_dict_ctype @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_descr.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_descr.txt index a1fe80f9e4..5a54e49924 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_descr.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_descr.txt @@ -133,3 +133,4 @@ test.test_descr.PicklingTests.test_issue24097 @ darwin-arm64,linux-aarch64,linux test.test_descr.PicklingTests.test_pickle_slots @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_descr.PicklingTests.test_reduce @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_descr.PicklingTests.test_reduce_copying @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_descr.ClassPropertiesAndMethods.test_testcapi_no_segfault @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_exceptions.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_exceptions.txt index 08e8b62bb8..1b0c9f9007 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_exceptions.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_exceptions.txt @@ -65,3 +65,7 @@ test.test_exceptions.SyntaxErrorTests.test_encodings @ darwin-arm64,linux-aarch6 test.test_exceptions.SyntaxErrorTests.test_range_of_offsets @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_exceptions.SyntaxErrorTests.test_subclass @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_exceptions.SyntaxErrorTests.test_syntax_error_memory_leak @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_exceptions.ExceptionTests.testSettingException @ linux-x86_64 +test.test_exceptions.ExceptionTests.test_MemoryError @ linux-x86_64 +test.test_exceptions.ExceptionTests.test_exception_with_doc @ linux-x86_64 +test.test_exceptions.ExceptionTests.test_memory_error_cleanup @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_fcntl.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_fcntl.txt index 557d5a85f2..f5a3121ad3 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_fcntl.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_fcntl.txt @@ -3,3 +3,4 @@ test.test_fcntl.TestFcntl.test_flock @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_fcntl.TestFcntl.test_lockf_exclusive @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_fcntl.TestFcntl.test_lockf_share @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github +test.test_fcntl.TestFcntl.test_flock_overflow @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_genericclass.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_genericclass.txt index 53b77c2aad..c72980407b 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_genericclass.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_genericclass.txt @@ -19,3 +19,4 @@ test.test_genericclass.TestMROEntry.test_mro_entry_signature @ darwin-arm64,linu test.test_genericclass.TestMROEntry.test_mro_entry_type_call @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_genericclass.TestMROEntry.test_mro_entry_with_builtins @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_genericclass.TestMROEntry.test_mro_entry_with_builtins_2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_genericclass.CAPITest.test_c_class @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_import.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_import.txt index 24f756ff38..dfe62e077b 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_import.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_import.txt @@ -75,3 +75,4 @@ test.test_import.RelativeImportTests.test_rebinding @ darwin-arm64,linux-aarch64 test.test_import.RelativeImportTests.test_rebinding2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_import.RelativeImportTests.test_relimport_star @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_import.TestSymbolicallyLinkedPackage.test_symlinked_dir_importable @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github +test.test_import.ImportTests.test_from_import_missing_attr_has_name_and_so_path @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_inspect.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_inspect.txt index 6ef9a32307..995d79892b 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_inspect.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_inspect.txt @@ -309,3 +309,5 @@ test.test_inspect.test_inspect.TestUnwrap.test_unhashable @ darwin-arm64,linux-a test.test_inspect.test_inspect.TestUnwrap.test_unwrap_one @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_inspect.test_inspect.TestUnwrap.test_unwrap_several @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_inspect.test_inspect.TestUnwrap.test_wrapped_descriptor @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_inspect.test_inspect.TestClassesAndFunctions.test_getfullargspec_builtin_func @ linux-x86_64 +test.test_inspect.test_inspect.TestSignatureObject.test_signature_on_decorated_builtins @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_poll.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_poll.txt index ce1ae190af..6124b8decd 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_poll.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_poll.txt @@ -4,3 +4,4 @@ test.test_poll.PollTests.test_poll3 @ darwin-arm64,linux-aarch64,linux-aarch64-g test.test_poll.PollTests.test_poll_blocks_with_negative_ms @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_poll.PollTests.test_poll_unit_tests @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github test.test_poll.PollTests.test_threaded_poll @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github +test.test_poll.PollTests.test_poll_c_limits @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_pydoc.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_pydoc.txt index 0b1abfa93c..2ca338d409 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_pydoc.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_pydoc.txt @@ -87,3 +87,6 @@ test.test_pydoc.test_pydoc.TestInternalUtilities.test_sys_path_adjustment_adds_m test.test_pydoc.test_pydoc.TestInternalUtilities.test_sys_path_adjustment_protects_pydoc_dir @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_pydoc.test_pydoc.TestInternalUtilities.test_sys_path_adjustment_removes_argv0_dir @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_pydoc.test_pydoc.TestInternalUtilities.test_sys_path_adjustment_when_curdir_already_included @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_pydoc.test_pydoc.TestDescriptions.test_bound_builtin_classmethod_unrepresentable_default @ linux-x86_64 +test.test_pydoc.test_pydoc.TestDescriptions.test_module_level_callable_unrepresentable_default @ linux-x86_64 +test.test_pydoc.test_pydoc.TestDescriptions.test_unbound_builtin_classmethod_unrepresentable_default @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_socket.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_socket.txt index ce83f0b4ec..997b36c635 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_socket.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_socket.txt @@ -228,3 +228,6 @@ test.test_socket.UnicodeWriteFileObjectClassTestCase.testReadline @ darwin-arm64 test.test_socket.UnicodeWriteFileObjectClassTestCase.testRealClose @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_socket.UnicodeWriteFileObjectClassTestCase.testSmallRead @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_socket.UnicodeWriteFileObjectClassTestCase.testUnbufferedRead @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_socket.BasicTCPTest.testShutdown_overflow @ linux-x86_64 +test.test_socket.GeneralModuleTests.test_listen_backlog_overflow @ linux-x86_64 +test.test_socket.NonBlockingTCPTests.testSetBlocking_overflow @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_support.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_support.txt index fe5c3080b8..9d05b96c87 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_support.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_support.txt @@ -40,3 +40,4 @@ test.test_support.TestSupport.test_temp_dir__existing_dir__quiet_true @ darwin-a test.test_support.TestSupport.test_temp_dir__path_none @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_support.TestSupport.test_unlink @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_support.TestSupport.test_unload @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_support.TestSupport.test_requires_testcapi @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_sys.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_sys.txt index 74f490a150..0c37b8ec59 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_sys.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_sys.txt @@ -44,3 +44,5 @@ test.test_sys.SysModuleTest.test_sys_ignores_cleaning_up_user_data @ darwin-arm6 test.test_sys.SysModuleTest.test_sys_tracebacklimit @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_sys.SysModuleTest.test_sys_version_info_no_instantiation @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_sys.SysModuleTest.test_thread_info @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_sys.UnraisableHookTest.test_custom_unraisablehook @ linux-x86_64 +test.test_sys.UnraisableHookTest.test_original_unraisablehook_wrong_type @ linux-x86_64 diff --git a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_threading.txt b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_threading.txt index 37cd9ae14b..e8ad3aa545 100644 --- a/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_threading.txt +++ b/graalpython/com.oracle.graal.python.test/src/tests/unittest_tags/test_threading.txt @@ -167,3 +167,4 @@ test.test_threading.ThreadingExceptionTests.test_print_exception_stderr_is_none_ test.test_threading.ThreadingExceptionTests.test_print_exception_stderr_is_none_2 @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_threading.ThreadingExceptionTests.test_start_thread_again @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github test.test_threading.TimerTests.test_init_immutable_default_args @ darwin-arm64,linux-aarch64,linux-aarch64-github,linux-x86_64,linux-x86_64-github,win32-AMD64,win32-AMD64-github +test.test_threading.ThreadTests.test_frame_tstate_tracing @ linux-x86_64 diff --git a/graalpython/lib-python/3/test/string_tests.py b/graalpython/lib-python/3/test/string_tests.py index d5d8f50bd9..e87fb28c4c 100644 --- a/graalpython/lib-python/3/test/string_tests.py +++ b/graalpython/lib-python/3/test/string_tests.py @@ -1480,6 +1480,8 @@ def test_formatting(self): class X(object): pass self.checkraises(TypeError, 'abc', '__mod__', X()) + # GraalPy change: formatting limits follow CPython C integer storage. + @support.requires_testcapi @support.cpython_only def test_formatting_c_limits(self): _testcapi = import_helper.import_module('_testcapi') diff --git a/graalpython/lib-python/3/test/support/__init__.py b/graalpython/lib-python/3/test/support/__init__.py index 27793330ed..416287c6a2 100644 --- a/graalpython/lib-python/3/test/support/__init__.py +++ b/graalpython/lib-python/3/test/support/__init__.py @@ -38,7 +38,8 @@ "requires_gil_enabled", "requires_linux_version", "requires_mac_ver", "check_syntax_error", "requires_gzip", "requires_bz2", "requires_lzma", - "bigmemtest", "bigaddrspacetest", "cpython_only", "get_attribute", + # GraalPy change: export the optional C API fixture guard. + "bigmemtest", "bigaddrspacetest", "cpython_only", "requires_testcapi", "get_attribute", "requires_IEEE_754", "requires_zlib", "has_fork_support", "requires_fork", "has_subprocess_support", "requires_subprocess", @@ -1266,6 +1267,16 @@ def requires_resource(resource): else: return unittest.skip("resource {0!r} is not enabled".format(resource)) +# GraalPy change: C API fixtures can be available on other implementations. +def requires_testcapi(test): + """Decorator for tests that require the optional _testcapi extension.""" + try: + import _testcapi + except ImportError: + return unittest.skip("requires _testcapi")(test) + return test + + def cpython_only(test): """ Decorator for tests only applicable on CPython. diff --git a/graalpython/lib-python/3/test/test_array.py b/graalpython/lib-python/3/test/test_array.py index 33d186002a..408fb80f83 100755 --- a/graalpython/lib-python/3/test/test_array.py +++ b/graalpython/lib-python/3/test/test_array.py @@ -1196,7 +1196,8 @@ def test_initialize_with_unicode(self): a = array.array(self.typecode, array.array('u', 'foo')) a = array.array(self.typecode, array.array('w', 'foo')) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi def test_obsolete_write_lock(self): _testcapi = import_helper.import_module('_testcapi') a = array.array('B', b"") diff --git a/graalpython/lib-python/3/test/test_buffer.py b/graalpython/lib-python/3/test/test_buffer.py index 46aaf7202f..ec12c26cbb 100644 --- a/graalpython/lib-python/3/test/test_buffer.py +++ b/graalpython/lib-python/3/test/test_buffer.py @@ -4448,7 +4448,8 @@ def test_bytearray_release_buffer_read_flag(self): with self.assertRaises(SystemError): obj.__buffer__(inspect.BufferFlags.WRITE) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi def test_pybuffer_size_from_format(self): # basic tests for format in ('', 'ii', '3s'): diff --git a/graalpython/lib-python/3/test/test_bytes.py b/graalpython/lib-python/3/test/test_bytes.py index da9f1e694e..c9630b4602 100644 --- a/graalpython/lib-python/3/test/test_bytes.py +++ b/graalpython/lib-python/3/test/test_bytes.py @@ -1798,7 +1798,8 @@ def delslice(): self.assertRaises(BufferError, delslice) self.assertEqual(b, orig) - @test.support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @test.support.requires_testcapi def test_obsolete_write_lock(self): _testcapi = import_helper.import_module('_testcapi') self.assertRaises(BufferError, _testcapi.getbuffer_with_null_view, bytearray()) diff --git a/graalpython/lib-python/3/test/test_capi/test_number.py b/graalpython/lib-python/3/test/test_capi/test_number.py index ca3494e8a5..267ad94768 100644 --- a/graalpython/lib-python/3/test/test_capi/test_number.py +++ b/graalpython/lib-python/3/test/test_capi/test_number.py @@ -4,7 +4,9 @@ import unittest import warnings -from test.support import cpython_only, import_helper +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi +from test.support import import_helper _testcapi = import_helper.import_module('_testcapi') from _testcapi import PY_SSIZE_T_MAX, PY_SSIZE_T_MIN @@ -251,7 +253,8 @@ def __ipow__(*args): # XXX: In-place power doesn't pass the third arg to __ipow__. self.assertEqual(inplacepower(x, 11, 5), (x, 11)) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_rshift_print(self): # This tests correct syntax hint for py2 redirection (>>). rshift = _testcapi.number_rshift diff --git a/graalpython/lib-python/3/test/test_capi/test_sys.py b/graalpython/lib-python/3/test/test_capi/test_sys.py index 54a8e026d8..9c605ce168 100644 --- a/graalpython/lib-python/3/test/test_capi/test_sys.py +++ b/graalpython/lib-python/3/test/test_capi/test_sys.py @@ -19,7 +19,7 @@ class CAPITest(unittest.TestCase): maxDiff = None - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_sys_getobject(self): # Test PySys_GetObject() @@ -37,7 +37,7 @@ def test_sys_getobject(self): "'utf-8' codec can't decode") # CRASHES getobject(NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_sys_setobject(self): # Test PySys_SetObject() @@ -69,7 +69,7 @@ def test_sys_setobject(self): setobject(b'\xff', value) # CRASHES setobject(NULL, value) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_sys_getxoptions(self): # Test PySys_GetXOptions() diff --git a/graalpython/lib-python/3/test/test_capi/test_unicode.py b/graalpython/lib-python/3/test/test_capi/test_unicode.py index f750ec1a56..30e1e75101 100644 --- a/graalpython/lib-python/3/test/test_capi/test_unicode.py +++ b/graalpython/lib-python/3/test/test_capi/test_unicode.py @@ -26,7 +26,8 @@ class Str(str): class CAPITest(unittest.TestCase): - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, 'need _testcapi module') def test_new(self): """Test PyUnicode_New()""" @@ -87,7 +88,7 @@ def test_fill(self): # CRASHES fill(NULL, 0, 0, 0x78) # TODO: Test PyUnicode_Fill() with non-modifiable unicode. - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_writechar(self): """Test PyUnicode_WriteChar()""" @@ -118,7 +119,7 @@ def test_writechar(self): # TODO: Test PyUnicode_WriteChar() with non-modifiable and legacy # unicode. - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_resize(self): """Test PyUnicode_Resize()""" @@ -144,7 +145,7 @@ def test_resize(self): # TODO: Test PyUnicode_Resize() with non-modifiable and legacy unicode # and with NULL as the address. - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_append(self): """Test PyUnicode_Append()""" @@ -172,7 +173,7 @@ def test_append(self): # and with NULL as the address. # TODO: Check reference counts. - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_appendanddel(self): """Test PyUnicode_AppendAndDel()""" @@ -199,7 +200,7 @@ def test_appendanddel(self): # and with NULL as the address. # TODO: Check reference counts. - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_fromstringandsize(self): """Test PyUnicode_FromStringAndSize()""" @@ -224,7 +225,7 @@ def test_fromstringandsize(self): self.assertRaises(SystemError, fromstringandsize, NULL, 3) self.assertRaises(SystemError, fromstringandsize, NULL, PY_SSIZE_T_MAX) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_fromstring(self): """Test PyUnicode_FromString()""" @@ -240,7 +241,8 @@ def test_fromstring(self): # CRASHES fromstring(NULL) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, 'need _testcapi module') def test_fromkindanddata(self): """Test PyUnicode_FromKindAndData()""" @@ -276,7 +278,8 @@ def test_fromkindanddata(self): # CRASHES fromkindanddata(1, NULL, 1) # CRASHES fromkindanddata(4, b'\xff\xff\xff\xff') - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_substring(self): """Test PyUnicode_Substring()""" @@ -300,7 +303,7 @@ def test_substring(self): # CRASHES substring([], 0, 0) # CRASHES substring(NULL, 0, 0) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_getlength(self): """Test PyUnicode_GetLength()""" @@ -314,7 +317,8 @@ def test_getlength(self): self.assertRaises(TypeError, getlength, []) # CRASHES getlength(NULL) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_readchar(self): """Test PyUnicode_ReadChar()""" @@ -333,7 +337,7 @@ def test_readchar(self): self.assertRaises(TypeError, readchar, [], 0) # CRASHES readchar(NULL, 0) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_fromobject(self): """Test PyUnicode_FromObject()""" @@ -744,7 +748,7 @@ class LocalType: self.assertRaisesRegex(SystemError, 'invalid format string', PyUnicode_FromFormat, b'%+i', c_int(10)) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_interninplace(self): """Test PyUnicode_InternInPlace()""" @@ -757,7 +761,7 @@ def test_interninplace(self): # CRASHES interninplace(b'abc') # CRASHES interninplace(NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_internfromstring(self): """Test PyUnicode_InternFromString()""" @@ -771,7 +775,8 @@ def test_internfromstring(self): # CRASHES internfromstring(NULL) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_fromwidechar(self): """Test PyUnicode_FromWideChar()""" @@ -806,7 +811,8 @@ def test_fromwidechar(self): self.assertRaises(SystemError, fromwidechar, NULL, -2) self.assertRaises(SystemError, fromwidechar, NULL, PY_SSIZE_T_MIN) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_aswidechar(self): """Test PyUnicode_AsWideChar()""" @@ -854,7 +860,8 @@ def test_aswidechar(self): self.assertRaises(TypeError, unicode_aswidechar_null, [], 10) self.assertRaises(SystemError, unicode_aswidechar_null, NULL, 10) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_aswidecharstring(self): """Test PyUnicode_AsWideCharString()""" @@ -889,7 +896,8 @@ def test_aswidecharstring(self): self.assertRaises(TypeError, unicode_aswidecharstring_null, []) self.assertRaises(SystemError, unicode_aswidecharstring_null, NULL) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, 'need _testcapi module') def test_asucs4(self): """Test PyUnicode_AsUCS4()""" @@ -914,7 +922,8 @@ def test_asucs4(self): # CRASHES unicode_asucs4(NULL, 1, 0) # CRASHES unicode_asucs4(NULL, 1, 1) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, 'need _testcapi module') def test_asucs4copy(self): """Test PyUnicode_AsUCS4Copy()""" @@ -930,7 +939,7 @@ def test_asucs4copy(self): # CRASHES asucs4copy([]) # CRASHES asucs4copy(NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_fromordinal(self): """Test PyUnicode_FromOrdinal()""" @@ -943,7 +952,8 @@ def test_fromordinal(self): self.assertRaises(ValueError, fromordinal, 0x110000) self.assertRaises(ValueError, fromordinal, -1) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, 'need _testcapi module') def test_asutf8(self): """Test PyUnicode_AsUTF8()""" @@ -977,7 +987,7 @@ def worker(): pass - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_asutf8andsize(self): """Test PyUnicode_AsUTF8AndSize()""" @@ -1000,7 +1010,7 @@ def test_asutf8andsize(self): # CRASHES unicode_asutf8andsize(NULL, 0) # CRASHES unicode_asutf8andsize_null(NULL, 0) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_getdefaultencoding(self): """Test PyUnicode_GetDefaultEncoding()""" @@ -1028,7 +1038,7 @@ def test_transform_decimal_and_space(self): self.assertRaises(SystemError, transform_decimal, []) # CRASHES transform_decimal(NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_concat(self): """Test PyUnicode_Concat()""" @@ -1049,7 +1059,7 @@ def test_concat(self): # CRASHES concat(NULL, 'def') # CRASHES concat('abc', NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_split(self): """Test PyUnicode_Split()""" @@ -1077,7 +1087,7 @@ def test_split(self): self.assertRaises(TypeError, split, [], '|') # CRASHES split(NULL, '|') - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_rsplit(self): """Test PyUnicode_RSplit()""" @@ -1106,7 +1116,7 @@ def test_rsplit(self): self.assertRaises(TypeError, rsplit, [], '|') # CRASHES rsplit(NULL, '|') - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_partition(self): """Test PyUnicode_Partition()""" @@ -1126,7 +1136,7 @@ def test_partition(self): # CRASHES partition(NULL, '|') # CRASHES partition('a|b|c', NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_rpartition(self): """Test PyUnicode_RPartition()""" @@ -1146,7 +1156,7 @@ def test_rpartition(self): # CRASHES rpartition(NULL, '|') # CRASHES rpartition('a|b|c', NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_splitlines(self): """Test PyUnicode_SplitLines()""" @@ -1164,7 +1174,7 @@ def test_splitlines(self): self.assertRaises(TypeError, splitlines, b'a\nb\rc\r\nd') # CRASHES splitlines(NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_translate(self): """Test PyUnicode_Translate()""" @@ -1189,7 +1199,7 @@ def test_translate(self): self.assertRaises(LookupError, translate, 'abc', {ord('b'): None}, 'foo') # CRASHES translate(NULL, []) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_join(self): """Test PyUnicode_Join()""" @@ -1207,7 +1217,8 @@ def test_join(self): self.assertRaises(TypeError, join, '|', 123) self.assertRaises(SystemError, join, '|', NULL) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_count(self): """Test PyUnicode_Count()""" @@ -1238,7 +1249,7 @@ def test_count(self): # CRASHES unicode_count(NULL, '!', 0, len(str)) # CRASHES unicode_count(str, NULL, 0, len(str)) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_tailmatch(self): """Test PyUnicode_Tailmatch()""" @@ -1273,7 +1284,8 @@ def test_tailmatch(self): # CRASHES tailmatch(NULL, 'aba', 0, len(str), -1) # CRASHES tailmatch(str, NULL, 0, len(str), -1) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_find(self): """Test PyUnicode_Find()""" @@ -1314,7 +1326,7 @@ def test_find(self): # CRASHES find(NULL, '!', 0, len(str), 1) # CRASHES find(str, NULL, 0, len(str), 1) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_findchar(self): """Test PyUnicode_FindChar()""" @@ -1350,7 +1362,7 @@ def test_findchar(self): # CRASHES unicode_findchar([], ord('!'), 0, len(str), 1) # CRASHES unicode_findchar(NULL, ord('!'), 0, len(str), 1), 1) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_replace(self): """Test PyUnicode_Replace()""" @@ -1381,7 +1393,7 @@ def test_replace(self): # CRASHES replace('a', NULL, '=') # CRASHES replace(NULL, 'a', '=') - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_compare(self): """Test PyUnicode_Compare()""" @@ -1403,7 +1415,7 @@ def test_compare(self): # CRASHES compare(NULL, 'abc') # CRASHES compare('abc', NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_comparewithasciistring(self): """Test PyUnicode_CompareWithASCIIString()""" @@ -1420,7 +1432,7 @@ def test_comparewithasciistring(self): # CRASHES comparewithasciistring([], b'abc') # CRASHES comparewithasciistring(NULL, b'abc') - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_equaltoutf8(self): # Test PyUnicode_EqualToUTF8() @@ -1466,7 +1478,8 @@ def test_equaltoutf8(self): self.assertEqual(equaltoutf8('\ud801', '\ud801'.encode("utf8", "surrogatepass")), 0) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_equaltoutf8andsize(self): # Test PyUnicode_EqualToUTF8AndSize() @@ -1535,7 +1548,7 @@ def check_not_equal_encoding(text, encoding): # CRASHES equaltoutf8andsize(NULL, b'abc') # CRASHES equaltoutf8andsize('abc', NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_richcompare(self): """Test PyUnicode_RichCompare()""" @@ -1563,7 +1576,7 @@ def test_richcompare(self): # CRASHES richcompare(NULL, 'abc', op) # CRASHES richcompare('abc', NULL, op) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_format(self): """Test PyUnicode_Format()""" @@ -1576,7 +1589,7 @@ def test_format(self): self.assertRaises(SystemError, format, 'x=%d!', NULL) self.assertRaises(SystemError, format, NULL, 42) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_contains(self): """Test PyUnicode_Contains()""" @@ -1598,7 +1611,7 @@ def test_contains(self): # CRASHES contains(NULL, 'b') # CRASHES contains('abcd', NULL) - @support.cpython_only + # GraalPy change: the existing module availability guard is sufficient. @unittest.skipIf(_testlimitedcapi is None, 'need _testlimitedcapi module') def test_isidentifier(self): """Test PyUnicode_IsIdentifier()""" diff --git a/graalpython/lib-python/3/test/test_cmath.py b/graalpython/lib-python/3/test/test_cmath.py index a96a5780b3..97124fcd0f 100644 --- a/graalpython/lib-python/3/test/test_cmath.py +++ b/graalpython/lib-python/3/test/test_cmath.py @@ -1,4 +1,6 @@ -from test.support import requires_IEEE_754, cpython_only, import_helper +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi +from test.support import requires_IEEE_754, import_helper from test.support.testcase import ComplexesAreIdenticalMixin from test.test_math import parse_testfile, test_file import test.test_math as test_math @@ -394,7 +396,8 @@ def check(arg, expected): def test_polar(self): self.check_polar(polar) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_polar_errno(self): # Issue #24489: check a previously set C errno doesn't disturb polar() _testcapi = import_helper.import_module('_testcapi') diff --git a/graalpython/lib-python/3/test/test_code.py b/graalpython/lib-python/3/test/test_code.py index 028073553a..4a0a59afb5 100644 --- a/graalpython/lib-python/3/test/test_code.py +++ b/graalpython/lib-python/3/test/test_code.py @@ -139,6 +139,8 @@ import ctypes except ImportError: ctypes = None +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi from test.support import (cpython_only, check_impl_detail, requires_debug_ranges, gc_collect, Py_GIL_DISABLED, @@ -177,7 +179,8 @@ def external_getitem(self, i): class CodeTest(unittest.TestCase): - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_newempty(self): _testcapi = import_helper.import_module("_testcapi") co = _testcapi.code_newempty("filename", "funcname", 15) diff --git a/graalpython/lib-python/3/test/test_coroutines.py b/graalpython/lib-python/3/test/test_coroutines.py index f705f4f5bf..17beb46c69 100644 --- a/graalpython/lib-python/3/test/test_coroutines.py +++ b/graalpython/lib-python/3/test/test_coroutines.py @@ -2448,7 +2448,8 @@ def test_unawaited_warning_during_shutdown(self): assert_python_ok("-c", code) -@support.cpython_only +# GraalPy change: require C API fixtures, regardless of implementation. +@support.requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") class CAPITest(unittest.TestCase): diff --git a/graalpython/lib-python/3/test/test_ctypes/test_structures.py b/graalpython/lib-python/3/test/test_ctypes/test_structures.py index 7650c80273..218a379ad4 100644 --- a/graalpython/lib-python/3/test/test_ctypes/test_structures.py +++ b/graalpython/lib-python/3/test/test_ctypes/test_structures.py @@ -244,6 +244,8 @@ class X(Structure): "_pack_": -1} self.assertRaises(ValueError, type(Structure), "X", (Structure,), d) + # GraalPy change: the _pack_ cutoff follows CPython C int storage. + @support.requires_testcapi @support.cpython_only def test_packed_c_limits(self): # Issue 15989 diff --git a/graalpython/lib-python/3/test/test_dataclasses/__init__.py b/graalpython/lib-python/3/test/test_dataclasses/__init__.py index 3b7a5dbc32..5877cc3c4b 100644 --- a/graalpython/lib-python/3/test/test_dataclasses/__init__.py +++ b/graalpython/lib-python/3/test/test_dataclasses/__init__.py @@ -3720,7 +3720,8 @@ class A(WithDictSlot): ... self.assertEqual(A().__dict__, {}) A() - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi def test_dataclass_slot_dict_ctype(self): # https://github.com/python/cpython/issues/123935 from test.support import import_helper diff --git a/graalpython/lib-python/3/test/test_descr.py b/graalpython/lib-python/3/test/test_descr.py index c7dc0792d0..98f6f3d1bc 100644 --- a/graalpython/lib-python/3/test/test_descr.py +++ b/graalpython/lib-python/3/test/test_descr.py @@ -2367,7 +2367,8 @@ def setter(self_, value): prop2 = property(fset=setter) self.assertEqual(prop2.__doc__, None) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi def test_testcapi_no_segfault(self): # this segfaulted in 2.5b2 try: diff --git a/graalpython/lib-python/3/test/test_devpoll.py b/graalpython/lib-python/3/test/test_devpoll.py index 85e0accb61..e371a8009e 100644 --- a/graalpython/lib-python/3/test/test_devpoll.py +++ b/graalpython/lib-python/3/test/test_devpoll.py @@ -6,7 +6,8 @@ import random import select import unittest -from test.support import cpython_only +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi if not hasattr(select, 'devpoll') : raise unittest.SkipTest('test works only on Solaris OS family') @@ -127,7 +128,8 @@ def test_events_mask_overflow(self): self.assertRaises(ValueError, pollster.modify, 1, -1) self.assertRaises(OverflowError, pollster.modify, 1, 1 << 64) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_events_mask_overflow_c_limits(self): from _testcapi import USHRT_MAX pollster = select.devpoll() diff --git a/graalpython/lib-python/3/test/test_exceptions.py b/graalpython/lib-python/3/test/test_exceptions.py index 013d45bc45..5f3fd31e35 100644 --- a/graalpython/lib-python/3/test/test_exceptions.py +++ b/graalpython/lib-python/3/test/test_exceptions.py @@ -11,6 +11,8 @@ from itertools import product from textwrap import dedent +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi from test.support import (captured_stderr, check_impl_detail, cpython_only, gc_collect, no_tracing, script_helper, @@ -338,7 +340,8 @@ def testMemoryErrorBigSource(self, size): with self.assertRaisesRegex(OverflowError, "Parser column offset overflow"): compile(src, '', 'exec') - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def testSettingException(self): # test that setting an exception at the C level works even if the # exception object can't be constructed. @@ -1466,7 +1469,8 @@ def gen(): self.assertIn(b'ResourceWarning', err) self.assertIn(b'Done.', out) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") @force_not_colorized def test_recursion_normalizing_infinite_exception(self): @@ -1560,7 +1564,8 @@ def recurse(cnt): rc, out, err = script_helper.assert_python_failure("-c", code) self.assertIn(b'MemoryError', err) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") def test_MemoryError(self): # PyErr_NoMemory always raises the same exception instance. @@ -1580,7 +1585,8 @@ def raiseMemError(): tb2 = raiseMemError() self.assertEqual(tb1, tb2) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") def test_exception_with_doc(self): doc2 = "This is a test docstring." @@ -1620,7 +1626,8 @@ class C(object): self.assertEqual(error5.a, 1) self.assertEqual(error5.__doc__, "") - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") def test_memory_error_cleanup(self): # Issue #5437: preallocated MemoryError instances should not keep diff --git a/graalpython/lib-python/3/test/test_fcntl.py b/graalpython/lib-python/3/test/test_fcntl.py index 0570257c52..a46aa46792 100644 --- a/graalpython/lib-python/3/test/test_fcntl.py +++ b/graalpython/lib-python/3/test/test_fcntl.py @@ -7,8 +7,10 @@ import struct import sys import unittest +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi from test.support import ( - cpython_only, get_pagesize, is_apple, requires_subprocess, verbose + get_pagesize, is_apple, requires_subprocess, verbose ) from test.support.import_helper import import_module from test.support.os_helper import TESTFN, unlink, make_bad_fd @@ -116,7 +118,8 @@ def test_fcntl_bad_file(self): with self.assertRaises(TypeError): fcntl.fcntl(BadFile('spam'), fcntl.F_SETFL, os.O_NONBLOCK) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_fcntl_bad_file_overflow(self): _testcapi = import_module("_testcapi") INT_MAX = _testcapi.INT_MAX @@ -195,7 +198,8 @@ def test_lockf_share(self): fcntl.lockf(self.f, fcntl.LOCK_UN) self.assertEqual(p.exitcode, 0) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_flock_overflow(self): _testcapi = import_module("_testcapi") self.assertRaises(OverflowError, fcntl.flock, _testcapi.INT_MAX+1, diff --git a/graalpython/lib-python/3/test/test_fileio.py b/graalpython/lib-python/3/test/test_fileio.py index a135501437..4c9394d335 100644 --- a/graalpython/lib-python/3/test/test_fileio.py +++ b/graalpython/lib-python/3/test/test_fileio.py @@ -9,8 +9,10 @@ from weakref import proxy from functools import wraps +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi from test.support import ( - cpython_only, swap_attr, gc_collect, is_emscripten, is_wasi, + swap_attr, gc_collect, is_emscripten, is_wasi, infinite_recursion, ) from test.support.os_helper import ( @@ -599,7 +601,8 @@ class COtherFileTests(OtherFileTests, unittest.TestCase): modulename = '_io' open = _io.open - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def testInvalidFd_overflow(self): # Issue 15989 _testcapi = import_module("_testcapi") diff --git a/graalpython/lib-python/3/test/test_format.py b/graalpython/lib-python/3/test/test_format.py index c18dffe61a..09bcb2067b 100644 --- a/graalpython/lib-python/3/test/test_format.py +++ b/graalpython/lib-python/3/test/test_format.py @@ -477,6 +477,8 @@ def test_precision(self): with self.assertRaises(ValueError) as cm: format(c, ".%sf" % (sys.maxsize + 1)) + # GraalPy change: the precision cutoff follows CPython C int storage. + @support.requires_testcapi @support.cpython_only def test_precision_c_limits(self): _testcapi = import_module("_testcapi") diff --git a/graalpython/lib-python/3/test/test_genericclass.py b/graalpython/lib-python/3/test/test_genericclass.py index e530b46396..7c2d406c8c 100644 --- a/graalpython/lib-python/3/test/test_genericclass.py +++ b/graalpython/lib-python/3/test/test_genericclass.py @@ -274,7 +274,8 @@ def __class_getitem__(cls, item): self.assertEqual(C[int], 'from metaclass') -@support.cpython_only +# GraalPy change: require C API fixtures, regardless of implementation. +@support.requires_testcapi class CAPITest(unittest.TestCase): def test_c_class(self): diff --git a/graalpython/lib-python/3/test/test_import/__init__.py b/graalpython/lib-python/3/test/test_import/__init__.py index 15481570d6..3f2363db55 100644 --- a/graalpython/lib-python/3/test/test_import/__init__.py +++ b/graalpython/lib-python/3/test/test_import/__init__.py @@ -27,6 +27,8 @@ from unittest import mock import _imp +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi from test.support import os_helper from test.support import ( STDLIB_DIR, @@ -406,7 +408,8 @@ def test_from_import_missing_attr_has_name_and_path(self): self.assertEqual(cm.exception.path, os.__file__) self.assertRegex(str(cm.exception), r"cannot import name 'i_dont_exist' from 'os' \(.*os.py\)") - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_from_import_missing_attr_has_name_and_so_path(self): _testcapi = import_module("_testcapi") with self.assertRaises(ImportError) as cm: diff --git a/graalpython/lib-python/3/test/test_inspect/test_inspect.py b/graalpython/lib-python/3/test/test_inspect/test_inspect.py index 00e896ea58..cee55a6767 100644 --- a/graalpython/lib-python/3/test/test_inspect/test_inspect.py +++ b/graalpython/lib-python/3/test/test_inspect/test_inspect.py @@ -39,6 +39,8 @@ except ImportError: ThreadPoolExecutor = None +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi from test.support import cpython_only, import_helper, suppress_immortalization from test.support import MISSING_C_DOCSTRINGS, ALWAYS_EQ from test.support.import_helper import DirsOnSysPath, ready_to_import @@ -1376,7 +1378,8 @@ def test_getfullargspec_builtin_methods(self): kwonlyargs_e=['dir_fd', 'follow_symlinks'], kwonlydefaults_e={'dir_fd': None, 'follow_symlinks': True}) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi @unittest.skipIf(MISSING_C_DOCSTRINGS, "Signature information for builtins requires docstrings") def test_getfullargspec_builtin_func(self): @@ -1385,7 +1388,8 @@ def test_getfullargspec_builtin_func(self): spec = inspect.getfullargspec(builtin) self.assertEqual(spec.defaults[0], 'avocado') - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi @unittest.skipIf(MISSING_C_DOCSTRINGS, "Signature information for builtins requires docstrings") def test_getfullargspec_builtin_func_no_signature(self): @@ -3428,7 +3432,8 @@ def test_staticmethod(*args): # NOQA self.assertEqual(self.signature(A.f4), ((('args', ..., ..., 'var_positional'), ('kwargs', ..., ..., 'var_keyword')), ...)) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi @unittest.skipIf(MISSING_C_DOCSTRINGS, "Signature information for builtins requires docstrings") def test_signature_on_builtins(self): @@ -3509,7 +3514,8 @@ class ThisWorksNow: sig = test_unbound_method(method) self.assertEqual(list(sig.parameters), ['self', 'buffer']) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi @unittest.skipIf(MISSING_C_DOCSTRINGS, "Signature information for builtins requires docstrings") def test_signature_on_decorated_builtins(self): @@ -3532,7 +3538,8 @@ def wrapper_like(*args, **kwargs) -> int: pass follow_wrapped=False), inspect.signature(wrapper_like)) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_signature_on_builtins_no_signature(self): _testcapi = import_helper.import_module("_testcapi") with self.assertRaisesRegex(ValueError, diff --git a/graalpython/lib-python/3/test/test_marshal.py b/graalpython/lib-python/3/test/test_marshal.py index 39bb392e1b..66ffe68b6f 100644 --- a/graalpython/lib-python/3/test/test_marshal.py +++ b/graalpython/lib-python/3/test/test_marshal.py @@ -717,7 +717,8 @@ def testNoIntern(self): s2 = sys.intern(s) self.assertNotEqual(id(s2), id(s)) -@support.cpython_only +# GraalPy change: require C API fixtures, regardless of implementation. +@support.requires_testcapi @unittest.skipUnless(_testcapi, 'requires _testcapi') class CAPI_TestCase(unittest.TestCase, HelperMixin): diff --git a/graalpython/lib-python/3/test/test_multibytecodec.py b/graalpython/lib-python/3/test/test_multibytecodec.py index 1b55f1e70b..d3416a7864 100644 --- a/graalpython/lib-python/3/test/test_multibytecodec.py +++ b/graalpython/lib-python/3/test/test_multibytecodec.py @@ -210,7 +210,8 @@ def test_issue5640(self): self.assertEqual(encoder.encode('\xff'), b'\\xff') self.assertEqual(encoder.encode('\n'), b'\n') - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi def test_subinterp(self): # bpo-42846: Test a CJK codec in a subinterpreter _testcapi = import_module("_testcapi") diff --git a/graalpython/lib-python/3/test/test_os.py b/graalpython/lib-python/3/test/test_os.py index 5cd590a962..5002da3534 100644 --- a/graalpython/lib-python/3/test/test_os.py +++ b/graalpython/lib-python/3/test/test_os.py @@ -232,7 +232,8 @@ def test_read(self): self.assertEqual(type(s), bytes) self.assertEqual(s, b"spam") - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi # Skip the test on 32-bit platforms: the number of bytes must fit in a # Py_ssize_t type @unittest.skipUnless(INT_MAX < PY_SSIZE_T_MAX, diff --git a/graalpython/lib-python/3/test/test_poll.py b/graalpython/lib-python/3/test/test_poll.py index 5675db8d1c..3a1f13dd62 100644 --- a/graalpython/lib-python/3/test/test_poll.py +++ b/graalpython/lib-python/3/test/test_poll.py @@ -7,8 +7,10 @@ import threading import time import unittest +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi from test.support import ( - cpython_only, requires_subprocess, requires_working_socket, requires_resource + requires_subprocess, requires_working_socket, requires_resource ) from test.support import threading_helper from test.support.os_helper import TESTFN @@ -170,7 +172,8 @@ def test_poll3(self): self.assertRaises(ValueError, pollster.modify, 1, -1) self.assertRaises(OverflowError, pollster.modify, 1, 1 << 64) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_poll_c_limits(self): try: from _testcapi import USHRT_MAX, INT_MAX, UINT_MAX diff --git a/graalpython/lib-python/3/test/test_posix.py b/graalpython/lib-python/3/test/test_posix.py index b09fc8164a..93847a3eea 100644 --- a/graalpython/lib-python/3/test/test_posix.py +++ b/graalpython/lib-python/3/test/test_posix.py @@ -970,7 +970,8 @@ def test_pipe2(self): except OSError: pass - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipUnless(hasattr(os, 'pipe2'), "test needs os.pipe2()") @support.requires_linux_version(2, 6, 27) def test_pipe2_c_limits(self): diff --git a/graalpython/lib-python/3/test/test_pydoc/test_pydoc.py b/graalpython/lib-python/3/test/test_pydoc/test_pydoc.py index 581d2d15eb..75adf267f4 100644 --- a/graalpython/lib-python/3/test/test_pydoc/test_pydoc.py +++ b/graalpython/lib-python/3/test/test_pydoc/test_pydoc.py @@ -1609,7 +1609,8 @@ def test_bound_builtin_classmethod_o(self): self.assertEqual(self._get_summary_line(dict.__class_getitem__), "__class_getitem__(object, /) class method of builtins.dict") - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @requires_docstrings def test_module_level_callable_unrepresentable_default(self): _testcapi = import_helper.import_module("_testcapi") @@ -1617,7 +1618,8 @@ def test_module_level_callable_unrepresentable_default(self): self.assertEqual(self._get_summary_line(builtin), "func_with_unrepresentable_signature(a, b=)") - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @requires_docstrings def test_builtin_staticmethod_unrepresentable_default(self): self.assertEqual(self._get_summary_line(str.maketrans), @@ -1627,7 +1629,8 @@ def test_builtin_staticmethod_unrepresentable_default(self): self.assertEqual(self._get_summary_line(cls.staticmeth), "staticmeth(a, b=)") - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @requires_docstrings def test_unbound_builtin_method_unrepresentable_default(self): self.assertEqual(self._get_summary_line(dict.pop), @@ -1639,7 +1642,8 @@ def test_unbound_builtin_method_unrepresentable_default(self): "meth(self, /, a, b=) unbound " "_testcapi.DocStringUnrepresentableSignatureTest method") - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @requires_docstrings def test_bound_builtin_method_unrepresentable_default(self): self.assertEqual(self._get_summary_line({}.pop), @@ -1651,7 +1655,8 @@ def test_bound_builtin_method_unrepresentable_default(self): "meth(a, b=) " "method of _testcapi.DocStringUnrepresentableSignatureTest instance") - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @requires_docstrings def test_unbound_builtin_classmethod_unrepresentable_default(self): _testcapi = import_helper.import_module("_testcapi") @@ -1661,7 +1666,8 @@ def test_unbound_builtin_classmethod_unrepresentable_default(self): "classmeth(type, /, a, b=) unbound " "_testcapi.DocStringUnrepresentableSignatureTest method") - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @requires_docstrings def test_bound_builtin_classmethod_unrepresentable_default(self): _testcapi = import_helper.import_module("_testcapi") diff --git a/graalpython/lib-python/3/test/test_socket.py b/graalpython/lib-python/3/test/test_socket.py index 45cf75ebd1..a69f2b1953 100644 --- a/graalpython/lib-python/3/test/test_socket.py +++ b/graalpython/lib-python/3/test/test_socket.py @@ -1261,7 +1261,8 @@ def testNtoH(self): self.assertEqual(swapped & mask, mask) self.assertRaises(OverflowError, func, 1<<34) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") def testNtoHErrors(self): import _testcapi @@ -1923,7 +1924,8 @@ def test_listen_backlog(self): srv.bind((HOST, 0)) srv.listen() - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") def test_listen_backlog_overflow(self): # Issue 15989 @@ -2977,12 +2979,14 @@ def _testShutdown(self): self.serv_conn.send(MSG) self.serv_conn.shutdown(2) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") def testShutdown_overflow(self): self.check_shutdown() - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") def _testShutdown_overflow(self): import _testcapi @@ -5265,7 +5269,8 @@ def testSetBlocking(self): def _testSetBlocking(self): pass - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi @unittest.skipIf(_testcapi is None, "requires _testcapi") def testSetBlocking_overflow(self): # Issue 15989 @@ -5279,7 +5284,8 @@ def testSetBlocking_overflow(self): self.serv.setblocking(_testcapi.UINT_MAX + 1) self.assertIsNone(self.serv.gettimeout()) - _testSetBlocking_overflow = support.cpython_only(_testSetBlocking) + # GraalPy change: keep the threaded companion enabled with the server. + _testSetBlocking_overflow = support.requires_testcapi(_testSetBlocking) @unittest.skipUnless(hasattr(socket, 'SOCK_NONBLOCK'), 'test needs socket.SOCK_NONBLOCK') diff --git a/graalpython/lib-python/3/test/test_str.py b/graalpython/lib-python/3/test/test_str.py index da67be4941..947a7d02bf 100644 --- a/graalpython/lib-python/3/test/test_str.py +++ b/graalpython/lib-python/3/test/test_str.py @@ -1660,6 +1660,8 @@ def __rmod__(self, other): self.assertEqual('lhs %% %r' % SubclassedStr('rhs'), "Success, self.__rmod__('lhs %% %r') was called") + # GraalPy change: the precision cutoff follows CPython C int storage. + @support.requires_testcapi @support.cpython_only @unittest.skipIf(_testcapi is None, 'need _testcapi module') def test_formatting_huge_precision_c_limits(self): diff --git a/graalpython/lib-python/3/test/test_support.py b/graalpython/lib-python/3/test/test_support.py index c6df279df1..6b8529f35f 100644 --- a/graalpython/lib-python/3/test/test_support.py +++ b/graalpython/lib-python/3/test/test_support.py @@ -80,6 +80,30 @@ def test_ignored_deprecations_are_silent(self): messages = [str(w.message) for w in warning_objs] self.assertEqual(len(messages), 0, messages) + # GraalPy change: availability guards preserve unittest method/class skips. + def test_requires_testcapi(self): + def test_method(self): + self.fail("a skipped test must not execute") + + class TestCase(unittest.TestCase): + test = test_method + + with support.swap_item(sys.modules, '_testcapi', object()): + self.assertIs(support.requires_testcapi(test_method), test_method) + self.assertIs(support.requires_testcapi(TestCase), TestCase) + + with support.swap_item(sys.modules, '_testcapi', None): + method = support.requires_testcapi(test_method) + self.assertTrue(method.__unittest_skip__) + self.assertEqual(method.__unittest_skip_why__, 'requires _testcapi') + skipped_class = support.requires_testcapi(TestCase) + result = unittest.TestResult() + skipped_class('test').run(result) + self.assertEqual(result.testsRun, 1) + self.assertEqual(len(result.skipped), 1) + self.assertFalse(result.errors) + self.assertFalse(result.failures) + def test_import_module(self): import_helper.import_module("ftplib") self.assertRaises(unittest.SkipTest, diff --git a/graalpython/lib-python/3/test/test_sys.py b/graalpython/lib-python/3/test/test_sys.py index 88ff3415bf..c108a700e5 100644 --- a/graalpython/lib-python/3/test/test_sys.py +++ b/graalpython/lib-python/3/test/test_sys.py @@ -1368,7 +1368,8 @@ def test_disable_gil_abi(self): self.assertEqual('t' in sys.abiflags, support.Py_GIL_DISABLED) -@test.support.cpython_only +# GraalPy change: require C API fixtures, regardless of implementation. +@test.support.requires_testcapi class UnraisableHookTest(unittest.TestCase): def test_original_unraisablehook(self): _testcapi = import_helper.import_module('_testcapi') @@ -1403,6 +1404,8 @@ def test_original_unraisablehook(self): self.assertEqual(lines[0], 'Traceback (most recent call last):') self.assertEqual(lines[-1], 'ValueError: 42') + # GraalPy change: this test requires immediate reference-counted destruction. + @support.impl_detail("finalization", graalpy=False) def test_original_unraisablehook_err(self): # bpo-22836: PyErr_WriteUnraisable() should give sensible reports class BrokenDel: diff --git a/graalpython/lib-python/3/test/test_sys_settrace.py b/graalpython/lib-python/3/test/test_sys_settrace.py index 7f9487acb8..9965785e71 100644 --- a/graalpython/lib-python/3/test/test_sys_settrace.py +++ b/graalpython/lib-python/3/test/test_sys_settrace.py @@ -1673,7 +1673,8 @@ class MyObject: (10, 'return'), ]) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi def test_no_line_event_after_creating_generator(self): # Spurious line events before call events only show up with C tracer @@ -1769,7 +1770,8 @@ def error_once(frame, event, arg): finally: sys.settrace(None) - @support.cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @support.requires_testcapi def test_testcapi_settrace_error(self): # Skip this test if the _testcapi module isn't available. diff --git a/graalpython/lib-python/3/test/test_tcl.py b/graalpython/lib-python/3/test/test_tcl.py index 47450d3fd5..1d5e744189 100644 --- a/graalpython/lib-python/3/test/test_tcl.py +++ b/graalpython/lib-python/3/test/test_tcl.py @@ -772,6 +772,8 @@ class BigmemTclTest(unittest.TestCase): def setUp(self): self.interp = Tcl() + # GraalPy change: the INT_MAX cutoff belongs to CPython _tkinter conversions. + @support.requires_testcapi @support.cpython_only @unittest.skipUnless(INT_MAX < PY_SSIZE_T_MAX, "needs UINT_MAX < SIZE_MAX") @support.bigmemtest(size=INT_MAX + 1, memuse=5, dry_run=False) @@ -779,6 +781,8 @@ def test_huge_string_call(self, size): value = ' ' * size self.assertRaises(OverflowError, self.interp.call, 'string', 'index', value, 0) + # GraalPy change: the INT_MAX cutoff belongs to CPython _tkinter conversions. + @support.requires_testcapi @support.cpython_only @unittest.skipUnless(INT_MAX < PY_SSIZE_T_MAX, "needs UINT_MAX < SIZE_MAX") @support.bigmemtest(size=INT_MAX + 1, memuse=2, dry_run=False) @@ -804,6 +808,8 @@ def test_huge_string_builtins(self, size): self.assertRaises(OverflowError, tk.createcommand, value, max) self.assertRaises(OverflowError, tk.deletecommand, value) + # GraalPy change: the INT_MAX cutoff belongs to CPython _tkinter conversions. + @support.requires_testcapi @support.cpython_only @unittest.skipUnless(INT_MAX < PY_SSIZE_T_MAX, "needs UINT_MAX < SIZE_MAX") @support.bigmemtest(size=INT_MAX + 1, memuse=6, dry_run=False) diff --git a/graalpython/lib-python/3/test/test_threading.py b/graalpython/lib-python/3/test/test_threading.py index 986c59975c..1cd2e17d0b 100644 --- a/graalpython/lib-python/3/test/test_threading.py +++ b/graalpython/lib-python/3/test/test_threading.py @@ -3,6 +3,8 @@ """ import test.support +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi from test.support import threading_helper, requires_subprocess, requires_gil_enabled from test.support import verbose, cpython_only, os_helper from test.support.import_helper import import_module @@ -962,7 +964,8 @@ def test_BoundedSemaphore_limit(self): t.join() self.assertRaises(ValueError, bs.release) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_frame_tstate_tracing(self): _testcapi = import_module("_testcapi") # Issue #14432: Crash when a generator is created in a C thread that is diff --git a/graalpython/lib-python/3/test/test_traceback.py b/graalpython/lib-python/3/test/test_traceback.py index 3f334ed722..d91a1486a4 100644 --- a/graalpython/lib-python/3/test/test_traceback.py +++ b/graalpython/lib-python/3/test/test_traceback.py @@ -15,6 +15,8 @@ import string from test import support import shutil +# GraalPy change: gate C API fixtures by availability. +from test.support import requires_testcapi from test.support import (Error, captured_output, cpython_only, ALWAYS_EQ, requires_debug_ranges, has_no_debug_ranges, requires_subprocess) @@ -1779,7 +1781,8 @@ class PurePythonTracebackErrorCaretTests( """ -@cpython_only +# GraalPy change: require C API fixtures, regardless of implementation. +@requires_testcapi @requires_debug_ranges() @force_not_colorized_test_class class CPythonTracebackErrorCaretTests( @@ -1791,7 +1794,8 @@ class CPythonTracebackErrorCaretTests( Same set of tests as above but with Python's internal traceback printing. """ -@cpython_only +# GraalPy change: require C API fixtures, regardless of implementation. +@requires_testcapi @requires_debug_ranges() @force_not_colorized_test_class class CPythonTracebackLegacyErrorCaretTests( @@ -1818,7 +1822,8 @@ def _maybe_filter_debug_ranges(self, expected): return self._filter_debug_ranges(expected) return expected - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def check_traceback_format(self, cleanup_func=None): from _testcapi import traceback_print try: @@ -2124,7 +2129,8 @@ def fmt(): ' return traceback.format_stack()\n' % (__file__, lineno+1), ]) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_unhashable(self): from _testcapi import exception_print @@ -2157,7 +2163,8 @@ def deep_eg(self): e = ExceptionGroup('eg', [e]) return e - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_exception_group_deep_recursion_capi(self): from _testcapi import exception_print LIMIT = 75 @@ -2179,7 +2186,8 @@ def test_exception_group_deep_recursion_traceback(self): self.assertIn('ExceptionGroup', output) self.assertLessEqual(output.count('ExceptionGroup'), LIMIT) - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def test_print_exception_bad_type_capi(self): from _testcapi import exception_print with captured_output("stderr") as stderr: @@ -3051,7 +3059,8 @@ class CExcReportingTests(BaseExceptionReportingTests, unittest.TestCase): # This checks built-in reporting by the interpreter. # - @cpython_only + # GraalPy change: require C API fixtures, regardless of implementation. + @requires_testcapi def get_report(self, e): from _testcapi import exception_print e = self.get_exception(e) @@ -4684,7 +4693,8 @@ class PurePythonSuggestionFormattingTests( """ -@cpython_only +# GraalPy change: require C API fixtures, regardless of implementation. +@requires_testcapi class CPythonSuggestionFormattingTests( CAPIExceptionFormattingMixin, SuggestionFormattingTestBase, diff --git a/graalpython/lib-python/3/test/test_ucn.py b/graalpython/lib-python/3/test/test_ucn.py index e7ebe8a485..2a1428f55c 100644 --- a/graalpython/lib-python/3/test/test_ucn.py +++ b/graalpython/lib-python/3/test/test_ucn.py @@ -253,6 +253,8 @@ def test_strict_error_handling(self): str, b"\\NSPACE", 'unicode-escape', 'strict' ) + # GraalPy change: this boundary targets CPython Unicode-name length arithmetic. + @support.requires_testcapi @support.cpython_only @unittest.skipUnless(INT_MAX < PY_SSIZE_T_MAX, "needs UINT_MAX < SIZE_MAX") @support.bigmemtest(size=UINT_MAX + 1, memuse=2 + 1, dry_run=False)