Annotate

spec/util_argparse_spec.lua @ 13854:0b01f40df0f9 13.0

mod_http_file_share: Add media-src 'self' to Content-Security-Policy header This allows certain media files to be loaded when navigated to directly in a web browser. Note that in some browsers (Chrome), the media gets transformed internally into a HTML page with some basic styles, but these are blocked due to our default-src policy of 'none' Although this could be unblocked with style-src unsafe-inline, it is not our plan to fix this, because this would have negative security implications. The reason for our CSP is to prevent the file share service from being used to host malicious HTML/CSS/JS. Yes, CSS can be malicious. Our file share service is for uploading and downloading files, it is not a substitute for website/content hosting.
author Matthew Wild <mwild1@gmail.com>
date Fri, 18 Apr 2025 12:25:06 +0100
parent 13762:81856814d74f
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
13762
81856814d74f util.argparse: Fix bug (regression?) in argument parsing with --foo=bar
Matthew Wild <mwild1@gmail.com>
parents: 13733
diff changeset
57 it("supports value arguments in strict mode", function()
81856814d74f util.argparse: Fix bug (regression?) in argument parsing with --foo=bar
Matthew Wild <mwild1@gmail.com>
parents: 13733
diff changeset
58 local opts, err = parse({ "--foo"; "bar"; "--baz=moo" }, { strict = true, value_params = { foo = true; baz = true } });
81856814d74f util.argparse: Fix bug (regression?) in argument parsing with --foo=bar
Matthew Wild <mwild1@gmail.com>
parents: 13733
diff changeset
59 assert.falsy(err);
81856814d74f util.argparse: Fix bug (regression?) in argument parsing with --foo=bar
Matthew Wild <mwild1@gmail.com>
parents: 13733
diff changeset
60 assert.same({ foo = "bar"; baz = "moo" }, opts);
81856814d74f util.argparse: Fix bug (regression?) in argument parsing with --foo=bar
Matthew Wild <mwild1@gmail.com>
parents: 13733
diff changeset
61 end);
81856814d74f util.argparse: Fix bug (regression?) in argument parsing with --foo=bar
Matthew Wild <mwild1@gmail.com>
parents: 13733
diff changeset
62
11843
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
63 it("demands values for value params", function()
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
64 local opts, err, where = parse({ "--foo" }, { value_params = { foo = true } });
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
65 assert.falsy(opts);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
66 assert.equal("missing-value", err);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
67 assert.equal("--foo", where);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
68 end);
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
69
11845
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
70 it("reports where the problem is", function()
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
71 local opts, err, where = parse({ "-h" });
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
72 assert.falsy(opts);
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
73 assert.equal("param-not-found", err);
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
74 assert.equal("-h", where, "returned where");
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
75 end);
97c1399720c2 util.argparse: Add test for #1691
Kim Alvefur <zash@zash.se>
parents: 11843
diff changeset
76
13160
4ee9a912ceea util.argparse: Add support for repeatable parameters
Kim Alvefur <zash@zash.se>
parents: 12477
diff changeset
77 it("supports array arguments", function ()
13733
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 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
80 assert.falsy(err);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
81 assert.same({"foo","bar"}, opts.item);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
82 end
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
83
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
84 do
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
85 -- Same test with strict mode enabled
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
86 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
87 assert.falsy(err);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
88 assert.same({"foo","bar"}, opts.item);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
89 end
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
90 end)
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
91
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
92 it("rejects unknown parameters in strict mode", function ()
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
93 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
94 assert.falsy(opts);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
95 assert.same("param-not-found", err);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
96 assert.same("--foobar", err2);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
97 end);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
98
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
99 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
100 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
101 assert.falsy(err);
13733
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
102 assert.same("foo", opts.item);
48c056c10e5a util.argparse: Add strict mode + tests
Matthew Wild <mwild1@gmail.com>
parents: 13160
diff changeset
103 end);
11843
d2a939e21671 util.argparse: Tests
Kim Alvefur <zash@zash.se>
parents:
diff changeset
104 end);