From 3195e3e213084f086dec5d81447e0db16d622337 Mon Sep 17 00:00:00 2001 From: Elena ``of Valhalla'' Grandi Date: Tue, 22 Feb 2022 17:03:55 +0100 Subject: Main Command --- tests/test_command.py | 73 +++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 71 insertions(+), 2 deletions(-) (limited to 'tests') 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__': -- cgit v1.2.3