diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 80f3a04fcc6180..8c6e5547d5e717 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -40,6 +40,7 @@ "requires_IEEE_754", "requires_zlib", "anticipate_failure", "load_package_tests", "detect_api_mismatch", "check__all__", "skip_if_buggy_ucrt_strfptime", + "check_disallow_instantiation", # sys "is_jython", "is_android", "check_impl_detail", "unix_shell", "setswitchinterval", @@ -1982,3 +1983,13 @@ def skip_if_broken_multiprocessing_synchronize(): synchronize.Lock(ctx=None) except OSError as exc: raise unittest.SkipTest(f"broken multiprocessing SemLock: {exc!r}") + + +def check_disallow_instantiation(testcase, tp, *args, **kwds): + """ + Helper for testing types with the Py_TPFLAGS_DISALLOW_INSTANTIATION flag. + + See bpo-43916. + """ + msg = f"cannot create '{tp.__module__}\.{tp.__name__}' instances" + testcase.assertRaisesRegex(TypeError, msg, tp, *args, **kwds) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index b18467fb889d8b..e7cddf2314732d 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -42,9 +42,9 @@ def test_bad_constructor(self): @support.cpython_only def test_disallow_instantiation(self): - # Ensure that the type disallows instantiation (bpo-43916) - tp = type(iter(array.array('I'))) - self.assertRaises(TypeError, tp) + my_array = array.array("I") + tp = type(iter(my_array)) + support.check_disallow_instantiation(self, tp, my_array) @support.cpython_only def test_immutable(self):
Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.
Alternative Proxies: