From 899ffd872f3b23f30902aaa2e374734b57b61312 Mon Sep 17 00:00:00 2001 From: Michael Stapelberg Date: Sat, 9 Sep 2017 18:39:56 +0200 Subject: [PATCH] 529-net-wm-desktop: avoid timeout, avoid restarts, split This shaves off almost half a second of the wall-clock time (from 5.9s to 5.6s). --- testcases/t/529-net-wm-desktop.t | 86 ++++------------------------- testcases/t/529-net-wm-desktop_mm.t | 75 +++++++++++++++++++++++++ 2 files changed, 87 insertions(+), 74 deletions(-) create mode 100644 testcases/t/529-net-wm-desktop_mm.t diff --git a/testcases/t/529-net-wm-desktop.t b/testcases/t/529-net-wm-desktop.t index 8f2df735..42b488d9 100644 --- a/testcases/t/529-net-wm-desktop.t +++ b/testcases/t/529-net-wm-desktop.t @@ -66,8 +66,15 @@ sub open_window_with_net_wm_desktop { pack('L', $idx), ); }, + dont_map => 1, ); + # We don’t wait for MapNotify and instead sync with i3 so that we don’t need + # to encounter the full timeout of 4s when opening a window on a non-visible + # workspace. + $window->map; + sync_with_i3; + return $window; } @@ -80,9 +87,7 @@ sub kill_windows { ############################################################################### -my ($config, $config_mm, $pid, $con); - -$config = <{floating_nodes}}, 1, 'The window is floating'); ok(get_ws('0')->{floating_nodes}->[0]->{nodes}->[0]->{sticky}, 'The window is sticky'); kill_windows; -exit_gracefully($pid); ############################################################################### # _NET_WM_DESKTOP is updated when the window is moved to another workspace # on the same output. ############################################################################### -$pid = launch_with_config($config); - cmd 'workspace 0'; open_window; cmd 'workspace 1'; @@ -178,15 +160,12 @@ cmd 'move window to workspace 1'; is(get_net_wm_desktop($con), 1, '_NET_WM_DESKTOP is updated when moving the window'); kill_windows; -exit_gracefully($pid); ############################################################################### # _NET_WM_DESKTOP is updated when the floating window is moved to another # workspace on the same output. ############################################################################### -$pid = launch_with_config($config); - cmd 'workspace 0'; open_window; cmd 'workspace 1'; @@ -200,35 +179,11 @@ cmd 'move window to workspace 1'; is(get_net_wm_desktop($con), 1, '_NET_WM_DESKTOP is updated when moving the window'); kill_windows; -exit_gracefully($pid); - -############################################################################### -# _NET_WM_DESKTOP is updated when the window is moved to another workspace -# on another output. -############################################################################### - -$pid = launch_with_config($config_mm); - -cmd 'workspace 0'; -open_window; -cmd 'workspace 10'; -open_window; -cmd 'workspace 0'; -$con = open_window; - -cmd 'move window to workspace 10'; - -is(get_net_wm_desktop($con), 1, '_NET_WM_DESKTOP is updated when moving the window'); - -kill_windows; -exit_gracefully($pid); ############################################################################### # _NET_WM_DESKTOP is removed when the window is withdrawn. ############################################################################### -$pid = launch_with_config($config); - $con = open_window; is(get_net_wm_desktop($con), 0, '_NET_WM_DESKTOP is set (sanity check)'); @@ -238,15 +193,12 @@ wait_for_unmap($con); is(get_net_wm_desktop($con), undef, '_NET_WM_DESKTOP is removed'); kill_windows; -exit_gracefully($pid); ############################################################################### # A _NET_WM_DESKTOP client message sent to the root window moves a window # to the correct workspace. ############################################################################### -$pid = launch_with_config($config); - cmd 'workspace 0'; open_window; cmd 'workspace 1'; @@ -263,15 +215,12 @@ is_num_children('1', 2, 'The window is now on workspace 1'); is(get_net_wm_desktop($con), 1, '_NET_WM_DESKTOP is updated'); kill_windows; -exit_gracefully($pid); ############################################################################### # A _NET_WM_DESKTOP client message sent to the root window can make a window # sticky. ############################################################################### -$pid = launch_with_config($config); - cmd 'workspace 0'; $con = open_window; @@ -282,15 +231,12 @@ is(@{get_ws('0')->{floating_nodes}}, 1, 'The window is floating'); ok(get_ws('0')->{floating_nodes}->[0]->{nodes}->[0]->{sticky}, 'The window is sticky'); kill_windows; -exit_gracefully($pid); ############################################################################### # _NET_WM_DESKTOP is updated when a new workspace with a lower number is # opened and closed. ############################################################################### -$pid = launch_with_config($config); - cmd 'workspace 1'; $con = open_window; is(get_net_wm_desktop($con), 0, '_NET_WM_DESKTOP is set sanity check)'); @@ -299,14 +245,11 @@ cmd 'workspace 0'; is(get_net_wm_desktop($con), 1, '_NET_WM_DESKTOP is updated'); kill_windows; -exit_gracefully($pid); ############################################################################### # _NET_WM_DESKTOP is updated when a window is made sticky by command. ############################################################################### -$pid = launch_with_config($config); - cmd 'workspace 0'; $con = open_window; cmd 'floating enable'; @@ -316,14 +259,11 @@ cmd 'sticky enable'; is(get_net_wm_desktop($con), 0xFFFFFFFF, '_NET_WM_DESKTOP is updated'); kill_windows; -exit_gracefully($pid); ############################################################################### # _NET_WM_DESKTOP is updated when a window is made sticky by client message. ############################################################################### -$pid = launch_with_config($config); - cmd 'workspace 0'; $con = open_window; cmd 'floating enable'; @@ -343,14 +283,11 @@ sync_with_i3; is(get_net_wm_desktop($con), 0xFFFFFFFF, '_NET_WM_DESKTOP is updated'); kill_windows; -exit_gracefully($pid); ############################################################################### # _NET_WM_DESKTOP is updated when a window is moved to the scratchpad. ############################################################################### -$pid = launch_with_config($config); - cmd 'workspace 0'; $con = open_window; cmd 'floating enable'; @@ -363,8 +300,9 @@ cmd 'scratchpad show'; is(get_net_wm_desktop($con), 0, '_NET_WM_DESKTOP is set sanity check)'); kill_windows; -exit_gracefully($pid); ############################################################################### +exit_gracefully($pid); + done_testing; diff --git a/testcases/t/529-net-wm-desktop_mm.t b/testcases/t/529-net-wm-desktop_mm.t new file mode 100644 index 00000000..77238946 --- /dev/null +++ b/testcases/t/529-net-wm-desktop_mm.t @@ -0,0 +1,75 @@ +#!perl +# vim:ts=4:sw=4:expandtab +# +# Please read the following documents before working on tests: +# • http://build.i3wm.org/docs/testsuite.html +# (or docs/testsuite) +# +# • http://build.i3wm.org/docs/lib-i3test.html +# (alternatively: perldoc ./testcases/lib/i3test.pm) +# +# • http://build.i3wm.org/docs/ipc.html +# (or docs/ipc) +# +# • http://onyxneon.com/books/modern_perl/modern_perl_a4.pdf +# (unless you are already familiar with Perl) +# +# Tests for _NET_WM_DESKTOP. +# Ticket: #2153 +use i3test i3_autostart => 0; +use X11::XCB qw(:all); + +sub get_net_wm_desktop { + sync_with_i3; + + my ($con) = @_; + my $cookie = $x->get_property( + 0, + $con->{id}, + $x->atom(name => '_NET_WM_DESKTOP')->id, + $x->atom(name => 'CARDINAL')->id, + 0, + 1 + ); + + my $reply = $x->get_property_reply($cookie->{sequence}); + return undef if $reply->{length} != 1; + + return unpack("L", $reply->{value}); +} + +my $config = <