Skip to content

Commit 40348ac

Browse files
bpo-45229: Remove test_main in many tests (GH-28405)
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.
1 parent 664448d commit 40348ac

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

61 files changed

+209
-485
lines changed

Lib/lib2to3/tests/data/py2_test_grammar.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# regression test, the filterwarnings() call has been added to
99
# regrtest.py.
1010

11-
from test.test_support import run_unittest, check_syntax_error
11+
from test.test_support import check_syntax_error
1212
import unittest
1313
import sys
1414
# testing import *
@@ -967,8 +967,5 @@ def _checkeval(msg, ret):
967967
self.assertEqual((6 < 4 if 0 else 2), 2)
968968

969969

970-
def test_main():
971-
run_unittest(TokenTests, GrammarTests)
972-
973970
if __name__ == '__main__':
974-
test_main()
971+
unittest.main()

Lib/lib2to3/tests/data/py3_test_grammar.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
# regression test, the filterwarnings() call has been added to
99
# regrtest.py.
1010

11-
from test.support import run_unittest, check_syntax_error
11+
from test.support import check_syntax_error
1212
import unittest
1313
import sys
1414
# testing import *
@@ -952,8 +952,5 @@ def _checkeval(msg, ret):
952952
self.assertEqual((6 < 4 if 0 else 2), 2)
953953

954954

955-
def test_main():
956-
run_unittest(TokenTests, GrammarTests)
957-
958955
if __name__ == '__main__':
959-
test_main()
956+
unittest.main()

Lib/test/support/__init__.py

+2-8
Original file line numberDiff line numberDiff line change
@@ -695,9 +695,8 @@ def check_sizeof(test, o, size):
695695
# Decorator for running a function in a different locale, correctly resetting
696696
# it afterwards.
697697

698+
@contextlib.contextmanager
698699
def run_with_locale(catstr, *locales):
699-
def decorator(func):
700-
def inner(*args, **kwds):
701700
try:
702701
import locale
703702
category = getattr(locale, catstr)
@@ -716,16 +715,11 @@ def inner(*args, **kwds):
716715
except:
717716
pass
718717

719-
# now run the function, resetting the locale on exceptions
720718
try:
721-
return func(*args, **kwds)
719+
yield
722720
finally:
723721
if locale and orig_locale:
724722
locale.setlocale(category, orig_locale)
725-
inner.__name__ = func.__name__
726-
inner.__doc__ = func.__doc__
727-
return inner
728-
return decorator
729723

730724
#=======================================================================
731725
# Decorator for running a function in a specific timezone, correctly

Lib/test/test_argparse.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
from io import StringIO
1414

15-
from test import support
1615
from test.support import os_helper
1716
from unittest import mock
1817
class StdIOBuffer(StringIO):
@@ -5416,13 +5415,11 @@ def test_exit_on_error_with_bad_args(self):
54165415
self.parser.parse_args('--integers a'.split())
54175416

54185417

5419-
def test_main():
5420-
support.run_unittest(__name__)
5418+
def tearDownModule():
54215419
# Remove global references to avoid looking like we have refleaks.
54225420
RFile.seen = {}
54235421
WFile.seen = set()
54245422

54255423

5426-
54275424
if __name__ == '__main__':
5428-
test_main()
5425+
unittest.main()

Lib/test/test_bdb.py

+1-9
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@
5757
import linecache
5858
from contextlib import contextmanager
5959
from itertools import islice, repeat
60-
import test.support
6160
from test.support import import_helper
6261
from test.support import os_helper
6362

@@ -1193,13 +1192,6 @@ def main():
11931192
with TracerRun(self) as tracer:
11941193
tracer.runcall(tfunc_import)
11951194

1196-
def test_main():
1197-
test.support.run_unittest(
1198-
StateTestCase,
1199-
RunTestCase,
1200-
BreakpointTestCase,
1201-
IssuesTestCase,
1202-
)
12031195

12041196
if __name__ == "__main__":
1205-
test_main()
1197+
unittest.main()

Lib/test/test_bigaddrspace.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -92,10 +92,7 @@ def test_repeat(self):
9292
x = None
9393

9494

95-
def test_main():
96-
support.run_unittest(BytesTest, StrTest)
97-
9895
if __name__ == '__main__':
9996
if len(sys.argv) > 1:
10097
support.set_memlimit(sys.argv[1])
101-
test_main()
98+
unittest.main()

Lib/test/test_bigmem.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -1247,11 +1247,8 @@ def test_sort(self, size):
12471247
self.assertEqual(l[:10], [1] * 10)
12481248
self.assertEqual(l[-10:], [5] * 10)
12491249

1250-
def test_main():
1251-
support.run_unittest(StrTest, BytesTest, BytearrayTest,
1252-
TupleTest, ListTest)
12531250

