From fbff5387c3e1f3904420fa5a27738c6c5881305b Mon Sep 17 00:00:00 2001 From: Erlend Egeberg Aasland Date: Thu, 27 May 2021 08:43:52 +0200 Subject: [PATCH] bpo-43988: Use check disallow instantiation helper (GH-26392) --- Lib/test/support/__init__.py | 8 +++++++- Lib/test/test_array.py | 5 +++-- Lib/test/test_curses.py | 5 +++-- Lib/test/test_dbm_gnu.py | 3 +-- Lib/test/test_embed.py | 4 +--- Lib/test/test_functools.py | 5 +++-- Lib/test/test_hashlib.py | 15 ++++----------- Lib/test/test_hmac.py | 8 ++------ Lib/test/test_re.py | 10 +++++----- Lib/test/test_select.py | 6 ++---- Lib/test/test_ssl.py | 6 +----- Lib/test/test_threading.py | 3 +-- Lib/test/test_unicodedata.py | 4 ++-- Lib/test/test_zlib.py | 6 ++---- 14 files changed, 37 insertions(+), 51 deletions(-) diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py index 8c6e5547d5e..42ca614dce1 100644 --- a/Lib/test/support/__init__.py +++ b/Lib/test/support/__init__.py @@ -1991,5 +1991,11 @@ def check_disallow_instantiation(testcase, tp, *args, **kwds): See bpo-43916. """ - msg = f"cannot create '{tp.__module__}\.{tp.__name__}' instances" + mod = tp.__module__ + name = tp.__name__ + if mod != 'builtins': + qualname = f"{mod}.{name}" + else: + qualname = f"{name}" + msg = f"cannot create '{re.escape(qualname)}' instances" testcase.assertRaisesRegex(TypeError, msg, tp, *args, **kwds) diff --git a/Lib/test/test_array.py b/Lib/test/test_array.py index e7cddf23147..18f78d52467 100644 --- a/Lib/test/test_array.py +++ b/Lib/test/test_array.py @@ -43,8 +43,9 @@ def test_bad_constructor(self): @support.cpython_only def test_disallow_instantiation(self): my_array = array.array("I") - tp = type(iter(my_array)) - support.check_disallow_instantiation(self, tp, my_array) + support.check_disallow_instantiation( + self, type(iter(my_array)), my_array + ) @support.cpython_only def test_immutable(self): diff --git a/Lib/test/test_curses.py b/Lib/test/test_curses.py index 8bf48a6454d..d3c152c42cf 100644 --- a/Lib/test/test_curses.py +++ b/Lib/test/test_curses.py @@ -6,7 +6,8 @@ import tempfile import unittest -from test.support import requires, verbose, SaveSignals, cpython_only +from test.support import (requires, verbose, SaveSignals, cpython_only, + check_disallow_instantiation) from test.support.import_helper import import_module # Optionally test curses module. This currently requires that the @@ -1052,7 +1053,7 @@ def test_disallow_instantiation(self): # Ensure that the type disallows instantiation (bpo-43916) w = curses.newwin(10, 10) panel = curses.panel.new_panel(w) - self.assertRaises(TypeError, type(panel)) + check_disallow_instantiation(self, type(panel)) @requires_curses_func('is_term_resized') def test_is_term_resized(self): diff --git a/Lib/test/test_dbm_gnu.py b/Lib/test/test_dbm_gnu.py index b3e55728c8e..f39b0029373 100644 --- a/Lib/test/test_dbm_gnu.py +++ b/Lib/test/test_dbm_gnu.py @@ -31,8 +31,7 @@ def tearDown(self): def test_disallow_instantiation(self): # Ensure that the type disallows instantiation (bpo-43916) self.g = gdbm.open(filename, 'c') - tp = type(self.g) - self.assertRaises(TypeError, tp) + support.check_disallow_instantiation(self, type(self.g)) def test_key_methods(self): self.g = gdbm.open(filename, 'c') diff --git a/Lib/test/test_embed.py b/Lib/test/test_embed.py index f4a18fdf5a5..373fcf0ffac 100644 --- a/Lib/test/test_embed.py +++ b/Lib/test/test_embed.py @@ -1549,9 +1549,7 @@ def test_methods(self): def test_disallow_instantiation(self): fd = self.get_stdout_fd() printer = self.create_printer(fd) - PyStdPrinter_Type = type(printer) - with self.assertRaises(TypeError): - PyStdPrinter_Type(fd) + support.check_disallow_instantiation(self, type(printer)) if __name__ == "__main__": diff --git a/Lib/test/test_functools.py b/Lib/test/test_functools.py index 3320ab7ec66..78a8a5fcc0f 100644 --- a/Lib/test/test_functools.py +++ b/Lib/test/test_functools.py @@ -951,8 +951,9 @@ class TestCmpToKeyC(TestCmpToKey, unittest.TestCase): @support.cpython_only def test_disallow_instantiation(self): # Ensure that the type disallows instantiation (bpo-43916) - tp = type(c_functools.cmp_to_key(None)) - self.assertRaises(TypeError, tp) + support.check_disallow_instantiation( + self, type(c_functools.cmp_to_key(None)) + ) class TestCmpToKeyPy(TestCmpToKey, unittest.TestCase): diff --git a/Lib/test/test_hashlib.py b/Lib/test/test_hashlib.py index ad2ed69e24b..e419b388460 100644 --- a/Lib/test/test_hashlib.py +++ b/Lib/test/test_hashlib.py @@ -911,20 +911,13 @@ def test_disallow_instantiation(self): for constructor in constructors: h = constructor() with self.subTest(constructor=constructor): - hash_type = type(h) - self.assertRaises(TypeError, hash_type) + support.check_disallow_instantiation(self, type(h)) @unittest.skipUnless(HASH is not None, 'need _hashlib') - def test_hash_disallow_instanciation(self): + def test_hash_disallow_instantiation(self): # internal types like _hashlib.HASH are not constructable - with self.assertRaisesRegex( - TypeError, "cannot create '_hashlib.HASH' instance" - ): - HASH() - with self.assertRaisesRegex( - TypeError, "cannot create '_hashlib.HASHXOF' instance" - ): - HASHXOF() + support.check_disallow_instantiation(self, HASH) + support.check_disallow_instantiation(self, HASHXOF) def test_readonly_types(self): for algorithm, constructors in self.constructors_to_test.items(): diff --git a/Lib/test/test_hmac.py b/Lib/test/test_hmac.py index 964acd0361e..7cf99735ca3 100644 --- a/Lib/test/test_hmac.py +++ b/Lib/test/test_hmac.py @@ -6,7 +6,7 @@ import unittest.mock import warnings -from test.support import hashlib_helper +from test.support import hashlib_helper, check_disallow_instantiation from _operator import _compare_digest as operator_compare_digest @@ -439,11 +439,7 @@ def test_withmodule(self): @unittest.skipUnless(C_HMAC is not None, 'need _hashlib') def test_internal_types(self): # internal types like _hashlib.C_HMAC are not constructable - with self.assertRaisesRegex( - TypeError, "cannot create '_hashlib.HMAC' instance" - ): - C_HMAC() - + check_disallow_instantiation(self, C_HMAC) with self.assertRaisesRegex(TypeError, "immutable type"): C_HMAC.value = None diff --git a/Lib/test/test_re.py b/Lib/test/test_re.py index 0ed243da3ff..18fa24a99ce 100644 --- a/Lib/test/test_re.py +++ b/Lib/test/test_re.py @@ -1,5 +1,6 @@ from test.support import (gc_collect, bigmemtest, _2G, - cpython_only, captured_stdout) + cpython_only, captured_stdout, + check_disallow_instantiation) import locale import re import sre_compile @@ -2224,11 +2225,10 @@ def test_signedness(self): @cpython_only def test_disallow_instantiation(self): # Ensure that the type disallows instantiation (bpo-43916) - self.assertRaises(TypeError, re.Match) - self.assertRaises(TypeError, re.Pattern) + check_disallow_instantiation(self, re.Match) + check_disallow_instantiation(self, re.Pattern) pat = re.compile("") - tp = type(pat.scanner("")) - self.assertRaises(TypeError, tp) + check_disallow_instantiation(self, type(pat.scanner(""))) class ExternalTests(unittest.TestCase): diff --git a/Lib/test/test_select.py b/Lib/test/test_select.py index 957a633f323..cf32cf2f6a6 100644 --- a/Lib/test/test_select.py +++ b/Lib/test/test_select.py @@ -88,12 +88,10 @@ def fileno(self): self.assertEqual(select.select([], a, []), ([], a[:5], [])) def test_disallow_instantiation(self): - tp = type(select.poll()) - self.assertRaises(TypeError, tp) + support.check_disallow_instantiation(self, type(select.poll())) if hasattr(select, 'devpoll'): - tp = type(select.devpoll()) - self.assertRaises(TypeError, tp) + support.check_disallow_instantiation(self, type(select.devpoll())) def tearDownModule(): support.reap_children() diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py index 00d5eff8153..0d38d7756fd 100644 --- a/Lib/test/test_ssl.py +++ b/Lib/test/test_ssl.py @@ -358,11 +358,7 @@ def test_ssl_types(self): with self.subTest(ssl_type=ssl_type): with self.assertRaisesRegex(TypeError, "immutable type"): ssl_type.value = None - with self.assertRaisesRegex( - TypeError, - "cannot create '_ssl.Certificate' instances" - ): - _ssl.Certificate() + support.check_disallow_instantiation(self, _ssl.Certificate) def test_private_init(self): with self.assertRaisesRegex(TypeError, "public constructor"): diff --git a/Lib/test/test_threading.py b/Lib/test/test_threading.py index b563797cbd0..f648a8b2bc5 100644 --- a/Lib/test/test_threading.py +++ b/Lib/test/test_threading.py @@ -124,8 +124,7 @@ def func(): pass def test_disallow_instantiation(self): # Ensure that the type disallows instantiation (bpo-43916) lock = threading.Lock() - tp = type(lock) - self.assertRaises(TypeError, tp) + test.support.check_disallow_instantiation(self, type(lock)) # Create a bunch of threads, let each do some work, wait until all are # done. diff --git a/Lib/test/test_unicodedata.py b/Lib/test/test_unicodedata.py index c6bbe3f5ff2..213b3cf2529 100644 --- a/Lib/test/test_unicodedata.py +++ b/Lib/test/test_unicodedata.py @@ -12,7 +12,7 @@ import unicodedata import unittest from test.support import (open_urlresource, requires_resource, script_helper, - cpython_only) + cpython_only, check_disallow_instantiation) class UnicodeMethodsTest(unittest.TestCase): @@ -229,7 +229,7 @@ class UnicodeMiscTest(UnicodeDatabaseTest): @cpython_only def test_disallow_instantiation(self): # Ensure that the type disallows instantiation (bpo-43916) - self.assertRaises(TypeError, unicodedata.UCD) + check_disallow_instantiation(self, unicodedata.UCD) def test_failed_import_during_compiling(self): # Issue 4367 diff --git a/Lib/test/test_zlib.py b/Lib/test/test_zlib.py index 694ef6e4875..cb0610837ba 100644 --- a/Lib/test/test_zlib.py +++ b/Lib/test/test_zlib.py @@ -132,10 +132,8 @@ def test_overflow(self): @support.cpython_only def test_disallow_instantiation(self): # Ensure that the type disallows instantiation (bpo-43916) - comp_type = type(zlib.compressobj()) - decomp_type = type(zlib.decompressobj()) - self.assertRaises(TypeError, comp_type) - self.assertRaises(TypeError, decomp_type) + support.check_disallow_instantiation(self, type(zlib.compressobj())) + support.check_disallow_instantiation(self, type(zlib.decompressobj())) class BaseCompressTestCase(object):