From aa0d5eae6def700d2f0628d4896d29cd4dd6171f Mon Sep 17 00:00:00 2001 From: mpeterv Date: Mon, 6 Jan 2014 15:08:33 +0400 Subject: [PATCH] more tests --- spec/arguments_spec.lua | 16 ++++++++++++++- spec/options_spec.lua | 43 +++++++++++++++++++++++++++++++++++++++-- spec/utils_spec.lua | 2 +- 3 files changed, 57 insertions(+), 4 deletions(-) diff --git a/spec/arguments_spec.lua b/spec/arguments_spec.lua index 283bf11..74cef05 100644 --- a/spec/arguments_spec.lua +++ b/spec/arguments_spec.lua @@ -59,6 +59,20 @@ describe("tests related to positional arguments", function() args = parser:parse({"bar", "baz", "qu"}) assert.same(args, {foo1 = {"bar", "baz"}, foo2 = {"qu"}}) end) + + it("handles hyphen correctly", function() + local parser = largparse.parser() + parser:argument "foo" + local args = parser:parse({"-"}) + assert.same(args, {foo = "-"}) + end) + + it("handles double hyphen correctly", function() + local parser = largparse.parser() + parser:argument "foo" + local args = parser:parse({"--", "-q"}) + assert.same(args, {foo = "-q"}) + end) end) describe("passing incorrect arguments", function() @@ -161,4 +175,4 @@ describe("tests related to positional arguments", function() assert.has_error(curry(parser.parse, parser, {}), "too few arguments") end) end) -end) \ No newline at end of file +end) diff --git a/spec/options_spec.lua b/spec/options_spec.lua index d2a96ea..43c6996 100644 --- a/spec/options_spec.lua +++ b/spec/options_spec.lua @@ -28,6 +28,24 @@ describe("tests related to options", function() assert.same(args, {server = "foo"}) end) + it("handles GNU-style long options even when it could take more arguments", function() + local parser = largparse.parser() + parser:option("-s", "--server", { + args = "*" + }) + local args = parser:parse({"--server=foo"}) + assert.same(args, {server = {"foo"}}) + end) + + it("handles GNU-style long options for multi-argument options", function() + local parser = largparse.parser() + parser:option("-s", "--server", { + args = "1-2" + }) + local args = parser:parse({"--server=foo", "bar"}) + assert.same(args, {server = {"foo", "bar"}}) + end) + it("handles short option correclty", function() local parser = largparse.parser() parser:option("-s", "--server") @@ -151,6 +169,15 @@ describe("tests related to options", function() assert.same(args, {quiet = 3}) end) + it("overwrites old invocations", function() + local parser = largparse.parser() + parser:option("-u", "--user", { + count = "0-2" + }) + local args = parser:parse({"-uAlice", "--user=Bob", "--user", "John"}) + assert.same(args, {user = {"Bob", "John"}}) + end) + it("handles not used multi-count flag correctly", function() local parser = largparse.parser() parser:flag("-q", "--quiet", { @@ -184,7 +211,19 @@ describe("tests related to options", function() assert.has_error(curry(parser.parse, parser, {"-sfoo", "bar"}), "too many arguments") end) - -- TODO: add more + it("doesn't accept GNU-like long options when it doesn't need arguments", function() + local parser = largparse.parser() + parser:flag("-q", "--quiet") + assert.has_error(curry(parser.parse, parser, {"--quiet=very_quiet"}), "option --quiet doesn't take arguments") + end) + it("handles too many invocations correctly", function() + local parser = largparse.parser() + parser:flag("-q", "--quiet", { + count = 1, + no_overwrite = true + }) + assert.has_error(curry(parser.parse, parser, {"-qq"}), "option -q must be used at most 1 times") + end) end) -end) \ No newline at end of file +end) diff --git a/spec/utils_spec.lua b/spec/utils_spec.lua index acfadb9..f3d1351 100644 --- a/spec/utils_spec.lua +++ b/spec/utils_spec.lua @@ -36,4 +36,4 @@ describe("tests related to utils.parse_boundaries", function() assert.equal(min, 42) assert.equal(max, 96) end) -end) \ No newline at end of file +end)