1
0
pretty/test/test_resilience.lua
Jon Michael Aanes 155c877987 Alternative process for determining short tables
This one is based on the representative width of the table. Not only
does this produce better results, but it's also more futureproof.
2017-04-14 12:19:23 +02:00

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