Author: janne.t.harkonen
Date: Tue Nov 25 07:59:47 2008
New Revision: 1109
Modified:
trunk/src/robot/errors.py
trunk/src/robot/utils/argumentparser.py
trunk/utest/utils/test_argumentparser.py
Log:
changed argumentparser to handle --version, --help and variable number of
args
Modified: trunk/src/robot/errors.py
==============================================================================
--- trunk/src/robot/errors.py (original)
+++ trunk/src/robot/errors.py Tue Nov 25 07:59:47 2008
@@ -51,3 +51,5 @@
RobotError.__init__(self, message)
self.traceback = traceback
+class Information(RobotError):
+ """Used by argument parser with --help or --version"""
Modified: trunk/src/robot/utils/argumentparser.py
==============================================================================
--- trunk/src/robot/utils/argumentparser.py (original)
+++ trunk/src/robot/utils/argumentparser.py Tue Nov 25 07:59:47 2008
@@ -14,14 +14,13 @@
import getopt # optparse not supported by Jython 2.2
-import os.path
import os
import re
import sys
import glob
import string
-from robot.errors import DataError, FrameworkError
+from robot.errors import DataError, FrameworkError, Information
from misc import seq2str, plural_or_not
from robottypes import is_list, is_boolean
@@ -83,11 +82,13 @@
\s*$ #
''', re.VERBOSE | re.IGNORECASE)
- def __init__(self, usage):
+ def __init__(self, usage, version='No version information available'):
"""Initialization is done using a usage doc explaining options.
See for example 'runner.py' and 'rebot.py' for usage examples.
"""
+ self._usage = usage
+ self._version = version
self._short_opts = ''
self._long_opts = []
self._multi_opts = []
@@ -98,7 +99,7 @@
self._parse_usage(usage)
def parse_args(self, args_list, unescape=None, argfile=None,
pythonpath=None,
- check_args=False):
+ help=None, version=None, check_args=False):
"""Parse given arguments and return options and positional
arguments.
Arguments must be given as a list and are typically sys.argv[1:].
@@ -137,6 +138,10 @@
opts, args = self._parse_args(args_list)
if unescape:
opts, args = self._unescape_opts_and_args(opts, args, unescape)
+ if help and opts[help]:
+ raise Information(self._usage)
+ if version and opts[version]:
+ raise Information(self._version)
if pythonpath:
sys.path = self._get_pythonpath(opts[pythonpath]) + sys.path
if check_args:
@@ -157,6 +162,8 @@
return
elif len(args) < len(self._expected_args):
msg = 'Required argument%s missing.' %
plural_or_not(self._expected_args)
+ elif self._expected_args and self._expected_args[-1].endswith('s'):
+ return
else:
msg = 'Too many arguments.'
msg += ' Expected %s' % seq2str(self._expected_args)
Modified: trunk/utest/utils/test_argumentparser.py
==============================================================================
--- trunk/utest/utils/test_argumentparser.py (original)
+++ trunk/utest/utils/test_argumentparser.py Tue Nov 25 07:59:47 2008
@@ -1,8 +1,7 @@
import unittest
-import sys
import os
-from robot.utils.argumentparser import *
+from robot.utils.argumentparser import ArgumentParser
from robot.utils.asserts import *
from robot.errors import *
@@ -129,11 +128,18 @@
def test_check_args_with_correct_args(self):
for args in [ ('hello',), ('hello world',) ]:
self.ap.check_args(args)
-
+
def test_check_args_with_wrong_number_of_args(self):
for args in [ (), ('arg1','arg2','arg3') ]:
assert_raises(DataError, self.ap.check_args, args)
+ def test_check_variable_number_of_args(self):
+ ap = ArgumentParser('usage: robot.py [options] args')
+ ap.check_args(['one_is_ok'])
+ ap.check_args(['two', 'ok'])
+ ap.check_args(['this', 'should', 'also', 'work', 'pretty', 'well'])
+ assert_raises(DataError, ap.check_args, [])
+
def test_unescape_options(self):
cli = '--escape quot:Q -E space:SP -E lt:LT -E gt:GT ' \
+ '-N QQQLTmySPfineSPnameGTQQQ sourceSPwithSPspaces'
@@ -165,6 +171,25 @@
assert_equals(ap._get_pythonpath([p1,p2]), [p1,p2])
assert_equals(ap._get_pythonpath([p1 + ':' + p2]), [p1,p2])
assert_true(p1 in ap._get_pythonpath(os.path.join(p2,'*')))
+
+
+class TestPrintHelpAndVersion(unittest.TestCase):
+
+ def setUp(self):
+ self.ap = ArgumentParser(usage, version='testing 1.0')
+
+ def test_print_help(self):
+ assert_raises_with_msg(Information, usage,
+ self.ap.parse_args, ['--help'], help='help')
+
+ def test_print_version(self):
+ assert_raises_with_msg(Information, 'testing 1.0',
+ self.ap.parse_args, ['--version'],
version='version')
+
+ def test_print_version_when_version_not_set(self):
+ ap = ArgumentParser(usage)
+ assert_raises_with_msg(Information, "No version information
available",
+ ap.parse_args, ['--version'],
version='version')
if __name__ == "__main__":
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"robotframework-commit" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/robotframework-commit?hl=en
-~----------~----~----~----~------~----~------~--~---