awesome/tests/test-spawn.lua
Uli Schlachter e18bece3df Make tests more reliable on "early errors"
When e.g. test-leaks.lua fails, it will cause a Lua error before starting the
test runner. This means that the test will just hang, because nothing causes
awesome to quit.

Handle this by starting a timer when the test runner is loaded and quitting
awesome in there if no test run was started yet. This only works if all tests
load the runner before doing anything that could fail, so the require("_runner")
is moved to the beginning in every test.

Signed-off-by: Uli Schlachter <psychon@znc.in>
2016-03-06 10:20:45 +01:00

69 lines
2 KiB
Lua

--- Tests for spawn
local runner = require("_runner")
local spawn = require("awful.spawn")
local spawns_done = 0
local exit_yay, exit_snd = nil, nil
local steps = {
function(count)
if count == 1 then
local steps_yay = 0
spawn.with_line_callback("echo yay", {
stdout = function(line)
assert(line == "yay", "line == '" .. tostring(line) .. "'")
assert(steps_yay == 0)
steps_yay = steps_yay + 1
end,
output_done = function()
assert(steps_yay == 1)
steps_yay = steps_yay + 1
spawns_done = spawns_done + 1
end,
exit = function(reason, code)
assert(reason == "exit")
assert(exit_yay == nil)
assert(code == 0)
exit_yay = code
end
})
local steps_count = 0
local err_count = 0
spawn.with_line_callback({ "sh", "-c", "printf line1\\\\nline2\\\\nline3 ; echo err >&2 ; exit 42" }, {
stdout = function(line)
assert(steps_count < 3)
steps_count = steps_count + 1
assert(line == "line" .. steps_count, "line == '" .. tostring(line) .. "'")
end,
stderr = function(line)
assert(err_count == 0)
err_count = err_count + 1
assert(line == "err", "line == '" .. tostring(line) .. "'")
end,
output_done = function()
assert(steps_count == 3)
assert(err_count == 1)
steps_count = steps_count + 1
spawns_done = spawns_done + 1
end,
exit = function(reason, code)
assert(reason == "exit")
assert(exit_snd == nil)
assert(code == 42)
exit_snd = code
end
})
end
if spawns_done == 2 then
assert(exit_yay == 0)
assert(exit_snd == 42)
return true
end
end,
}
runner.run_steps(steps)
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80