2016-12-30 11:03:14 +00:00
|
|
|
|
2017-01-05 14:50:44 +00:00
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- 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
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
2016-12-30 11:03:14 +00:00
|
|
|
local SUITE = require('TestSuite').new('resilience')
|
|
|
|
SUITE:setEnviroment{
|
2017-04-03 14:39:19 +00:00
|
|
|
pretty = require('pretty'),
|
|
|
|
setfenv = setfenv,
|
2016-12-30 11:03:14 +00:00
|
|
|
}
|
|
|
|
|
2017-04-03 14:39:19 +00:00
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
-- 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)
|
|
|
|
|
2016-12-30 11:03:14 +00:00
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
2017-01-05 12:22:25 +00:00
|
|
|
SUITE:addTest('no_std_lib', function ()
|
2016-12-30 11:03:14 +00:00
|
|
|
-- 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()
|
2017-01-05 12:22:25 +00:00
|
|
|
|
|
|
|
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?' )
|
2016-12-30 11:03:14 +00:00
|
|
|
end)
|
|
|
|
|
|
|
|
--------------------------------------------------------------------------------
|
|
|
|
|
|
|
|
return SUITE
|