A few tweaks for issue16662 based on feedback from Robert Collins.
This commit is contained in:
parent
d78742a260
commit
bb1e3f1ebe
|
@ -79,12 +79,15 @@ class TestLoader(object):
|
||||||
# use_load_tests argument. For backward compatibility, we still
|
# use_load_tests argument. For backward compatibility, we still
|
||||||
# accept the argument (which can also be the first position) but we
|
# accept the argument (which can also be the first position) but we
|
||||||
# ignore it and issue a deprecation warning if it's present.
|
# ignore it and issue a deprecation warning if it's present.
|
||||||
if len(args) == 1 or 'use_load_tests' in kws:
|
if len(args) > 0 or 'use_load_tests' in kws:
|
||||||
warnings.warn('use_load_tests is deprecated and ignored',
|
warnings.warn('use_load_tests is deprecated and ignored',
|
||||||
DeprecationWarning)
|
DeprecationWarning)
|
||||||
kws.pop('use_load_tests', None)
|
kws.pop('use_load_tests', None)
|
||||||
if len(args) > 1:
|
if len(args) > 1:
|
||||||
raise TypeError('loadTestsFromModule() takes 1 positional argument but {} were given'.format(len(args)))
|
# Complain about the number of arguments, but don't forget the
|
||||||
|
# required `module` argument.
|
||||||
|
complaint = len(args) + 1
|
||||||
|
raise TypeError('loadTestsFromModule() takes 1 positional argument but {} were given'.format(complaint))
|
||||||
if len(kws) != 0:
|
if len(kws) != 0:
|
||||||
# Since the keyword arguments are unsorted (see PEP 468), just
|
# Since the keyword arguments are unsorted (see PEP 468), just
|
||||||
# pick the alphabetically sorted first argument to complain about,
|
# pick the alphabetically sorted first argument to complain about,
|
||||||
|
|
|
@ -196,23 +196,23 @@ class Test_TestLoader(unittest.TestCase):
|
||||||
|
|
||||||
@warningregistry
|
@warningregistry
|
||||||
def test_loadTestsFromModule__use_load_tests_deprecated_positional(self):
|
def test_loadTestsFromModule__use_load_tests_deprecated_positional(self):
|
||||||
|
m = types.ModuleType('m')
|
||||||
|
class MyTestCase(unittest.TestCase):
|
||||||
|
def test(self):
|
||||||
|
pass
|
||||||
|
m.testcase_1 = MyTestCase
|
||||||
|
|
||||||
|
load_tests_args = []
|
||||||
|
def load_tests(loader, tests, pattern):
|
||||||
|
self.assertIsInstance(tests, unittest.TestSuite)
|
||||||
|
load_tests_args.extend((loader, tests, pattern))
|
||||||
|
return tests
|
||||||
|
m.load_tests = load_tests
|
||||||
|
# The method still works.
|
||||||
|
loader = unittest.TestLoader()
|
||||||
|
# use_load_tests=True as a positional argument.
|
||||||
with warnings.catch_warnings(record=True) as w:
|
with warnings.catch_warnings(record=True) as w:
|
||||||
warnings.simplefilter('always')
|
warnings.simplefilter('always')
|
||||||
m = types.ModuleType('m')
|
|
||||||
class MyTestCase(unittest.TestCase):
|
|
||||||
def test(self):
|
|
||||||
pass
|
|
||||||
m.testcase_1 = MyTestCase
|
|
||||||
|
|
||||||
load_tests_args = []
|
|
||||||
def load_tests(loader, tests, pattern):
|
|
||||||
self.assertIsInstance(tests, unittest.TestSuite)
|
|
||||||
load_tests_args.extend((loader, tests, pattern))
|
|
||||||
return tests
|
|
||||||
m.load_tests = load_tests
|
|
||||||
# The method still works.
|
|
||||||
loader = unittest.TestLoader()
|
|
||||||
# use_load_tests=True as a positional argument.
|
|
||||||
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
|
||||||
|
@ -225,22 +225,22 @@ class Test_TestLoader(unittest.TestCase):
|
||||||
|
|
||||||
@warningregistry
|
@warningregistry
|
||||||
def test_loadTestsFromModule__use_load_tests_deprecated_keyword(self):
|
def test_loadTestsFromModule__use_load_tests_deprecated_keyword(self):
|
||||||
|
m = types.ModuleType('m')
|
||||||
|
class MyTestCase(unittest.TestCase):
|
||||||
|
def test(self):
|
||||||
|
pass
|
||||||
|
m.testcase_1 = MyTestCase
|
||||||
|
|
||||||
|
load_tests_args = []
|
||||||
|
def load_tests(loader, tests, pattern):
|
||||||
|
self.assertIsInstance(tests, unittest.TestSuite)
|
||||||
|
load_tests_args.extend((loader, tests, pattern))
|
||||||
|
return tests
|
||||||
|
m.load_tests = load_tests
|
||||||
|
# The method still works.
|
||||||
|
loader = unittest.TestLoader()
|
||||||
with warnings.catch_warnings(record=True) as w:
|
with warnings.catch_warnings(record=True) as w:
|
||||||
warnings.simplefilter('always')
|
warnings.simplefilter('always')
|
||||||
m = types.ModuleType('m')
|
|
||||||
class MyTestCase(unittest.TestCase):
|
|
||||||
def test(self):
|
|
||||||
pass
|
|
||||||
m.testcase_1 = MyTestCase
|
|
||||||
|
|
||||||
load_tests_args = []
|
|
||||||
def load_tests(loader, tests, pattern):
|
|
||||||
self.assertIsInstance(tests, unittest.TestSuite)
|
|
||||||
load_tests_args.extend((loader, tests, pattern))
|
|
||||||
return tests
|
|
||||||
m.load_tests = load_tests
|
|
||||||
# The method still works.
|
|
||||||
loader = unittest.TestLoader()
|
|
||||||
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
|
||||||
|
@ -251,6 +251,7 @@ class Test_TestLoader(unittest.TestCase):
|
||||||
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
|
||||||
def test_loadTestsFromModule__too_many_positional_args(self):
|
def test_loadTestsFromModule__too_many_positional_args(self):
|
||||||
m = types.ModuleType('m')
|
m = types.ModuleType('m')
|
||||||
class MyTestCase(unittest.TestCase):
|
class MyTestCase(unittest.TestCase):
|
||||||
|
@ -265,14 +266,18 @@ class Test_TestLoader(unittest.TestCase):
|
||||||
return tests
|
return tests
|
||||||
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:
|
||||||
loader.loadTestsFromModule(m, False, 'testme.*')
|
loader.loadTestsFromModule(m, False, 'testme.*')
|
||||||
self.assertEqual(type(cm.exception), TypeError)
|
# We still got the deprecation warning.
|
||||||
# The error message names the first bad argument alphabetically,
|
self.assertIs(w[-1].category, DeprecationWarning)
|
||||||
# however use_load_tests (which sorts first) is ignored.
|
self.assertEqual(str(w[-1].message),
|
||||||
self.assertEqual(
|
'use_load_tests is deprecated and ignored')
|
||||||
str(cm.exception),
|
# We also got a TypeError for too many positional arguments.
|
||||||
'loadTestsFromModule() takes 1 positional argument but 2 were given')
|
self.assertEqual(type(cm.exception), TypeError)
|
||||||
|
self.assertEqual(
|
||||||
|
str(cm.exception),
|
||||||
|
'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):
|
||||||
|
|
Loading…
Reference in New Issue