[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 40348acc18)
This commit is contained in:
Serhiy Storchaka 2021-09-20 09:34:52 +03:00 committed by GitHub
parent 41e2a31c13
commit 5822ab672a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
61 changed files with 210 additions and 471 deletions

View file

@ -8,7 +8,7 @@
# regression test, the filterwarnings() call has been added to # regression test, the filterwarnings() call has been added to
# regrtest.py. # regrtest.py.
from test.test_support import run_unittest, check_syntax_error from test.test_support import check_syntax_error
import unittest import unittest
import sys import sys
# testing import * # testing import *
@ -967,8 +967,5 @@ hello world
self.assertEqual((6 < 4 if 0 else 2), 2) self.assertEqual((6 < 4 if 0 else 2), 2)
def test_main():
run_unittest(TokenTests, GrammarTests)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -8,7 +8,7 @@
# regression test, the filterwarnings() call has been added to # regression test, the filterwarnings() call has been added to
# regrtest.py. # regrtest.py.
from test.support import run_unittest, check_syntax_error from test.support import check_syntax_error
import unittest import unittest
import sys import sys
# testing import * # testing import *
@ -952,8 +952,5 @@ class GrammarTests(unittest.TestCase):
self.assertEqual((6 < 4 if 0 else 2), 2) self.assertEqual((6 < 4 if 0 else 2), 2)
def test_main():
run_unittest(TokenTests, GrammarTests)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -1525,9 +1525,8 @@ def check_sizeof(test, o, size):
# Decorator for running a function in a different locale, correctly resetting # Decorator for running a function in a different locale, correctly resetting
# it afterwards. # it afterwards.
@contextlib.contextmanager
def run_with_locale(catstr, *locales): def run_with_locale(catstr, *locales):
def decorator(func):
def inner(*args, **kwds):
try: try:
import locale import locale
category = getattr(locale, catstr) category = getattr(locale, catstr)
@ -1546,16 +1545,11 @@ def run_with_locale(catstr, *locales):
except: except:
pass pass
# now run the function, resetting the locale on exceptions
try: try:
return func(*args, **kwds) yield
finally: finally:
if locale and orig_locale: if locale and orig_locale:
locale.setlocale(category, 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 # Decorator for running a function in a specific timezone, correctly

View file

@ -5394,13 +5394,11 @@ class TestExitOnError(TestCase):
self.parser.parse_args('--integers a'.split()) self.parser.parse_args('--integers a'.split())
def test_main(): def tearDownModule():
support.run_unittest(__name__)
# Remove global references to avoid looking like we have refleaks. # Remove global references to avoid looking like we have refleaks.
RFile.seen = {} RFile.seen = {}
WFile.seen = set() WFile.seen = set()
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -1149,13 +1149,6 @@ class IssuesTestCase(BaseTestCase):
with TracerRun(self) as tracer: with TracerRun(self) as tracer:
tracer.runcall(tfunc_import) tracer.runcall(tfunc_import)
def test_main():
test.support.run_unittest(
StateTestCase,
RunTestCase,
BreakpointTestCase,
IssuesTestCase,
)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -92,10 +92,7 @@ class StrTest(unittest.TestCase):
x = None x = None
def test_main():
support.run_unittest(BytesTest, StrTest)
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) > 1: if len(sys.argv) > 1:
support.set_memlimit(sys.argv[1]) support.set_memlimit(sys.argv[1])
test_main() unittest.main()

View file

@ -1247,11 +1247,8 @@ class ListTest(unittest.TestCase):
self.assertEqual(l[:10], [1] * 10) self.assertEqual(l[:10], [1] * 10)
self.assertEqual(l[-10:], [5] * 10) self.assertEqual(l[-10:], [5] * 10)
def test_main():
support.run_unittest(StrTest, BytesTest, BytearrayTest,
TupleTest, ListTest)
if __name__ == '__main__': if __name__ == '__main__':
if len(sys.argv) > 1: if len(sys.argv) > 1:
support.set_memlimit(sys.argv[1]) support.set_memlimit(sys.argv[1])
test_main() unittest.main()

View file

