aboutsummaryrefslogtreecommitdiffstats
path: root/spec/util_argparse_spec.lua
diff options
context:
space:
mode:
Diffstat (limited to 'spec/util_argparse_spec.lua')
-rw-r--r--spec/util_argparse_spec.lua53
1 files changed, 53 insertions, 0 deletions
diff --git a/spec/util_argparse_spec.lua b/spec/util_argparse_spec.lua
new file mode 100644
index 00000000..3994a041
--- /dev/null
+++ b/spec/util_argparse_spec.lua
@@ -0,0 +1,53 @@
+describe("parse", function()
+ local parse
+ setup(function() parse = require"util.argparse".parse; end);
+
+ it("works", function()
+ -- basic smoke test
+ local opts = parse({ "--help" });
+ assert.same({ help = true }, opts);
+ end);
+
+ it("returns if no args", function() assert.same({}, parse({})); end);
+
+ it("supports boolean flags", function()
+ local opts, err = parse({ "--foo"; "--no-bar" });
+ assert.falsy(err);
+ assert.same({ foo = true; bar = false }, opts);
+ end);
+
+ it("consumes input until the first argument", function()
+ local arg = { "--foo"; "bar"; "--baz" };
+ local opts, err = parse(arg);
+ assert.falsy(err);
+ assert.same({ foo = true }, opts);
+ assert.same({ "bar"; "--baz" }, arg);
+ end);
+
+ it("expands short options", function()
+ local opts, err = parse({ "--foo"; "-b" }, { short_params = { b = "bar" } });
+ assert.falsy(err);
+ assert.same({ foo = true; bar = true }, opts);
+ end);
+
+ it("supports value arguments", function()
+ local opts, err = parse({ "--foo"; "bar"; "--baz=moo" }, { value_params = { foo = true; bar = true } });
+ assert.falsy(err);
+ assert.same({ foo = "bar"; baz = "moo" }, opts);
+ end);
+
+ it("demands values for value params", function()
+ local opts, err, where = parse({ "--foo" }, { value_params = { foo = true } });
+ assert.falsy(opts);
+ assert.equal("missing-value", err);
+ assert.equal("--foo", where);
+ end);
+
+ it("reports where the problem is", function()
+ local opts, err, where = parse({ "-h" });
+ assert.falsy(opts);
+ assert.equal("param-not-found", err);
+ assert.equal("-h", where, "returned where");
+ end);
+
+end);