15 local action_timeout = 10; |
15 local action_timeout = 10; |
16 local verse_log_levels = { "warn", "error" }; |
16 local verse_log_levels = { "warn", "error" }; |
17 local quiet = false; |
17 local quiet = false; |
18 local force_summary = false; |
18 local force_summary = false; |
19 local serve_mode = false; |
19 local serve_mode = false; |
|
20 local only_tags, skip_tags; |
20 |
21 |
21 local property_rules = {}; |
22 local property_rules = {}; |
22 |
23 |
23 local function apply_object_properties(class, name, object) |
24 local function apply_object_properties(class, name, object) |
24 for _, rule in ipairs(property_rules) do |
25 for _, rule in ipairs(property_rules) do |
69 end |
70 end |
70 elseif opt == "--skip-server-startup-log" then |
71 elseif opt == "--skip-server-startup-log" then |
71 skip_server_startup_log = true; |
72 skip_server_startup_log = true; |
72 elseif opt == "--step-timeout" then |
73 elseif opt == "--step-timeout" then |
73 action_timeout = assert(tonumber(get_value()), "number expected for --step-timeout"); |
74 action_timeout = assert(tonumber(get_value()), "number expected for --step-timeout"); |
74 elseif opt == "--tag" then |
75 elseif opt == "--meta" then |
75 local tag = get_value(); |
76 local tag = get_value(); |
76 local key, value = tag:match("^([^=]+):(.+)$"); |
77 local key, value = tag:match("^([^=]+):(.+)$"); |
77 if key and value then |
78 if key and value then |
78 test_metadata[key] = value; |
79 test_metadata[key] = value; |
79 else |
80 else |
80 error("Unable to parse tag: "..tag); |
81 error("Unable to parse metadata: "..tag); |
81 end |
82 end |
|
83 elseif opt == "--with-tag" then |
|
84 if not only_tags then |
|
85 only_tags = {}; |
|
86 end |
|
87 local tag = get_value(); |
|
88 local key, value = tag:match("^([^=]+):(.+)$"); |
|
89 table.insert(only_tags, { key or tag, value }); |
|
90 elseif opt == "--skip-tag" then |
|
91 if not skip_tags then |
|
92 skip_tags = {}; |
|
93 end |
|
94 local tag = get_value(); |
|
95 local key, value = tag:match("^([^=]+):(.+)$"); |
|
96 table.insert(skip_tags, { key or tag, value }); |
82 elseif opt == "--verbose" or opt == "-v" then |
97 elseif opt == "--verbose" or opt == "-v" then |
83 verse_log_levels = { "debug", "info", "warn", "error" }; |
98 verse_log_levels = { "debug", "info", "warn", "error" }; |
84 quiet = false; |
99 quiet = false; |
85 elseif opt == "--quiet" or opt == "-q" then |
100 elseif opt == "--quiet" or opt == "-q" then |
86 verse_log_levels = { "error" }; |
101 verse_log_levels = { "error" }; |
281 end; |
296 end; |
282 |
297 |
283 local function run_test_script(script_name, script_text) |
298 local function run_test_script(script_name, script_text) |
284 local script = parse_script(script_text) |
299 local script = parse_script(script_text) |
285 local script_data = { title = script.title, summary = script.summary, tags = script.tags, filename = script_name }; |
300 local script_data = { title = script.title, summary = script.summary, tags = script.tags, filename = script_name }; |
|
301 |
|
302 local tags = script.tags or {}; |
|
303 if skip_tags then |
|
304 for _, skip in ipairs(skip_tags) do |
|
305 local k, v = skip[1], skip[2]; |
|
306 if tags[k] and (not(v) or tags[k] == v) then |
|
307 return { name = script.title or script.name, status = "skipped", reason = "skipping tag "..k }; |
|
308 end |
|
309 end |
|
310 end |
|
311 if only_tags then |
|
312 for _, only in ipairs(only_tags) do |
|
313 local k, v = only[1], only[2]; |
|
314 if not tags[k] or (v and tags[k] ~= v) then |
|
315 print(k, v, tags[k]) |
|
316 return { name = script.title or script.name, status = "skipped", reason = "not tagged "..k }; |
|
317 end |
|
318 end |
|
319 end |
|
320 |
286 log_data("script", script_data); |
321 log_data("script", script_data); |
287 |
322 |
288 local ok, result, err = pcall(main, log_data, script); |
323 local ok, result, err = pcall(main, log_data, script); |
289 |
324 |
290 local event, status, reason; |
325 local event, status, reason; |