Browse Source
bpo-43988: Use check disallow instantiation helper (GH-26392)
pull/26394/head
Erlend Egeberg Aasland
5 years ago
committed by
GitHub
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with
37 additions and
51 deletions
-
Lib/test/support/__init__.py
-
Lib/test/test_array.py
-
Lib/test/test_curses.py
-
Lib/test/test_dbm_gnu.py
-
Lib/test/test_embed.py
-
Lib/test/test_functools.py
-
Lib/test/test_hashlib.py
-
Lib/test/test_hmac.py
-
Lib/test/test_re.py
-
Lib/test/test_select.py
-
Lib/test/test_ssl.py
-
Lib/test/test_threading.py
-
Lib/test/test_unicodedata.py
-
Lib/test/test_zlib.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) |
|
|
|
@ -43,8 +43,9 @@ class MiscTest(unittest.TestCase): |
|
|
|
@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): |
|
|
|
|
|
|
|
@ -6,7 +6,8 @@ import sys |
|
|
|
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 @@ class TestCurses(unittest.TestCase): |
|
|
|
# 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): |
|
|
|
|
|
|
|
@ -31,8 +31,7 @@ class TestGdbm(unittest.TestCase): |
|
|
|
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') |
|
|
|
|
|
|
|
@ -1549,9 +1549,7 @@ class StdPrinterTests(EmbeddingTestsMixin, unittest.TestCase): |
|
|
|
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__": |
|
|
|
|
|
|
|
@ -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): |
|
|
|
|
|
|
|
@ -911,20 +911,13 @@ class HashLibTestCase(unittest.TestCase): |
|
|
|
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(): |
|
|
|
|
|
|
|
@ -6,7 +6,7 @@ import unittest |
|
|
|
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 @@ class ConstructorTestCase(unittest.TestCase): |
|
|
|
@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 |
|
|
|
|
|
|
|
|
|
|
|
@ -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 @@ class ImplementationTest(unittest.TestCase): |
|
|
|
@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): |
|
|
|
|
|
|
|
@ -88,12 +88,10 @@ class SelectTestCase(unittest.TestCase): |
|
|
|
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() |
|
|
|
|
|
|
|
@ -358,11 +358,7 @@ class BasicSocketTests(unittest.TestCase): |
|
|
|
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"): |
|
|
|
|
|
|
|
@ -124,8 +124,7 @@ class ThreadTests(BaseTestCase): |
|
|
|
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. |
|
|
|
|
|
|
|
@ -12,7 +12,7 @@ import sys |
|
|
|
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 |
|
|
|
|
|
|
|
@ -132,10 +132,8 @@ class ExceptionTestCase(unittest.TestCase): |
|
|
|
@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): |
|
|
|
|