-------------------------------------------------------------------------------- -- Lua 5.2 compat if not setfenv then -- Lua 5.2 -- based on http://lua-users.org/lists/lua-l/2010-06/msg00314.html -- this assumes f is a function local function findenv(f) local level = 1 repeat local name, value = debug.getupvalue(f, level) if name == '_ENV' then return level, value end level = level + 1 until name == nil return nil end getfenv = function (f) return(select(2, findenv(f)) or _G) end setfenv = function (f, t) local level = findenv(f) if level then debug.setupvalue(f, level, t) end return f end end -------------------------------------------------------------------------------- local SUITE = require('TestSuite').new('resilience') SUITE:setEnviroment{ setfenv = setfenv } -------------------------------------------------------------------------------- SUITE:addTest('no_std_lib', function () -- This tests whether one could load the library with an empty env, without -- an error. local chunk = loadfile('./library.lua') setfenv(chunk, {}) local library = chunk() for func, func_info in pairs(library) do error(('For some reason %s is defined in the library'):format(func_info.name)) end end) SUITE:addTest('a_very_small_part_of_math', function () -- This tests whether one could load the library with an empty env, without -- an error. local chunk = loadfile('./library.lua') setfenv(chunk, { math = { abs = math.abs } }) local library = chunk() assert( library[math.abs], 'Why is math.abs not defined in the library?' ) end) -------------------------------------------------------------------------------- return SUITE