mirror of
https://github.com/TangentFoxy/argparse.git
synced 2025-10-02 15:12:30 +00:00
fixed crash on unknown long option
This commit is contained in:
@@ -181,6 +181,14 @@ describe("tests related to options", function()
|
|||||||
assert.has_error(function() parser:parse{"--server"} end, "too few arguments")
|
assert.has_error(function() parser:parse{"--server"} end, "too few arguments")
|
||||||
end)
|
end)
|
||||||
|
|
||||||
|
it("handles unknown options correctly", function()
|
||||||
|
local parser = argparse.parser()
|
||||||
|
assert.has_error(function() parser:parse{"--server"} end, "unknown option --server")
|
||||||
|
assert.has_error(function() parser:parse{"--server=localhost"} end, "unknown option --server")
|
||||||
|
assert.has_error(function() parser:parse{"-s"} end, "unknown option -s")
|
||||||
|
assert.has_error(function() parser:parse{"-slocalhost"} end, "unknown option -s")
|
||||||
|
end)
|
||||||
|
|
||||||
it("handles too many arguments correctly", function()
|
it("handles too many arguments correctly", function()
|
||||||
local parser = argparse.parser()
|
local parser = argparse.parser()
|
||||||
parser:option("-s", "--server")
|
parser:option("-s", "--server")
|
||||||
|
@@ -320,7 +320,7 @@ function Parser:parse(args)
|
|||||||
|
|
||||||
if not com then
|
if not com then
|
||||||
if #commands > 0 then
|
if #commands > 0 then
|
||||||
parser:error("wrong command") -- add lev-based guessing here
|
parser:error("unknown command %s", data) -- add lev-based guessing here
|
||||||
else
|
else
|
||||||
parser:error("too many arguments")
|
parser:error("too many arguments")
|
||||||
end
|
end
|
||||||
@@ -356,7 +356,7 @@ function Parser:parse(args)
|
|||||||
|
|
||||||
for i = 2, #data do
|
for i = 2, #data do
|
||||||
name = first .. data:sub(i, i)
|
name = first .. data:sub(i, i)
|
||||||
option = parser:assert(opt_context[name], "unknown option " .. name)
|
option = parser:assert(opt_context[name], "unknown option %s", name)
|
||||||
handle_option(name)
|
handle_option(name)
|
||||||
|
|
||||||
if i ~= #data and option.minargs > 0 then
|
if i ~= #data and option.minargs > 0 then
|
||||||
@@ -374,12 +374,13 @@ function Parser:parse(args)
|
|||||||
local equal = data:find "="
|
local equal = data:find "="
|
||||||
if equal then
|
if equal then
|
||||||
name = data:sub(1, equal-1)
|
name = data:sub(1, equal-1)
|
||||||
option = parser:assert(opt_context[name], "unknown option " .. name)
|
option = parser:assert(opt_context[name], "unknown option %s", name)
|
||||||
parser:assert(option.maxargs > 0, "option " .. name .. " doesn't take arguments")
|
parser:assert(option.maxargs > 0, "option %s doesn't take arguments", name)
|
||||||
|
|
||||||
handle_option(data:sub(1, equal-1))
|
handle_option(data:sub(1, equal-1))
|
||||||
handle_argument(data:sub(equal+1))
|
handle_argument(data:sub(equal+1))
|
||||||
else
|
else
|
||||||
|
parser:assert(opt_context[data], "unknown option %s", data)
|
||||||
handle_option(data)
|
handle_option(data)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
Reference in New Issue
Block a user