diff --git a/tests/test_commands.py b/tests/test_commands.py new file mode 100644 index 0000000000000000000000000000000000000000..55e001956ab12b2ba3af27588aa9fe52500142a1 --- /dev/null +++ b/tests/test_commands.py @@ -0,0 +1,75 @@ + +from unittest import TestCase +from cStringIO import StringIO + +from mock import patch + +from rattail import commands + + +class TestArgumentParser(TestCase): + + def test_parse_args_preserves_extra_argv(self): + parser = commands.ArgumentParser() + parser.add_argument('--some-optional-arg') + parser.add_argument('some_required_arg') + args = parser.parse_args([ + '--some-optional-arg', 'optional-value', 'required-value', + 'some', 'extra', 'args']) + self.assertEqual(args.some_required_arg, 'required-value') + self.assertEqual(args.some_optional_arg, 'optional-value') + self.assertEqual(args.argv, ['some', 'extra', 'args']) + + +class TestCommand(TestCase): + + def test_initial_subcommands_are_sane(self): + command = commands.Command() + self.assertTrue('filemon' in command.subcommands) + + def test_unicode(self): + command = commands.Command() + command.name = 'some-app' + self.assertEqual(unicode(command), u'some-app') + + def test_iter_subcommands_includes_expected_item(self): + command = commands.Command() + found = False + for subcommand in command.iter_subcommands(): + if subcommand.name == 'filemon': + found = True + break + self.assertTrue(found) + + def test_print_help(self): + command = commands.Command() + stdout = StringIO() + command.stdout = stdout + command.print_help() + output = stdout.getvalue() + stdout.close() + self.assertTrue('Usage:' in output) + self.assertTrue('Options:' in output) + + +class TestSubcommand(TestCase): + + def test_repr(self): + command = commands.Command() + subcommand = commands.Subcommand(command) + subcommand.name = 'fake-command' + self.assertEqual(repr(subcommand), "Subcommand(name='fake-command')") + + def test_add_parser_args_does_nothing(self): + command = commands.Command() + subcommand = commands.Subcommand(command) + # Not sure this is really the way to test this, but... + self.assertEqual(len(subcommand.parser._action_groups[0]._actions), 1) + subcommand.add_parser_args(subcommand.parser) + self.assertEqual(len(subcommand.parser._action_groups[0]._actions), 1) + + def test_run_not_implemented(self): + command = commands.Command() + subcommand = commands.Subcommand(command) + args = subcommand.parser.parse_args([]) + self.assertRaises(NotImplementedError, subcommand.run, args)