test return status of example commands and pipes
[barcat.git] / t / examples.t
index cd7f1b37edef4281c600b05efbe3c9b0746dfb20..02019b9b4a8e9a72fbf593c484f3e9ce3bde9d82 100755 (executable)
@@ -15,18 +15,26 @@ open my $input, '<', $filename
 
 local $/ = "\n\n";
 while (readline $input) {
+       # find code snippets in the appropriate section
        /^=head1 EXAMPLES/ ... /^=head1/ or next;
        /^\h/ or next;
        chomp;
 
        my ($name) = /[\h(]*([^|]+)/;
 
+       # prepare shell command to execute
        my $cmd = $_;
        while (my ($subcmd, $args) = each %CMDARGS) {
                $subcmd .= " \\K", $args .= ' ' unless $subcmd =~ m/\\K/;
                $cmd =~ s/\b$subcmd/$args/;
        }
-       ok(qx($cmd), $name);
+       $cmd =~ s/'/'\\''/g, $cmd = "bash -c 'set -o pipefail\n$cmd'";
+
+       # run and report unexpected results
+       ok(eval {
+               qx($cmd) or return;
+               return $? == 0;
+       }, $name);
 }
 
 done_testing();