diff options
author | Elena ``of Valhalla'' Grandi <valhalla@trueelena.org> | 2022-02-22 17:03:55 +0100 |
---|---|---|
committer | Elena ``of Valhalla'' Grandi <valhalla@trueelena.org> | 2022-02-22 17:03:55 +0100 |
commit | 3195e3e213084f086dec5d81447e0db16d622337 (patch) | |
tree | 7ba1f2bd5dc0206a30084d16fe998fdede701b1e /tests/test_command.py | |
parent | 0582101ca0e07f5f9b62e2cc0be405f8e4bc2d7c (diff) |
Main Command
Diffstat (limited to 'tests/test_command.py')
-rw-r--r-- | tests/test_command.py | 73 |
1 files changed, 71 insertions, 2 deletions
diff --git a/tests/test_command.py b/tests/test_command.py index f5b824c..eed6e1f 100644 --- a/tests/test_command.py +++ b/tests/test_command.py @@ -1,10 +1,79 @@ +import contextlib +import io +import sys import unittest -from hazwaz import command +import hazwaz + + +class MyCommand(hazwaz.MainCommand): + """ + A command that does things. + + This is a command, but honestly it doesn't really do anything. + """ + commands = () + + def add_arguments(self, parser): + super().add_arguments(parser) + parser.add_argument( + "--foo", + help="foobar things" + ) class testCommand(unittest.TestCase): - pass + def _run_with_argv(self, cmd, argv): + stream = { + 'stdout': io.StringIO(), + 'stderr': io.StringIO(), + } + old_argv = sys.argv + sys.argv = argv + with contextlib.redirect_stdout(stream['stdout']): + with contextlib.redirect_stderr(stream['stderr']): + cmd.main() + sys.argv = old_argv + return stream + + def test_description(self): + cmd = MyCommand() + self.assertEqual( + cmd.parser.description, + "A command that does things." + ) + self.assertEqual( + cmd.parser.epilog, + "This is a command, but honestly it doesn't really do anything." + ) + + def test_description_none(self): + class NoHelpCommand(hazwaz.MainCommand): + pass + + cmd = NoHelpCommand() + self.assertEqual(cmd.parser.description, None) + + def test_description_empty(self): + class NoHelpCommand(hazwaz.MainCommand): + """ + """ + + cmd = NoHelpCommand() + self.assertEqual(cmd.parser.description, '') + + def test_arguments(self): + cmd = MyCommand() + cmd_help = cmd.parser.format_help() + self.assertIn("--verbose", cmd_help) + self.assertIn("--foo", cmd_help) + + def test_run(self): + cmd = MyCommand() + cmd_help = cmd.parser.format_help() + stream = self._run_with_argv(cmd, ["mycommand"]) + self.assertEqual(stream["stdout"].getvalue(), cmd_help) + if __name__ == '__main__': |