Annotate

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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11843
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
1 describe("parse", function()
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
2 local parse
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
3 setup(function() parse = require"util.argparse".parse; end);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
4
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
5 it("works", function()
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
6 -- basic smoke test
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
7 local opts = parse({ "--help" });
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
8 assert.same({ help = true }, opts);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
9 end);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
10
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
11 it("returns if no args", function() assert.same({}, parse({})); end);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
12
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
13 it("supports boolean flags", function()
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
14 local opts, err = parse({ "--foo"; "--no-bar" });
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
15 assert.falsy(err);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
16 assert.same({ foo = true; bar = false }, opts);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
17 end);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
18
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
19 it("consumes input until the first argument", function()
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
20 local arg = { "--foo"; "bar"; "--baz" };
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
21 local opts, err = parse(arg);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
22 assert.falsy(err);
12477
cc84682b8429 util.argparse: Revise 553c6204fe5b with a different approach
Matthew Wild <mwild1@gmail.com>
parents: 11845
diff changeset
23 assert.same({ foo = true, "bar", "--baz" }, opts);
11843
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
24 assert.same({ "bar"; "--baz" }, arg);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
25 end);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
26
13733
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
27 it("allows continuation beyond first positional argument", function()
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
28 local arg = { "--foo"; "bar"; "--baz" };
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
29 local opts, err = parse(arg, { stop_on_positional = false });
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
30 assert.falsy(err);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
31 assert.same({ foo = true, baz = true, "bar" }, opts);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
32 -- All input should have been consumed:
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
33 assert.same({ }, arg);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
34 end);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
35
11843
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
36 it("expands short options", function()
13733
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
37 do
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
38 local opts, err = parse({ "--foo"; "-b" }, { short_params = { b = "bar" } });
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
39 assert.falsy(err);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
40 assert.same({ foo = true; bar = true }, opts);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
41 end
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
42
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
43 do
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
44 -- Same test with strict mode enabled and all parameters declared
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
45 local opts, err = parse({ "--foo"; "-b" }, { kv_params = { foo = true, bar = true }; short_params = { b = "bar" }, strict = true });
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
46 assert.falsy(err);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
47 assert.same({ foo = true; bar = true }, opts);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
48 end
11843
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
49 end);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
50
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
51 it("supports value arguments", function()
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
52 local opts, err = parse({ "--foo"; "bar"; "--baz=moo" }, { value_params = { foo = true; bar = true } });
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
53 assert.falsy(err);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
54 assert.same({ foo = "bar"; baz = "moo" }, opts);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
55 end);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
56
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
57 it("demands values for value params", function()
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
58 local opts, err, where = parse({ "--foo" }, { value_params = { foo = true } });
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
59 assert.falsy(opts);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
60 assert.equal("missing-value", err);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
61 assert.equal("--foo", where);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
62 end);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63
11845
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
64 it("reports where the problem is", function()
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
65 local opts, err, where = parse({ "-h" });
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
66 assert.falsy(opts);
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
67 assert.equal("param-not-found", err);
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
68 assert.equal("-h", where, "returned where");
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
69 end);
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
70
13160
4ee9a912ceea util.argparse: Add support for repeatable parameters
Kim Alvefur <zash@zash.se>
parents: 12477
diff changeset
71 it("supports array arguments", function ()
13733
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
72 do
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
73 local opts, err = parse({ "--item"; "foo"; "--item"; "bar" }, { array_params = { item = true } });
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
74 assert.falsy(err);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
75 assert.same({"foo","bar"}, opts.item);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
76 end
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
77
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
78 do
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
79 -- Same test with strict mode enabled
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
80 local opts, err = parse({ "--item"; "foo"; "--item"; "bar" }, { array_params = { item = true }, strict = true });
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
81 assert.falsy(err);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
82 assert.same({"foo","bar"}, opts.item);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
83 end
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
84 end)
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
85
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
86 it("rejects unknown parameters in strict mode", function ()
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
87 local opts, err, err2 = parse({ "--item"; "foo"; "--item"; "bar", "--foobar" }, { array_params = { item = true }, strict = true });
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
88 assert.falsy(opts);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
89 assert.same("param-not-found", err);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
90 assert.same("--foobar", err2);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
91 end);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
92
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
93 it("accepts known kv parameters in strict mode", function ()
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
94 local opts, err = parse({ "--item=foo" }, { kv_params = { item = true }, strict = true });
13160
4ee9a912ceea util.argparse: Add support for repeatable parameters
Kim Alvefur <zash@zash.se>
parents: 12477
diff changeset
95 assert.falsy(err);
13733
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
96 assert.same("foo", opts.item);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
97 end);
11843
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
98 end);