Diff

spec/util_argparse_spec.lua @ 11843:d2a939e21671

util.argparse: Tests
author Kim Alvefur <zash@zash.se>
date Tue, 12 Oct 2021 14:48:21 +0200
child 11845:97c1399720c2
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/spec/util_argparse_spec.lua	Tue Oct 12 14:48:21 2021 +0200
@@ -0,0 +1,46 @@
+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);
+
+end);