aboutsummaryrefslogtreecommitdiffstats
path: root/spec/util_argparse_spec.lua
diff options
context:
space:
mode:
authorMatthew Wild <mwild1@gmail.com>2025-02-17 19:22:54 +0000
committerMatthew Wild <mwild1@gmail.com>2025-02-17 19:22:54 +0000
commit7b6ff43ec47a18ba80ae55144994c5f6f24a928a (patch)
tree21d89930cf42e52f64ea433968cecaaf707e6583 /spec/util_argparse_spec.lua
parent12790afdf0d6ae609418b4d3457af0791ed8b03a (diff)
parent764c388d3864fefd78692ba6f22a44b0b93d7262 (diff)
downloadprosody-7b6ff43ec47a18ba80ae55144994c5f6f24a928a.tar.gz
prosody-7b6ff43ec47a18ba80ae55144994c5f6f24a928a.zip
Merge 13.0->trunk
Diffstat (limited to 'spec/util_argparse_spec.lua')
-rw-r--r--spec/util_argparse_spec.lua52
1 files changed, 46 insertions, 6 deletions
diff --git a/spec/util_argparse_spec.lua b/spec/util_argparse_spec.lua
index 40f647c9..be1d99df 100644
--- a/spec/util_argparse_spec.lua
+++ b/spec/util_argparse_spec.lua
@@ -24,10 +24,28 @@ describe("parse", function()
assert.same({ "bar"; "--baz" }, arg);
end);
- it("expands short options", function()
- local opts, err = parse({ "--foo"; "-b" }, { short_params = { b = "bar" } });
+ it("allows continuation beyond first positional argument", function()
+ local arg = { "--foo"; "bar"; "--baz" };
+ local opts, err = parse(arg, { stop_on_positional = false });
assert.falsy(err);
- assert.same({ foo = true; bar = true }, opts);
+ assert.same({ foo = true, baz = true, "bar" }, opts);
+ -- All input should have been consumed:
+ assert.same({ }, arg);
+ end);
+
+ it("expands short options", function()
+ do
+ local opts, err = parse({ "--foo"; "-b" }, { short_params = { b = "bar" } });
+ assert.falsy(err);
+ assert.same({ foo = true; bar = true }, opts);
+ end
+
+ do
+ -- Same test with strict mode enabled and all parameters declared
+ local opts, err = parse({ "--foo"; "-b" }, { kv_params = { foo = true, bar = true }; short_params = { b = "bar" }, strict = true });
+ assert.falsy(err);
+ assert.same({ foo = true; bar = true }, opts);
+ end
end);
it("supports value arguments", function()
@@ -51,8 +69,30 @@ describe("parse", function()
end);
it("supports array arguments", function ()
- local opts, err = parse({ "--item"; "foo"; "--item"; "bar" }, { array_params = { item = true } });
- assert.falsy(err);
- assert.same({"foo","bar"}, opts.item);
+ do
+ local opts, err = parse({ "--item"; "foo"; "--item"; "bar" }, { array_params = { item = true } });
+ assert.falsy(err);
+ assert.same({"foo","bar"}, opts.item);
+ end
+
+ do
+ -- Same test with strict mode enabled
+ local opts, err = parse({ "--item"; "foo"; "--item"; "bar" }, { array_params = { item = true }, strict = true });
+ assert.falsy(err);
+ assert.same({"foo","bar"}, opts.item);
+ end
end)
+
+ it("rejects unknown parameters in strict mode", function ()
+ local opts, err, err2 = parse({ "--item"; "foo"; "--item"; "bar", "--foobar" }, { array_params = { item = true }, strict = true });
+ assert.falsy(opts);
+ assert.same("param-not-found", err);
+ assert.same("--foobar", err2);
+ end);
+
+ it("accepts known kv parameters in strict mode", function ()
+ local opts, err = parse({ "--item=foo" }, { kv_params = { item = true }, strict = true });
+ assert.falsy(err);
+ assert.same("foo", opts.item);
+ end);
end);