mirror of
https://github.com/python/cpython.git
synced 2025-10-17 12:18:23 +00:00
#10535: Enable silenced warnings in unittest by default
This commit is contained in:
parent
00f2f97dbd
commit
6090187656
8 changed files with 228 additions and 22 deletions
|
@ -1,5 +1,8 @@
|
|||
import io
|
||||
import os
|
||||
import sys
|
||||
import pickle
|
||||
import subprocess
|
||||
|
||||
import unittest
|
||||
|
||||
|
@ -144,6 +147,7 @@ class Test_TextTestRunner(unittest.TestCase):
|
|||
self.assertFalse(runner.failfast)
|
||||
self.assertFalse(runner.buffer)
|
||||
self.assertEqual(runner.verbosity, 1)
|
||||
self.assertEqual(runner.warnings, None)
|
||||
self.assertTrue(runner.descriptions)
|
||||
self.assertEqual(runner.resultclass, unittest.TextTestResult)
|
||||
|
||||
|
@ -244,3 +248,57 @@ class Test_TextTestRunner(unittest.TestCase):
|
|||
|
||||
expectedresult = (runner.stream, DESCRIPTIONS, VERBOSITY)
|
||||
self.assertEqual(runner._makeResult(), expectedresult)
|
||||
|
||||
def test_warnings(self):
|
||||
"""
|
||||
Check that warnings argument of TextTestRunner correctly affects the
|
||||
behavior of the warnings.
|
||||
"""
|
||||
# see #10535 and the _test_warnings file for more information
|
||||
|
||||
def get_parse_out_err(p):
|
||||
return [b.splitlines() for b in p.communicate()]
|
||||
opts = dict(stdout=subprocess.PIPE, stderr=subprocess.PIPE,
|
||||
cwd=os.path.dirname(__file__))
|
||||
ae_msg = b'Please use assertEqual instead.'
|
||||
at_msg = b'Please use assertTrue instead.'
|
||||
|
||||
# no args -> all the warnings are printed, unittest warnings only once
|
||||
p = subprocess.Popen([sys.executable, '_test_warnings.py'], **opts)
|
||||
out, err = get_parse_out_err(p)
|
||||
self.assertEqual(err[-1], b'OK')
|
||||
# check that the total number of warnings in the output is correct
|
||||
self.assertEqual(len(out), 12)
|
||||
# check that the numbers of the different kind of warnings is correct
|
||||
for msg in [b'dw', b'iw', b'uw']:
|
||||
self.assertEqual(out.count(msg), 3)
|
||||
for msg in [ae_msg, at_msg, b'rw']:
|
||||
self.assertEqual(out.count(msg), 1)
|
||||
|
||||
args_list = (
|
||||
# passing 'ignore' as warnings arg -> no warnings
|
||||
[sys.executable, '_test_warnings.py', 'ignore'],
|
||||
# -W doesn't affect the result if the arg is passed
|
||||
[sys.executable, '-Wa', '_test_warnings.py', 'ignore'],
|
||||
# -W affects the result if the arg is not passed
|
||||
[sys.executable, '-Wi', '_test_warnings.py']
|
||||
)
|
||||
# in all these cases no warnings are printed
|
||||
for args in args_list:
|
||||
p = subprocess.Popen(args, **opts)
|
||||
out, err = get_parse_out_err(p)
|
||||
self.assertEqual(err[-1], b'OK')
|
||||
self.assertEqual(len(out), 0)
|
||||
|
||||
|
||||
# passing 'always' as warnings arg -> all the warnings printed,
|
||||
# unittest warnings only once
|
||||
p = subprocess.Popen([sys.executable, '_test_warnings.py', 'always'],
|
||||
**opts)
|
||||
out, err = get_parse_out_err(p)
|
||||
self.assertEqual(err[-1], b'OK')
|
||||
self.assertEqual(len(out), 14)
|
||||
for msg in [b'dw', b'iw', b'uw', b'rw']:
|
||||
self.assertEqual(out.count(msg), 3)
|
||||
for msg in [ae_msg, at_msg]:
|
||||
self.assertEqual(out.count(msg), 1)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue