summaryrefslogtreecommitdiffstats
path: root/Lib/test/test_argparse.py
diff options
context:
space:
mode:
authorBarry Warsaw <barry@python.org>2012-09-12 18:34:50 (GMT)
committerBarry Warsaw <barry@python.org>2012-09-12 18:34:50 (GMT)
commit03937a8755e189959c44e5035a3eb27db95a6efe (patch)
tree3e2e9bf17f4ea99ba36e9ebd32cd32fecfaed8cd /Lib/test/test_argparse.py
parentdfaf90da9c4a9a4f7dd7bd716fa0695d32bbd91f (diff)
downloadcpython-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.py31
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