mirror of
https://github.com/python/cpython.git
synced 2025-09-26 10:19:53 +00:00
bpo-43988: Use check disallow instantiation helper (GH-26392)
This commit is contained in:
parent
3e7ee02327
commit
fbff5387c3
14 changed files with 37 additions and 51 deletions
|
@ -1991,5 +1991,11 @@ def check_disallow_instantiation(testcase, tp, *args, **kwds):
|
||||||
|
|
||||||
See bpo-43916.
|
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)
|
testcase.assertRaisesRegex(TypeError, msg, tp, *args, **kwds)
|
||||||
|
|
|
@ -43,8 +43,9 @@ class MiscTest(unittest.TestCase):
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
def test_disallow_instantiation(self):
|
def test_disallow_instantiation(self):
|
||||||
my_array = array.array("I")
|
my_array = array.array("I")
|
||||||
tp = type(iter(my_array))
|
support.check_disallow_instantiation(
|
||||||
support.check_disallow_instantiation(self, tp, my_array)
|
self, type(iter(my_array)), my_array
|
||||||
|
)
|
||||||
|
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
def test_immutable(self):
|
def test_immutable(self):
|
||||||
|
|
|
@ -6,7 +6,8 @@ import sys
|
||||||
import tempfile
|
import tempfile
|
||||||
import unittest
|
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
|
from test.support.import_helper import import_module
|
||||||
|
|
||||||
# Optionally test curses module. This currently requires that the
|
# Optionally test curses module. This currently requires that the
|
||||||
|
@ -1052,7 +1053,7 @@ class TestCurses(unittest.TestCase):
|
||||||
# Ensure that the type disallows instantiation (bpo-43916)
|
# Ensure that the type disallows instantiation (bpo-43916)
|
||||||
w = curses.newwin(10, 10)
|
w = curses.newwin(10, 10)
|
||||||
panel = curses.panel.new_panel(w)
|
panel = curses.panel.new_panel(w)
|
||||||
self.assertRaises(TypeError, type(panel))
|
check_disallow_instantiation(self, type(panel))
|
||||||
|
|
||||||
@requires_curses_func('is_term_resized')
|
@requires_curses_func('is_term_resized')
|
||||||
def test_is_term_resized(self):
|
def test_is_term_resized(self):
|
||||||
|
|
|
@ -31,8 +31,7 @@ class TestGdbm(unittest.TestCase):
|
||||||
def test_disallow_instantiation(self):
|
def test_disallow_instantiation(self):
|
||||||
# Ensure that the type disallows instantiation (bpo-43916)
|
# Ensure that the type disallows instantiation (bpo-43916)
|
||||||
self.g = gdbm.open(filename, 'c')
|
self.g = gdbm.open(filename, 'c')
|
||||||
tp = type(self.g)
|
support.check_disallow_instantiation(self, type(self.g))
|
||||||
self.assertRaises(TypeError, tp)
|
|
||||||
|
|
||||||
def test_key_methods(self):
|
def test_key_methods(self):
|
||||||
self.g = gdbm.open(filename, 'c')
|
self.g = gdbm.open(filename, 'c')
|
||||||
|
|
|
@ -1549,9 +1549,7 @@ class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase):
|
||||||
def test_disallow_instantiation(self):
|
def test_disallow_instantiation(self):
|
||||||
fd = self.get_stdout_fd()
|
fd = self.get_stdout_fd()
|
||||||
printer = self.create_printer(fd)
|
printer = self.create_printer(fd)
|
||||||
PyStdPrinter_Type = type(printer)
|
support.check_disallow_instantiation(self, type(printer))
|
||||||
with self.assertRaises(TypeError):
|
|
||||||
PyStdPrinter_Type(fd)
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
|
|
|
@ -951,8 +951,9 @@ class TestCmpToKeyC(TestCmpToKey, unittest.TestCase):
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
def test_disallow_instantiation(self):
|
def test_disallow_instantiation(self):
|
||||||
# Ensure that the type disallows instantiation (bpo-43916)
|
# Ensure that the type disallows instantiation (bpo-43916)
|
||||||
tp = type(c_functools.cmp_to_key(None))
|
support.check_disallow_instantiation(
|
||||||
self.assertRaises(TypeError, tp)
|
self, type(c_functools.cmp_to_key(None))
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class TestCmpToKeyPy(TestCmpToKey, unittest.TestCase):
|
class TestCmpToKeyPy(TestCmpToKey, unittest.TestCase):
|
||||||
|
|
|
@ -911,20 +911,13 @@ class HashLibTestCase(unittest.TestCase):
|
||||||
for constructor in constructors:
|
for constructor in constructors:
|
||||||
h = constructor()
|
h = constructor()
|
||||||
with self.subTest(constructor=constructor):
|
with self.subTest(constructor=constructor):
|
||||||
hash_type = type(h)
|
support.check_disallow_instantiation(self, type(h))
|
||||||
self.assertRaises(TypeError, hash_type)
|
|
||||||
|
|
||||||
@unittest.skipUnless(HASH is not None, 'need _hashlib')
|
@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
|
# internal types like _hashlib.HASH are not constructable
|
||||||
with self.assertRaisesRegex(
|
support.check_disallow_instantiation(self, HASH)
|
||||||
TypeError, "cannot create '_hashlib.HASH' instance"
|
support.check_disallow_instantiation(self, HASHXOF)
|
||||||
):
|
|
||||||
HASH()
|
|
||||||
with self.assertRaisesRegex(
|
|
||||||
TypeError, "cannot create '_hashlib.HASHXOF' instance"
|
|
||||||
):
|
|
||||||
HASHXOF()
|
|
||||||
|
|
||||||
def test_readonly_types(self):
|
def test_readonly_types(self):
|
||||||
for algorithm, constructors in self.constructors_to_test.items():
|
for algorithm, constructors in self.constructors_to_test.items():
|
||||||
|
|
|
@ -6,7 +6,7 @@ import unittest
|
||||||
import unittest.mock
|
import unittest.mock
|
||||||
import warnings
|
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
|
from _operator import _compare_digest as operator_compare_digest
|
||||||
|
|
||||||
|
@ -439,11 +439,7 @@ class ConstructorTestCase(unittest.TestCase):
|
||||||
@unittest.skipUnless(C_HMAC is not None, 'need _hashlib')
|
@unittest.skipUnless(C_HMAC is not None, 'need _hashlib')
|
||||||
def test_internal_types(self):
|
def test_internal_types(self):
|
||||||
# internal types like _hashlib.C_HMAC are not constructable
|
# internal types like _hashlib.C_HMAC are not constructable
|
||||||
with self.assertRaisesRegex(
|
check_disallow_instantiation(self, C_HMAC)
|
||||||
TypeError, "cannot create '_hashlib.HMAC' instance"
|
|
||||||
):
|
|
||||||
C_HMAC()
|
|
||||||
|
|
||||||
with self.assertRaisesRegex(TypeError, "immutable type"):
|
with self.assertRaisesRegex(TypeError, "immutable type"):
|
||||||
C_HMAC.value = None
|
C_HMAC.value = None
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,6 @@
|
||||||
from test.support import (gc_collect, bigmemtest, _2G,
|
from test.support import (gc_collect, bigmemtest, _2G,
|
||||||
cpython_only, captured_stdout)
|
cpython_only, captured_stdout,
|
||||||
|
check_disallow_instantiation)
|
||||||
import locale
|
import locale
|
||||||
import re
|
import re
|
||||||
import sre_compile
|
import sre_compile
|
||||||
|
@ -2224,11 +2225,10 @@ class ImplementationTest(unittest.TestCase):
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_disallow_instantiation(self):
|
def test_disallow_instantiation(self):
|
||||||
# Ensure that the type disallows instantiation (bpo-43916)
|
# Ensure that the type disallows instantiation (bpo-43916)
|
||||||
self.assertRaises(TypeError, re.Match)
|
check_disallow_instantiation(self, re.Match)
|
||||||
self.assertRaises(TypeError, re.Pattern)
|
check_disallow_instantiation(self, re.Pattern)
|
||||||
pat = re.compile("")
|
pat = re.compile("")
|
||||||
tp = type(pat.scanner(""))
|
check_disallow_instantiation(self, type(pat.scanner("")))
|
||||||
self.assertRaises(TypeError, tp)
|
|
||||||
|
|
||||||
|
|
||||||
class ExternalTests(unittest.TestCase):
|
class ExternalTests(unittest.TestCase):
|
||||||
|
|
|
@ -88,12 +88,10 @@ class SelectTestCase(unittest.TestCase):
|
||||||
self.assertEqual(select.select([], a, []), ([], a[:5], []))
|
self.assertEqual(select.select([], a, []), ([], a[:5], []))
|
||||||
|
|
||||||
def test_disallow_instantiation(self):
|
def test_disallow_instantiation(self):
|
||||||
tp = type(select.poll())
|
support.check_disallow_instantiation(self, type(select.poll()))
|
||||||
self.assertRaises(TypeError, tp)
|
|
||||||
|
|
||||||
if hasattr(select, 'devpoll'):
|
if hasattr(select, 'devpoll'):
|
||||||
tp = type(select.devpoll())
|
support.check_disallow_instantiation(self, type(select.devpoll()))
|
||||||
self.assertRaises(TypeError, tp)
|
|
||||||
|
|
||||||
def tearDownModule():
|
def tearDownModule():
|
||||||
support.reap_children()
|
support.reap_children()
|
||||||
|
|
|
@ -358,11 +358,7 @@ class BasicSocketTests(unittest.TestCase):
|
||||||
with self.subTest(ssl_type=ssl_type):
|
with self.subTest(ssl_type=ssl_type):
|
||||||
with self.assertRaisesRegex(TypeError, "immutable type"):
|
with self.assertRaisesRegex(TypeError, "immutable type"):
|
||||||
ssl_type.value = None
|
ssl_type.value = None
|
||||||
with self.assertRaisesRegex(
|
support.check_disallow_instantiation(self, _ssl.Certificate)
|
||||||
TypeError,
|
|
||||||
"cannot create '_ssl.Certificate' instances"
|
|
||||||
):
|
|
||||||
_ssl.Certificate()
|
|
||||||
|
|
||||||
def test_private_init(self):
|
def test_private_init(self):
|
||||||
with self.assertRaisesRegex(TypeError, "public constructor"):
|
with self.assertRaisesRegex(TypeError, "public constructor"):
|
||||||
|
|
|
@ -124,8 +124,7 @@ class ThreadTests(BaseTestCase):
|
||||||
def test_disallow_instantiation(self):
|
def test_disallow_instantiation(self):
|
||||||
# Ensure that the type disallows instantiation (bpo-43916)
|
# Ensure that the type disallows instantiation (bpo-43916)
|
||||||
lock = threading.Lock()
|
lock = threading.Lock()
|
||||||
tp = type(lock)
|
test.support.check_disallow_instantiation(self, type(lock))
|
||||||
self.assertRaises(TypeError, tp)
|
|
||||||
|
|
||||||
# Create a bunch of threads, let each do some work, wait until all are
|
# Create a bunch of threads, let each do some work, wait until all are
|
||||||
# done.
|
# done.
|
||||||
|
|
|
@ -12,7 +12,7 @@ import sys
|
||||||
import unicodedata
|
import unicodedata
|
||||||
import unittest
|
import unittest
|
||||||
from test.support import (open_urlresource, requires_resource, script_helper,
|
from test.support import (open_urlresource, requires_resource, script_helper,
|
||||||
cpython_only)
|
cpython_only, check_disallow_instantiation)
|
||||||
|
|
||||||
|
|
||||||
class UnicodeMethodsTest(unittest.TestCase):
|
class UnicodeMethodsTest(unittest.TestCase):
|
||||||
|
@ -229,7 +229,7 @@ class UnicodeMiscTest(UnicodeDatabaseTest):
|
||||||
@cpython_only
|
@cpython_only
|
||||||
def test_disallow_instantiation(self):
|
def test_disallow_instantiation(self):
|
||||||
# Ensure that the type disallows instantiation (bpo-43916)
|
# 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):
|
def test_failed_import_during_compiling(self):
|
||||||
# Issue 4367
|
# Issue 4367
|
||||||
|
|
|
@ -132,10 +132,8 @@ class ExceptionTestCase(unittest.TestCase):
|
||||||
@support.cpython_only
|
@support.cpython_only
|
||||||
def test_disallow_instantiation(self):
|
def test_disallow_instantiation(self):
|
||||||
# Ensure that the type disallows instantiation (bpo-43916)
|
# Ensure that the type disallows instantiation (bpo-43916)
|
||||||
comp_type = type(zlib.compressobj())
|
support.check_disallow_instantiation(self, type(zlib.compressobj()))
|
||||||
decomp_type = type(zlib.decompressobj())
|
support.check_disallow_instantiation(self, type(zlib.decompressobj()))
|
||||||
self.assertRaises(TypeError, comp_type)
|
|
||||||
self.assertRaises(TypeError, decomp_type)
|
|
||||||
|
|
||||||
|
|
||||||
class BaseCompressTestCase(object):
|
class BaseCompressTestCase(object):
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue