X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=testcases%2Flib%2Fi3test.pm.in;h=a484c91a441fe318cbecfe5f3286e2c9e094ba76;hb=aa0b1f599f25cfe858ebbc7fa80d459bcdb2ae02;hp=f9f6e821532ef07e8e25b658e6d469242aefa317;hpb=84e70a19a82eeed387160a75f4ca28717cd5db7a;p=i3%2Fi3 diff --git a/testcases/lib/i3test.pm.in b/testcases/lib/i3test.pm.in index f9f6e821..a484c91a 100644 --- a/testcases/lib/i3test.pm.in +++ b/testcases/lib/i3test.pm.in @@ -7,6 +7,7 @@ use Test::Builder; use X11::XCB::Rect; use X11::XCB::Window; use X11::XCB qw(:all); +use lib qw(@abs_top_srcdir@/AnyEvent-I3/blib/lib); use AnyEvent::I3; use List::Util qw(first); use Time::HiRes qw(sleep); @@ -45,6 +46,7 @@ our @EXPORT = qw( wait_for_map wait_for_unmap $x + kill_all_windows ); =head1 NAME @@ -75,7 +77,7 @@ i3test automatically "use"s C, C, C, C’s C and C so that all of them are available to you in your testcase. -See also C (L) +See also C (L) which provides additional test instructions (like C or C). =cut @@ -98,14 +100,8 @@ my $i3_pid; my $i3_autostart; END { - - # testcases which start i3 manually should always call exit_gracefully - # on their own. Let’s see, whether they really did. - if (! $i3_autostart) { - return unless $i3_pid; - - $tester->ok(undef, 'testcase called exit_gracefully()'); - } + # Skip the remaining cleanup for testcases which set i3_autostart => 0: + return if !defined($i3_pid) && !$i3_autostart; # don't trigger SIGCHLD handler local $SIG{CHLD}; @@ -124,7 +120,7 @@ END { exit_gracefully($i3_pid, "/tmp/nested-$ENV{DISPLAY}"); } else { - kill(9, $i3_pid) + kill(-9, $i3_pid) or $tester->BAIL_OUT("could not kill i3"); waitpid $i3_pid, 0; @@ -136,8 +132,9 @@ sub import { my $pkg = caller; $i3_autostart = delete($args{i3_autostart}) // 1; + my $i3_config = delete($args{i3_config}) // '-default'; - my $cv = launch_with_config('-default', dont_block => 1) + my $cv = launch_with_config($i3_config, dont_block => 1) if $i3_autostart; my $test_more_args = ''; @@ -662,7 +659,7 @@ processes, only after all other events are done. This can be used to ensure the results of a cmd 'focus left' are pushed to X11 and that C<< $x->input_focus >> returns the correct value afterwards. -See also L for a longer explanation. +See also L for a longer explanation. my $window = open_window; $window->add_hint('urgency'); @@ -791,14 +788,7 @@ sub get_socket_path { if ($cache && defined($_cached_socket_path)) { return $_cached_socket_path; } - - my $atom = $x->atom(name => 'I3_SOCKET_PATH'); - my $cookie = $x->get_property(0, $x->get_root_window(), $atom->id, GET_PROPERTY_TYPE_ANY, 0, 256); - my $reply = $x->get_property_reply($cookie->{sequence}); - my $socketpath = $reply->{value}; - if ($socketpath eq "/tmp/nested-$ENV{DISPLAY}") { - $socketpath .= '-activation'; - } + my $socketpath = i3test::Util::get_socket_path($x); $_cached_socket_path = $socketpath; return $socketpath; } @@ -833,8 +823,11 @@ sub launch_with_config { my ($fh, $tmpfile) = tempfile("i3-cfg-for-$ENV{TESTNAME}-XXXXX", UNLINK => 1); + say $fh "ipc-socket $tmp_socket_path" + unless $args{dont_add_socket_path}; + if ($config ne '-default') { - say $fh $config; + print $fh $config; } else { open(my $conf_fh, '<', '@abs_top_srcdir@/testcases/i3-test.config') or $tester->BAIL_OUT("could not open default config: $!"); @@ -842,9 +835,6 @@ sub launch_with_config { say $fh scalar <$conf_fh>; } - say $fh "ipc-socket $tmp_socket_path" - unless $args{dont_add_socket_path}; - close($fh); my $cv = AnyEvent->condvar; @@ -861,6 +851,8 @@ sub launch_with_config { cv => $cv, dont_create_temp_dir => $args{dont_create_temp_dir}, validate_config => $args{validate_config}, + inject_randr15 => $args{inject_randr15}, + inject_randr15_outputinfo => $args{inject_randr15_outputinfo}, ); # If we called i3 with -C, we wait for it to exit and then return as @@ -897,6 +889,17 @@ sub get_i3_log { return slurp($logfile); } +=head2 kill_all_windows + +Kills all windows to clean up between tests. + +=cut +sub kill_all_windows { + # Sync in case not all windows are managed by i3 just yet. + sync_with_i3; + cmd '[title=".*"] kill'; +} + =head1 AUTHOR Michael Stapelberg