Commit 742206d9 authored by Serhiy Storchaka's avatar Serhiy Storchaka

Issue #27063: Some unittest loader tests were silently skipped.

parents 2a95219b 0dad7556
...@@ -8,7 +8,7 @@ import unittest ...@@ -8,7 +8,7 @@ import unittest
# test isolation and reproducibility. # test isolation and reproducibility.
def warningregistry(func): def warningregistry(func):
def wrapper(*args, **kws): def wrapper(*args, **kws):
missing = object() missing = []
saved = getattr(warnings, '__warningregistry__', missing).copy() saved = getattr(warnings, '__warningregistry__', missing).copy()
try: try:
return func(*args, **kws) return func(*args, **kws)
...@@ -20,6 +20,7 @@ def warningregistry(func): ...@@ -20,6 +20,7 @@ def warningregistry(func):
pass pass
else: else:
warnings.__warningregistry__ = saved warnings.__warningregistry__ = saved
return wrapper
class Test_TestLoader(unittest.TestCase): class Test_TestLoader(unittest.TestCase):
...@@ -197,9 +198,9 @@ class Test_TestLoader(unittest.TestCase): ...@@ -197,9 +198,9 @@ class Test_TestLoader(unittest.TestCase):
# ignored (and deprecated). # ignored (and deprecated).
load_tests_args = [] load_tests_args = []
with warnings.catch_warnings(record=False): with warnings.catch_warnings(record=False):
warnings.simplefilter('never') warnings.simplefilter('ignore')
suite = loader.loadTestsFromModule(m, use_load_tests=False) suite = loader.loadTestsFromModule(m, use_load_tests=False)
self.assertEqual(load_tests_args, [loader, suite, None]) self.assertEqual(load_tests_args, [loader, suite, None])
@warningregistry @warningregistry
def test_loadTestsFromModule__use_load_tests_deprecated_positional(self): def test_loadTestsFromModule__use_load_tests_deprecated_positional(self):
...@@ -221,10 +222,10 @@ class Test_TestLoader(unittest.TestCase): ...@@ -221,10 +222,10 @@ class Test_TestLoader(unittest.TestCase):
with warnings.catch_warnings(record=True) as w: with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always') warnings.simplefilter('always')
suite = loader.loadTestsFromModule(m, False) suite = loader.loadTestsFromModule(m, False)
self.assertIsInstance(suite, unittest.TestSuite) self.assertIsInstance(suite, unittest.TestSuite)
# load_tests was still called because use_load_tests is deprecated # load_tests was still called because use_load_tests is deprecated
# and ignored. # and ignored.
self.assertEqual(load_tests_args, [loader, suite, None]) self.assertEqual(load_tests_args, [loader, suite, None])
# We got a warning. # We got a warning.
self.assertIs(w[-1].category, DeprecationWarning) self.assertIs(w[-1].category, DeprecationWarning)
self.assertEqual(str(w[-1].message), self.assertEqual(str(w[-1].message),
...@@ -249,14 +250,14 @@ class Test_TestLoader(unittest.TestCase): ...@@ -249,14 +250,14 @@ class Test_TestLoader(unittest.TestCase):
with warnings.catch_warnings(record=True) as w: with warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always') warnings.simplefilter('always')
suite = loader.loadTestsFromModule(m, use_load_tests=False) suite = loader.loadTestsFromModule(m, use_load_tests=False)
self.assertIsInstance(suite, unittest.TestSuite) self.assertIsInstance(suite, unittest.TestSuite)
# load_tests was still called because use_load_tests is deprecated # load_tests was still called because use_load_tests is deprecated
# and ignored. # and ignored.
self.assertEqual(load_tests_args, [loader, suite, None]) self.assertEqual(load_tests_args, [loader, suite, None])
# We got a warning. # We got a warning.
self.assertIs(w[-1].category, DeprecationWarning) self.assertIs(w[-1].category, DeprecationWarning)
self.assertEqual(str(w[-1].message), self.assertEqual(str(w[-1].message),
'use_load_tests is deprecated and ignored') 'use_load_tests is deprecated and ignored')
@warningregistry @warningregistry
def test_loadTestsFromModule__too_many_positional_args(self): def test_loadTestsFromModule__too_many_positional_args(self):
...@@ -274,17 +275,18 @@ class Test_TestLoader(unittest.TestCase): ...@@ -274,17 +275,18 @@ class Test_TestLoader(unittest.TestCase):
m.load_tests = load_tests m.load_tests = load_tests
loader = unittest.TestLoader() loader = unittest.TestLoader()
with self.assertRaises(TypeError) as cm, \ with self.assertRaises(TypeError) as cm, \
warnings.catch_warning(record=True) as w: warnings.catch_warnings(record=True) as w:
warnings.simplefilter('always')
loader.loadTestsFromModule(m, False, 'testme.*') loader.loadTestsFromModule(m, False, 'testme.*')
# We still got the deprecation warning. # We still got the deprecation warning.
self.assertIs(w[-1].category, DeprecationWarning) self.assertIs(w[-1].category, DeprecationWarning)
self.assertEqual(str(w[-1].message), self.assertEqual(str(w[-1].message),
'use_load_tests is deprecated and ignored') 'use_load_tests is deprecated and ignored')
# We also got a TypeError for too many positional arguments. # We also got a TypeError for too many positional arguments.
self.assertEqual(type(cm.exception), TypeError) self.assertEqual(type(cm.exception), TypeError)
self.assertEqual( self.assertEqual(
str(cm.exception), str(cm.exception),
'loadTestsFromModule() takes 1 positional argument but 3 were given') 'loadTestsFromModule() takes 1 positional argument but 3 were given')
@warningregistry @warningregistry
def test_loadTestsFromModule__use_load_tests_other_bad_keyword(self): def test_loadTestsFromModule__use_load_tests_other_bad_keyword(self):
...@@ -302,7 +304,7 @@ class Test_TestLoader(unittest.TestCase): ...@@ -302,7 +304,7 @@ class Test_TestLoader(unittest.TestCase):
m.load_tests = load_tests m.load_tests = load_tests
loader = unittest.TestLoader() loader = unittest.TestLoader()
with warnings.catch_warnings(): with warnings.catch_warnings():
warnings.simplefilter('never') warnings.simplefilter('ignore')
with self.assertRaises(TypeError) as cm: with self.assertRaises(TypeError) as cm:
loader.loadTestsFromModule( loader.loadTestsFromModule(
m, use_load_tests=False, very_bad=True, worse=False) m, use_load_tests=False, very_bad=True, worse=False)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment