Jon Michael Aanes
155c877987
This one is based on the representative width of the table. Not only does this produce better results, but it's also more futureproof.
79 lines
2.6 KiB
Lua
79 lines
2.6 KiB
Lua
|
|
--------------------------------------------------------------------------------
|
|
-- 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{
|
|
pretty = require('pretty'),
|
|
setfenv = setfenv,
|
|
}
|
|
|
|
--------------------------------------------------------------------------------
|
|
-- Prevent usage of unknown options.
|
|
|
|
SUITE:addTest('Dont allow unknown options', function ()
|
|
local error_msg = bad_call(pretty, 'Hello World', { some_random_option = true })
|
|
assert(error_msg)
|
|
end)
|
|
|
|
SUITE:addTest('Dont allow bad types in options', function ()
|
|
local error_msg = bad_call(pretty, 'Hello World', { max_depth = "hello world" })
|
|
assert(error_msg)
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
SUITE:addTest('no_std_lib', function ()
|
|
-- This tests whether one could load the library with an empty env, without
|
|
-- an error.
|
|
local env = {}
|
|
local library = setfenv(loadfile('./library.lua'), env)()
|
|
|
|
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 env = { math = { abs = math.abs } }
|
|
local library = setfenv(loadfile('./library.lua'), env)()
|
|
|
|
assert( library[math.abs], 'Why is math.abs not defined in the library?' )
|
|
end)
|
|
|
|
SUITE:addTest('redefined part of math', function ()
|
|
-- This tests whether the library ignores a redefined function of an
|
|
-- builtin, when defining documentation.
|
|
local env = { setfenv = setfenv, loadfile = function() end }
|
|
local library = setfenv(loadfile('./library.lua'), env)()
|
|
|
|
assert( library[env.setfenv], 'Why is setfenv not defined in the library?' )
|
|
assert( not library[env.loadfile], 'Why is loadfile defined in the library?' )
|
|
end)
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
return SUITE
|