Skip to content

Commit

Permalink
Test the string representations of clize.errors.
Browse files Browse the repository at this point in the history
  • Loading branch information
epsy committed Mar 9, 2015
1 parent 77f6038 commit 0e8ac41
Show file tree
Hide file tree
Showing 2 changed files with 54 additions and 37 deletions.
33 changes: 12 additions & 21 deletions clize/tests/test_parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -42,11 +42,16 @@ def annotated_sigtests(self, sig_info, in_args, args, kwargs):

@util.testfunc
def annotated_sigerror_tests(self, sig_info, in_args,
exc=errors.BadArgumentFormat):
exc=errors.BadArgumentFormat, message=None):
sig_str, annotation, str_rep = sig_info
sig = support.s(sig_str, locals={'a': annotation})
csig = parser.CliSignature.from_signature(sig)
self.assertRaises(exc, util.read_arguments, csig, in_args)
if message is not None:
try:
util.read_arguments(csig, in_args)
except exc as e:
self.assertEqual('Error: ' + message, str(e))


@check_repr
Expand Down Expand Up @@ -365,32 +370,18 @@ class MultiErrorTests(object):

max_passed_1 = (
RepTests.multi_max, ('--par=1', '--par=2', '--par=3'),
errors.TooManyValues)
errors.TooManyValues, 'Received too many values for --par')
max_passed_2 = (
RepTests.multi_max, ('--par=1', '--par=2', '--par=3', '--par=4'),
errors.TooManyValues)

def test_message(self):
sig_str, annotation, str_rep = RepTests.multi_bound
sig = support.s(sig_str, locals={'a': annotation})
csig = parser.CliSignature.from_signature(sig)

try:
util.read_arguments(csig, ('--par=1',))
except errors.NotEnoughValues as e:
self.assertEqual(e.message, "Received too few values for --par")

try:
util.read_arguments(csig,
('--par=1', '--par=2', '--par=3', '--par=4'))
except errors.TooManyValues as e:
self.assertEqual(e.message, "Received too many values for --par")
errors.TooManyValues, 'Received too many values for --par')

a_req_not_met = RepTests.margs_req, (), errors.MissingRequiredArguments
a_min_not_met_1 = (
RepTests.margs_min, ('one',), errors.NotEnoughValues)
RepTests.margs_min, ('one',), errors.NotEnoughValues,
'Received too few values for args')
a_min_not_met_2 = (
RepTests.margs_min, ('one',), errors.NotEnoughValues)
RepTests.margs_min, ('one',), errors.NotEnoughValues,
'Received too few values for args')

a_max_passed_1 = RepTests.margs_max, ('1', '2', '3'), errors.TooManyValues
a_max_passed_2 = (
Expand Down
58 changes: 42 additions & 16 deletions clize/tests/test_parser.py
Original file line number Diff line number Diff line change
Expand Up @@ -375,14 +375,21 @@ class ExtraParamsTests(object):

def test_alt_middle(self):
_func = support.f('')
self.assertRaises(
errors.ArgsBeforeAlternateCommand,
self._test_func,
args = [
'*a', [
parser.AlternateCommandParameter(
func=_func, aliases=['--alt'])],
('a', '--alt', 'a', 'b'), ['a', 'b'], {}, _func
)
]
self.assertRaises(
errors.ArgsBeforeAlternateCommand,
self._test_func, *args)
try:
self._test_func(*args)
except errors.ArgsBeforeAlternateCommand as e:
self.assertEqual(
'Error: Arguments found before alternate '
'action parameter --alt', str(e))

def test_param_extras(self):
extra_params = [
Expand All @@ -398,27 +405,46 @@ def test_param_extras(self):


@testfunc
def sigerrortests(self, sig_str, args, exc_typ):
def sigerrortests(self, sig_str, args, exc_typ, message):
sig = support.s(sig_str)
csig = parser.CliSignature.from_signature(sig)
self.assertRaises(exc_typ, read_arguments, csig, args)
try:
read_arguments(csig, args)
except exc_typ as e:
self.assertEqual('Error: ' + message, str(e))


@sigerrortests
class SigErrorTests(object):
not_enough_pos = 'one, two', ['1'], errors.MissingRequiredArguments
too_many_pos = 'one', ['1', '2'], errors.TooManyArguments

missing_kw = '*, one', [], errors.MissingRequiredArguments
not_enough_pos = (
'one, two', ['1'], errors.MissingRequiredArguments,
'Missing required arguments: two')
too_many_pos = (
'one', ['1', '2'], errors.TooManyArguments,
'Received extra arguments: 2')

missing_kw = (
'*, one', [], errors.MissingRequiredArguments,
'Missing required arguments: --one')
duplicate_opt = (
'*, one', ['--one', '1', '--one=1'], errors.DuplicateNamedArgument)
'*, one', ['--one', '1', '--one=1'], errors.DuplicateNamedArgument,
'--one was specified more than once')
duplicate_intopt = (
'*, one=1', ['--one', '1', '--one=1'], errors.DuplicateNamedArgument)
unknown_kw = '', ['--one'], errors.UnknownOption
unknown_kw_after_short_flag = '*, o=False', ['-oa'], errors.UnknownOption
missing_value = '*, one', ['--one'], errors.MissingValue

bad_format = 'one=1', ['a'], errors.BadArgumentFormat
'*, one=1', ['--one', '1', '--one=1'], errors.DuplicateNamedArgument,
'--one was specified more than once')
unknown_kw = (
'', ['--one'], errors.UnknownOption,
'Unknown option \'--one\'')
unknown_kw_after_short_flag = (
'*, o=False', ['-oa'], errors.UnknownOption,
'Unknown option \'-a\'')
missing_value = (
'*, one', ['--one'], errors.MissingValue,
'No value found after --one')

bad_format = (
'one=1', ['a'], errors.BadArgumentFormat, 'Bad value for one: \'a\'')

def test_not_enough_pos_collect(self):
@modifiers.annotate(args=parser.Parameter.REQUIRED)
Expand Down

0 comments on commit 0e8ac41

Please sign in to comment.