summaryrefslogtreecommitdiffstats
path: root/test/lua/busted/compatibility.lua
diff options
context:
space:
mode:
authorVsevolod Stakhov <vsevolod@highsecure.ru>2015-02-27 15:55:46 +0000
committerVsevolod Stakhov <vsevolod@highsecure.ru>2015-02-27 15:55:46 +0000
commit349bc58cf6d025e4e50a325bda48d318b23b55fb (patch)
tree04681b3f213983ce8fc4335190ea9713f272510d /test/lua/busted/compatibility.lua
parent2f20e4f7fe5cf9b40dc8781675672e69437166e3 (diff)
downloadrspamd-349bc58cf6d025e4e50a325bda48d318b23b55fb.tar.gz
rspamd-349bc58cf6d025e4e50a325bda48d318b23b55fb.zip
Reorganize lua tests.
Diffstat (limited to 'test/lua/busted/compatibility.lua')
-rw-r--r--test/lua/busted/compatibility.lua60
1 files changed, 60 insertions, 0 deletions
diff --git a/test/lua/busted/compatibility.lua b/test/lua/busted/compatibility.lua
new file mode 100644
index 000000000..7837656fb
--- /dev/null
+++ b/test/lua/busted/compatibility.lua
@@ -0,0 +1,60 @@
+return {
+ getfenv = getfenv or function(f)
+ f = (type(f) == 'function' and f or debug.getinfo(f + 1, 'f').func)
+ local name, value
+ local up = 0
+
+ repeat
+ up = up + 1
+ name, value = debug.getupvalue(f, up)
+ until name == '_ENV' or name == nil
+
+ return value
+ end,
+
+ setfenv = setfenv or function(f, t)
+ f = (type(f) == 'function' and f or debug.getinfo(f + 1, 'f').func)
+ local name
+ local up = 0
+
+ repeat
+ up = up + 1
+ name = debug.getupvalue(f, up)
+ until name == '_ENV' or name == nil
+
+ if name then
+ debug.upvaluejoin(f, up, function() return name end, 1)
+ debug.setupvalue(f, up, t)
+ end
+
+ if f ~= 0 then return f end
+ end,
+
+ unpack = table.unpack or unpack,
+
+ osexit = function(code, close)
+ if close and _VERSION == 'Lua 5.1' then
+ -- From Lua 5.1 manual:
+ -- > The userdata itself is freed only in the next
+ -- > garbage-collection cycle.
+ -- Call collectgarbage() while collectgarbage('count')
+ -- changes + 3 times, at least 3 times,
+ -- at max 100 times (to prevent infinite loop).
+ local times_const = 0
+ for i = 1, 100 do
+ local count_before = collectgarbage("count")
+ collectgarbage()
+ local count_after = collectgarbage("count")
+ if count_after == count_before then
+ times_const = times_const + 1
+ if times_const > 3 then
+ break
+ end
+ else
+ times_const = 0
+ end
+ end
+ end
+ os.exit(code, close)
+ end,
+}