tests: Test `gears.watcher`.

This commit is contained in:
Emmanuel Lepage Vallee 2020-11-29 02:24:08 -08:00
parent 9d55d385c7
commit b28a84fbc3
9 changed files with 393 additions and 0 deletions

View File

@ -0,0 +1,18 @@
--DOC_NO_USAGE --DOC_GEN_OUTPUT
local gears = { watcher = require("gears.watcher") } --DOC_HIDE
function gears.watcher._easy_async(_, cb) --DOC_HIDE
cb("one two three", "", nil, 0) --DOC_HIDE
end --DOC_HIDE
local w = gears.watcher {
interval = 0.05,
command = "echo one two three",
}
--DOC_NEWLINE
-- [wait some time]
--DOC_NEWLINE
-- It will be "one two three"
print(w.value)

View File

@ -0,0 +1,19 @@
--DOC_NO_USAGE --DOC_GEN_OUTPUT
local gears = { watcher = require("gears.watcher") } --DOC_HIDE
function gears.watcher._easy_async(_, cb) --DOC_HIDE
cb("three", "", nil, 0) --DOC_HIDE
end --DOC_HIDE
local w = gears.watcher {
interval = 0.05,
command = "echo one two three | cut -f3 -d ' '",
shell = true,
}
--DOC_NEWLINE
-- [wait some time]
--DOC_NEWLINE
-- It will be "one two three"
print(w.value)

View File

@ -0,0 +1,26 @@
--DOC_GEN_IMAGE --DOC_NO_USAGE
local gears = { watcher = require("gears.watcher") } --DOC_HIDE
function gears.watcher._read_async(path, callback, _) --DOC_HIDE
if path == '/sys/class/power_supply/AC/online' then --DOC_HIDE
callback('/sys/class/power_supply/AC/online', "1") --DOC_HIDE
elseif path == "/sys/class/power_supply/BAT0/status" then --DOC_HIDE
callback('/sys/class/power_supply/BAT0/status', "Full") --DOC_HIDE
end --DOC_HIDE
end --DOC_HIDE
local mybatterycharging = gears.watcher {
files = {
"/sys/class/power_supply/AC/online",
"/sys/class/power_supply/BAT0/status"
},
filter = function(content)
assert(content['/sys/class/power_supply/AC/online'] == "1") --DOC_HIDE
assert(content['/sys/class/power_supply/BAT0/status'] == "Full") --DOC_HIDE
return content['/sys/class/power_supply/AC/online' ] == "1"
or content['/sys/class/power_supply/BAT0/status'] == "Full"
end,
interval = 5,
}
assert(mybatterycharging) --DOC_HIDE

View File

@ -0,0 +1,34 @@
--DOC_GEN_IMAGE --DOC_NO_USAGE
local gears = { watcher = require("gears.watcher") } --DOC_HIDE
local called = 0 --DOC_HIDE
function gears.watcher._read_async(path, callback) --DOC_HIDE
if path == '/sys/class/power_supply/AC/online' then --DOC_HIDE
called = called + 1 --DOC_HIDE
callback('/sys/class/power_supply/AC/online', "1") --DOC_HIDE
elseif path == "/sys/class/power_supply/BAT0/status" then --DOC_HIDE
called = called + 1 --DOC_HIDE
callback('/sys/class/power_supply/BAT0/status', "Full") --DOC_HIDE
end --DOC_HIDE
end --DOC_HIDE
local mybatterycharging = gears.watcher {
files = {
plugged = "/sys/class/power_supply/AC/online",
charged = "/sys/class/power_supply/BAT0/status"
},
filter = function(content)
assert(content.plugged == "1") --DOC_HIDE
assert(content.charged == "Full") --DOC_HIDE
return content.plugged == "1" or content.charged == "Full"
end,
interval = 5,
}
require("gears.timer").run_delayed_calls_now() --DOC_HIDE
require("gears.timer").run_delayed_calls_now() --DOC_HIDE
require("gears.timer").run_delayed_calls_now() --DOC_HIDE
assert(called >= 2) --DOC_HIDE
assert(mybatterycharging) --DOC_HIDE

View File

