Software /
code /
prosody
File
spec/util_argparse_spec.lua @ 13744:34ac05f6bd10 13.0
core.configmanager: Fix reporting delayed warnings from global section
A Credential in the global section would be stored at
delayed_warnings["*/secret"], but get("example.com","secret") would look
for delayed_warnings["example.com/secret"]
Storing the warnings in the config itself has the unfortunate
side-effect that the config now contains util.error objects, which may
be awkward if something bypasses get(). Should rawget() also do this
filtering? getconfig() too?
Currently this only affects prosodyctl, so maybe it won't be much of a
problem.
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 22 Feb 2025 00:08:18 +0100 |
parent | 13733:48c056c10e5a |
line wrap: on
line source
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, "bar", "--baz" }, opts); assert.same({ "bar"; "--baz" }, arg); end); 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, 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() 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); it("supports array arguments", function () 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);