2014-08-23 21:57:52 +02:00
|
|
|
---------------------------------------------------------------------------
|
|
|
|
-- @author Uli Schlachter
|
|
|
|
-- @copyright 2014 Uli Schlachter
|
|
|
|
---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
local object = require("gears.object")
|
2015-06-14 16:03:29 +02:00
|
|
|
local matrix_equals = require("gears.matrix").equals
|
2015-06-14 15:57:33 +02:00
|
|
|
local base = require("wibox.widget.base")
|
2014-08-23 21:57:52 +02:00
|
|
|
local say = require("say")
|
2015-02-18 12:49:21 +01:00
|
|
|
local assert = require("luassert")
|
2015-09-17 15:01:50 +02:00
|
|
|
local no_parent = base.no_parent_I_know_what_I_am_doing
|
2014-08-23 21:57:52 +02:00
|
|
|
|
2020-03-01 01:47:20 +01:00
|
|
|
_G.awesome.api_level = 9999
|
|
|
|
|
2014-08-23 21:57:52 +02:00
|
|
|
-- {{{ Own widget-based assertions
|
|
|
|
local function widget_fit(state, arguments)
|
|
|
|
if #arguments ~= 3 then
|
2015-06-14 16:03:29 +02:00
|
|
|
error("Have " .. #arguments .. " arguments, but need 3")
|
2014-08-23 21:57:52 +02:00
|
|
|
end
|
|
|
|
|
|
|
|
local widget = arguments[1]
|
|
|
|
local given = arguments[2]
|
|
|
|
local expected = arguments[3]
|
2015-09-17 15:01:50 +02:00
|
|
|
local w, h = base.fit_widget(no_parent, { "fake context" }, widget, given[1], given[2])
|
2014-08-23 21:57:52 +02:00
|
|
|
|
|
|
|
local fits = expected[1] == w and expected[2] == h
|
|
|
|
if state.mod == fits then
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
-- For proper error message, mess with the arguments
|
|
|
|
arguments[1] = given[1]
|
|
|
|
arguments[2] = given[2]
|
|
|
|
arguments[3] = expected[1]
|
|
|
|
arguments[4] = expected[2]
|
|
|
|
arguments[5] = w
|
|
|
|
arguments[6] = h
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
say:set("assertion.widget_fit.positive", "Offering (%s, %s) to widget and expected (%s, %s), but got (%s, %s)")
|
|
|
|
assert:register("assertion", "widget_fit", widget_fit, "assertion.widget_fit.positive", "assertion.widget_fit.positive")
|
2015-06-14 16:03:29 +02:00
|
|
|
|
|
|
|
local function widget_layout(state, arguments)
|
|
|
|
if #arguments ~= 3 then
|
|
|
|
error("Have " .. #arguments .. " arguments, but need 3")
|
|
|
|
end
|
|
|
|
|
|
|
|
local widget = arguments[1]
|
|
|
|
local given = arguments[2]
|
|
|
|
local expected = arguments[3]
|
|
|
|
local children = widget.layout and widget:layout({ "fake context" }, given[1], given[2]) or {}
|
|
|
|
|
|
|
|
local fits = true
|
|
|
|
if #children ~= #expected then
|
|
|
|
fits = false
|
|
|
|
else
|
|
|
|
for i = 1, #children do
|
2016-02-07 13:10:21 +01:00
|
|
|
local child, exp = children[i], expected[i]
|
|
|
|
if child._widget ~= exp._widget or
|
|
|
|
child._width ~= exp._width or
|
|
|
|
child._height ~= exp._height or
|
|
|
|
not matrix_equals(child._matrix, exp._matrix) then
|
2015-06-14 16:03:29 +02:00
|
|
|
fits = false
|
|
|
|
break
|
|
|
|
end
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
|
|
|
if state.mod == fits then
|
|
|
|
return true
|
|
|
|
end
|
|
|
|
|
|
|
|
-- For proper error message, mess with the arguments
|
|
|
|
arguments[1] = expected
|
|
|
|
arguments[2] = children
|
|
|
|
arguments[3] = given[1]
|
|
|
|
arguments[4] = given[2]
|
|
|
|
|
|
|
|
return false
|
|
|
|
end
|
|
|
|
say:set("assertion.widget_layout.positive", "Expected:\n%s\nbut got:\n%s\nwhen offering (%s, %s) to widget")
|
2017-03-03 23:11:06 +01:00
|
|
|
assert:register("assertion",
|
|
|
|
"widget_layout",
|
|
|
|
widget_layout,
|
|
|
|
"assertion.widget_layout.positive",
|
|
|
|
"assertion.widget_layout.positive")
|
2014-08-23 21:57:52 +02:00
|
|
|
-- }}}
|
|
|
|
|
2017-06-08 16:59:51 +02:00
|
|
|
local function test_container(container)
|
|
|
|
local w1 = base.empty_widget()
|
|
|
|
|
|
|
|
assert.is.same({}, container:get_children())
|
|
|
|
|
|
|
|
container:set_widget(w1)
|
|
|
|
assert.is.same({ w1 }, container:get_children())
|
|
|
|
|
|
|
|
container:set_widget(nil)
|
|
|
|
assert.is.same({}, container:get_children())
|
|
|
|
|
|
|
|
container:set_widget(w1)
|
|
|
|
assert.is.same({ w1 }, container:get_children())
|
|
|
|
|
|
|
|
if container.reset then
|
|
|
|
container:reset()
|
|
|
|
assert.is.same({}, container:get_children())
|
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2014-08-23 21:57:52 +02:00
|
|
|
return {
|
|
|
|
widget_stub = function(width, height)
|
|
|
|
local w = object()
|
2016-05-26 06:52:11 +02:00
|
|
|
w._private = {}
|
2016-02-27 14:01:31 +01:00
|
|
|
w.is_widget = true
|
2016-05-26 06:52:11 +02:00
|
|
|
w._private.visible = true
|
|
|
|
w._private.opacity = 1
|
2015-09-06 10:16:52 +02:00
|
|
|
if width or height then
|
|
|
|
w.fit = function()
|
|
|
|
return width or 10, height or 10
|
|
|
|
end
|
2014-08-23 21:57:52 +02:00
|
|
|
end
|
2016-05-31 05:12:39 +02:00
|
|
|
w._private.widget_caches = {}
|
2017-03-11 13:55:57 +01:00
|
|
|
w:connect_signal("widget::layout_changed", function()
|
|
|
|
-- TODO: This is not completely correct, since our parent's caches
|
|
|
|
-- are not cleared. For the time being, tests just have to handle
|
|
|
|
-- this clearing-part themselves.
|
|
|
|
w._private.widget_caches = {}
|
|
|
|
end)
|
2014-08-23 21:57:52 +02:00
|
|
|
|
|
|
|
return w
|
|
|
|
end,
|
2017-06-08 16:59:51 +02:00
|
|
|
|
|
|
|
test_container = test_container,
|
2014-08-23 21:57:52 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
-- vim: filetype=lua:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:textwidth=80
|