aboutsummaryrefslogtreecommitdiff
path: root/tests
diff options
context:
space:
mode:
Diffstat (limited to 'tests')
-rw-r--r--tests/test_command.py73
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__':