Software /
code /
prosody
Comparison
tests/test.lua @ 1972:26d4b99ba211
tests: More environment magic to help get stuff working in a sandbox
author | Matthew Wild <mwild1@gmail.com> |
---|---|
date | Sat, 17 Oct 2009 13:36:40 +0100 |
parent | 1963:7533549e8ba6 |
child | 2246:eb047fe305aa |
child | 2923:b7049746bd29 |
comparison
equal
deleted
inserted
replaced
1971:91420df04d5b | 1972:26d4b99ba211 |
---|---|
28 else | 28 else |
29 package.path = package.path..";../?.lua"; | 29 package.path = package.path..";../?.lua"; |
30 package.cpath = package.cpath..";../?.so"; | 30 package.cpath = package.cpath..";../?.so"; |
31 end | 31 end |
32 | 32 |
33 local _realG = _G; | |
34 | |
33 require "util.import" | 35 require "util.import" |
34 | 36 |
35 local env_mt = { __index = function (t,k) return rawget(_G, k) or print("WARNING: Attempt to access nil global '"..tostring(k).."'"); end }; | 37 local env_mt = { __index = function (t,k) return rawget(_realG, k) or print("WARNING: Attempt to access nil global '"..tostring(k).."'"); end }; |
36 function testlib_new_env(t) | 38 function testlib_new_env(t) |
37 return setmetatable(t or {}, env_mt); | 39 return setmetatable(t or {}, env_mt); |
38 end | 40 end |
39 | 41 |
40 function assert_equal(a, b, message, level) | 42 function assert_equal(a, b, message, level) |
64 assert_equal(not not a, false, message); | 66 assert_equal(not not a, false, message); |
65 end | 67 end |
66 | 68 |
67 | 69 |
68 function dosingletest(testname, fname) | 70 function dosingletest(testname, fname) |
69 local tests = setmetatable({}, { __index = _G }); | 71 local tests = setmetatable({}, { __index = _realG }); |
70 tests.__unit = testname; | 72 tests.__unit = testname; |
71 tests.__test = fname; | 73 tests.__test = fname; |
72 local chunk, err = loadfile(testname); | 74 local chunk, err = loadfile(testname); |
73 if not chunk then | 75 if not chunk then |
74 print("WARNING: ", "Failed to load tests for "..testname, err); | 76 print("WARNING: ", "Failed to load tests for "..testname, err); |
102 line_info(name, success, report_file); | 104 line_info(name, success, report_file); |
103 end | 105 end |
104 end | 106 end |
105 | 107 |
106 function dotest(unitname) | 108 function dotest(unitname) |
107 local tests = setmetatable({}, { __index = _G }); | 109 local tests = setmetatable({}, { __index = _realG }); |
108 tests.__unit = unitname; | 110 tests.__unit = unitname; |
109 local chunk, err = loadfile("test_"..unitname:gsub("%.", "_")..".lua"); | 111 local chunk, err = loadfile("test_"..unitname:gsub("%.", "_")..".lua"); |
110 if not chunk then | 112 if not chunk then |
111 print("WARNING: ", "Failed to load tests for "..unitname, err); | 113 print("WARNING: ", "Failed to load tests for "..unitname, err); |
112 return; | 114 return; |
117 if not success then | 119 if not success then |
118 print("WARNING: ", "Failed to initialise tests for "..unitname, err); | 120 print("WARNING: ", "Failed to initialise tests for "..unitname, err); |
119 return; | 121 return; |
120 end | 122 end |
121 | 123 |
122 local unit = setmetatable({}, { __index = setmetatable({ module = function () _M = getfenv(2); end }, { __index = _G }) }); | 124 if tests.env then setmetatable(tests.env, { __index = _realG }); end |
123 | 125 local unit = setmetatable({}, { __index = setmetatable({ _G = tests.env or _G }, { __index = tests.env or _G }) }); |
126 unit._G = unit; _realG._G = unit; | |
124 local fn = "../"..unitname:gsub("%.", "/")..".lua"; | 127 local fn = "../"..unitname:gsub("%.", "/")..".lua"; |
125 local chunk, err = loadfile(fn); | 128 local chunk, err = loadfile(fn); |
126 if not chunk then | 129 if not chunk then |
127 print("WARNING: ", "Failed to load module: "..unitname, err); | 130 print("WARNING: ", "Failed to load module: "..unitname, err); |
128 return; | 131 return; |