tests: Test that the legacy naughty popup is used when the new API fails

Displaying errors is important. If the notification popup caused the
error, it was likely nothing could be displayed.
This commit is contained in:
Emmanuel Lepage Vallee 2019-07-22 01:14:47 -04:00
parent dcd034dcac
commit 6d58d7b4a2
1 changed files with 78 additions and 0 deletions

View File

@ -8,6 +8,8 @@ local cairo = require("lgi" ).cairo
local beautiful = require("beautiful") local beautiful = require("beautiful")
local Gio = require("lgi" ).Gio local Gio = require("lgi" ).Gio
local GLib = require("lgi" ).GLib local GLib = require("lgi" ).GLib
local gpcall = require("gears.protected_call")
local dwidget = require("naughty.widget._default")
-- This module test deprecated APIs -- This module test deprecated APIs
require("gears.debug").deprecate = function() end require("gears.debug").deprecate = function() end
@ -1000,6 +1002,82 @@ table.insert(steps, function()
return true return true
end) end)
-- Add a "new API" handler.
local current_template, had_error, handler_called = nil
table.insert(steps, function()
assert(naughty.has_display_handler == false)
naughty.connect_signal("request::display", function(n)
handler_called = true
naughty.layout.box {
notification = n,
widget_template = current_template
}
end)
return true
end)
-- Make sure the legacy popup is used when the new APIs fails.
table.insert(steps, function()
assert(naughty.has_display_handler == true)
function gpcall._error_handler()
had_error = true
end
local n = naughty.notification {
title = nil,
message = nil,
timeout = 25000,
}
assert(handler_called)
assert(not had_error)
assert(not n._private.widget_template_failed)
assert(not n.box)
n:destroy()
handler_called = false
-- Try with a broken template.
current_template = {widget = function() assert(false) end}
n = naughty.notification {
title = "foo",
message = "bar",
timeout = 25000,
}
assert(handler_called)
assert(had_error)
assert(not n.box)
handler_called = false
had_error = false
-- Break the default template
assert(dwidget.widget)
dwidget.widget = nil
dwidget.layout = function() assert(false) end
table.remove(dwidget, 1)
n = naughty.notification {
title = "foo",
message = "bar",
timeout = 25000,
}
assert(handler_called)
assert(n._private.widget_template_failed)
assert(had_error)
assert(n.box)
return true
end)
-- Test many screens. -- Test many screens.
require("_runner").run_steps(steps) require("_runner").run_steps(steps)