| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260 |
- # testing special comment on first line
- -- most (all?) tests here assume a reasonable "Unix-like" shell
- if _port then return end
- print ("testing lua.c options")
- assert(os.execute()) -- machine has a system command
- 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
- -- test environment variables used by Lua
- 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")
- -- test option '-E'
- 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") -- remove tab
- assert(not string.find(defaultpath, "xxx") and string.find(defaultpath, "lua"))
- -- test replacement of ';;' to default path
- 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) -- cut final end of line
- assert(string.gsub(p, ";;", ";"..defaultpath..";") == expected)
- end
- convert(";")
- convert(";;")
- convert(";;;")
- convert(";;;;")
- convert(";;;;;")
- convert(";;a;;;bc")
- -- test 2 files
- 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("")
- -- test many arguments
- 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))
- -- test for error objects
- 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) -- no message
- 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')
- -- close Lua with an open file
- prepfile(string.format([[io.output(%q); io.write('alo')]], out))
- RUN("lua %s", prog)
- checkout('alo')
- -- bug in 5.2 beta (extra \0 after version line)
- RUN([[lua -v -e'print"hello"' > %s]], out)
- t = getoutput()
- assert(string.find(t, "PUC%-Rio\nhello"))
- -- testing os.exit
- 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) -- no message
- prepfile("os.exit(false, true)")
- NoRun("lua %s", prog) -- no message
- 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")
|