94 lines
2.3 KiB
Lua
94 lines
2.3 KiB
Lua
|
|
local test = require 'pl.test'
|
|
local lapp = require 'pl.lapp'
|
|
|
|
local k = 1
|
|
function check (spec,args,match)
|
|
local args = lapp(spec,args)
|
|
for k,v in pairs(args) do
|
|
if type(v) == 'userdata' then args[k]:close(); args[k] = '<file>' end
|
|
end
|
|
test.asserteq(args,match)
|
|
end
|
|
|
|
-- force Lapp to throw an error, rather than just calling os.exit()
|
|
lapp.show_usage_error = 'throw'
|
|
|
|
function check_error(spec,args,msg)
|
|
arg = args
|
|
local ok,err = pcall(lapp,spec)
|
|
test.assertmatch(err,msg)
|
|
end
|
|
|
|
local parmtest = [[
|
|
Testing 'array' parameter handling
|
|
-o,--output... (string)
|
|
-v...
|
|
]]
|
|
|
|
|
|
check (parmtest,{'-o','one'},{output={'one'},v={false}})
|
|
check (parmtest,{'-o','one','-v'},{output={'one'},v={true}})
|
|
check (parmtest,{'-o','one','-vv'},{output={'one'},v={true,true}})
|
|
check (parmtest,{'-o','one','-o','two'},{output={'one','two'},v={false}})
|
|
|
|
|
|
local simple = [[
|
|
Various flags and option types
|
|
-p A simple optional flag, defaults to false
|
|
-q,--quiet A simple flag with long name
|
|
-o (string) A required option with argument
|
|
<input> (default stdin) Optional input file parameter...
|
|
]]
|
|
|
|
check(simple,
|
|
{'-o','in'},
|
|
{quiet=false,p=false,o='in',input='<file>'})
|
|
|
|
check(simple,
|
|
{'-o','help','-q','test-lapp.lua'},
|
|
{quiet=true,p=false,o='help',input='<file>',input_name='test-lapp.lua'})
|
|
|
|
local longs = [[
|
|
--open (string)
|
|
]]
|
|
|
|
check(longs,{'--open','folder'},{open='folder'})
|
|
|
|
local extras1 = [[
|
|
<files...> (string) A bunch of files
|
|
]]
|
|
|
|
check(extras1,{'one','two'},{files={'one','two'}})
|
|
|
|
-- any extra parameters go into the array part of the result
|
|
local extras2 = [[
|
|
<file> (string) A file
|
|
]]
|
|
|
|
check(extras2,{'one','two'},{file='one','two'})
|
|
|
|
local extended = [[
|
|
--foo (string default 1)
|
|
-s,--speed (slow|medium|fast default medium)
|
|
-n (1..10 default 1)
|
|
-p print
|
|
-v verbose
|
|
]]
|
|
|
|
|
|
|
|
check(extended,{},{foo='1',speed='medium',n=1,p=false,v=false})
|
|
check(extended,{'-pv'},{foo='1',speed='medium',n=1,p=true,v=true})
|
|
check(extended,{'--foo','2','-s','fast'},{foo='2',speed='fast',n=1,p=false,v=false})
|
|
check(extended,{'--foo=2','-s=fast','-n2'},{foo='2',speed='fast',n=2,p=false,v=false})
|
|
|
|
check_error(extended,{'--speed','massive'},"value 'massive' not in slow|medium|fast")
|
|
|
|
check_error(extended,{'-n','x'},"unable to convert to number: x")
|
|
|
|
check_error(extended,{'-n','12'},"n out of range")
|
|
|
|
|
|
|