From 760e72f94a481a5f2894f0bab3b7b5cd7b26e87f Mon Sep 17 00:00:00 2001 From: Emmanuel Lepage Vallee Date: Sun, 28 Aug 2016 23:48:28 -0400 Subject: [PATCH] tests: Test spawning client on a specific screen. --- tests/test-awful-client.lua | 87 +++++++++++++++++++++++++++++++++++-- 1 file changed, 84 insertions(+), 3 deletions(-) diff --git a/tests/test-awful-client.lua b/tests/test-awful-client.lua index ca36318c..93155bcc 100644 --- a/tests/test-awful-client.lua +++ b/tests/test-awful-client.lua @@ -1,4 +1,5 @@ local awful = require("awful") +local test_client = require("_client") awful.util.deprecate = function() end @@ -64,9 +65,6 @@ assert(c:tags()[1] == t2 or c:tags()[2] == t2) awful.client.toggletag(t2, c) assert(c:tags()[1] == t and c:tags()[1] ~= t2 and c:tags()[2] == nil) --- Test movetoscreen ---FIXME I don't have the hardware to test - -- Test floating assert(c.floating ~= nil and type(c.floating) == "boolean") c.floating = true @@ -79,4 +77,87 @@ end end } +local has_error + +table.insert(steps, function() + -- Make sure there is no extra callbacks that causes double screen changes + -- (regress #1028 #1052) + client.connect_signal("property::screen",function(c) + if c.class and c.class ~= "screen"..c.screen.index then + has_error = table.concat { + "An unexpected screen change did occur\n", + debug.traceback(),"\n", + c.class, " Screen: ",c.screen.index + } + end + end) + + return true +end) + +local multi_screen_steps = {} + +-- Add a test client on each screen. +table.insert(multi_screen_steps, function() + has_error = false + for i=1, screen.count() do + local s = screen[i] + test_client("screen"..i, nil, { + screen = s, + }) + end + + return true +end) + +-- Test if the clients have been placed on the right screen +table.insert(multi_screen_steps, function() + if #client.get() ~= screen.count() then return end + + if has_error then print(has_error) end + assert(not has_error) + + for i=1, screen.count() do + local s = screen[i] + + -- Just in case + for _, t in ipairs(s.selected_tags) do + assert(t.screen == s) + end + + local t = s.selected_tag + assert(t and t.screen == s) + + -- In case the next step has failed, find what went wrong + for _, c in ipairs(t:clients()) do + -- This is _supposed_ to be impossible, but can be forced by buggy + -- lua code. + if c.screen ~= t.screen then + local tags = c:tags() + for _, t2 in ipairs(tags) do + assert(t2.screen == c.screen) + end + + assert(false) + end + assert(c.screen.index == i) + end + + -- Check that the right client is placed, the loop above will trigger + -- asserts already, but in case the tag has more than 1 client and + -- everything is messed up, those asserts are still necessary. + assert(#t:clients() == 1) + assert(t:clients()[1].class == "screen"..i) + assert(t:clients()[1].screen == s) + + -- Make sure it stays where it belongs + awful.placement.maximize(t:clients()[1]) + assert(t:clients()[1] and t:clients()[1].screen == t.screen) + end + + return true +end) + +require("_multi_screen")(steps, multi_screen_steps) + require("_runner").run_steps(steps)