diff options
author | Barry Warsaw <barry@python.org> | 2012-09-12 18:34:50 (GMT) |
---|---|---|
committer | Barry Warsaw <barry@python.org> | 2012-09-12 18:34:50 (GMT) |
commit | 03937a8755e189959c44e5035a3eb27db95a6efe (patch) | |
tree | 3e2e9bf17f4ea99ba36e9ebd32cd32fecfaed8cd /Lib/test/test_argparse.py | |
parent | dfaf90da9c4a9a4f7dd7bd716fa0695d32bbd91f (diff) | |
download | cpython-03937a8755e189959c44e5035a3eb27db95a6efe.zip cpython-03937a8755e189959c44e5035a3eb27db95a6efe.tar.gz cpython-03937a8755e189959c44e5035a3eb27db95a6efe.tar.bz2 |
A follow up for issue #15906: change the test for calling the type conversion
on the action's default, reverting it back to previous behavior. Conversion
is only done on string defaults.
Add a test for this and another test that ensures such type conversions are
only called once.
Diffstat (limited to 'Lib/test/test_argparse.py')
-rw-r--r-- | Lib/test/test_argparse.py | 31 |
1 files changed, 27 insertions, 4 deletions
diff --git a/Lib/test/test_argparse.py b/Lib/test/test_argparse.py index c611944..30fdf4a 100644 --- a/Lib/test/test_argparse.py +++ b/Lib/test/test_argparse.py @@ -4464,11 +4464,11 @@ class TestTypeFunctionCallOnlyOnce(TestCase): args = parser.parse_args('--foo spam!'.split()) self.assertEqual(NS(foo='foo_converted'), args) -# ================================================================ -# Check that the type function is called with a non-string default -# ================================================================ +# ================================================================== +# Check semantics regarding the default argument and type conversion +# ================================================================== -class TestTypeFunctionCallWithNonStringDefault(TestCase): +class TestTypeFunctionCalledOnDefault(TestCase): def test_type_function_call_with_non_string_default(self): def spam(int_to_convert): @@ -4478,8 +4478,31 @@ class TestTypeFunctionCallWithNonStringDefault(TestCase): parser = argparse.ArgumentParser() parser.add_argument('--foo', type=spam, default=0) args = parser.parse_args([]) + # foo should *not* be converted because its default is not a string. + self.assertEqual(NS(foo=0), args) + + def test_type_function_call_with_string_default(self): + def spam(int_to_convert): + return 'foo_converted' + + parser = argparse.ArgumentParser() + parser.add_argument('--foo', type=spam, default='0') + args = parser.parse_args([]) + # foo is converted because its default is a string. self.assertEqual(NS(foo='foo_converted'), args) + def test_no_double_type_conversion_of_default(self): + def extend(str_to_convert): + return str_to_convert + '*' + + parser = argparse.ArgumentParser() + parser.add_argument('--test', type=extend, default='*') + args = parser.parse_args([]) + # The test argument will be two stars, one coming from the default + # value and one coming from the type conversion being called exactly + # once. + self.assertEqual(NS(test='**'), args) + def test_issue_15906(self): # Issue #15906: When action='append', type=str, default=[] are # providing, the dest value was the string representation "[]" when it |