@ -362,8 +362,6 @@ class BoolTest(unittest.TestCase):
self.assertIs(type(False.real), int) self.assertIs(type(False.real), int)
self.assertIs(type(False.imag), int) self.assertIs(type(False.imag), int)
def test_main():
support.run_unittest(BoolTest)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -1002,15 +1002,9 @@ class OpenTest(BaseTest):
self.assertEqual(f.readlines(), [text]) self.assertEqual(f.readlines(), [text])
def test_main(): def tearDownModule():
support.run_unittest(
BZ2FileTest,
BZ2CompressorTest,
BZ2DecompressorTest,
CompressDecompressTest,
OpenTest,
)
support.reap_children() support.reap_children()
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -427,12 +427,9 @@ class LocaleCoercionTests(_LocaleHandlingTestCase):
self.assertEqual(cmd.stdout.rstrip(), loc) self.assertEqual(cmd.stdout.rstrip(), loc)
def test_main(): def tearDownModule():
support.run_unittest(
LocaleConfigurationTests,
LocaleCoercionTests
)
support.reap_children() support.reap_children()
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -841,9 +841,9 @@ class IgnoreEnvironmentTest(unittest.TestCase):
) )
def test_main(): def tearDownModule():
support.run_unittest(CmdLineTest, IgnoreEnvironmentTest)
support.reap_children() support.reap_children()
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -737,9 +737,9 @@ class CmdLineTest(unittest.TestCase):
self.assertNotEqual(proc.returncode, 0) self.assertNotEqual(proc.returncode, 0)
def test_main(): def tearDownModule():
support.run_unittest(CmdLineTest)
support.reap_children() support.reap_children()
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -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')
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__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -1500,16 +1500,10 @@ class FutureTests(BaseTestCase):
self.assertEqual(f.exception(), e) self.assertEqual(f.exception(), e)
_threads_key = None
def setUpModule(): def setUpModule():
global _threads_key unittest.addModuleCleanup(multiprocessing.util._cleanup_tests)
_threads_key = support.threading_setup() thread_info = support.threading_setup()
unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
def tearDownModule():
support.threading_cleanup(*_threads_key)
multiprocessing.util._cleanup_tests()
if __name__ == "__main__": if __name__ == "__main__":

View file

@ -4945,8 +4945,11 @@ class DictProxyTests(unittest.TestCase):
self.assertIn('{!r}: {!r}'.format(k, v), r) 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. # 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): def test_pytype_long_ready(self):
# Testing SF bug 551412 ... # Testing SF bug 551412 ...
@ -5684,12 +5687,5 @@ class MroTest(unittest.TestCase):
pass 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__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -6,7 +6,7 @@ import os
import random import random
import select import select
import unittest import unittest
from test.support import run_unittest, cpython_only from test.support import cpython_only
if not hasattr(select, 'devpoll') : if not hasattr(select, 'devpoll') :
raise unittest.SkipTest('test works only on Solaris OS family') 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) self.assertRaises(OverflowError, pollster.modify, 1, USHRT_MAX + 1)
def test_main():
run_unittest(DevPollTests)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -1,5 +1,5 @@
import difflib import difflib
from test.support import run_unittest, findfile from test.support import findfile
import unittest import unittest
import doctest import doctest
import sys import sys
@ -547,12 +547,14 @@ class TestFindLongest(unittest.TestCase):
self.assertFalse(self.longer_match_exists(a, b, match.size)) self.assertFalse(self.longer_match_exists(a, b, match.size))
def test_main(): def setUpModule():
difflib.HtmlDiff._default_prefix = 0 difflib.HtmlDiff._default_prefix = 0
Doctests = doctest.DocTestSuite(difflib)
run_unittest(
TestWithAscii, TestAutojunk, TestSFpatches, TestSFbugs, def load_tests(loader, tests, pattern):
TestOutputFormat, TestBytes, TestJunkAPIs, TestFindLongest, Doctests) tests.addTest(doctest.DocTestSuite(difflib))
return tests
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -9,16 +9,14 @@ import distutils.tests
import test.support import test.support
def test_main():
# used by regrtest
test.support.run_unittest(distutils.tests.test_suite())
test.support.reap_children()
def load_tests(*_): def load_tests(*_):
# used by unittest # used by unittest
return distutils.tests.test_suite() return distutils.tests.test_suite()
def tearDownModule():
test.support.reap_children()
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -6,7 +6,7 @@ import sys
import types import types
import unittest import unittest
from test.support import findfile, run_unittest from test.support import findfile
def abspath(filename): def abspath(filename):
@ -97,7 +97,7 @@ class SystemTapBackend(TraceBackend):
COMMAND = ["stap", "-g"] COMMAND = ["stap", "-g"]
class TraceTests(unittest.TestCase): class TraceTests:
# unittest.TestCase options # unittest.TestCase options
maxDiff = None maxDiff = None
@ -149,30 +149,25 @@ class TraceTests(unittest.TestCase):
self.run_case("line") self.run_case("line")
class DTraceNormalTests(TraceTests): class DTraceNormalTests(TraceTests, unittest.TestCase):
backend = DTraceBackend() backend = DTraceBackend()
optimize_python = 0 optimize_python = 0
class DTraceOptimizedTests(TraceTests): class DTraceOptimizedTests(TraceTests, unittest.TestCase):
backend = DTraceBackend() backend = DTraceBackend()
optimize_python = 2 optimize_python = 2
class SystemTapNormalTests(TraceTests): class SystemTapNormalTests(TraceTests, unittest.TestCase):
backend = SystemTapBackend() backend = SystemTapBackend()
optimize_python = 0 optimize_python = 0
class SystemTapOptimizedTests(TraceTests): class SystemTapOptimizedTests(TraceTests, unittest.TestCase):
backend = SystemTapBackend() backend = SystemTapBackend()
optimize_python = 2 optimize_python = 2
def test_main():
run_unittest(DTraceNormalTests, DTraceOptimizedTests, SystemTapNormalTests,
SystemTapOptimizedTests)
if __name__ == '__main__': if __name__ == '__main__':
test_main() test_main()

