diff --git a/testcases/t/65-for_window.t b/testcases/t/65-for_window.t index 26ccb7cf..f156f11b 100644 --- a/testcases/t/65-for_window.t +++ b/testcases/t/65-for_window.t @@ -6,15 +6,9 @@ use X11::XCB qw(:all); use X11::XCB::Connection; use i3test; -use Cwd qw(abs_path); -use Proc::Background; -use File::Temp qw(tempfile tempdir); my $x = X11::XCB::Connection->new; -# assuming we are run by complete-run.pl -my $i3_path = abs_path("../i3"); - ############################################################## # 1: test the following directive: # for_window [class="borderless"] border none @@ -23,22 +17,14 @@ my $i3_path = abs_path("../i3"); # "borderless" (should get no border) ############################################################## -my $socketpath = File::Temp::tempnam('/tmp', 'i3-test-socket-'); +my $config = </dev/null 2>/dev/null"; -my $process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); +my $process = launch_with_config($config); my $tmp = fresh_workspace; @@ -112,21 +98,14 @@ exit_gracefully($process->pid); # only once ############################################################## -($fh, $tmpfile) = tempfile(); -say $fh "# i3 config file (v4)"; -say $fh "font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1"; -say $fh "ipc-socket $socketpath"; -say $fh q|for_window [class="borderless"] border none|; -say $fh q|for_window [title="special borderless title"] border none|; -close($fh); +$config = </dev/null 2>/dev/null"; -my $process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); +$process = launch_with_config($config); $tmp = fresh_workspace; @@ -176,22 +155,16 @@ exit_gracefully($process->pid); # 3: match on the title, set border style *and* a mark ############################################################## -($fh, $tmpfile) = tempfile(); -say $fh "# i3 config file (v4)"; -say $fh "font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1"; -say $fh "ipc-socket $socketpath"; -say $fh q|for_window [class="borderless"] border none|; -say $fh q|for_window [title="special borderless title"] border none|; -say $fh q|for_window [title="special mark title"] border none, mark bleh|; -close($fh); +$config = </dev/null 2>/dev/null"; -my $process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); +$process = launch_with_config($config); $tmp = fresh_workspace; @@ -228,20 +201,13 @@ exit_gracefully($process->pid); # 4: multiple criteria for the for_window command ############################################################## -($fh, $tmpfile) = tempfile(); -say $fh "# i3 config file (v4)"; -say $fh "font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1"; -say $fh "ipc-socket $socketpath"; -say $fh q|for_window [class="borderless" title="usethis"] border none|; -close($fh); +$config = </tmp/a 2>/dev/null"; -my $process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); +$process = launch_with_config($config); $tmp = fresh_workspace; diff --git a/testcases/t/66-assign.t b/testcases/t/66-assign.t index 8e701277..a4a7bb0f 100644 --- a/testcases/t/66-assign.t +++ b/testcases/t/66-assign.t @@ -5,18 +5,12 @@ # Tests if assignments work # use i3test; -use Cwd qw(abs_path); -use Proc::Background; -use File::Temp qw(tempfile tempdir); use X11::XCB qw(:all); use X11::XCB::Connection; use v5.10; my $x = X11::XCB::Connection->new; -# assuming we are run by complete-run.pl -my $i3_path = abs_path("../i3"); - # TODO: move to X11::XCB sub set_wm_class { my ($id, $class, $instance) = @_; @@ -41,23 +35,12 @@ sub set_wm_class { # start a window and see that it does not get assigned with an empty config ##################################################################### -my $socketpath = File::Temp::tempnam('/tmp', 'i3-test-socket-'); +my $config = </dev/null 2>/dev/null"; -my $process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); - -diag("pid = " . $process->pid); +my $process = launch_with_config($config); my $tmp = fresh_workspace; @@ -88,22 +71,13 @@ sleep 0.25; # workspace ##################################################################### -($fh, $tmpfile) = tempfile(); -say $fh "# i3 config file (v4)"; -say $fh "font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1"; -say $fh "ipc-socket $socketpath"; -say $fh q|assign "special" → targetws|; -close($fh); +$config = </dev/null 2>/dev/null"; -$process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); - -diag("pid = " . $process->pid); +$process = launch_with_config($config); $tmp = fresh_workspace; @@ -137,15 +111,7 @@ sleep 0.25; # already, next to the existing node. ##################################################################### -diag("Starting i3"); -$i3cmd = "exec " . abs_path("../i3") . " -V -d all --disable-signalhandler -c $tmpfile >/dev/null 2>/dev/null"; -$process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); - -diag("pid = " . $process->pid); +$process = launch_with_config($config); # initialize the target workspace, then go to a fresh one ok(!("targetws" ~~ @{get_workspace_names()}), 'targetws does not exist yet'); @@ -180,22 +146,13 @@ exit_gracefully($process->pid); # already, next to the existing node. ##################################################################### -($fh, $tmpfile) = tempfile(); -say $fh "# i3 config file (v4)"; -say $fh "font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1"; -say $fh "ipc-socket $socketpath"; -say $fh q|assign "special" → ~|; -close($fh); +$config = </dev/null 2>/dev/null"; -$process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); - -diag("pid = " . $process->pid); +$process = launch_with_config($config); $tmp = fresh_workspace; diff --git a/testcases/t/67-workspace_layout.t b/testcases/t/67-workspace_layout.t index cfe8bf64..2b9f6e56 100644 --- a/testcases/t/67-workspace_layout.t +++ b/testcases/t/67-workspace_layout.t @@ -6,39 +6,22 @@ # use i3test; -use Cwd qw(abs_path); -use Proc::Background; -use File::Temp qw(tempfile tempdir); use X11::XCB qw(:all); use X11::XCB::Connection; my $x = X11::XCB::Connection->new; -# assuming we are run by complete-run.pl -my $i3_path = abs_path("../i3"); - ##################################################################### # 1: check that with an empty config, cons are place next to each # other and no split containers are created ##################################################################### -my $socketpath = File::Temp::tempnam('/tmp', 'i3-test-socket-'); +my $config = </dev/null 2>/dev/null"; -my $process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); - -diag("pid = " . $process->pid); +my $process = launch_with_config($config); my $tmp = fresh_workspace; @@ -59,22 +42,13 @@ exit_gracefully($process->pid); # they end up in a stacked con ##################################################################### -($fh, $tmpfile) = tempfile(); -say $fh "# i3 config file (v4)"; -say $fh "font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1"; -say $fh "ipc-socket $socketpath"; -say $fh "workspace_layout stacked"; -close($fh); +$config = </dev/null 2>/dev/null"; -$process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); - -diag("pid = " . $process->pid); +$process = launch_with_config($config); $tmp = fresh_workspace; diff --git a/testcases/t/70-force_focus_wrapping.t b/testcases/t/70-force_focus_wrapping.t index 020a3603..f2dfc18e 100644 --- a/testcases/t/70-force_focus_wrapping.t +++ b/testcases/t/70-force_focus_wrapping.t @@ -5,37 +5,21 @@ # Tests if the 'force_focus_wrapping' config directive works correctly. # use i3test; -use Cwd qw(abs_path); -use Proc::Background; -use File::Temp qw(tempfile tempdir); use X11::XCB qw(:all); use X11::XCB::Connection; my $x = X11::XCB::Connection->new; -# assuming we are run by complete-run.pl -my $i3_path = abs_path("../i3"); -my $socketpath = File::Temp::tempnam('/tmp', 'i3-test-socket-'); - ##################################################################### # 1: test the wrapping behaviour without force_focus_wrapping ##################################################################### -my ($fh, $tmpfile) = tempfile(); -say $fh "# i3 config file (v4)"; -say $fh "font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1"; -say $fh "ipc-socket $socketpath"; -close($fh); +my $config = </dev/null 2>/dev/null"; -my $process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); - -diag("pid = " . $process->pid); +my $process = launch_with_config($config); my $tmp = fresh_workspace; @@ -70,22 +54,13 @@ exit_gracefully($process->pid); # 2: test the wrapping behaviour with force_focus_wrapping ##################################################################### -($fh, $tmpfile) = tempfile(); -say $fh "# i3 config file (v4)"; -say $fh "font -misc-fixed-medium-r-normal--13-120-75-75-C-70-iso10646-1"; -say $fh "ipc-socket $socketpath"; -say $fh "force_focus_wrapping true"; -close($fh); +$config = </dev/null 2>/dev/null"; -$process = Proc::Background->new($i3cmd); -sleep 1; - -# force update of the cached socket path in lib/i3test -get_socket_path(0); - -diag("pid = " . $process->pid); +$process = launch_with_config($config); $tmp = fresh_workspace; diff --git a/testcases/t/lib/i3test.pm b/testcases/t/lib/i3test.pm index bd40f565..054bb2ae 100644 --- a/testcases/t/lib/i3test.pm +++ b/testcases/t/lib/i3test.pm @@ -1,7 +1,7 @@ package i3test; # vim:ts=4:sw=4:expandtab -use File::Temp qw(tmpnam); +use File::Temp qw(tmpnam tempfile tempdir); use Test::Builder; use X11::XCB::Rect; use X11::XCB::Window; @@ -11,13 +11,17 @@ use List::Util qw(first); use List::MoreUtils qw(lastval); use Time::HiRes qw(sleep); use Try::Tiny; +use Cwd qw(abs_path); +use Proc::Background; + use v5.10; use Exporter (); -our @EXPORT = qw(get_workspace_names get_unused_workspace fresh_workspace get_ws_content get_ws get_focused open_empty_con open_standard_window get_dock_clients cmd does_i3_live exit_gracefully workspace_exists focused_ws get_socket_path); +our @EXPORT = qw(get_workspace_names get_unused_workspace fresh_workspace get_ws_content get_ws get_focused open_empty_con open_standard_window get_dock_clients cmd does_i3_live exit_gracefully workspace_exists focused_ws get_socket_path launch_with_config); my $tester = Test::Builder->new(); my $_cached_socket_path = undef; +my $tmp_socket_path = undef; BEGIN { my $window_count = 0; @@ -229,4 +233,33 @@ sub get_socket_path { return $socketpath; } +# +# launches a new i3 process with the given string as configuration file. +# useful for tests which test specific config file directives. +# +# be sure to use !NO_I3_INSTANCE! somewhere in the file to signal +# complete-run.pl that it should not create an instance of i3 +# +sub launch_with_config { + my ($config) = @_; + + if (!defined($tmp_socket_path)) { + $tmp_socket_path = File::Temp::tempnam('/tmp', 'i3-test-socket-'); + } + + my ($fh, $tmpfile) = tempfile('i3-test-config-XXXXX', UNLINK => 1); + say $fh $config; + say $fh "ipc-socket $tmp_socket_path"; + close($fh); + + my $i3cmd = "exec " . abs_path("../i3") . " -V -d all --disable-signalhandler -c $tmpfile >/dev/null 2>/dev/null"; + my $process = Proc::Background->new($i3cmd); + sleep 1; + + # force update of the cached socket path in lib/i3test + get_socket_path(0); + + return $process; +} + 1