import contextlib import io import sys import unittest 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): 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__': unittest.main()