40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
# tests/test_descriptor.py
|
|
import unittest
|
|
from engine.descriptor import Meta, Arg, Flag, Opt, Rest, build_parser
|
|
|
|
class TestDescriptor(unittest.TestCase):
|
|
def test_required_positional(self):
|
|
m = Meta("s", args=[Arg("src", "source")])
|
|
ns = build_parser(m, "apex x").parse_args(["a"])
|
|
self.assertEqual(ns.src, "a")
|
|
|
|
def test_optional_positional_defaults_none(self):
|
|
m = Meta("s", args=[Arg("src", "s"), Arg("bot", "b", required=False)])
|
|
ns = build_parser(m, "apex x").parse_args(["a"])
|
|
self.assertEqual(ns.src, "a")
|
|
self.assertIsNone(ns.bot)
|
|
|
|
def test_flag(self):
|
|
m = Meta("s", args=[Flag("--dry-run", "d")])
|
|
self.assertFalse(build_parser(m, "x").parse_args([]).dry_run)
|
|
self.assertTrue(build_parser(m, "x").parse_args(["--dry-run"]).dry_run)
|
|
|
|
def test_opt_with_default(self):
|
|
m = Meta("s", args=[Opt("--tier", "t", default="/d")])
|
|
self.assertEqual(build_parser(m, "x").parse_args([]).tier, "/d")
|
|
|
|
def test_rest_collects_remainder(self):
|
|
m = Meta("s", args=[Arg("action", "a"), Rest("extra", "e")])
|
|
ns = build_parser(m, "x").parse_args(["up", "--force-recreate", "-x"])
|
|
self.assertEqual(ns.action, "up")
|
|
self.assertEqual(ns.extra, ["--force-recreate", "-x"])
|
|
|
|
def test_usage_error_exits_64(self):
|
|
m = Meta("s", args=[Arg("src", "s")])
|
|
with self.assertRaises(SystemExit) as cm:
|
|
build_parser(m, "x").parse_args([]) # missing required
|
|
self.assertEqual(cm.exception.code, 64)
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|