From 6f0470065b4aa7c8673ba375b4d99b8809999fb5 Mon Sep 17 00:00:00 2001 From: "steven.bethard" Date: Thu, 7 Jan 2010 17:30:28 +0000 Subject: Add convert_arg_line_to_args to allow subclasses to easily override file parsing behavior. --- test/test_argparse.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) (limited to 'test') diff --git a/test/test_argparse.py b/test/test_argparse.py index a7eb74a..2e78c88 100644 --- a/test/test_argparse.py +++ b/test/test_argparse.py @@ -175,6 +175,8 @@ class ParserTesterMetaclass(type): # default parser signature is empty if not hasattr(cls, 'parser_signature'): cls.parser_signature = Sig() + if not hasattr(cls, 'parser_class'): + cls.parser_class = ErrorRaisingArgumentParser # --------------------------------------- # functions for adding optional arguments @@ -238,7 +240,7 @@ class ParserTesterMetaclass(type): def _get_parser(self, tester): args = tester.parser_signature.args kwargs = tester.parser_signature.kwargs - parser = ErrorRaisingArgumentParser(*args, **kwargs) + parser = tester.parser_class(*args, **kwargs) self._add_arguments(parser, tester.argument_signatures) return parser @@ -1325,6 +1327,36 @@ class TestArgumentsFromFile(TempDirMixin, ParserTestCase): ] +class TestArgumentsFromFileConverter(TempDirMixin, ParserTestCase): + """Test reading arguments from a file""" + + def setUp(self): + super(TestArgumentsFromFileConverter, self).setUp() + file_texts = [ + ('hello', 'hello world!\n'), + ] + for path, text in file_texts: + file = open(path, 'w') + file.write(text) + file.close() + + class FromFileConverterArgumentParser(ErrorRaisingArgumentParser): + def convert_arg_line_to_args(self, arg_line): + for arg in arg_line.split(): + if not arg.strip(): + continue + yield arg + parser_class = FromFileConverterArgumentParser + parser_signature = Sig(fromfile_prefix_chars='@') + argument_signatures = [ + Sig('y', nargs='+'), + ] + failures = [] + successes = [ + ('@hello X', NS(y=['hello', 'world!', 'X'])), + ] + + # ===================== # Type conversion tests # ===================== -- cgit v1.2.1