]> git.sur5r.net Git - i3/i3/commitdiff
tests: make t/59-socketpaths exit gracefully
authorMichael Stapelberg <michael@stapelberg.de>
Tue, 24 May 2011 20:21:05 +0000 (22:21 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Tue, 24 May 2011 20:31:50 +0000 (22:31 +0200)
Increases reported line coverage from 60.7% to 60.9%

testcases/t/59-socketpaths.t
testcases/t/lib/i3test.pm

index 3c9f90eb0fe30bca104215582f4cb31dba2cdd40..9fc77910cd559dddc46f08141508e864ea475584 100644 (file)
@@ -34,7 +34,9 @@ ok(-d $folder, "folder $folder exists");
 my $socketpath = "$folder/ipc-socket." . $process->pid;
 ok(-S $socketpath, "file $socketpath exists and is a socket");
 
-kill(9, $process->pid) or die "could not kill i3";
+exit_gracefully($process->pid, $socketpath);
+
+sleep 0.25;
 
 #####################################################################
 # XDG_RUNTIME_DIR case: socket gets created in $XDG_RUNTIME_DIR/i3/ipc-socket.<pid>
@@ -52,7 +54,9 @@ ok(-d "$rtdir/i3", "$rtdir/i3 exists and is a directory");
 $socketpath = "$rtdir/i3/ipc-socket." . $process->pid;
 ok(-S $socketpath, "file $socketpath exists and is a socket");
 
-kill(9, $process->pid) or die "could not kill i3";
+exit_gracefully($process->pid, $socketpath);
+
+sleep 0.25;
 
 #####################################################################
 # configuration file case: socket gets placed whereever we specify
@@ -73,6 +77,6 @@ sleep 1;
 
 ok(-S $socketpath, "file $socketpath exists and is a socket");
 
-kill(9, $process->pid) or die "could not kill i3";
+exit_gracefully($process->pid, $socketpath);
 
 done_testing;
index 4e6989fcbdde1afdc98838d3cea942298c5ee9ee..2dbc83b86134f3348a1efa1c1da92623f9fe6315 100644 (file)
@@ -10,10 +10,11 @@ use AnyEvent::I3;
 use List::Util qw(first);
 use List::MoreUtils qw(lastval);
 use Time::HiRes qw(sleep);
+use Try::Tiny;
 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);
+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);
 
 my $tester = Test::Builder->new();
 
@@ -175,4 +176,21 @@ sub does_i3_live {
     return $ok;
 }
 
+# Tries to exit i3 gracefully (with the 'exit' cmd) or kills the PID if that fails
+sub exit_gracefully {
+    my ($pid, $socketpath) = @_;
+    $socketpath ||= '/tmp/nestedcons';
+
+    my $exited = 0;
+    try {
+        say "Exiting i3 cleanly...";
+        i3($socketpath)->command('exit')->recv;
+        $exited = 1;
+    };
+
+    if (!$exited) {
+        kill(9, $pid) or die "could not kill i3";
+    }
+}
+
 1