main.lua

changeset 125
dfff8dfe8861
parent 124
168cc5aad639
child 127
df5aa6a12561
equal deleted inserted replaced
124:168cc5aad639 125:dfff8dfe8861
137 end 137 end
138 verse.set_error_handler(error_handler); 138 verse.set_error_handler(error_handler);
139 return verse; 139 return verse;
140 end 140 end
141 141
142 local function main(log_data, script_name) 142 local function main(log_data, script)
143 143
144 local ok, err = true; 144 local ok, err = true;
145 145
146 local script = initialize_script(parse_script(read_script(script_name))); 146 initialize_script(script);
147
148 log_data("script", { title = script.title, summary = script.summary, tags = script.tags, filename = script_name });
149 147
150 if server_log_reader then 148 if server_log_reader then
151 if skip_server_startup_log then 149 if skip_server_startup_log then
152 server_log_reader(); 150 server_log_reader();
153 else 151 else
251 local function log_data(type, data) 249 local function log_data(type, data)
252 console_logger(type, data); 250 console_logger(type, data);
253 251
254 if result_log then 252 if result_log then
255 local entry = { type = type, data = data, time = time() }; 253 local entry = { type = type, data = data, time = time() };
256 result_log:write(" ", json.encode(entry), ",\n"); 254 result_log:write(" ", json.encode(entry), type ~= "end" and ",\n" or "\n");
257 result_log:flush(); 255 result_log:flush();
256 if type == "end" then
257 result_log:write("]\n");
258 result_log:close();
259 result_log = nil;
260 end
258 end 261 end
259 end; 262 end;
260 263
261 local function run_test_script(script_name) 264 local function run_test_script(script_name)
262 local ok, result, err = pcall(main, log_data, script_name); 265 local script = parse_script(read_script(script_name))
263 266 log_data("script", { title = script.title, summary = script.summary, tags = script.tags, filename = script_name });
264 local exit_code = 0; 267
268 local ok, result, err = pcall(main, log_data, script);
269
270 local status, reason = "ok";
265 if not ok then 271 if not ok then
266 exit_code = 2; 272 status, reason = "error", result;
267 log_data("test-error", { error = result }); 273 log_data("test-error", { error = result });
268 elseif not result then 274 elseif not result then
269 exit_code = 1; 275 status, reason = "fail", err;
270 log_data("test-failed", { error = err }); 276 log_data("test-failed", { error = err });
271 elseif not quiet then 277 elseif not quiet then
272 log_data("test-passed"); 278 log_data("test-passed");
273 end 279 end
274 return exit_code; 280 return { name = script.title or script_name, status = status, reason = reason };
275 end 281 end
276 282
277 log_data("start", { metadata = test_metadata }); 283 log_data("start", { metadata = test_metadata });
278 284
279 local exit_code = 0; 285 local result_tally = { all = {} };
286
280 for i = 1, #arg do 287 for i = 1, #arg do
281 local ret = run_test_script(arg[i]); 288 local ret = run_test_script(arg[i]);
282 if ret > exit_code then 289 if not result_tally[ret.status] then
283 exit_code = ret; 290 result_tally[ret.status] = {};
284 end 291 end
285 end 292 table.insert(result_tally[ret.status], ret);
286 293 table.insert(result_tally.all, ret);
287 if result_log then 294 end
288 result_log:write([[ {"type": "end", "time": ]]..time().."}\n]\n"); 295
289 result_log:close(); 296 log_data("end", { time = time(), summary = result_tally });
290 end
291 297
292 os.exit(exit_code); 298 os.exit(exit_code);

mercurial