summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSerhiy Storchaka <storchaka@gmail.com>2021-09-20 06:34:52 (GMT)
committerGitHub <noreply@github.com>2021-09-20 06:34:52 (GMT)
commit5822ab672a1d26ff1837103c1ed8e4c3c2a42b87 (patch)
tree940df51015f39fafdef1287e646c406025c6cc83
parent41e2a31c13ba73e2c30e9bf0be9417fd17e8ace2 (diff)
downloadcpython-5822ab672a1d26ff1837103c1ed8e4c3c2a42b87.zip
cpython-5822ab672a1d26ff1837103c1ed8e4c3c2a42b87.tar.gz
cpython-5822ab672a1d26ff1837103c1ed8e4c3c2a42b87.tar.bz2
[3.9] bpo-45229: Remove test_main in many tests (GH-28405) (GH-28456)
Instead of explicitly enumerate test classes for run_unittest() use the unittest ability to discover tests. This also makes these tests discoverable and runnable with unittest. load_tests() can be used for dynamic generating tests and adding doctests. setUpModule(), tearDownModule() and addModuleCleanup() can be used for running code before and after all module tests.. (cherry picked from commit 40348acc180580371d25f75f46b27048e35f2435)
-rw-r--r--Lib/lib2to3/tests/data/py2_test_grammar.py7
-rw-r--r--Lib/lib2to3/tests/data/py3_test_grammar.py7
-rw-r--r--Lib/test/support/__init__.py10
-rw-r--r--Lib/test/test_argparse.py6
-rw-r--r--Lib/test/test_bdb.py9
-rw-r--r--Lib/test/test_bigaddrspace.py5
-rw-r--r--Lib/test/test_bigmem.py5
-rw-r--r--Lib/test/test_bool.py4
-rw-r--r--Lib/test/test_bz2.py12
-rw-r--r--Lib/test/test_c_locale_coercion.py9
-rw-r--r--Lib/test/test_cmd_line.py6
-rw-r--r--Lib/test/test_cmd_line_script.py6
-rw-r--r--Lib/test/test_complex.py4
-rw-r--r--Lib/test/test_concurrent_futures.py12
-rw-r--r--Lib/test/test_descr.py14
-rw-r--r--Lib/test/test_devpoll.py7
-rw-r--r--Lib/test/test_difflib.py16
-rw-r--r--Lib/test/test_distutils.py12
-rw-r--r--Lib/test/test_dtrace.py17
-rw-r--r--Lib/test/test_fcntl.py6
-rw-r--r--Lib/test/test_filecmp.py5
-rw-r--r--Lib/test/test_fileio.py15
-rw-r--r--Lib/test/test_ftplib.py15
-rw-r--r--Lib/test/test_gc.py37
-rw-r--r--Lib/test/test_global.py14
-rw-r--r--Lib/test/test_gzip.py6
-rw-r--r--Lib/test/test_httpservers.py20
-rw-r--r--Lib/test/test_importlib/test_locks.py14
-rw-r--r--Lib/test/test_importlib/test_threaded_import.py18
-rw-r--r--Lib/test/test_inspect.py17
-rw-r--r--Lib/test/test_iter.py8
-rw-r--r--Lib/test/test_logging.py26
-rw-r--r--Lib/test/test_lzma.py13
-rw-r--r--Lib/test/test_mailbox.py10
-rw-r--r--Lib/test/test_multibytecodec.py4
-rw-r--r--Lib/test/test_optparse.py5
-rw-r--r--Lib/test/test_ossaudiodev.py5
-rw-r--r--Lib/test/test_pipes.py9
-rw-r--r--Lib/test/test_pkgutil.py8
-rw-r--r--Lib/test/test_poll.py7
-rw-r--r--Lib/test/test_poplib.py12
-rw-r--r--Lib/test/test_posix.py16
-rw-r--r--Lib/test/test_profile.py6
-rw-r--r--Lib/test/test_pydoc.py21
-rw-r--r--Lib/test/test_resource.py5
-rw-r--r--Lib/test/test_sax.py18
-rw-r--r--Lib/test/test_selectors.py27
-rw-r--r--Lib/test/test_ssl.py20
-rw-r--r--Lib/test/test_support.py6
-rw-r--r--Lib/test/test_tcl.py5
-rw-r--r--Lib/test/test_threadsignals.py10
-rw-r--r--Lib/test/test_timeout.py10
-rw-r--r--Lib/test/test_tracemalloc.py12
-rw-r--r--Lib/test/test_unicode_file.py6
-rw-r--r--Lib/test/test_unicode_file_functions.py12
-rw-r--r--Lib/test/test_unittest.py12
-rw-r--r--Lib/test/test_urllib2_localnet.py13
-rw-r--r--Lib/test/test_winreg.py5
-rw-r--r--Lib/test/test_xmlrpc.py14
-rw-r--r--Lib/test/test_xmlrpc_net.py9
-rw-r--r--Lib/test/test_zipimport.py14
61 files changed, 211 insertions, 472 deletions
diff --git a/Lib/lib2to3/tests/data/py2_test_grammar.py b/Lib/lib2to3/tests/data/py2_test_grammar.py
index 8663161..f9e4ea1 100644
--- a/Lib/lib2to3/tests/data/py2_test_grammar.py
+++ b/Lib/lib2to3/tests/data/py2_test_grammar.py
@@ -8,7 +8,7 @@
# regression test, the filterwarnings() call has been added to
# regrtest.py.
-from test.test_support import run_unittest, check_syntax_error
+from test.test_support import check_syntax_error
import unittest
import sys
# testing import *
@@ -967,8 +967,5 @@ hello world
self.assertEqual((6 < 4 if 0 else 2), 2)
-def test_main():
- run_unittest(TokenTests, GrammarTests)
-
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/lib2to3/tests/data/py3_test_grammar.py b/Lib/lib2to3/tests/data/py3_test_grammar.py
index e1eee52..a4a3f7e 100644
--- a/Lib/lib2to3/tests/data/py3_test_grammar.py
+++ b/Lib/lib2to3/tests/data/py3_test_grammar.py
@@ -8,7 +8,7 @@
# regression test, the filterwarnings() call has been added to
# regrtest.py.
-from test.support import run_unittest, check_syntax_error
+from test.support import check_syntax_error
import unittest
import sys
# testing import *
@@ -952,8 +952,5 @@ class GrammarTests(unittest.TestCase):
self.assertEqual((6 < 4 if 0 else 2), 2)
-def test_main():
- run_unittest(TokenTests, GrammarTests)
-
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/support/__init__.py b/Lib/test/support/__init__.py
index 7e5a29b..51af6f3 100644
--- a/Lib/test/support/__init__.py
+++ b/Lib/test/support/__init__.py
@@ -1525,9 +1525,8 @@ def check_sizeof(test, o, size):
# Decorator for running a function in a different locale, correctly resetting
# it afterwards.
+@contextlib.contextmanager
def run_with_locale(catstr, *locales):
- def decorator(func):
- def inner(*args, **kwds):
try:
import locale
category = getattr(locale, catstr)
@@ -1546,16 +1545,11 @@ def run_with_locale(catstr, *locales):
except:
pass
- # now run the function, resetting the locale on exceptions
try:
- return func(*args, **kwds)
+ yield
finally:
if locale and orig_locale:
locale.setlocale(category, orig_locale)
- inner.__name__ = func.__name__
- inner.__doc__ = func.__doc__
- return inner
- return decorator
#=======================================================================
# Decorator for running a function in a specific timezone, correctly
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py
index ab5f35f..82c1f6c 100644
--- a/Lib/test/test_argparse.py
+++ b/Lib/test/test_argparse.py
@@ -5394,13 +5394,11 @@ class TestExitOnError(TestCase):
self.parser.parse_args('--integers a'.split())
-def test_main():
- support.run_unittest(__name__)
+def tearDownModule():
# Remove global references to avoid looking like we have refleaks.
RFile.seen = {}
WFile.seen = set()
-
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_bdb.py b/Lib/test/test_bdb.py
index ae16880..405f741 100644
--- a/Lib/test/test_bdb.py
+++ b/Lib/test/test_bdb.py
@@ -1149,13 +1149,6 @@ class IssuesTestCase(BaseTestCase):
with TracerRun(self) as tracer:
tracer.runcall(tfunc_import)
-def test_main():
- test.support.run_unittest(
- StateTestCase,
- RunTestCase,
- BreakpointTestCase,
- IssuesTestCase,
- )
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_bigaddrspace.py b/Lib/test/test_bigaddrspace.py
index aa1f8ca..50272e9 100644
--- a/Lib/test/test_bigaddrspace.py
+++ b/Lib/test/test_bigaddrspace.py
@@ -92,10 +92,7 @@ class StrTest(unittest.TestCase):
x = None
-def test_main():
- support.run_unittest(BytesTest, StrTest)
-
if __name__ == '__main__':
if len(sys.argv) > 1:
support.set_memlimit(sys.argv[1])
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_bigmem.py b/Lib/test/test_bigmem.py
index 6a244dd..859f153 100644
--- a/Lib/test/test_bigmem.py
+++ b/Lib/test/test_bigmem.py
@@ -1247,11 +1247,8 @@ class ListTest(unittest.TestCase):
self.assertEqual(l[:10], [1] * 10)
self.assertEqual(l[-10:], [5] * 10)
-def test_main():
- support.run_unittest(StrTest, BytesTest, BytearrayTest,
- TupleTest, ListTest)
if __name__ == '__main__':
if len(sys.argv) > 1:
support.set_memlimit(sys.argv[1])
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_bool.py b/Lib/test/test_bool.py
index 909a59a..5550f74 100644
--- a/Lib/test/test_bool.py
+++ b/Lib/test/test_bool.py
@@ -362,8 +362,6 @@ class BoolTest(unittest.TestCase):
self.assertIs(type(False.real), int)
self.assertIs(type(False.imag), int)
-def test_main():
- support.run_unittest(BoolTest)
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_bz2.py b/Lib/test/test_bz2.py
index c84f70e..fe12816 100644
--- a/Lib/test/test_bz2.py
+++ b/Lib/test/test_bz2.py
@@ -1002,15 +1002,9 @@ class OpenTest(BaseTest):
self.assertEqual(f.readlines(), [text])
-def test_main():
- support.run_unittest(
- BZ2FileTest,
- BZ2CompressorTest,
- BZ2DecompressorTest,
- CompressDecompressTest,
- OpenTest,
- )
+def tearDownModule():
support.reap_children()
+
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_c_locale_coercion.py b/Lib/test/test_c_locale_coercion.py
index fcc8599..71f9347 100644
--- a/Lib/test/test_c_locale_coercion.py
+++ b/Lib/test/test_c_locale_coercion.py
@@ -427,12 +427,9 @@ class LocaleCoercionTests(_LocaleHandlingTestCase):
self.assertEqual(cmd.stdout.rstrip(), loc)
-def test_main():
- support.run_unittest(
- LocaleConfigurationTests,
- LocaleCoercionTests
- )
+def tearDownModule():
support.reap_children()
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_cmd_line.py b/Lib/test/test_cmd_line.py
index a3560b4..712d861 100644
--- a/Lib/test/test_cmd_line.py
+++ b/Lib/test/test_cmd_line.py
@@ -841,9 +841,9 @@ class IgnoreEnvironmentTest(unittest.TestCase):
)
-def test_main():
- support.run_unittest(CmdLineTest, IgnoreEnvironmentTest)
+def tearDownModule():
support.reap_children()
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_cmd_line_script.py b/Lib/test/test_cmd_line_script.py
index 7a3707d..7cb1370 100644
--- a/Lib/test/test_cmd_line_script.py
+++ b/Lib/test/test_cmd_line_script.py
@@ -737,9 +737,9 @@ class CmdLineTest(unittest.TestCase):
self.assertNotEqual(proc.returncode, 0)
-def test_main():
- support.run_unittest(CmdLineTest)
+def tearDownModule():
support.reap_children()
+
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_complex.py b/Lib/test/test_complex.py
index 0db9be5..7122300 100644
--- a/Lib/test/test_complex.py
+++ b/Lib/test/test_complex.py
@@ -751,8 +751,6 @@ class ComplexTest(unittest.TestCase):
self.assertEqual(format(complex(INF, 1), 'F'), 'INF+1.000000j')
self.assertEqual(format(complex(INF, -1), 'F'), 'INF-1.000000j')
-def test_main():
- support.run_unittest(ComplexTest)
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_concurrent_futures.py b/Lib/test/test_concurrent_futures.py
index ad64f4b..8545c26 100644
--- a/Lib/test/test_concurrent_futures.py
+++ b/Lib/test/test_concurrent_futures.py
@@ -1500,16 +1500,10 @@ class FutureTests(BaseTestCase):
self.assertEqual(f.exception(), e)
-_threads_key = None
-
def setUpModule():
- global _threads_key
- _threads_key = support.threading_setup()
-
-
-def tearDownModule():
- support.threading_cleanup(*_threads_key)
- multiprocessing.util._cleanup_tests()
+ unittest.addModuleCleanup(multiprocessing.util._cleanup_tests)
+ thread_info = support.threading_setup()
+ unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
if __name__ == "__main__":
diff --git a/Lib/test/test_descr.py b/Lib/test/test_descr.py
index c7a191b..2fa68b2 100644
--- a/Lib/test/test_descr.py
+++ b/Lib/test/test_descr.py
@@ -4945,8 +4945,11 @@ class DictProxyTests(unittest.TestCase):
self.assertIn('{!r}: {!r}'.format(k, v), r)
-class PTypesLongInitTest(unittest.TestCase):
+class AAAPTypesLongInitTest(unittest.TestCase):
# This is in its own TestCase so that it can be run before any other tests.
+ # (Hence the 'AAA' in the test class name: to make it the first
+ # item in a list sorted by name, like
+ # unittest.TestLoader.getTestCaseNames() does.)
def test_pytype_long_ready(self):
# Testing SF bug 551412 ...
@@ -5684,12 +5687,5 @@ class MroTest(unittest.TestCase):
pass
-def test_main():
- # Run all local test cases, with PTypesLongInitTest first.
- support.run_unittest(PTypesLongInitTest, OperatorsTest,
- ClassPropertiesAndMethods, DictProxyTests,
- MiscTests, PicklingTests, SharedKeyTests,
- MroTest)
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_devpoll.py b/Lib/test/test_devpoll.py
index 110c006..85e0acc 100644
--- a/Lib/test/test_devpoll.py
+++ b/Lib/test/test_devpoll.py
@@ -6,7 +6,7 @@ import os
import random
import select
import unittest
-from test.support import run_unittest, cpython_only
+from test.support import cpython_only
if not hasattr(select, 'devpoll') :
raise unittest.SkipTest('test works only on Solaris OS family')
@@ -138,8 +138,5 @@ class DevPollTests(unittest.TestCase):
self.assertRaises(OverflowError, pollster.modify, 1, USHRT_MAX + 1)
-def test_main():
- run_unittest(DevPollTests)
-
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_difflib.py b/Lib/test/test_difflib.py
index 42ac1fd..d939936 100644
--- a/Lib/test/test_difflib.py
+++ b/Lib/test/test_difflib.py
@@ -1,5 +1,5 @@
import difflib
-from test.support import run_unittest, findfile
+from test.support import findfile
import unittest
import doctest
import sys
@@ -547,12 +547,14 @@ class TestFindLongest(unittest.TestCase):
self.assertFalse(self.longer_match_exists(a, b, match.size))
-def test_main():
+def setUpModule():
difflib.HtmlDiff._default_prefix = 0
- Doctests = doctest.DocTestSuite(difflib)
- run_unittest(
- TestWithAscii, TestAutojunk, TestSFpatches, TestSFbugs,
- TestOutputFormat, TestBytes, TestJunkAPIs, TestFindLongest, Doctests)
+
+
+def load_tests(loader, tests, pattern):
+ tests.addTest(doctest.DocTestSuite(difflib))
+ return tests
+
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_distutils.py b/Lib/test/test_distutils.py
index a37f117..790d39c 100644
--- a/Lib/test/test_distutils.py
+++ b/Lib/test/test_distutils.py
@@ -9,16 +9,14 @@ import distutils.tests
import test.support
-def test_main():
- # used by regrtest
- test.support.run_unittest(distutils.tests.test_suite())
- test.support.reap_children()
-
-
def load_tests(*_):
# used by unittest
return distutils.tests.test_suite()
+def tearDownModule():
+ test.support.reap_children()
+
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_dtrace.py b/Lib/test/test_dtrace.py
index 8612e27..1db73cc 100644
--- a/Lib/test/test_dtrace.py
+++ b/Lib/test/test_dtrace.py
@@ -6,7 +6,7 @@ import sys
import types
import unittest
-from test.support import findfile, run_unittest
+from test.support import findfile
def abspath(filename):
@@ -97,7 +97,7 @@ class SystemTapBackend(TraceBackend):
COMMAND = ["stap", "-g"]
-class TraceTests(unittest.TestCase):
+class TraceTests:
# unittest.TestCase options
maxDiff = None
@@ -149,30 +149,25 @@ class TraceTests(unittest.TestCase):
self.run_case("line")
-class DTraceNormalTests(TraceTests):
+class DTraceNormalTests(TraceTests, unittest.TestCase):
backend = DTraceBackend()
optimize_python = 0
-class DTraceOptimizedTests(TraceTests):
+class DTraceOptimizedTests(TraceTests, unittest.TestCase):
backend = DTraceBackend()
optimize_python = 2
-class SystemTapNormalTests(TraceTests):
+class SystemTapNormalTests(TraceTests, unittest.TestCase):
backend = SystemTapBackend()
optimize_python = 0
-class SystemTapOptimizedTests(TraceTests):
+class SystemTapOptimizedTests(TraceTests, unittest.TestCase):
backend = SystemTapBackend()
optimize_python = 2
-def test_main():
- run_unittest(DTraceNormalTests, DTraceOptimizedTests, SystemTapNormalTests,
- SystemTapOptimizedTests)
-
-
if __name__ == '__main__':
test_main()
diff --git a/Lib/test/test_fcntl.py b/Lib/test/test_fcntl.py
index 9ab68c6..2a3209e 100644
--- a/Lib/test/test_fcntl.py
+++ b/Lib/test/test_fcntl.py
@@ -6,7 +6,7 @@ import struct
import sys
import unittest
from multiprocessing import Process
-from test.support import (verbose, TESTFN, unlink, run_unittest, import_module,
+from test.support import (verbose, TESTFN, unlink, import_module,
cpython_only)
# Skip test if no fcntl module.
@@ -188,8 +188,6 @@ class TestFcntl(unittest.TestCase):
res = fcntl.fcntl(self.f.fileno(), fcntl.F_GETPATH, bytes(len(expected)))
self.assertEqual(expected, res)
-def test_main():
- run_unittest(TestFcntl)
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_filecmp.py b/Lib/test/test_filecmp.py
index b5b24a2..f6228cc 100644
--- a/Lib/test/test_filecmp.py
+++ b/Lib/test/test_filecmp.py
@@ -210,8 +210,5 @@ class DirCompareTestCase(unittest.TestCase):
self.assertEqual(report_lines, expected_report_lines)
-def test_main():
- support.run_unittest(FileCompareTestCase, DirCompareTestCase)
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_fileio.py b/Lib/test/test_fileio.py
index 77c7f69..2671d6a 100644
--- a/Lib/test/test_fileio.py
+++ b/Lib/test/test_fileio.py
@@ -9,7 +9,7 @@ from array import array
from weakref import proxy
from functools import wraps
-from test.support import (TESTFN, TESTFN_UNICODE, check_warnings, run_unittest,
+from test.support import (TESTFN, TESTFN_UNICODE, check_warnings,
make_bad_fd, cpython_only, swap_attr, gc_collect)
from collections import UserList
@@ -605,15 +605,12 @@ class PyOtherFileTests(OtherFileTests, unittest.TestCase):
self.assertNotEqual(w.warnings, [])
-def test_main():
+def tearDownModule():
# Historically, these tests have been sloppy about removing TESTFN.
# So get rid of it no matter what.
- try:
- run_unittest(CAutoFileTests, PyAutoFileTests,
- COtherFileTests, PyOtherFileTests)
- finally:
- if os.path.exists(TESTFN):
- os.unlink(TESTFN)
+ if os.path.exists(TESTFN):
+ os.unlink(TESTFN)
+
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_ftplib.py b/Lib/test/test_ftplib.py
index b76287b..6f8f977 100644
--- a/Lib/test/test_ftplib.py
+++ b/Lib/test/test_ftplib.py
@@ -12,6 +12,7 @@ import errno
import os
import threading
import time
+import unittest
try:
import ssl
except ImportError:
@@ -1136,18 +1137,10 @@ class MiscTestCase(TestCase):
support.check__all__(self, ftplib, blacklist=blacklist)
-def test_main():
- tests = [TestFTPClass, TestTimeouts,
- TestIPv6Environment,
- TestTLS_FTPClassMixin, TestTLS_FTPClass,
- MiscTestCase]
-
+def setUpModule():
thread_info = support.threading_setup()
- try:
- support.run_unittest(*tests)
- finally:
- support.threading_cleanup(*thread_info)
+ unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_gc.py b/Lib/test/test_gc.py
index 59cff20..3313804 100644
--- a/Lib/test/test_gc.py
+++ b/Lib/test/test_gc.py
@@ -1,6 +1,6 @@
import unittest
import unittest.mock
-from test.support import (verbose, refcount_test, run_unittest,
+from test.support import (verbose, refcount_test,
cpython_only, start_threads,
temp_dir, TESTFN, unlink,
import_module)
@@ -1388,30 +1388,27 @@ class PythonFinalizationTests(unittest.TestCase):
assert_python_ok("-c", code)
-def test_main():
+def setUpModule():
+ global enabled, debug
enabled = gc.isenabled()
gc.disable()
assert not gc.isenabled()
debug = gc.get_debug()
gc.set_debug(debug & ~gc.DEBUG_LEAK) # this test is supposed to leak
+ gc.collect() # Delete 2nd generation garbage
+
+
+def tearDownModule():
+ gc.set_debug(debug)
+ # test gc.enable() even if GC is disabled by default
+ if verbose:
+ print("restoring automatic collection")
+ # make sure to always test gc.enable()
+ gc.enable()
+ assert gc.isenabled()
+ if not enabled:
+ gc.disable()
- try:
- gc.collect() # Delete 2nd generation garbage
- run_unittest(
- GCTests,
- GCCallbackTests,
- GCTogglingTests,
- PythonFinalizationTests)
- finally:
- gc.set_debug(debug)
- # test gc.enable() even if GC is disabled by default
- if verbose:
- print("restoring automatic collection")
- # make sure to always test gc.enable()
- gc.enable()
- assert gc.isenabled()
- if not enabled:
- gc.disable()
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_global.py b/Lib/test/test_global.py
index 8159602..e60f002 100644
--- a/Lib/test/test_global.py
+++ b/Lib/test/test_global.py
@@ -1,6 +1,6 @@
"""Verify that warnings are issued for global statements following use."""
-from test.support import run_unittest, check_syntax_error, check_warnings
+from test.support import check_syntax_error, check_warnings
import unittest
import warnings
@@ -52,10 +52,12 @@ x = 2
compile(prog_text_4, "<test string>", "exec")
-def test_main():
- with warnings.catch_warnings():
- warnings.filterwarnings("error", module="<test string>")
- run_unittest(GlobalTests)
+def setUpModule():
+ cm = warnings.catch_warnings()
+ cm.__enter__()
+ unittest.addModuleCleanup(cm.__exit__, None, None, None)
+ warnings.filterwarnings("error", module="<test string>")
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 1af23c6..1d41efa 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -831,9 +831,5 @@ class TestCommandLine(unittest.TestCase):
self.assertEqual(out, b'')
-def test_main(verbose=None):
- support.run_unittest(TestGzip, TestOpen, TestCommandLine)
-
-
if __name__ == "__main__":
- test_main(verbose=True)
+ unittest.main()
diff --git a/Lib/test/test_httpservers.py b/Lib/test/test_httpservers.py
index 70e562f..c1494d2 100644
--- a/Lib/test/test_httpservers.py
+++ b/Lib/test/test_httpservers.py
@@ -1300,21 +1300,9 @@ class ScriptTestCase(unittest.TestCase):
self.assertEqual(mock_server.address_family, socket.AF_INET)
-def test_main(verbose=None):
- cwd = os.getcwd()
- try:
- support.run_unittest(
- RequestHandlerLoggingTestCase,
- BaseHTTPRequestHandlerTestCase,
- BaseHTTPServerTestCase,
- SimpleHTTPServerTestCase,
- CGIHTTPServerTestCase,
- SimpleHTTPRequestHandlerTestCase,
- MiscTestCase,
- ScriptTestCase
- )
- finally:
- os.chdir(cwd)
+def setUpModule():
+ unittest.addModuleCleanup(os.chdir, os.getcwd())
+
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_importlib/test_locks.py b/Lib/test/test_importlib/test_locks.py
index 21794d9..bb6e083 100644
--- a/Lib/test/test_importlib/test_locks.py
+++ b/Lib/test/test_importlib/test_locks.py
@@ -4,6 +4,7 @@ init = test_util.import_importlib('importlib')
import sys
import threading
+import unittest
import weakref
from test import support
@@ -138,15 +139,10 @@ class LifetimeTests:
) = test_util.test_both(LifetimeTests, init=init)
-@support.reap_threads
-def test_main():
- support.run_unittest(Frozen_ModuleLockAsRLockTests,
- Source_ModuleLockAsRLockTests,
- Frozen_DeadlockAvoidanceTests,
- Source_DeadlockAvoidanceTests,
- Frozen_LifetimeTests,
- Source_LifetimeTests)
+def setUpModule():
+ thread_info = support.threading_setup()
+ unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
if __name__ == '__main__':
- test_main()
+ unittets.main()
diff --git a/Lib/test/test_importlib/test_threaded_import.py b/Lib/test/test_importlib/test_threaded_import.py
index d1f8db4..221d0da 100644
--- a/Lib/test/test_importlib/test_threaded_import.py
+++ b/Lib/test/test_importlib/test_threaded_import.py
@@ -14,8 +14,9 @@ import shutil
import threading
import unittest
from unittest import mock
+from test import support
from test.support import (
- verbose, run_unittest, TESTFN, reap_threads,
+ verbose, TESTFN,
forget, unlink, rmtree, start_threads, script_helper)
def task(N, done, done_tasks, errors):
@@ -257,19 +258,16 @@ class ThreadedImportTests(unittest.TestCase):
script_helper.assert_python_ok(fn)
-@reap_threads
-def test_main():
- old_switchinterval = None
+def setUpModule():
+ thread_info = support.threading_setup()
+ unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
try:
old_switchinterval = sys.getswitchinterval()
+ unittest.addModuleCleanup(sys.setswitchinterval, old_switchinterval)
sys.setswitchinterval(1e-5)
except AttributeError:
pass
- try:
- run_unittest(ThreadedImportTests)
- finally:
- if old_switchinterval is not None:
- sys.setswitchinterval(old_switchinterval)
+
if __name__ == "__main__":
- test_main()
+ unittets.main()
diff --git a/Lib/test/test_inspect.py b/Lib/test/test_inspect.py
index dc7f5c2..17c5d87 100644
--- a/Lib/test/test_inspect.py
+++ b/Lib/test/test_inspect.py
@@ -24,7 +24,7 @@ try:
except ImportError:
ThreadPoolExecutor = None
-from test.support import run_unittest, TESTFN, DirsOnSysPath, cpython_only
+from test.support import TESTFN, DirsOnSysPath, cpython_only
from test.support import MISSING_C_DOCSTRINGS, ALWAYS_EQ
from test.support.script_helper import assert_python_ok, assert_python_failure
from test import inspect_fodder as mod
@@ -4081,18 +4081,5 @@ def foo():
self.assertInspectEqual(path, module)
-def test_main():
- run_unittest(
- TestDecorators, TestRetrievingSourceCode, TestOneliners, TestBlockComments,
- TestBuggyCases, TestInterpreterStack, TestClassesAndFunctions, TestPredicates,
- TestGetcallargsFunctions, TestGetcallargsMethods,
- TestGetcallargsUnboundMethods, TestGetattrStatic, TestGetGeneratorState,
- TestNoEOL, TestSignatureObject, TestSignatureBind, TestParameterObject,
- TestBoundArguments, TestSignaturePrivateHelpers,
- TestSignatureDefinitions, TestIsDataDescriptor,
- TestGetClosureVars, TestUnwrap, TestMain, TestReload,
- TestGetCoroutineState, TestGettingSourceOfToplevelFrames
- )
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_iter.py b/Lib/test/test_iter.py
index 5243469..d238985 100644
--- a/Lib/test/test_iter.py
+++ b/Lib/test/test_iter.py
@@ -2,7 +2,7 @@
import sys
import unittest
-from test.support import run_unittest, TESTFN, unlink, cpython_only
+from test.support import TESTFN, unlink, cpython_only
from test.support import check_free_after_iterating, ALWAYS_EQ, NEVER_EQ
import pickle
import collections.abc
@@ -1036,9 +1036,5 @@ class TestCase(unittest.TestCase):
self.assertRaises(ZeroDivisionError, iter, BadIterableClass())
-def test_main():
- run_unittest(TestCase)
-
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_logging.py b/Lib/test/test_logging.py
index 8a3ffb5..08fb795 100644
--- a/Lib/test/test_logging.py
+++ b/Lib/test/test_logging.py
@@ -5365,25 +5365,11 @@ class MiscTestCase(unittest.TestCase):
# Set the locale to the platform-dependent default. I have no idea
# why the test does this, but in any case we save the current locale
# first and restore it at the end.
-@support.run_with_locale('LC_ALL', '')
-def test_main():
- tests = [
- BuiltinLevelsTest, BasicFilterTest, CustomLevelsAndFiltersTest,
- HandlerTest, MemoryHandlerTest, ConfigFileTest, SocketHandlerTest,
- DatagramHandlerTest, MemoryTest, EncodingTest, WarningsTest,
- ConfigDictTest, ManagerTest, FormatterTest, BufferingFormatterTest,
- StreamHandlerTest, LogRecordFactoryTest, ChildLoggerTest,
- QueueHandlerTest, ShutdownTest, ModuleLevelMiscTest, BasicConfigTest,
- LoggerAdapterTest, LoggerTest, SMTPHandlerTest, FileHandlerTest,
- RotatingFileHandlerTest, LastResortTest, LogRecordTest,
- ExceptionTest, SysLogHandlerTest, IPv6SysLogHandlerTest, HTTPHandlerTest,
- NTEventLogHandlerTest, TimedRotatingFileHandlerTest,
- UnixSocketHandlerTest, UnixDatagramHandlerTest, UnixSysLogHandlerTest,
- MiscTestCase
- ]
- if hasattr(logging.handlers, 'QueueListener'):
- tests.append(QueueListenerTest)
- support.run_unittest(*tests)
+def setUpModule():
+ cm = support.run_with_locale('LC_ALL', '')
+ cm.__enter__()
+ unittest.addModuleCleanup(cm.__exit__, None, None, None)
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_lzma.py b/Lib/test/test_lzma.py
index ef7dd63..ad9484d 100644
--- a/Lib/test/test_lzma.py
+++ b/Lib/test/test_lzma.py
@@ -10,7 +10,7 @@ from test import support
import unittest
from test.support import (
- _4G, TESTFN, import_module, bigmemtest, run_unittest, unlink
+ _4G, TESTFN, import_module, bigmemtest, unlink
)
lzma = import_module("lzma")
@@ -1936,14 +1936,5 @@ ISSUE_21872_DAT = (
)
-def test_main():
- run_unittest(
- CompressorDecompressorTestCase,
- CompressDecompressFunctionTestCase,
- FileTestCase,
- OpenTestCase,
- MiscellaneousTestCase,
- )
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_mailbox.py b/Lib/test/test_mailbox.py
index 6f891d4..37b4500 100644
--- a/Lib/test/test_mailbox.py
+++ b/Lib/test/test_mailbox.py
@@ -2299,15 +2299,9 @@ class MiscTestCase(unittest.TestCase):
support.check__all__(self, mailbox, blacklist=blacklist)
-def test_main():
- tests = (TestMailboxSuperclass, TestMaildir, TestMbox, TestMMDF, TestMH,
- TestBabyl, TestMessage, TestMaildirMessage, TestMboxMessage,
- TestMHMessage, TestBabylMessage, TestMMDFMessage,
- TestMessageConversion, TestProxyFile, TestPartialFile,
- MaildirTestCase, TestFakeMailBox, MiscTestCase)
- support.run_unittest(*tests)
+def tearDownModule():
support.reap_children()
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_multibytecodec.py b/Lib/test/test_multibytecodec.py
index 3cf5d7b..96013ed 100644
--- a/Lib/test/test_multibytecodec.py
+++ b/Lib/test/test_multibytecodec.py
@@ -380,8 +380,6 @@ class TestHZStateful(TestStateful):
reset = b'~}'
expected_reset = expected + reset
-def test_main():
- support.run_unittest(__name__)
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_optparse.py b/Lib/test/test_optparse.py
index 437fdd2..b825ca1 100644
--- a/Lib/test/test_optparse.py
+++ b/Lib/test/test_optparse.py
@@ -1655,8 +1655,5 @@ class MiscTestCase(unittest.TestCase):
support.check__all__(self, optparse, blacklist=blacklist)
-def test_main():
- support.run_unittest(__name__)
-
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_ossaudiodev.py b/Lib/test/test_ossaudiodev.py
index 624fbf2..f1b0d64 100644
--- a/Lib/test/test_ossaudiodev.py
+++ b/Lib/test/test_ossaudiodev.py
@@ -187,7 +187,7 @@ class OSSAudioDevTests(unittest.TestCase):
mixer.close()
self.assertRaises(ValueError, mixer.fileno)
-def test_main():
+def setUpModule():
try:
dsp = ossaudiodev.open('w')
except (ossaudiodev.error, OSError) as msg:
@@ -196,7 +196,6 @@ def test_main():
raise unittest.SkipTest(msg)
raise
dsp.close()
- support.run_unittest(__name__)
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_pipes.py b/Lib/test/test_pipes.py
index 1d538b9..72e1cab 100644
--- a/Lib/test/test_pipes.py
+++ b/Lib/test/test_pipes.py
@@ -3,7 +3,7 @@ import os
import string
import unittest
import shutil
-from test.support import TESTFN, run_unittest, unlink, reap_children
+from test.support import TESTFN, unlink, reap_children
if os.name != 'posix':
raise unittest.SkipTest('pipes module only works on posix')
@@ -194,9 +194,10 @@ class SimplePipeTests(unittest.TestCase):
self.assertNotEqual(id(t.steps), id(u.steps))
self.assertEqual(t.debugging, u.debugging)
-def test_main():
- run_unittest(SimplePipeTests)
+
+def tearDownModule():
reap_children()
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_pkgutil.py b/Lib/test/test_pkgutil.py
index 54725dc..e48d33d 100644
--- a/Lib/test/test_pkgutil.py
+++ b/Lib/test/test_pkgutil.py
@@ -1,5 +1,5 @@
from pathlib import Path
-from test.support import run_unittest, unload, check_warnings, CleanImport
+from test.support import unload, check_warnings, CleanImport
import unittest
import sys
import importlib
@@ -623,9 +623,7 @@ class ImportlibMigrationTests(unittest.TestCase):
self.assertEqual(len(w.warnings), 0)
-def test_main():
- run_unittest(PkgutilTests, PkgutilPEP302Tests, ExtendPathTests,
- NestedNamespacePackageTest, ImportlibMigrationTests)
+def tearDownModule():
# this is necessary if test is run repeated (like when finding leaks)
import zipimport
import importlib
@@ -634,4 +632,4 @@ def test_main():
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_poll.py b/Lib/test/test_poll.py
index ef966bf..294131d 100644
--- a/Lib/test/test_poll.py
+++ b/Lib/test/test_poll.py
@@ -7,7 +7,7 @@ import select
import threading
import time
import unittest
-from test.support import TESTFN, run_unittest, reap_threads, cpython_only
+from test.support import TESTFN, reap_threads, cpython_only
try:
select.poll
@@ -226,8 +226,5 @@ class PollTests(unittest.TestCase):
os.close(w)
-def test_main():
- run_unittest(PollTests)
-
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_poplib.py b/Lib/test/test_poplib.py
index b670afc..5228fc4 100644
--- a/Lib/test/test_poplib.py
+++ b/Lib/test/test_poplib.py
@@ -11,6 +11,7 @@ import os
import errno
import threading
+import unittest
from unittest import TestCase, skipUnless
from test import support as test_support
from test.support import hashlib_helper
@@ -533,15 +534,10 @@ class TestTimeouts(TestCase):
poplib.POP3(HOST, self.port, timeout=0)
-def test_main():
- tests = [TestPOP3Class, TestTimeouts,
- TestPOP3_SSLClass, TestPOP3_TLSClass]
+def setUpModule():
thread_info = test_support.threading_setup()
- try:
- test_support.run_unittest(*tests)
- finally:
- test_support.threading_cleanup(*thread_info)
+ unittest.addModuleCleanup(test_support.threading_cleanup, *thread_info)
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_posix.py b/Lib/test/test_posix.py
index f4edb8b..890b7e0 100644
--- a/Lib/test/test_posix.py
+++ b/Lib/test/test_posix.py
@@ -2132,17 +2132,9 @@ class TestPosixWeaklinking(unittest.TestCase):
os.utime("path", dir_fd=0)
-def test_main():
- try:
- support.run_unittest(
- PosixTester,
- PosixGroupsTester,
- TestPosixSpawn,
- TestPosixSpawnP,
- TestPosixWeaklinking
- )
- finally:
- support.reap_children()
+def tearDownModule():
+ support.reap_children()
+
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_profile.py b/Lib/test/test_profile.py
index 2336498..3bb367b 100644
--- a/Lib/test/test_profile.py
+++ b/Lib/test/test_profile.py
@@ -6,7 +6,7 @@ import unittest
import os
from difflib import unified_diff
from io import StringIO
-from test.support import TESTFN, run_unittest, unlink, temp_dir, change_cwd
+from test.support import TESTFN, unlink, temp_dir, change_cwd
from contextlib import contextmanager
import profile
@@ -155,12 +155,10 @@ def silent():
finally:
sys.stdout = stdout
-def test_main():
- run_unittest(ProfileTest)
def main():
if '-r' not in sys.argv:
- test_main()
+ unittest.main()
else:
regenerate_expected_output(__file__, ProfileTest)
diff --git a/Lib/test/test_pydoc.py b/Lib/test/test_pydoc.py
index 0bbdc42..9b0e94d 100644
--- a/Lib/test/test_pydoc.py
+++ b/Lib/test/test_pydoc.py
@@ -1569,20 +1569,11 @@ class TestInternalUtilities(unittest.TestCase):
self.assertIsNone(self._get_revised_path(trailing_argv0dir))
-@reap_threads
-def test_main():
- try:
- test.support.run_unittest(PydocDocTest,
- PydocImportTest,
- TestDescriptions,
- PydocServerTest,
- PydocUrlHandlerTest,
- TestHelper,
- PydocWithMetaClasses,
- TestInternalUtilities,
- )
- finally:
- reap_children()
+def setUpModule():
+ thread_info = test.support.threading_setup()
+ unittest.addModuleCleanup(test.support.threading_cleanup, *thread_info)
+ unittest.addModuleCleanup(reap_children)
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_resource.py b/Lib/test/test_resource.py
index e5ece52..089dbf9 100644
--- a/Lib/test/test_resource.py
+++ b/Lib/test/test_resource.py
@@ -172,8 +172,5 @@ class ResourceTest(unittest.TestCase):
limits)
-def test_main(verbose=None):
- support.run_unittest(ResourceTest)
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_sax.py b/Lib/test/test_sax.py
index ce3a422..3e7feda 100644
--- a/Lib/test/test_sax.py
+++ b/Lib/test/test_sax.py
@@ -22,7 +22,7 @@ import shutil
from urllib.error import URLError
import urllib.request
from test import support
-from test.support import findfile, run_unittest, FakePath, TESTFN
+from test.support import findfile, FakePath, TESTFN
TEST_XMLFILE = findfile("test.xml", subdir="xmltestdata")
TEST_XMLFILE_OUT = findfile("test.xml.out", subdir="xmltestdata")
@@ -1353,19 +1353,5 @@ class XmlReaderTest(XmlTestBase):
self.assertEqual(attrs.getQNameByName((ns_uri, "attr")), "ns:attr")
-def test_main():
- run_unittest(MakeParserTest,
- ParseTest,
- SaxutilsTest,
- PrepareInputSourceTest,
- StringXmlgenTest,
- BytesXmlgenTest,
- WriterXmlgenTest,
- StreamWriterXmlgenTest,
- StreamReaderWriterXmlgenTest,
- ExpatReaderTest,
- ErrorReportingTest,
- XmlReaderTest)
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_selectors.py b/Lib/test/test_selectors.py
index 2274c39..3a3f877 100644
--- a/Lib/test/test_selectors.py
+++ b/Lib/test/test_selectors.py
@@ -48,7 +48,7 @@ def find_ready_matching(ready, flag):
return match
-class BaseSelectorTestCase(unittest.TestCase):
+class BaseSelectorTestCase:
def make_socketpair(self):
rd, wr = socketpair()
@@ -492,26 +492,28 @@ class ScalableSelectorMixIn:
self.assertEqual(NUM_FDS // 2, len(fds))
-class DefaultSelectorTestCase(BaseSelectorTestCase):
+class DefaultSelectorTestCase(BaseSelectorTestCase, unittest.TestCase):
SELECTOR = selectors.DefaultSelector
-class SelectSelectorTestCase(BaseSelectorTestCase):
+class SelectSelectorTestCase(BaseSelectorTestCase, unittest.TestCase):
SELECTOR = selectors.SelectSelector
@unittest.skipUnless(hasattr(selectors, 'PollSelector'),
"Test needs selectors.PollSelector")
-class PollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn):
+class PollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn,
+ unittest.TestCase):
SELECTOR = getattr(selectors, 'PollSelector', None)
@unittest.skipUnless(hasattr(selectors, 'EpollSelector'),
"Test needs selectors.EpollSelector")
-class EpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn):
+class EpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn,
+ unittest.TestCase):
SELECTOR = getattr(selectors, 'EpollSelector', None)
@@ -528,7 +530,8 @@ class EpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn):
@unittest.skipUnless(hasattr(selectors, 'KqueueSelector'),
"Test needs selectors.KqueueSelector)")
-class KqueueSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn):
+class KqueueSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn,
+ unittest.TestCase):
SELECTOR = getattr(selectors, 'KqueueSelector', None)
@@ -560,19 +563,15 @@ class KqueueSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn):
@unittest.skipUnless(hasattr(selectors, 'DevpollSelector'),
"Test needs selectors.DevpollSelector")
-class DevpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn):
+class DevpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn,
+ unittest.TestCase):
SELECTOR = getattr(selectors, 'DevpollSelector', None)
-
-def test_main():
- tests = [DefaultSelectorTestCase, SelectSelectorTestCase,
- PollSelectorTestCase, EpollSelectorTestCase,
- KqueueSelectorTestCase, DevpollSelectorTestCase]
- support.run_unittest(*tests)
+def tearDownModule():
support.reap_children()
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_ssl.py b/Lib/test/test_ssl.py
index f928bce..42ebcc0 100644
--- a/Lib/test/test_ssl.py
+++ b/Lib/test/test_ssl.py
@@ -2281,6 +2281,7 @@ class SimpleBackgroundTests(unittest.TestCase):
self.ssl_io_loop(sock, incoming, outgoing, sslobj.unwrap)
+@support.requires_resource('network')
class NetworkedTests(unittest.TestCase):
def test_timeout_connect_ex(self):
@@ -4812,7 +4813,7 @@ class TestSSLDebug(unittest.TestCase):
s.connect((HOST, server.port))
-def test_main(verbose=False):
+def setUpModule():
if support.verbose:
plats = {
'Mac': platform.mac_ver,
@@ -4843,20 +4844,9 @@ def test_main(verbose=False):
if not os.path.exists(filename):
raise support.TestFailed("Can't read certificate file %r" % filename)
- tests = [
- ContextTests, BasicSocketTests, SSLErrorTests, MemoryBIOTests,
- SSLObjectTests, SimpleBackgroundTests, ThreadedTests,
- TestPostHandshakeAuth, TestSSLDebug
- ]
-
- if support.is_resource_enabled('network'):
- tests.append(NetworkedTests)
-
thread_info = support.threading_setup()
- try:
- support.run_unittest(*tests)
- finally:
- support.threading_cleanup(*thread_info)
+ unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_support.py b/Lib/test/test_support.py
index 60a7741..159346d 100644
--- a/Lib/test/test_support.py
+++ b/Lib/test/test_support.py
@@ -716,9 +716,5 @@ def _warn_about_deprecation():
)
-def test_main():
- tests = [TestSupport]
- support.run_unittest(*tests)
-
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_tcl.py b/Lib/test/test_tcl.py
index fa974d1..cd142ab 100644
--- a/Lib/test/test_tcl.py
+++ b/Lib/test/test_tcl.py
@@ -799,8 +799,5 @@ def setUpModule():
print('patchlevel =', tcl.call('info', 'patchlevel'))
-def test_main():
- support.run_unittest(TclTest, TkinterTest, BigmemTclTest)
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_threadsignals.py b/Lib/test/test_threadsignals.py
index eeacd36..b000adc 100644
--- a/Lib/test/test_threadsignals.py
+++ b/Lib/test/test_threadsignals.py
@@ -230,7 +230,7 @@ class ThreadSignals(unittest.TestCase):
signal.signal(signal.SIGUSR1, old_handler)
-def test_main():
+def setUpModule():
global signal_blackboard
signal_blackboard = { signal.SIGUSR1 : {'tripped': 0, 'tripped_by': 0 },
@@ -238,10 +238,8 @@ def test_main():
signal.SIGALRM : {'tripped': 0, 'tripped_by': 0 } }
oldsigs = registerSignals(handle_signals, handle_signals, handle_signals)
- try:
- support.run_unittest(ThreadSignals)
- finally:
- registerSignals(*oldsigs)
+ unittest.addModuleCleanup(registerSignals, *oldsigs)
+
if __name__ == '__main__':
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_timeout.py b/Lib/test/test_timeout.py
index ac803f5..fb73b5a 100644
--- a/Lib/test/test_timeout.py
+++ b/Lib/test/test_timeout.py
@@ -290,13 +290,9 @@ class UDPTimeoutTestCase(TimeoutTestCase):
self._sock_operation(1, 1.5, 'recvfrom', 1024)
-def test_main():
+def setUpModule():
support.requires('network')
- support.run_unittest(
- CreationTestCase,
- TCPTimeoutTestCase,
- UDPTimeoutTestCase,
- )
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_tracemalloc.py b/Lib/test/test_tracemalloc.py
index b10d179..687e2b6 100644
--- a/Lib/test/test_tracemalloc.py
+++ b/Lib/test/test_tracemalloc.py
@@ -1081,15 +1081,5 @@ class TestCAPI(unittest.TestCase):
self.untrack()
-def test_main():
- support.run_unittest(
- TestTraceback,
- TestTracemallocEnabled,
- TestSnapshot,
- TestFilters,
- TestCommandLine,
- TestCAPI,
- )
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_unicode_file.py b/Lib/test/test_unicode_file.py
index e8feb42..a9412e4 100644
--- a/Lib/test/test_unicode_file.py
+++ b/Lib/test/test_unicode_file.py
@@ -5,7 +5,7 @@ import os, glob, time, shutil
import unicodedata
import unittest
-from test.support import (run_unittest, rmtree, change_cwd,
+from test.support import (rmtree, change_cwd,
TESTFN_ENCODING, TESTFN_UNICODE, TESTFN_UNENCODABLE, create_empty_file)
if not os.path.supports_unicode_filenames:
@@ -133,8 +133,6 @@ class TestUnicodeFiles(unittest.TestCase):
self._do_directory(TESTFN_UNENCODABLE+ext,
TESTFN_UNENCODABLE+ext)
-def test_main():
- run_unittest(__name__)
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_unicode_file_functions.py b/Lib/test/test_unicode_file_functions.py
index 1cd0d62..e36c7cd 100644
--- a/Lib/test/test_unicode_file_functions.py
+++ b/Lib/test/test_unicode_file_functions.py
@@ -181,15 +181,5 @@ class UnicodeNFKDFileTests(UnicodeFileTests):
normal_form = 'NFKD'
-def test_main():
- support.run_unittest(
- UnicodeFileTests,
- UnicodeNFCFileTests,
- UnicodeNFDFileTests,
- UnicodeNFKCFileTests,
- UnicodeNFKDFileTests,
- )
-
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_unittest.py b/Lib/test/test_unittest.py
index bfc3ded..1079c7d 100644
--- a/Lib/test/test_unittest.py
+++ b/Lib/test/test_unittest.py
@@ -3,14 +3,14 @@ import unittest.test
from test import support
-def test_main():
- # used by regrtest
- support.run_unittest(unittest.test.suite())
- support.reap_children()
-
def load_tests(*_):
# used by unittest
return unittest.test.suite()
+
+def tearDownModule():
+ support.reap_children()
+
+
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_urllib2_localnet.py b/Lib/test/test_urllib2_localnet.py
index ed426b0..e73132a 100644
--- a/Lib/test/test_urllib2_localnet.py
+++ b/Lib/test/test_urllib2_localnet.py
@@ -660,17 +660,10 @@ class TestUrlopen(unittest.TestCase):
self.assertEqual(index + 1, len(lines))
-threads_key = None
-
def setUpModule():
- # Store the threading_setup in a key and ensure that it is cleaned up
- # in the tearDown
- global threads_key
- threads_key = support.threading_setup()
-
-def tearDownModule():
- if threads_key:
- support.threading_cleanup(*threads_key)
+ thread_info = support.threading_setup()
+ unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
+
if __name__ == "__main__":
unittest.main()
diff --git a/Lib/test/test_winreg.py b/Lib/test/test_winreg.py
index 5c25ec8..1e689f7 100644
--- a/Lib/test/test_winreg.py
+++ b/Lib/test/test_winreg.py
@@ -489,12 +489,9 @@ class Win64WinregTests(BaseWinregTests):
with self.assertRaises(FileNotFoundError) as ctx:
QueryValue(HKEY_CLASSES_ROOT, 'some_value_that_does_not_exist')
-def test_main():
- support.run_unittest(LocalWinregTests, RemoteWinregTests,
- Win64WinregTests)
if __name__ == "__main__":
if not REMOTE_NAME:
print("Remote registry calls can be tested using",
"'test_winreg.py --remote \\\\machine_name'")
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_xmlrpc.py b/Lib/test/test_xmlrpc.py
index 7554403..83b618b 100644
--- a/Lib/test/test_xmlrpc.py
+++ b/Lib/test/test_xmlrpc.py
@@ -1502,16 +1502,10 @@ class UseBuiltinTypesTestCase(unittest.TestCase):
self.assertTrue(server.use_builtin_types)
-@support.reap_threads
-def test_main():
- support.run_unittest(XMLRPCTestCase, HelperTestCase, DateTimeTestCase,
- BinaryTestCase, FaultTestCase, UseBuiltinTypesTestCase,
- SimpleServerTestCase, SimpleServerEncodingTestCase,
- KeepaliveServerTestCase1, KeepaliveServerTestCase2,
- GzipServerTestCase, GzipUtilTestCase, HeadersServerTestCase,
- MultiPathServerTestCase, ServerProxyTestCase, FailingServerTestCase,
- CGIHandlerTestCase, SimpleXMLRPCDispatcherTestCase)
+def setUpModule():
+ thread_info = support.threading_setup()
+ unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_xmlrpc_net.py b/Lib/test/test_xmlrpc_net.py
index f3652b8..51167b2 100644
--- a/Lib/test/test_xmlrpc_net.py
+++ b/Lib/test/test_xmlrpc_net.py
@@ -5,6 +5,9 @@ from test import support
import xmlrpc.client as xmlrpclib
+support.requires("network")
+
+
@unittest.skip('XXX: buildbot.python.org/all/xmlrpc/ is gone')
class PythonBuildersTest(unittest.TestCase):
@@ -24,9 +27,5 @@ class PythonBuildersTest(unittest.TestCase):
self.assertTrue([x for x in builders if "3.x" in x], builders)
-def test_main():
- support.requires("network")
- support.run_unittest(PythonBuildersTest)
-
if __name__ == "__main__":
- test_main()
+ unittest.main()
diff --git a/Lib/test/test_zipimport.py b/Lib/test/test_zipimport.py
index 80c98b4..2e24388 100644
--- a/Lib/test/test_zipimport.py
+++ b/Lib/test/test_zipimport.py
@@ -766,15 +766,9 @@ class BadFileZipImportTestCase(unittest.TestCase):
zipimport._zip_directory_cache.clear()
-def test_main():
- try:
- support.run_unittest(
- UncompressedZipImportTestCase,
- CompressedZipImportTestCase,
- BadFileZipImportTestCase,
- )
- finally:
- support.unlink(TESTMOD)
+def tearDownModule():
+ support.unlink(TESTMOD)
+
if __name__ == "__main__":
- test_main()
+ unittest.main()