12541251
if __name__ == '__main__':
12551252
if len(sys.argv) > 1:
12561253
support.set_memlimit(sys.argv[1])
1257-
test_main()
1254+
unittest.main()

Lib/test/test_bool.py

+1-4
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
# Test properties of bool promised by PEP 285
22

33
import unittest
4-
from test import support
54
from test.support import os_helper
65

76
import os
@@ -370,8 +369,6 @@ def f(x):
370369
f(x)
371370
self.assertGreaterEqual(x.count, 1)
372371

373-
def test_main():
374-
support.run_unittest(BoolTest)
375372

376373
if __name__ == "__main__":
377-
test_main()
374+
unittest.main()

Lib/test/test_bz2.py

+3-9
Original file line numberDiff line numberDiff line change
@@ -1005,15 +1005,9 @@ def test_newline(self):
10051005
self.assertEqual(f.readlines(), [text])
10061006

10071007

1008-
def test_main():
1009-
support.run_unittest(
1010-
BZ2FileTest,
1011-
BZ2CompressorTest,
1012-
BZ2DecompressorTest,
1013-
CompressDecompressTest,
1014-
OpenTest,
1015-
)
1008+
def tearDownModule():
10161009
support.reap_children()
10171010

1011+
10181012
if __name__ == '__main__':
1019-
test_main()
1013+
unittest.main()

Lib/test/test_c_locale_coercion.py

+3-6
Original file line numberDiff line numberDiff line change
@@ -427,12 +427,9 @@ def test_PYTHONCOERCECLOCALE_set_to_one(self):
427427
self.assertEqual(cmd.stdout.rstrip(), loc)
428428

429429

430-
def test_main():
431-
support.run_unittest(
432-
LocaleConfigurationTests,
433-
LocaleCoercionTests
434-
)
430+
def tearDownModule():
435431
support.reap_children()
436432

433+
437434
if __name__ == "__main__":
438-
test_main()
435+
unittest.main()

Lib/test/test_cmd_line.py

+4-3
Original file line numberDiff line numberDiff line change
@@ -864,9 +864,10 @@ def test_tokenizer_error_with_stdin(self):
864864
def test_decoding_error_at_the_end_of_the_line(self):
865865
self.check_string(br"'\u1f'")
866866

867-
def test_main():
868-
support.run_unittest(CmdLineTest, IgnoreEnvironmentTest, SyntaxErrorTests)
867+
868+
def tearDownModule():
869869
support.reap_children()
870870

871+
871872
if __name__ == "__main__":
872-
test_main()
873+
unittest.main()

Lib/test/test_cmd_line_script.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -738,9 +738,9 @@ def test_nonexisting_script(self):
738738
self.assertNotEqual(proc.returncode, 0)
739739

740740

741-
def test_main():
742-
support.run_unittest(CmdLineTest)
741+
def tearDownModule():
743742
support.reap_children()
744743

744+
745745
if __name__ == '__main__':
746-
test_main()
746+
unittest.main()

Lib/test/test_complex.py

+1-3
Original file line numberDiff line numberDiff line change
@@ -789,8 +789,6 @@ def test_format(self):
789789
self.assertEqual(format(complex(INF, 1), 'F'), 'INF+1.000000j')
790790
self.assertEqual(format(complex(INF, -1), 'F'), 'INF-1.000000j')
791791

792-
def test_main():
793-
support.run_unittest(ComplexTest)
794792

795793
if __name__ == "__main__":
796-
test_main()
794+
unittest.main()

Lib/test/test_concurrent_futures.py

+3-9
Original file line numberDiff line numberDiff line change
@@ -1515,16 +1515,10 @@ def test_multiple_set_exception(self):
15151515
self.assertEqual(f.exception(), e)
15161516

15171517

1518-
_threads_key = None
1519-
15201518
def setUpModule():
1521-
global _threads_key
1522-
_threads_key = threading_helper.threading_setup()
1523-
1524-
1525-
def tearDownModule():
1526-
threading_helper.threading_cleanup(*_threads_key)
1527-
multiprocessing.util._cleanup_tests()
1519+
unittest.addModuleCleanup(multiprocessing.util._cleanup_tests)
1520+
thread_info = threading_helper.threading_setup()
1521+
unittest.addModuleCleanup(threading_helper.threading_cleanup, *thread_info)
15281522

15291523

15301524
if __name__ == "__main__":

Lib/test/test_descr.py

+5-9
Original file line numberDiff line numberDiff line change
@@ -4996,8 +4996,11 @@ def test_repr(self):
49964996
self.assertIn('{!r}: {!r}'.format(k, v), r)
49974997

49984998

