awesome/tests/test-gears-watcher.lua

182 lines
4.6 KiB
Lua

--- Test for gears.watcher.
local runner = require("_runner")
local watcher = require("gears.watcher")
local gtimer = require("gears.timer")
local gdebug = require("gears.debug")
local filesystem = require("gears.filesystem")
local util = require("awful.util")
local obj1 = nil
local sig_count = {}
local steps = {
function()
obj1 = watcher {
interval = 0.05,
command = "echo one two three | cut -f3 -d ' '",
shell = true,
initial_value = 1337
}
assert(obj1.command == "echo one two three | cut -f3 -d ' '")
assert(obj1.shell)
assert(obj1.interval == 0.05)
assert(obj1.value == 1337)
return true
end,
-- Test the filters.
function()
if obj1.value ~= "three" then return end
obj1.filter = function(lines)
if lines == "three" then return "four" end
end
return true
end,
-- Switch to file mode.
function()
if obj1.value ~= "four" then return end
obj1.filter = function(lines)
return lines:match("theme") ~= nil
end
obj1:connect_signal("file::acquired", function()
sig_count["file::acquired"] = sig_count["file::acquired"] or 0
sig_count["file::acquired"] = sig_count["file::acquired"] + 1
end)
obj1:connect_signal("files::acquired", function()
sig_count["files::acquired"] = sig_count["files::acquired"] or 0
sig_count["files::acquired"] = sig_count["files::acquired"] + 1
end)
obj1:connect_signal("file::failed", function()
sig_count["file::failed"] = sig_count["file::failed"] or 0
sig_count["file::failed"] = sig_count["file::failed"] + 1
end)
obj1.file = filesystem.get_themes_dir().."/default/theme.lua"
assert(obj1.file == filesystem.get_themes_dir().."/default/theme.lua")
os.execute("echo 12345 > /tmp/test_gears_watcher1")
os.execute("echo 67890 > /tmp/test_gears_watcher2")
os.execute("rm -rf /tmp/test_gears_watcher3")
return true
end,
-- Remove the filter.
function()
if obj1.value ~= true then return end
assert(sig_count["file::acquired"] > 0)
assert(sig_count["files::acquired"] > 0)
assert(not sig_count["file::failed"])
obj1.file = '/tmp/test_gears_watcher1'
obj1.filter = nil
return true
end,
-- Test strip_newline.
function()
if obj1.value ~= "12345" then return end
obj1.strip_newline = false
return true
end,
-- Test append_file.
function()
if obj1.value ~= "12345\n" then return end
obj1.strip_newline = true
obj1:append_file('/tmp/test_gears_watcher2', 'foo')
return true
end,
-- Test remove_file.
function()
if type(obj1.value) ~= "table" or obj1.value["foo"] ~= "67890" then return end
return true
end,
-- Test non-existant files.
function()
obj1.file = '/tmp/test_gears_watcher3'
return true
end,
-- Test `started` and `:stop()`
function()
if not sig_count["file::failed"] then return end
assert(obj1.started)
obj1.started = false
assert(not obj1.started)
local real_error = gdebug.print_error
local called = false
gdebug.print_error = function()
called = true
end
obj1:stop()
assert(not obj1.started)
assert(called)
called = false
obj1:start()
assert(obj1.started)
assert(not called)
obj1:stop()
assert(not obj1.started)
assert(not called)
gdebug.print_error = real_error
return true
end,
-- Test `awful.util.shell` and `gears.timer` compatibility mode.
function()
assert(util.shell == watcher._shell)
watcher._shell = "foo"
assert(util.shell == "foo")
util.shell = "bar"
assert(watcher._shell == "bar")
local called = false
local real_deprecate = gdebug.deprecate
gdebug.deprecate = function()
called = true
end
local t = gtimer {
timeout = 5
}
assert(t.data.timeout)
assert(called)
called = false
t.data.foo = "bar"
assert(t._private.foo == "bar")
assert(called)
t._private.foo = "baz"
assert(t.data.foo == "baz")
gdebug.deprecate = real_deprecate
return true
end,
}
runner.run_steps(steps)
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80