Skip to content

Commit 84ac7a7

Browse files
committed
ArgumentParser: allow passing name and default value for version
1 parent 73f1a07 commit 84ac7a7

File tree

2 files changed

+18
-12
lines changed

2 files changed

+18
-12
lines changed

src/robot/utils/argumentparser.py

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@
2323
import textwrap
2424

2525
from robot.errors import DataError, Information, FrameworkError
26+
from robot.version import get_full_version
2627

2728
from misc import plural_or_not
2829
from encoding import decode_output, decode_from_file_system
@@ -52,17 +53,17 @@ class ArgumentParser:
5253
\s*$
5354
''', re.VERBOSE | re.IGNORECASE)
5455

55-
def __init__(self, usage, version=None, arg_limits=None):
56+
def __init__(self, usage, name=None, version=None, arg_limits=None):
5657
"""Available options and tool name are read from the usage.
5758
5859
Tool name is got from the first row of the usage. It is either the
5960
whole row or anything before first ' -- '.
6061
"""
6162
if not usage:
6263
raise FrameworkError('Usage cannot be empty')
64+
self.name = name or usage.splitlines()[0].split(' -- ')[0].strip()
65+
self.version = version or get_full_version()
6366
self._usage = usage
64-
self._name = usage.splitlines()[0].split(' -- ')[0].strip()
65-
self._version = version
6667
self._arg_limits = arg_limits
6768
self._short_opts = ''
6869
self._long_opts = []
@@ -367,8 +368,8 @@ def _get_available_escapes(self):
367368

368369
def _raise_help(self):
369370
msg = self._usage
370-
if self._version:
371-
msg = msg.replace('<VERSION>', self._version)
371+
if self.version:
372+
msg = msg.replace('<VERSION>', self.version)
372373
def replace_escapes(res):
373374
escapes = 'Available escapes: ' + self._get_available_escapes()
374375
lines = textwrap.wrap(escapes, width=len(res.group(2)))
@@ -378,9 +379,7 @@ def replace_escapes(res):
378379
raise Information(msg)
379380

380381
def _raise_version(self):
381-
if not self._version:
382-
raise FrameworkError('Version not set')
383-
raise Information('%s %s' % (self._name, self._version))
382+
raise Information('%s %s' % (self.name, self.version))
384383

385384
def _raise_option_multiple_times_in_usage(self, opt):
386385
raise FrameworkError("Option '%s' multiple times in usage" % opt)

utest/utils/test_argumentparser.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from robot.utils.argumentparser import ArgumentParser
55
from robot.utils.asserts import *
66
from robot.errors import Information, DataError, FrameworkError
7+
from robot.version import get_full_version
78

89

910
USAGE = """Example Tool -- Stuff before hyphens is considered name
@@ -235,16 +236,22 @@ def test_print_help(self):
235236
self.ap2.parse_args, ['--help'])
236237

237238
def test_name_is_got_from_first_line_of_the_usage(self):
238-
assert_equals(self.ap._name, 'Example Tool')
239-
assert_equals(self.ap2._name, 'Just Name Here')
239+
assert_equals(self.ap.name, 'Example Tool')
240+
assert_equals(self.ap2.name, 'Just Name Here')
241+
242+
def test_name_and_version_can_be_given(self):
243+
ap = ArgumentParser(USAGE, name='Kakkonen', version='2')
244+
assert_equals(ap.name, 'Kakkonen')
245+
assert_equals(ap.version, '2')
240246

241247
def test_print_version(self):
242248
assert_raises_with_msg(Information, 'Example Tool 1.0 alpha',
243249
self.ap.parse_args, ['--version'])
244250

245251
def test_print_version_when_version_not_set(self):
246-
ap = ArgumentParser(' --version')
247-
assert_raises(FrameworkError, ap.parse_args, ['--version'])
252+
ap = ArgumentParser(' --version', name='Kekkonen')
253+
msg = assert_raises(Information, ap.parse_args, ['--version'])
254+
assert_equals(unicode(msg), 'Kekkonen %s' % get_full_version())
248255

249256
def test_version_is_replaced_in_help(self):
250257
assert_raises_with_msg(Information, USAGE.replace('<VERSION>', '1.0 alpha'),

0 commit comments

Comments
 (0)