From a1f8454c3c5c450dcdc42cc502465537f444fe67 Mon Sep 17 00:00:00 2001 From: "Erlend E. Aasland" Date: Fri, 30 Apr 2021 18:48:30 +0200 Subject: [PATCH] bpo-43988: Add test.support.check_disallow_instantiation --- Lib/test/support/__init__.py | 11 +++++++++++ Lib/test/test_array.py | 6 +++--- 2 files changed, 14 insertions(+), 3 deletions(-) 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):