4999-
class PTypesLongInitTest(unittest.TestCase):
4999+
class AAAPTypesLongInitTest(unittest.TestCase):
50005000
# This is in its own TestCase so that it can be run before any other tests.
5001+
# (Hence the 'AAA' in the test class name: to make it the first
5002+
# item in a list sorted by name, like
5003+
# unittest.TestLoader.getTestCaseNames() does.)
50015004
def test_pytype_long_ready(self):
50025005
# Testing SF bug 551412 ...
50035006

@@ -5735,12 +5738,5 @@ class A(metaclass=M):
57355738
pass
57365739

57375740

5738-
def test_main():
5739-
# Run all local test cases, with PTypesLongInitTest first.
5740-
support.run_unittest(PTypesLongInitTest, OperatorsTest,
5741-
ClassPropertiesAndMethods, DictProxyTests,
5742-
MiscTests, PicklingTests, SharedKeyTests,
5743-
MroTest)
5744-
57455741
if __name__ == "__main__":
5746-
test_main()
5742+
unittest.main()

Lib/test/test_devpoll.py

+2-5
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import random
77
import select
88
import unittest
9-
from test.support import run_unittest, cpython_only
9+
from test.support import cpython_only
1010

1111
if not hasattr(select, 'devpoll') :
1212
raise unittest.SkipTest('test works only on Solaris OS family')
@@ -138,8 +138,5 @@ def test_events_mask_overflow_c_limits(self):
138138
self.assertRaises(OverflowError, pollster.modify, 1, USHRT_MAX + 1)
139139

140140

141-
def test_main():
142-
run_unittest(DevPollTests)
143-
144141
if __name__ == '__main__':
145-
test_main()
142+
unittest.main()

Lib/test/test_difflib.py

+9-7
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
import difflib
2-
from test.support import run_unittest, findfile
2+
from test.support import findfile
33
import unittest
44
import doctest
55
import sys
@@ -547,12 +547,14 @@ def test_longest_match_with_popular_chars(self):
547547
self.assertFalse(self.longer_match_exists(a, b, match.size))
548548

549549

550-
def test_main():
550+
def setUpModule():
551551
difflib.HtmlDiff._default_prefix = 0
552-
Doctests = doctest.DocTestSuite(difflib)
553-
run_unittest(
554-
TestWithAscii, TestAutojunk, TestSFpatches, TestSFbugs,
555-
TestOutputFormat, TestBytes, TestJunkAPIs, TestFindLongest, Doctests)
552+
553+
554+
def load_tests(loader, tests, pattern):
555+
tests.addTest(doctest.DocTestSuite(difflib))
556+
return tests
557+
556558

557559
if __name__ == '__main__':
558-
test_main()
560+
unittest.main()

Lib/test/test_distutils.py

+5-7
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,14 @@
1515
import distutils.tests
1616

1717

18-
def test_main():
19-
# used by regrtest
20-
support.run_unittest(distutils.tests.test_suite())
21-
support.reap_children()
22-
23-
2418
def load_tests(*_):
2519
# used by unittest
2620
return distutils.tests.test_suite()
2721

2822

23+
def tearDownModule():
24+
support.reap_children()
25+
26+
2927
if __name__ == "__main__":
30-
test_main()
28+
unittest.main()

Lib/test/test_dtrace.py

+6-11
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
import types
77
import unittest
88

9-
from test.support import findfile, run_unittest
9+
from test.support import findfile
1010

1111

1212
def abspath(filename):
@@ -97,7 +97,7 @@ class SystemTapBackend(TraceBackend):
9797
COMMAND = ["stap", "-g"]
9898

9999

100-
class TraceTests(unittest.TestCase):
100+
class TraceTests:
101101
# unittest.TestCase options
102102
maxDiff = None
103103

@@ -149,30 +149,25 @@ def test_line(self):
149149
self.run_case("line")
150150

151151

152-
class DTraceNormalTests(TraceTests):
152+
class DTraceNormalTests(TraceTests, unittest.TestCase):
153153
backend = DTraceBackend()
154154
optimize_python = 0
155155

156156

157-
class DTraceOptimizedTests(TraceTests):
157+
class DTraceOptimizedTests(TraceTests, unittest.TestCase):
158158
backend = DTraceBackend()
159159
optimize_python = 2
160160

161161

162-
class SystemTapNormalTests(TraceTests):
162+
class SystemTapNormalTests(TraceTests, unittest.TestCase):
163163
backend = SystemTapBackend()
164164
optimize_python = 0
165165

166166

167-
class SystemTapOptimizedTests(TraceTests):
167+
class SystemTapOptimizedTests(TraceTests, unittest.TestCase):
168168
backend = SystemTapBackend()
169169
optimize_python = 2
170170

171171

172-
def test_main():
173-
run_unittest(DTraceNormalTests, DTraceOptimizedTests, SystemTapNormalTests,
174-
SystemTapOptimizedTests)
175-
176-
177172
if __name__ == '__main__':
178173
test_main()

0 commit comments

Comments
 (0)