Skip to content

Commit bedce35

Browse files
[3.10] bpo-45229: Remove test_main in many tests (GH-28405) (GH-28455)
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 40348ac)
1 parent 9c23a1e commit bedce35

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

+208
-486
lines changed

Lib/lib2to3/tests/data/py2_test_grammar.py

Lines changed: 2 additions & 5 deletions
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

Lines changed: 2 additions & 5 deletions
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

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -687,9 +687,8 @@ def check_sizeof(test, o, size):
687687
# Decorator for running a function in a different locale, correctly resetting
688688
# it afterwards.
689689

690+
@contextlib.contextmanager
690691
def run_with_locale(catstr, *locales):
691-
def decorator(func):
692-
def inner(*args, **kwds):
693692
try:
694693
import locale
695694
category = getattr(locale, catstr)
@@ -708,16 +707,11 @@ def inner(*args, **kwds):
708707
except:
709708
pass
710709

711-
# now run the function, resetting the locale on exceptions
712710
try:
713-
return func(*args, **kwds)
711+
yield
714712
finally:
715713
if locale and orig_locale:
716714
locale.setlocale(category, orig_locale)
717-
inner.__name__ = func.__name__
718-
inner.__doc__ = func.__doc__
719-
return inner
720-
return decorator
721715

722716
#=======================================================================
723717
# Decorator for running a function in a specific timezone, correctly

Lib/test/test_argparse.py

Lines changed: 2 additions & 5 deletions
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):
@@ -5397,13 +5396,11 @@ def test_exit_on_error_with_bad_args(self):
53975396
self.parser.parse_args('--integers a'.split())
53985397

53995398

5400-
def test_main():
5401-
support.run_unittest(__name__)
5399+
def tearDownModule():
54025400
# Remove global references to avoid looking like we have refleaks.
54035401
RFile.seen = {}
54045402
WFile.seen = set()
54055403

54065404

5407-
54085405
if __name__ == '__main__':
5409-
test_main()
5406+
unittest.main()

Lib/test/test_bdb.py

Lines changed: 1 addition & 9 deletions
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

Lines changed: 1 addition & 4 deletions
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

Lines changed: 1 addition & 4 deletions
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

Lines changed: 1 addition & 4 deletions
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

Lines changed: 3 additions & 9 deletions
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

Lines changed: 3 additions & 6 deletions
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

Lines changed: 4 additions & 3 deletions
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

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -739,9 +739,9 @@ def test_nonexisting_script(self):
739739
self.assertNotEqual(proc.returncode, 0)
740740

741741

742-
def test_main():
743-
support.run_unittest(CmdLineTest)
742+
def tearDownModule():
744743
support.reap_children()
745744

745+
746746
if __name__ == '__main__':
747-
test_main()
747+
unittest.main()

Lib/test/test_complex.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -777,8 +777,6 @@ def test_format(self):
777777
self.assertEqual(format(complex(INF, 1), 'F'), 'INF+1.000000j')
778778
self.assertEqual(format(complex(INF, -1), 'F'), 'INF-1.000000j')
779779

780-
def test_main():
781-
support.run_unittest(ComplexTest)
782780

783781
if __name__ == "__main__":
784-
test_main()
782+
unittest.main()

Lib/test/test_concurrent_futures.py

Lines changed: 3 additions & 9 deletions
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

Lines changed: 5 additions & 9 deletions
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

Lines changed: 2 additions & 5 deletions
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

Lines changed: 9 additions & 7 deletions
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

Lines changed: 5 additions & 7 deletions
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

Lines changed: 6 additions & 11 deletions
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)