# testing special comment on first line
if _port then return end
print ("testing lua.c options")
assert(os.execute())
prog = os.tmpname()
otherprog = os.tmpname()
out = os.tmpname()
do
local i = 0
while arg[i] do i=i-1 end
progname = arg[i+1]
end
print("progname: "..progname)
local prepfile = function (s, p)
p = p or prog
io.output(p)
io.write(s)
assert(io.close())
end
function getoutput ()
io.input(out)
local t = io.read("*a")
io.input():close()
assert(os.remove(out))
return t
end
function checkprogout (s)
local t = getoutput()
for line in string.gmatch(s, ".-\n") do
assert(string.find(t, line, 1, true))
end
end
function checkout (s)
local t = getoutput()
if s ~= t then print(string.format("'%s' - '%s'\n", s, t)) end
assert(s == t)
return t
end
function auxrun (...)
local s = string.format(...)
s = string.gsub(s, "lua", '"'..progname..'"', 1)
return os.execute(s)
end
function RUN (...)
assert(auxrun(...))
end
function NoRun (...)
assert(not auxrun(...))
end
function NoRunMsg (...)
print("\n(the next error is expected by the test)")
return NoRun(...)
end
prepfile("print(package.path)")
RUN("env LUA_INIT= LUA_PATH=x lua %s > %s", prog, out)
checkout("x\n")
RUN("env LUA_INIT= LUA_PATH_5_2=y LUA_PATH=x lua %s > %s", prog, out)
checkout("y\n")
prepfile("print(package.cpath)")
RUN("env LUA_INIT= LUA_CPATH=xuxu lua %s > %s", prog, out)
checkout("xuxu\n")
RUN("env LUA_INIT= LUA_CPATH_5_2=yacc LUA_CPATH=x lua %s > %s", prog, out)
checkout("yacc\n")
prepfile("print(X)")
RUN('env LUA_INIT="X=3" lua %s > %s', prog, out)
checkout("3\n")
prepfile("print(X)")
RUN('env LUA_INIT_5_2="X=10" LUA_INIT="X=3" lua %s > %s', prog, out)
checkout("10\n")
prepfile("print(package.path, package.cpath)")
RUN('env LUA_INIT="error(10)" LUA_PATH=xxx LUA_CPATH=xxx lua -E %s > %s',
prog, out)
local defaultpath = getoutput()
defaultpath = string.match(defaultpath, "^(.-)\t") assert(not string.find(defaultpath, "xxx") and string.find(defaultpath, "lua"))
local function convert (p)
prepfile("print(package.path)")
RUN('env LUA_PATH="%s" lua %s > %s', p, prog, out)
local expected = getoutput()
expected = string.sub(expected, 1, -2) assert(string.gsub(p, ";;", ";"..defaultpath..";") == expected)
end
convert(";")
convert(";;")
convert(";;;")
convert(";;;;")
convert(";;;;;")
convert(";;a;;;bc")
prepfile("print(1); a=2; return {x=15}")
prepfile(("print(a); print(_G['%s'].x)"):format(prog), otherprog)
RUN('env LUA_PATH="?;;" lua -l %s -l%s -lstring -l io %s > %s', prog, otherprog, otherprog, out)
checkout("1\n2\n15\n2\n15\n")
local a = [[
assert(#arg == 3 and arg[1] == 'a' and
arg[2] == 'b' and arg[3] == 'c')
assert(arg[-1] == '--' and arg[-2] == "-e " and arg[-3] == '%s')
assert(arg[4] == nil and arg[-4] == nil)
local a, b, c = ...
assert(... == 'a' and a == 'a' and b == 'b' and c == 'c')
]]
a = string.format(a, progname)
prepfile(a)
RUN('lua "-e " -- %s a b c', prog)
prepfile"assert(arg==nil)"
prepfile("assert(arg)", otherprog)
RUN('env LUA_PATH="?;;" lua -l%s - < %s', prog, otherprog)
prepfile""
RUN("lua - < %s > %s", prog, out)
checkout("")
prepfile[[print(({...})[30])]]
RUN("lua %s %s > %s", prog, string.rep(" a", 30), out)
checkout("a\n")
RUN([[lua "-eprint(1)" -ea=3 -e "print(a)" > %s]], out)
checkout("1\n3\n")
prepfile[[
print(
1, a
)
]]
RUN("lua - < %s > %s", prog, out)
checkout("1\tnil\n")
prepfile[[
= (6*2-6) -- ===
a
= 10
print(a)
= a]]
RUN([[lua -e"_PROMPT='' _PROMPT2=''" -i < %s > %s]], prog, out)
checkprogout("6\n10\n10\n\n")
prepfile("a = [[b\nc\nd\ne]]\n=a")
print("temporary program file: "..prog)
RUN([[lua -e"_PROMPT='' _PROMPT2=''" -i < %s > %s]], prog, out)
checkprogout("b\nc\nd\ne\n\n")
prompt = "alo"
prepfile[[ --
a = 2
]]
RUN([[lua "-e_PROMPT='%s'" -i < %s > %s]], prompt, prog, out)
local t = getoutput()
assert(string.find(t, prompt .. ".*" .. prompt .. ".*" .. prompt))
prepfile[[
debug = require "debug"
m = {x=0}
setmetatable(m, {__tostring = function(x)
return debug.getinfo(4).currentline + x.x
end})
error(m)
]]
NoRun([[lua %s 2> %s]], prog, out) checkout(progname..": 6\n")
s = [=[ --
function f ( x )
local a = [[
xuxu
]]
local b = "\
xuxu\n"
if x == 11 then return 1 , 2 end --[[ test multiple returns ]]
return x + 1
--\\
end
=( f( 10 ) )
assert( a == b )
=f( 11 ) ]=]
s = string.gsub(s, ' ', '\n\n')
prepfile(s)
RUN([[lua -e"_PROMPT='' _PROMPT2=''" -i < %s > %s]], prog, out)
checkprogout("11\n1\t2\n\n")
prepfile[[#comment in 1st line without \n at the end]]
RUN("lua %s", prog)
prepfile[[#test line number when file starts with comment line
debug = require"debug"
print(debug.getinfo(1).currentline)
]]
RUN("lua %s > %s", prog, out)
checkprogout('3')
prepfile(string.format([[io.output(%q); io.write('alo')]], out))
RUN("lua %s", prog)
checkout('alo')
RUN([[lua -v -e'print"hello"' > %s]], out)
t = getoutput()
assert(string.find(t, "PUC%-Rio\nhello"))
prepfile("os.exit(nil, true)")
RUN("lua %s", prog)
prepfile("os.exit(0, true)")
RUN("lua %s", prog)
prepfile("os.exit(true, true)")
RUN("lua %s", prog)
prepfile("os.exit(1, true)")
NoRun("lua %s", prog) prepfile("os.exit(false, true)")
NoRun("lua %s", prog)
assert(os.remove(prog))
assert(os.remove(otherprog))
assert(not os.remove(out))
RUN("lua -v")
NoRunMsg("lua -h")
NoRunMsg("lua -e")
NoRunMsg("lua -e a")
NoRunMsg("lua -f")
print("OK")