@ -0,0 +1,14 @@
--DOC_GEN_IMAGE
local gears = { watcher = require("gears.watcher") } --DOC_HIDE
function gears.watcher._easy_async(_, callback) --DOC_HIDE
callback("three") --DOC_HIDE
end --DOC_HIDE
local watcher = gears.watcher {
interval = 5,
command = "echo one:two:three | cut -f3 -d :",
shell = true,
}
assert(watcher) --DOC_HIDE

View File

@ -0,0 +1,9 @@
--DOC_GEN_IMAGE
local gears = { watcher = require("gears.watcher") } --DOC_HIDE
local mybatterydischarging = gears.watcher {
file = "/sys/class/power_supply/BAT0/status",
interval = 5,
}
assert(mybatterydischarging) --DOC_HIDE

View File

@ -0,0 +1,51 @@
--DOC_GEN_IMAGE --DOC_NO_USAGE
local parent = ... --DOC_HIDE
local gears = { --DOC_HIDE
watcher = require("gears.watcher"), --DOC_HIDE
reactive = require("gears.reactive"), --DOC_HIDE
} --DOC_HIDE
local wibox = require("wibox") --DOC_HIDE
local called = {} --DOC_HIDE
function gears.watcher._read_async(path, callback, _) --DOC_HIDE
if path == '/sys/class/power_supply/BAT0/energy_full' then --DOC_HIDE
callback('/sys/class/power_supply/BAT0/energy_full', "89470000") --DOC_HIDE
elseif path == '/sys/class/power_supply/BAT0/energy_now' then --DOC_HIDE
callback('/sys/class/power_supply/BAT0/energy_now', "85090000") --DOC_HIDE
end --DOC_HIDE
end --DOC_HIDE
local battery = gears.watcher {
labels_as_properties = true,
interval = 5,
files = {
capacity = "/sys/class/power_supply/BAT0/energy_full",
current = "/sys/class/power_supply/BAT0/energy_now"
},
filter = function(label, content)
called[label] = true --DOC_HIDE
return tonumber(content)
end,
}
--DOC_NEWLINE
-- Use the above in a widget.
local w = wibox.widget {
text = gears.reactive(function()
return (battery.current / battery.capacity) .. "%"
end),
widget = wibox.widget.textbox
}
require("gears.timer").run_delayed_calls_now() --DOC_HIDE
require("gears.timer").run_delayed_calls_now() --DOC_HIDE
require("gears.timer").run_delayed_calls_now() --DOC_HIDE
assert(called["capacity"]) --DOC_HIDE
assert(called["current"]) --DOC_HIDE
assert(battery) --DOC_HIDE
parent:add(w) --DOC_HIDE

View File

@ -0,0 +1,41 @@
--DOC_GEN_IMAGE --DOC_NO_USAGE --DOC_NO_DASH
local parent = ... --DOC_NO_USAGE --DOC_HIDE
local gears = { watcher = require("gears.watcher") } --DOC_HIDE
local wibox = { widget = require("wibox.widget") }--DOC_HIDE
function gears.watcher._read_async(path, callback, _) --DOC_HIDE
if path == '/sys/class/power_supply/BAT0/energy_full' then --DOC_HIDE
callback('/sys/class/power_supply/BAT0/energy_full', "89470000") --DOC_HIDE
elseif path == '/sys/class/power_supply/BAT0/energy_now' then --DOC_HIDE
callback('/sys/class/power_supply/BAT0/energy_now', "85090000") --DOC_HIDE
end --DOC_HIDE
end --DOC_HIDE
-- In this example, the value of energy_full is 89470000 and the value
-- of energy_now is 85090000. The result will be 95%.
local w = --DOC_HIDE
wibox.widget {
value = gears.watcher {
files = {
capacity = "/sys/class/power_supply/BAT0/energy_full",
current = "/sys/class/power_supply/BAT0/energy_now"
},
filter = function(content)
return tonumber(content.current) / tonumber(content.capacity)
end,
interval = 5,
},
forced_width = 100, --DOC_HIDE
forced_height = 30, --DOC_HIDE
max_value = 1,
min_value = 0,
widget = wibox.widget.progressbar
}
require("gears.timer").run_delayed_calls_now() --DOC_HIDE
require("gears.timer").run_delayed_calls_now() --DOC_HIDE
require("gears.timer").run_delayed_calls_now() --DOC_HIDE
assert(w and w.value >= 0.94 and w.value <= 0.96) --DOC_HIDE
parent:add(w) --DOC_HIDE

View File

@ -0,0 +1,181 @@
--- 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