]> git.sur5r.net Git - i3/i3/commitdiff
tests: add --coverage-testing option to complete-run.pl
authorMichael Stapelberg <michael@stapelberg.de>
Sun, 8 May 2011 18:08:35 +0000 (20:08 +0200)
committerMichael Stapelberg <michael@stapelberg.de>
Sun, 8 May 2011 18:08:35 +0000 (20:08 +0200)
testcases/complete-run.pl

index 9f201e1b73aa586c2d033f8fbcd61cf8800f70fb..c3a654807d327b2c179c9e5828aba8c9aa1d03cd 100755 (executable)
@@ -11,6 +11,9 @@ use Proc::Background;
 use TAP::Harness;
 use TAP::Parser::Aggregator;
 use File::Basename qw(basename);
+use AnyEvent::I3 qw(:all);
+use Try::Tiny;
+use Getopt::Long;
 
 # reads in a whole file
 sub slurp {
@@ -19,6 +22,12 @@ sub slurp {
     <$fh>;
 }
 
+my $coverage_testing = 0;
+
+my $result = GetOptions(
+    "coverage-testing" => \$coverage_testing
+);
+
 my $i3cmd = "export DISPLAY=:0; exec " . abs_path("../i3") . " -V -d all --disable-signalhandler -c " . abs_path("../i3.config");
 
 # 1: get a list of all testcases
@@ -51,7 +60,24 @@ for my $t (@testfiles) {
     my $process = Proc::Background->new($cmd) unless $dont_start;
     say "testing $t with logfile $logpath";
     $harness->aggregate_tests($aggregator, [ $t ]);
-    kill(9, $process->pid) or die "could not kill i3" unless $dont_start;
+
+    # Don’t bother killing i3 when we haven’t started it
+    next if $dont_start;
+
+    # When measuring code coverage, try to exit i3 cleanly (otherwise, .gcda
+    # files are not written) and fallback to killing it
+    if ($coverage_testing) {
+        my $exited = 0;
+        try {
+            say "Exiting i3 cleanly...";
+            i3("/tmp/nestedcons")->command('exit')->recv;
+            $exited = 1;
+        };
+        next if $exited;
+    }
+
+    say "Killing i3";
+    kill(9, $process->pid) or die "could not kill i3";
 }
 $aggregator->stop();