mirror of https://github.com/python/cpython
Issue #9554: Use modern unittest features in test_argparse.
Initial patch by Denver Coneybeare and Radu Voicilas.
This commit is contained in:
parent
3cadd802a4
commit
1c5f56a955
|
@ -20,15 +20,6 @@ class StdIOBuffer(StringIO):
|
|||
|
||||
class TestCase(unittest.TestCase):
|
||||
|
||||
def assertEqual(self, obj1, obj2):
|
||||
if obj1 != obj2:
|
||||
print('')
|
||||
print(repr(obj1))
|
||||
print(repr(obj2))
|
||||
print(obj1)
|
||||
print(obj2)
|
||||
super(TestCase, self).assertEqual(obj1, obj2)
|
||||
|
||||
def setUp(self):
|
||||
# The tests assume that line wrapping occurs at 80 columns, but this
|
||||
# behaviour can be overridden by setting the COLUMNS environment
|
||||
|
@ -1993,14 +1984,9 @@ class TestAddSubparsers(TestCase):
|
|||
'''))
|
||||
|
||||
def _test_subparser_help(self, args_str, expected_help):
|
||||
try:
|
||||
with self.assertRaises(ArgumentParserError) as cm:
|
||||
self.parser.parse_args(args_str.split())
|
||||
except ArgumentParserError:
|
||||
err = sys.exc_info()[1]
|
||||
if err.stdout != expected_help:
|
||||
print(repr(expected_help))
|
||||
print(repr(err.stdout))
|
||||
self.assertEqual(err.stdout, expected_help)
|
||||
self.assertEqual(expected_help, cm.exception.stdout)
|
||||
|
||||
def test_subparser1_help(self):
|
||||
self._test_subparser_help('5.0 1 -h', textwrap.dedent('''\
|
||||
|
@ -2839,15 +2825,15 @@ class TestGetDefault(TestCase):
|
|||
|
||||
def test_get_default(self):
|
||||
parser = ErrorRaisingArgumentParser()
|
||||
self.assertEqual(None, parser.get_default("foo"))
|
||||
self.assertEqual(None, parser.get_default("bar"))
|
||||
self.assertIsNone(parser.get_default("foo"))
|
||||
self.assertIsNone(parser.get_default("bar"))
|
||||
|
||||
parser.add_argument("--foo")
|
||||
self.assertEqual(None, parser.get_default("foo"))
|
||||
self.assertEqual(None, parser.get_default("bar"))
|
||||
self.assertIsNone(parser.get_default("foo"))
|
||||
self.assertIsNone(parser.get_default("bar"))
|
||||
|
||||
parser.add_argument("--bar", type=int, default=42)
|
||||
self.assertEqual(None, parser.get_default("foo"))
|
||||
self.assertIsNone(parser.get_default("foo"))
|
||||
self.assertEqual(42, parser.get_default("bar"))
|
||||
|
||||
parser.set_defaults(foo="badger")
|
||||
|
@ -2862,18 +2848,16 @@ class TestNamespaceContainsSimple(TestCase):
|
|||
|
||||
def test_empty(self):
|
||||
ns = argparse.Namespace()
|
||||
self.assertEqual('' in ns, False)
|
||||
self.assertEqual('' not in ns, True)
|
||||
self.assertEqual('x' in ns, False)
|
||||
self.assertNotIn('', ns)
|
||||
self.assertNotIn('x', ns)
|
||||
|
||||
def test_non_empty(self):
|
||||
ns = argparse.Namespace(x=1, y=2)
|
||||
self.assertEqual('x' in ns, True)
|
||||
self.assertEqual('x' not in ns, False)
|
||||
self.assertEqual('y' in ns, True)
|
||||
self.assertEqual('' in ns, False)
|
||||
self.assertEqual('xx' in ns, False)
|
||||
self.assertEqual('z' in ns, False)
|
||||
self.assertNotIn('', ns)
|
||||
self.assertIn('x', ns)
|
||||
self.assertIn('y', ns)
|
||||
self.assertNotIn('xx', ns)
|
||||
self.assertNotIn('z', ns)
|
||||
|
||||
# =====================
|
||||
# Help formatting tests
|
||||
|
@ -2929,13 +2913,6 @@ class TestHelpFormattingMetaclass(type):
|
|||
def _test(self, tester, parser_text):
|
||||
expected_text = getattr(tester, self.func_suffix)
|
||||
expected_text = textwrap.dedent(expected_text)
|
||||
if expected_text != parser_text:
|
||||
print(repr(expected_text))
|
||||
print(repr(parser_text))
|
||||
for char1, char2 in zip(expected_text, parser_text):
|
||||
if char1 != char2:
|
||||
print('first diff: %r %r' % (char1, char2))
|
||||
break
|
||||
tester.assertEqual(expected_text, parser_text)
|
||||
|
||||
def test_format(self, tester):
|
||||
|
@ -4216,24 +4193,17 @@ class TestInvalidArgumentConstructors(TestCase):
|
|||
self.assertValueError('foo', action='baz')
|
||||
self.assertValueError('--foo', action=('store', 'append'))
|
||||
parser = argparse.ArgumentParser()
|
||||
try:
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
parser.add_argument("--foo", action="store-true")
|
||||
except ValueError:
|
||||
e = sys.exc_info()[1]
|
||||
expected = 'unknown action'
|
||||
msg = 'expected %r, found %r' % (expected, e)
|
||||
self.assertTrue(expected in str(e), msg)
|
||||
self.assertIn('unknown action', str(cm.exception))
|
||||
|
||||
def test_multiple_dest(self):
|
||||
parser = argparse.ArgumentParser()
|
||||
parser.add_argument(dest='foo')
|
||||
try:
|
||||
with self.assertRaises(ValueError) as cm:
|
||||
parser.add_argument('bar', dest='baz')
|
||||
except ValueError:
|
||||
e = sys.exc_info()[1]
|
||||
expected = 'dest supplied twice for positional argument'
|
||||
msg = 'expected %r, found %r' % (expected, e)
|
||||
self.assertTrue(expected in str(e), msg)
|
||||
self.assertIn('dest supplied twice for positional argument',
|
||||
str(cm.exception))
|
||||
|
||||
def test_no_argument_actions(self):
|
||||
for action in ['store_const', 'store_true', 'store_false',
|
||||
|
@ -4390,18 +4360,10 @@ class TestConflictHandling(TestCase):
|
|||
class TestOptionalsHelpVersionActions(TestCase):
|
||||
"""Test the help and version actions"""
|
||||
|
||||
def _get_error(self, func, *args, **kwargs):
|
||||
try:
|
||||
func(*args, **kwargs)
|
||||
except ArgumentParserError:
|
||||
return sys.exc_info()[1]
|
||||
else:
|
||||
self.assertRaises(ArgumentParserError, func, *args, **kwargs)
|
||||
|
||||
def assertPrintHelpExit(self, parser, args_str):
|
||||
self.assertEqual(
|
||||
parser.format_help(),
|
||||
self._get_error(parser.parse_args, args_str.split()).stdout)
|
||||
with self.assertRaises(ArgumentParserError) as cm:
|
||||
parser.parse_args(args_str.split())
|
||||
self.assertEqual(parser.format_help(), cm.exception.stdout)
|
||||
|
||||
def assertArgumentParserError(self, parser, *args):
|
||||
self.assertRaises(ArgumentParserError, parser.parse_args, args)
|
||||
|
@ -4416,8 +4378,9 @@ class TestOptionalsHelpVersionActions(TestCase):
|
|||
def test_version_format(self):
|
||||
parser = ErrorRaisingArgumentParser(prog='PPP')
|
||||
parser.add_argument('-v', '--version', action='version', version='%(prog)s 3.5')
|
||||
msg = self._get_error(parser.parse_args, ['-v']).stdout
|
||||
self.assertEqual('PPP 3.5\n', msg)
|
||||
with self.assertRaises(ArgumentParserError) as cm:
|
||||
parser.parse_args(['-v'])
|
||||
self.assertEqual('PPP 3.5\n', cm.exception.stdout)
|
||||
|
||||
def test_version_no_help(self):
|
||||
parser = ErrorRaisingArgumentParser(add_help=False)
|
||||
|
@ -4429,8 +4392,9 @@ class TestOptionalsHelpVersionActions(TestCase):
|
|||
def test_version_action(self):
|
||||
parser = ErrorRaisingArgumentParser(prog='XXX')
|
||||
parser.add_argument('-V', action='version', version='%(prog)s 3.7')
|
||||
msg = self._get_error(parser.parse_args, ['-V']).stdout
|
||||
self.assertEqual('XXX 3.7\n', msg)
|
||||
with self.assertRaises(ArgumentParserError) as cm:
|
||||
parser.parse_args(['-V'])
|
||||
self.assertEqual('XXX 3.7\n', cm.exception.stdout)
|
||||
|
||||
def test_no_help(self):
|
||||
parser = ErrorRaisingArgumentParser(add_help=False)
|
||||
|
@ -4600,14 +4564,10 @@ class TestArgumentTypeError(TestCase):
|
|||
|
||||
parser = ErrorRaisingArgumentParser(prog='PROG', add_help=False)
|
||||
parser.add_argument('x', type=spam)
|
||||
try:
|
||||
with self.assertRaises(ArgumentParserError) as cm:
|
||||
parser.parse_args(['XXX'])
|
||||
except ArgumentParserError:
|
||||
expected = 'usage: PROG x\nPROG: error: argument x: spam!\n'
|
||||
msg = sys.exc_info()[1].stderr
|
||||
self.assertEqual(expected, msg)
|
||||
else:
|
||||
self.fail()
|
||||
self.assertEqual('usage: PROG x\nPROG: error: argument x: spam!\n',
|
||||
cm.exception.stderr)
|
||||
|
||||
# =========================
|
||||
# MessageContentError tests
|
||||
|
|
|
@ -1399,6 +1399,7 @@ Norman Vine
|
|||
Pauli Virtanen
|
||||
Frank Visser
|
||||
Johannes Vogel
|
||||
Radu Voicilas
|
||||
Alex Volkov
|
||||
Martijn Vries
|
||||
Sjoerd de Vries
|
||||
|
|
|
@ -653,6 +653,9 @@ Documentation
|
|||
Tests
|
||||
-----
|
||||
|
||||
- Issue #9554: Use modern unittest features in test_argparse. Initial patch by
|
||||
Denver Coneybeare and Radu Voicilas.
|
||||
|
||||
- Issue #20155: Changed HTTP method names in failing tests in test_httpservers
|
||||
so that packet filtering software (specifically Windows Base Filtering Engine)
|
||||
does not interfere with the transaction semantics expected by the tests.
|
||||
|
|
Loading…
Reference in New Issue