View file

@ -6,7 +6,7 @@ import struct
import sys import sys
import unittest import unittest
from multiprocessing import Process 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) cpython_only)
# Skip test if no fcntl module. # 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))) res = fcntl.fcntl(self.f.fileno(), fcntl.F_GETPATH, bytes(len(expected)))
self.assertEqual(expected, res) self.assertEqual(expected, res)
def test_main():
run_unittest(TestFcntl)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -210,8 +210,5 @@ class DirCompareTestCase(unittest.TestCase):
self.assertEqual(report_lines, expected_report_lines) self.assertEqual(report_lines, expected_report_lines)
def test_main():
support.run_unittest(FileCompareTestCase, DirCompareTestCase)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -9,7 +9,7 @@ from array import array
from weakref import proxy from weakref import proxy
from functools import wraps 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) make_bad_fd, cpython_only, swap_attr, gc_collect)
from collections import UserList from collections import UserList
@ -605,15 +605,12 @@ class PyOtherFileTests(OtherFileTests, unittest.TestCase):
self.assertNotEqual(w.warnings, []) self.assertNotEqual(w.warnings, [])
def test_main(): def tearDownModule():
# Historically, these tests have been sloppy about removing TESTFN. # Historically, these tests have been sloppy about removing TESTFN.
# So get rid of it no matter what. # So get rid of it no matter what.
try:
run_unittest(CAutoFileTests, PyAutoFileTests,
COtherFileTests, PyOtherFileTests)
finally:
if os.path.exists(TESTFN): if os.path.exists(TESTFN):
os.unlink(TESTFN) os.unlink(TESTFN)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -12,6 +12,7 @@ import errno
import os import os
import threading import threading
import time import time
import unittest
try: try:
import ssl import ssl
except ImportError: except ImportError:
@ -1136,18 +1137,10 @@ class MiscTestCase(TestCase):
support.check__all__(self, ftplib, blacklist=blacklist) support.check__all__(self, ftplib, blacklist=blacklist)
def test_main(): def setUpModule():
tests = [TestFTPClass, TestTimeouts,
TestIPv6Environment,
TestTLS_FTPClassMixin, TestTLS_FTPClass,
MiscTestCase]
thread_info = support.threading_setup() thread_info = support.threading_setup()
try: unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
support.run_unittest(*tests)
finally:
support.threading_cleanup(*thread_info)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -1,6 +1,6 @@
import unittest import unittest
import unittest.mock import unittest.mock
from test.support import (verbose, refcount_test, run_unittest, from test.support import (verbose, refcount_test,
cpython_only, start_threads, cpython_only, start_threads,
temp_dir, TESTFN, unlink, temp_dir, TESTFN, unlink,
import_module) import_module)
@ -1388,21 +1388,17 @@ class PythonFinalizationTests(unittest.TestCase):
assert_python_ok("-c", code) assert_python_ok("-c", code)
def test_main(): def setUpModule():
global enabled, debug
enabled = gc.isenabled() enabled = gc.isenabled()
gc.disable() gc.disable()
assert not gc.isenabled() assert not gc.isenabled()
debug = gc.get_debug() debug = gc.get_debug()
gc.set_debug(debug & ~gc.DEBUG_LEAK) # this test is supposed to leak gc.set_debug(debug & ~gc.DEBUG_LEAK) # this test is supposed to leak
try:
gc.collect() # Delete 2nd generation garbage gc.collect() # Delete 2nd generation garbage
run_unittest(
GCTests,
GCCallbackTests, def tearDownModule():
GCTogglingTests,
PythonFinalizationTests)
finally:
gc.set_debug(debug) gc.set_debug(debug)
# test gc.enable() even if GC is disabled by default # test gc.enable() even if GC is disabled by default
if verbose: if verbose:
@ -1413,5 +1409,6 @@ def test_main():
if not enabled: if not enabled:
gc.disable() gc.disable()
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -1,6 +1,6 @@
"""Verify that warnings are issued for global statements following use.""" """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 unittest
import warnings import warnings
@ -52,10 +52,12 @@ x = 2
compile(prog_text_4, "<test string>", "exec") compile(prog_text_4, "<test string>", "exec")
def test_main(): def setUpModule():
with warnings.catch_warnings(): cm = warnings.catch_warnings()
cm.__enter__()
unittest.addModuleCleanup(cm.__exit__, None, None, None)
warnings.filterwarnings("error", module="<test string>") warnings.filterwarnings("error", module="<test string>")
run_unittest(GlobalTests)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -831,9 +831,5 @@ class TestCommandLine(unittest.TestCase):
self.assertEqual(out, b'') self.assertEqual(out, b'')
def test_main(verbose=None):
support.run_unittest(TestGzip, TestOpen, TestCommandLine)
if __name__ == "__main__": if __name__ == "__main__":
test_main(verbose=True) unittest.main()

View file

@ -1300,21 +1300,9 @@ class ScriptTestCase(unittest.TestCase):
self.assertEqual(mock_server.address_family, socket.AF_INET) self.assertEqual(mock_server.address_family, socket.AF_INET)
def test_main(verbose=None): def setUpModule():
cwd = os.getcwd() unittest.addModuleCleanup(os.chdir, os.getcwd())
try:
support.run_unittest(
RequestHandlerLoggingTestCase,
BaseHTTPRequestHandlerTestCase,
BaseHTTPServerTestCase,
SimpleHTTPServerTestCase,
CGIHTTPServerTestCase,
SimpleHTTPRequestHandlerTestCase,
MiscTestCase,
ScriptTestCase
)
finally:
os.chdir(cwd)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -4,6 +4,7 @@ init = test_util.import_importlib('importlib')
import sys import sys
import threading import threading
import unittest
import weakref import weakref
from test import support from test import support
@ -138,15 +139,10 @@ class LifetimeTests:
) = test_util.test_both(LifetimeTests, init=init) ) = test_util.test_both(LifetimeTests, init=init)
@support.reap_threads def setUpModule():
def test_main(): thread_info = support.threading_setup()
support.run_unittest(Frozen_ModuleLockAsRLockTests, unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
Source_ModuleLockAsRLockTests,
Frozen_DeadlockAvoidanceTests,
Source_DeadlockAvoidanceTests,
Frozen_LifetimeTests,
Source_LifetimeTests)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittets.main()

View file

@ -14,8 +14,9 @@ import shutil
import threading import threading
import unittest import unittest
from unittest import mock from unittest import mock
from test import support
from test.support import ( from test.support import (
verbose, run_unittest, TESTFN, reap_threads, verbose, TESTFN,
forget, unlink, rmtree, start_threads, script_helper) forget, unlink, rmtree, start_threads, script_helper)
def task(N, done, done_tasks, errors): def task(N, done, done_tasks, errors):
@ -257,19 +258,16 @@ class ThreadedImportTests(unittest.TestCase):
script_helper.assert_python_ok(fn) script_helper.assert_python_ok(fn)
@reap_threads def setUpModule():
def test_main(): thread_info = support.threading_setup()
old_switchinterval = None unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
try: try:
old_switchinterval = sys.getswitchinterval() old_switchinterval = sys.getswitchinterval()
unittest.addModuleCleanup(sys.setswitchinterval, old_switchinterval)
sys.setswitchinterval(1e-5) sys.setswitchinterval(1e-5)
except AttributeError: except AttributeError:
pass pass
try:
run_unittest(ThreadedImportTests)
finally:
if old_switchinterval is not None:
sys.setswitchinterval(old_switchinterval)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittets.main()

View file

@ -24,7 +24,7 @@ try:
except ImportError: except ImportError:
ThreadPoolExecutor = None 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 import MISSING_C_DOCSTRINGS, ALWAYS_EQ
from test.support.script_helper import assert_python_ok, assert_python_failure from test.support.script_helper import assert_python_ok, assert_python_failure
from test import inspect_fodder as mod from test import inspect_fodder as mod
@ -4081,18 +4081,5 @@ def foo():
self.assertInspectEqual(path, module) 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__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -2,7 +2,7 @@
import sys import sys
import unittest 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 from test.support import check_free_after_iterating, ALWAYS_EQ, NEVER_EQ
import pickle import pickle
import collections.abc import collections.abc
@ -1036,9 +1036,5 @@ class TestCase(unittest.TestCase):
self.assertRaises(ZeroDivisionError, iter, BadIterableClass()) self.assertRaises(ZeroDivisionError, iter, BadIterableClass())
def test_main():
run_unittest(TestCase)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -5365,25 +5365,11 @@ class MiscTestCase(unittest.TestCase):
# Set the locale to the platform-dependent default. I have no idea # 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 # why the test does this, but in any case we save the current locale
# first and restore it at the end. # first and restore it at the end.
@support.run_with_locale('LC_ALL', '') def setUpModule():
def test_main(): cm = support.run_with_locale('LC_ALL', '')
tests = [ cm.__enter__()
BuiltinLevelsTest, BasicFilterTest, CustomLevelsAndFiltersTest, unittest.addModuleCleanup(cm.__exit__, None, None, None)
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)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -10,7 +10,7 @@ from test import support
import unittest import unittest
from test.support import ( from test.support import (
_4G, TESTFN, import_module, bigmemtest, run_unittest, unlink _4G, TESTFN, import_module, bigmemtest, unlink
) )
lzma = import_module("lzma") lzma = import_module("lzma")
@ -1936,14 +1936,5 @@ ISSUE_21872_DAT = (
) )
def test_main():
run_unittest(
CompressorDecompressorTestCase,
CompressDecompressFunctionTestCase,
FileTestCase,
OpenTestCase,
MiscellaneousTestCase,
)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -2299,15 +2299,9 @@ class MiscTestCase(unittest.TestCase):
support.check__all__(self, mailbox, blacklist=blacklist) support.check__all__(self, mailbox, blacklist=blacklist)
def test_main(): def tearDownModule():
tests = (TestMailboxSuperclass, TestMaildir, TestMbox, TestMMDF, TestMH,
TestBabyl, TestMessage, TestMaildirMessage, TestMboxMessage,
TestMHMessage, TestBabylMessage, TestMMDFMessage,
TestMessageConversion, TestProxyFile, TestPartialFile,
MaildirTestCase, TestFakeMailBox, MiscTestCase)
support.run_unittest(*tests)
support.reap_children() support.reap_children()
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -380,8 +380,6 @@ class TestHZStateful(TestStateful):
reset = b'~}' reset = b'~}'
expected_reset = expected + reset expected_reset = expected + reset
def test_main():
support.run_unittest(__name__)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -1655,8 +1655,5 @@ class MiscTestCase(unittest.TestCase):
support.check__all__(self, optparse, blacklist=blacklist) support.check__all__(self, optparse, blacklist=blacklist)
def test_main():
support.run_unittest(__name__)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -187,7 +187,7 @@ class OSSAudioDevTests(unittest.TestCase):
mixer.close() mixer.close()
self.assertRaises(ValueError, mixer.fileno) self.assertRaises(ValueError, mixer.fileno)
def test_main(): def setUpModule():
try: try:
dsp = ossaudiodev.open('w') dsp = ossaudiodev.open('w')
except (ossaudiodev.error, OSError) as msg: except (ossaudiodev.error, OSError) as msg:
@ -196,7 +196,6 @@ def test_main():
raise unittest.SkipTest(msg) raise unittest.SkipTest(msg)
raise raise
dsp.close() dsp.close()
support.run_unittest(__name__)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -3,7 +3,7 @@ import os
import string import string
import unittest import unittest
import shutil import shutil
from test.support import TESTFN, run_unittest, unlink, reap_children from test.support import TESTFN, unlink, reap_children
if os.name != 'posix': if os.name != 'posix':
raise unittest.SkipTest('pipes module only works on 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.assertNotEqual(id(t.steps), id(u.steps))
self.assertEqual(t.debugging, u.debugging) self.assertEqual(t.debugging, u.debugging)
def test_main():
run_unittest(SimplePipeTests) def tearDownModule():
reap_children() reap_children()
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -1,5 +1,5 @@
from pathlib import Path 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 unittest
import sys import sys
import importlib import importlib
@ -623,9 +623,7 @@ class ImportlibMigrationTests(unittest.TestCase):
self.assertEqual(len(w.warnings), 0) self.assertEqual(len(w.warnings), 0)
def test_main(): def tearDownModule():
run_unittest(PkgutilTests, PkgutilPEP302Tests, ExtendPathTests,
NestedNamespacePackageTest, ImportlibMigrationTests)
# this is necessary if test is run repeated (like when finding leaks) # this is necessary if test is run repeated (like when finding leaks)
import zipimport import zipimport
import importlib import importlib
@ -634,4 +632,4 @@ def test_main():
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -7,7 +7,7 @@ import select
import threading import threading
import time import time
import unittest import unittest
from test.support import TESTFN, run_unittest, reap_threads, cpython_only from test.support import TESTFN, reap_threads, cpython_only
try: try:
select.poll select.poll
@ -226,8 +226,5 @@ class PollTests(unittest.TestCase):
os.close(w) os.close(w)
def test_main():
run_unittest(PollTests)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -11,6 +11,7 @@ import os
import errno import errno
import threading import threading
import unittest
from unittest import TestCase, skipUnless from unittest import TestCase, skipUnless
from test import support as test_support from test import support as test_support
from test.support import hashlib_helper from test.support import hashlib_helper
@ -533,15 +534,10 @@ class TestTimeouts(TestCase):
poplib.POP3(HOST, self.port, timeout=0) poplib.POP3(HOST, self.port, timeout=0)
def test_main(): def setUpModule():
tests = [TestPOP3Class, TestTimeouts,
TestPOP3_SSLClass, TestPOP3_TLSClass]
thread_info = test_support.threading_setup() thread_info = test_support.threading_setup()
try: unittest.addModuleCleanup(test_support.threading_cleanup, *thread_info)
test_support.run_unittest(*tests)
finally:
test_support.threading_cleanup(*thread_info)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -2132,17 +2132,9 @@ class TestPosixWeaklinking(unittest.TestCase):
os.utime("path", dir_fd=0) os.utime("path", dir_fd=0)
def test_main(): def tearDownModule():
try:
support.run_unittest(
PosixTester,
PosixGroupsTester,
TestPosixSpawn,
TestPosixSpawnP,
TestPosixWeaklinking
)
finally:
support.reap_children() support.reap_children()
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -6,7 +6,7 @@ import unittest
import os import os
from difflib import unified_diff from difflib import unified_diff
from io import StringIO 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 from contextlib import contextmanager
import profile import profile
@ -155,12 +155,10 @@ def silent():
finally: finally:
sys.stdout = stdout sys.stdout = stdout
def test_main():
run_unittest(ProfileTest)
def main(): def main():
if '-r' not in sys.argv: if '-r' not in sys.argv:
test_main() unittest.main()
else: else:
regenerate_expected_output(__file__, ProfileTest) regenerate_expected_output(__file__, ProfileTest)

View file

@ -1569,20 +1569,11 @@ class TestInternalUtilities(unittest.TestCase):
self.assertIsNone(self._get_revised_path(trailing_argv0dir)) self.assertIsNone(self._get_revised_path(trailing_argv0dir))
@reap_threads def setUpModule():
def test_main(): thread_info = test.support.threading_setup()
try: unittest.addModuleCleanup(test.support.threading_cleanup, *thread_info)
test.support.run_unittest(PydocDocTest, unittest.addModuleCleanup(reap_children)
PydocImportTest,
TestDescriptions,
PydocServerTest,
PydocUrlHandlerTest,
TestHelper,
PydocWithMetaClasses,
TestInternalUtilities,
)
finally:
reap_children()
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -172,8 +172,5 @@ class ResourceTest(unittest.TestCase):
limits) limits)
def test_main(verbose=None):
support.run_unittest(ResourceTest)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -22,7 +22,7 @@ import shutil
from urllib.error import URLError from urllib.error import URLError
import urllib.request import urllib.request
from test import support 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 = findfile("test.xml", subdir="xmltestdata")
TEST_XMLFILE_OUT = findfile("test.xml.out", 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") 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__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -48,7 +48,7 @@ def find_ready_matching(ready, flag):
return match return match
class BaseSelectorTestCase(unittest.TestCase): class BaseSelectorTestCase:
def make_socketpair(self): def make_socketpair(self):
rd, wr = socketpair() rd, wr = socketpair()
@ -492,26 +492,28 @@ class ScalableSelectorMixIn:
self.assertEqual(NUM_FDS // 2, len(fds)) self.assertEqual(NUM_FDS // 2, len(fds))
class DefaultSelectorTestCase(BaseSelectorTestCase): class DefaultSelectorTestCase(BaseSelectorTestCase, unittest.TestCase):
SELECTOR = selectors.DefaultSelector SELECTOR = selectors.DefaultSelector
class SelectSelectorTestCase(BaseSelectorTestCase): class SelectSelectorTestCase(BaseSelectorTestCase, unittest.TestCase):
SELECTOR = selectors.SelectSelector SELECTOR = selectors.SelectSelector
@unittest.skipUnless(hasattr(selectors, 'PollSelector'), @unittest.skipUnless(hasattr(selectors, 'PollSelector'),
"Test needs selectors.PollSelector") "Test needs selectors.PollSelector")
class PollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn): class PollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn,
unittest.TestCase):
SELECTOR = getattr(selectors, 'PollSelector', None) SELECTOR = getattr(selectors, 'PollSelector', None)
@unittest.skipUnless(hasattr(selectors, 'EpollSelector'), @unittest.skipUnless(hasattr(selectors, 'EpollSelector'),
"Test needs selectors.EpollSelector") "Test needs selectors.EpollSelector")
class EpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn): class EpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn,
unittest.TestCase):
SELECTOR = getattr(selectors, 'EpollSelector', None) SELECTOR = getattr(selectors, 'EpollSelector', None)
@ -528,7 +530,8 @@ class EpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn):
@unittest.skipUnless(hasattr(selectors, 'KqueueSelector'), @unittest.skipUnless(hasattr(selectors, 'KqueueSelector'),
"Test needs selectors.KqueueSelector)") "Test needs selectors.KqueueSelector)")
class KqueueSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn): class KqueueSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn,
unittest.TestCase):
SELECTOR = getattr(selectors, 'KqueueSelector', None) SELECTOR = getattr(selectors, 'KqueueSelector', None)
@ -560,19 +563,15 @@ class KqueueSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn):
@unittest.skipUnless(hasattr(selectors, 'DevpollSelector'), @unittest.skipUnless(hasattr(selectors, 'DevpollSelector'),
"Test needs selectors.DevpollSelector") "Test needs selectors.DevpollSelector")
class DevpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn): class DevpollSelectorTestCase(BaseSelectorTestCase, ScalableSelectorMixIn,
unittest.TestCase):
SELECTOR = getattr(selectors, 'DevpollSelector', None) SELECTOR = getattr(selectors, 'DevpollSelector', None)
def tearDownModule():
def test_main():
tests = [DefaultSelectorTestCase, SelectSelectorTestCase,
PollSelectorTestCase, EpollSelectorTestCase,
KqueueSelectorTestCase, DevpollSelectorTestCase]
support.run_unittest(*tests)
support.reap_children() support.reap_children()
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -2281,6 +2281,7 @@ class SimpleBackgroundTests(unittest.TestCase):
self.ssl_io_loop(sock, incoming, outgoing, sslobj.unwrap) self.ssl_io_loop(sock, incoming, outgoing, sslobj.unwrap)
@support.requires_resource('network')
class NetworkedTests(unittest.TestCase): class NetworkedTests(unittest.TestCase):
def test_timeout_connect_ex(self): def test_timeout_connect_ex(self):
@ -4812,7 +4813,7 @@ class TestSSLDebug(unittest.TestCase):
s.connect((HOST, server.port)) s.connect((HOST, server.port))
def test_main(verbose=False): def setUpModule():
if support.verbose: if support.verbose:
plats = { plats = {
'Mac': platform.mac_ver, 'Mac': platform.mac_ver,
@ -4843,20 +4844,9 @@ def test_main(verbose=False):
if not os.path.exists(filename): if not os.path.exists(filename):
raise support.TestFailed("Can't read certificate file %r" % 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() thread_info = support.threading_setup()
try: unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
support.run_unittest(*tests)
finally:
support.threading_cleanup(*thread_info)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -716,9 +716,5 @@ def _warn_about_deprecation():
) )
def test_main():
tests = [TestSupport]
support.run_unittest(*tests)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -799,8 +799,5 @@ def setUpModule():
print('patchlevel =', tcl.call('info', 'patchlevel')) print('patchlevel =', tcl.call('info', 'patchlevel'))
def test_main():
support.run_unittest(TclTest, TkinterTest, BigmemTclTest)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -230,7 +230,7 @@ class ThreadSignals(unittest.TestCase):
signal.signal(signal.SIGUSR1, old_handler) signal.signal(signal.SIGUSR1, old_handler)
def test_main(): def setUpModule():
global signal_blackboard global signal_blackboard
signal_blackboard = { signal.SIGUSR1 : {'tripped': 0, 'tripped_by': 0 }, signal_blackboard = { signal.SIGUSR1 : {'tripped': 0, 'tripped_by': 0 },
@ -238,10 +238,8 @@ def test_main():
signal.SIGALRM : {'tripped': 0, 'tripped_by': 0 } } signal.SIGALRM : {'tripped': 0, 'tripped_by': 0 } }
oldsigs = registerSignals(handle_signals, handle_signals, handle_signals) oldsigs = registerSignals(handle_signals, handle_signals, handle_signals)
try: unittest.addModuleCleanup(registerSignals, *oldsigs)
support.run_unittest(ThreadSignals)
finally:
registerSignals(*oldsigs)
if __name__ == '__main__': if __name__ == '__main__':
test_main() unittest.main()

View file

@ -290,13 +290,9 @@ class UDPTimeoutTestCase(TimeoutTestCase):
self._sock_operation(1, 1.5, 'recvfrom', 1024) self._sock_operation(1, 1.5, 'recvfrom', 1024)
def test_main(): def setUpModule():
support.requires('network') support.requires('network')
support.run_unittest(
CreationTestCase,
TCPTimeoutTestCase,
UDPTimeoutTestCase,
)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -1081,15 +1081,5 @@ class TestCAPI(unittest.TestCase):
self.untrack() self.untrack()
def test_main():
support.run_unittest(
TestTraceback,
TestTracemallocEnabled,
TestSnapshot,
TestFilters,
TestCommandLine,
TestCAPI,
)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -5,7 +5,7 @@ import os, glob, time, shutil
import unicodedata import unicodedata
import unittest 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) TESTFN_ENCODING, TESTFN_UNICODE, TESTFN_UNENCODABLE, create_empty_file)
if not os.path.supports_unicode_filenames: if not os.path.supports_unicode_filenames:
@ -133,8 +133,6 @@ class TestUnicodeFiles(unittest.TestCase):
self._do_directory(TESTFN_UNENCODABLE+ext, self._do_directory(TESTFN_UNENCODABLE+ext,
TESTFN_UNENCODABLE+ext) TESTFN_UNENCODABLE+ext)
def test_main():
run_unittest(__name__)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -181,15 +181,5 @@ class UnicodeNFKDFileTests(UnicodeFileTests):
normal_form = 'NFKD' normal_form = 'NFKD'
def test_main():
support.run_unittest(
UnicodeFileTests,
UnicodeNFCFileTests,
UnicodeNFDFileTests,
UnicodeNFKCFileTests,
UnicodeNFKDFileTests,
)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -3,14 +3,14 @@ import unittest.test
from test import support from test import support
def test_main():
# used by regrtest
support.run_unittest(unittest.test.suite())
support.reap_children()
def load_tests(*_): def load_tests(*_):
# used by unittest # used by unittest
return unittest.test.suite() return unittest.test.suite()
def tearDownModule():
support.reap_children()
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -660,17 +660,10 @@ class TestUrlopen(unittest.TestCase):
self.assertEqual(index + 1, len(lines)) self.assertEqual(index + 1, len(lines))
threads_key = None
def setUpModule(): def setUpModule():
# Store the threading_setup in a key and ensure that it is cleaned up thread_info = support.threading_setup()
# in the tearDown unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
global threads_key
threads_key = support.threading_setup()
def tearDownModule():
if threads_key:
support.threading_cleanup(*threads_key)
if __name__ == "__main__": if __name__ == "__main__":
unittest.main() unittest.main()

View file

@ -489,12 +489,9 @@ class Win64WinregTests(BaseWinregTests):
with self.assertRaises(FileNotFoundError) as ctx: with self.assertRaises(FileNotFoundError) as ctx:
QueryValue(HKEY_CLASSES_ROOT, 'some_value_that_does_not_exist') QueryValue(HKEY_CLASSES_ROOT, 'some_value_that_does_not_exist')
def test_main():
support.run_unittest(LocalWinregTests, RemoteWinregTests,
Win64WinregTests)
if __name__ == "__main__": if __name__ == "__main__":
if not REMOTE_NAME: if not REMOTE_NAME:
print("Remote registry calls can be tested using", print("Remote registry calls can be tested using",
"'test_winreg.py --remote \\\\machine_name'") "'test_winreg.py --remote \\\\machine_name'")
test_main() unittest.main()

View file

@ -1502,16 +1502,10 @@ class UseBuiltinTypesTestCase(unittest.TestCase):
self.assertTrue(server.use_builtin_types) self.assertTrue(server.use_builtin_types)
@support.reap_threads def setUpModule():
def test_main(): thread_info = support.threading_setup()
support.run_unittest(XMLRPCTestCase, HelperTestCase, DateTimeTestCase, unittest.addModuleCleanup(support.threading_cleanup, *thread_info)
BinaryTestCase, FaultTestCase, UseBuiltinTypesTestCase,
SimpleServerTestCase, SimpleServerEncodingTestCase,
KeepaliveServerTestCase1, KeepaliveServerTestCase2,
GzipServerTestCase, GzipUtilTestCase, HeadersServerTestCase,
MultiPathServerTestCase, ServerProxyTestCase, FailingServerTestCase,
CGIHandlerTestCase, SimpleXMLRPCDispatcherTestCase)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -5,6 +5,9 @@ from test import support
import xmlrpc.client as xmlrpclib import xmlrpc.client as xmlrpclib
support.requires("network")
@unittest.skip('XXX: buildbot.python.org/all/xmlrpc/ is gone') @unittest.skip('XXX: buildbot.python.org/all/xmlrpc/ is gone')
class PythonBuildersTest(unittest.TestCase): 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) 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__": if __name__ == "__main__":
test_main() unittest.main()

View file

@ -766,15 +766,9 @@ class BadFileZipImportTestCase(unittest.TestCase):
zipimport._zip_directory_cache.clear() zipimport._zip_directory_cache.clear()
def test_main(): def tearDownModule():
try:
support.run_unittest(
UncompressedZipImportTestCase,
CompressedZipImportTestCase,
BadFileZipImportTestCase,
)
finally:
support.unlink(TESTMOD) support.unlink(TESTMOD)
if __name__ == "__main__": if __name__ == "__main__":
test_main() unittest.main()