152 lines
5.4 KiB
Lua
152 lines
5.4 KiB
Lua
---------------------------------------------------------------------------
|
|
-- @author Uli Schlachter
|
|
-- @copyright 2016 Uli Schlachter
|
|
---------------------------------------------------------------------------
|
|
|
|
local base = require("wibox.widget.base")
|
|
local no_parent = base.no_parent_I_know_what_I_am_doing
|
|
|
|
describe("wibox.widget.base", function()
|
|
local widget1, widget2
|
|
before_each(function()
|
|
widget1 = base.make_widget()
|
|
widget2 = base.make_widget()
|
|
widget1.layout = function()
|
|
return { base.place_widget_at(widget2, 0, 0, 1, 1) }
|
|
end
|
|
end)
|
|
|
|
describe("caches", function()
|
|
it("garbage collectable", function()
|
|
local alive = setmetatable({ widget1, widget2 }, { __mode = "kv" })
|
|
assert.is.equal(2, #alive)
|
|
|
|
widget1, widget2 = nil, nil
|
|
collectgarbage("collect")
|
|
assert.is.equal(0, #alive)
|
|
end)
|
|
|
|
it("simple cache clear", function()
|
|
local alive = setmetatable({ widget1, widget2 }, { __mode = "kv" })
|
|
base.layout_widget(no_parent, { "fake context" }, widget1, 20, 20)
|
|
assert.is.equal(2, #alive)
|
|
|
|
widget1, widget2 = nil, nil
|
|
collectgarbage("collect")
|
|
assert.is.equal(0, #alive)
|
|
end)
|
|
|
|
it("self-reference cache clear", function()
|
|
widget2.widget = widget1
|
|
|
|
local alive = setmetatable({ widget1, widget2 }, { __mode = "kv" })
|
|
base.layout_widget(no_parent, { "fake context" }, widget1, 20, 20)
|
|
assert.is.equal(2, #alive)
|
|
|
|
widget1, widget2 = nil, nil
|
|
collectgarbage("collect")
|
|
assert.is.equal(0, #alive)
|
|
end)
|
|
end)
|
|
|
|
describe("setup", function()
|
|
it("Filters out 'false'", function()
|
|
-- Regression test: There was a bug where "nil"s where correctly
|
|
-- skipped, but "false" entries survived
|
|
local layout1, layout2 = base.make_widget(), base.make_widget()
|
|
local called = false
|
|
function layout1:set_widget(w)
|
|
called = true
|
|
assert.equals(w, layout2)
|
|
end
|
|
function layout2:set_children(children)
|
|
assert.is_same({nil, widget1, nil, widget2}, children)
|
|
end
|
|
layout2.allow_empty_widget = true
|
|
layout1:setup{ layout = layout2, false, widget1, nil, widget2 }
|
|
assert.is_true(called)
|
|
end)
|
|
|
|
it("Attribute 'false' works", function()
|
|
-- Regression test: I introduced a bug with the above fix
|
|
local layout1, layout2 = base.make_widget(), base.make_widget()
|
|
local called1, called2 = false, false
|
|
function layout1:set_widget(w)
|
|
called1 = true
|
|
assert.equals(w, layout2)
|
|
end
|
|
function layout2:set_children(children)
|
|
assert.is_same({}, children)
|
|
end
|
|
function layout2:set_foo(foo)
|
|
called2 = true
|
|
assert.is_false(foo)
|
|
end
|
|
layout1:setup{ layout = layout2, foo = false }
|
|
assert.is_true(called1)
|
|
assert.is_true(called2)
|
|
end)
|
|
end)
|
|
|
|
describe("Setters emit signals", function()
|
|
local widget
|
|
local signal_called
|
|
local callback = function () signal_called = true end
|
|
|
|
before_each(function()
|
|
widget = base.make_widget()
|
|
signal_called = false
|
|
end)
|
|
|
|
it("'set_visible' calls 'widget::layout_changed'", function()
|
|
widget:connect_signal("widget::layout_changed", callback)
|
|
widget:set_visible(false)
|
|
assert.is_true(signal_called)
|
|
end)
|
|
|
|
it("'set_visible' calls 'widget::redraw_needed'", function()
|
|
widget:connect_signal("widget::redraw_needed", callback)
|
|
widget:set_visible(false)
|
|
assert.is_true(signal_called)
|
|
end)
|
|
|
|
it("'set_opacity' calls 'widget::redraw_needed'", function()
|
|
widget:connect_signal("widget::redraw_needed", callback)
|
|
widget:set_opacity(0)
|
|
assert.is_true(signal_called)
|
|
end)
|
|
|
|
it("'set_forced_width' calls 'widget::layout_changed'", function()
|
|
widget:connect_signal("widget::layout_changed", callback)
|
|
widget:set_forced_width(0)
|
|
assert.is_true(signal_called)
|
|
end)
|
|
|
|
it("'set_forced_height' calls 'widget::layout_changed'", function()
|
|
widget:connect_signal("widget::layout_changed", callback)
|
|
widget:set_forced_height(0)
|
|
assert.is_true(signal_called)
|
|
end)
|
|
|
|
it("'set_widget_common' calls 'property::widget'", function()
|
|
-- Implement `set_widget`
|
|
rawset(widget, "set_widget", base.set_widget_common)
|
|
|
|
widget:connect_signal("property::widget", callback)
|
|
widget:set_widget(base.make_widget())
|
|
assert.is_true(signal_called)
|
|
end)
|
|
|
|
it("'set_widget_common' calls 'widget::layout_changed'", function()
|
|
-- Implement `set_widget`
|
|
rawset(widget, "set_widget", base.set_widget_common)
|
|
|
|
widget:connect_signal("widget::layout_changed", callback)
|
|
widget:set_widget(base.make_widget())
|
|
assert.is_true(signal_called)
|
|
end)
|
|
end)
|
|
end)
|
|
|
|
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|