]> git.vpit.fr Git - perl/modules/Test-Valgrind.git/blobdiff - lib/Test/Valgrind.pm
die() instead of croak() on system errors
[perl/modules/Test-Valgrind.git] / lib / Test / Valgrind.pm
index e8925d86cdd19523f96a363bc09a446379a521f9..a676ad0c5d484a44f7c0f339a424b2bb826efb0e 100644 (file)
@@ -5,7 +5,8 @@ use warnings;
 
 use Carp qw/croak/;
 use POSIX qw/SIGTERM/;
-use Test::More;
+use Fcntl qw/F_SETFD/;
+use Test::Builder;
 
 use Perl::Destruct::Level level => 3;
 
@@ -17,11 +18,11 @@ Test::Valgrind - Test Perl code through valgrind.
 
 =head1 VERSION
 
-Version 0.051
+Version 0.06
 
 =cut
 
-our $VERSION = '0.051';
+our $VERSION = '0.06';
 
 =head1 SYNOPSIS
 
@@ -98,6 +99,8 @@ Specifies a subroutine to execute for each test instead of C<Test::More::is>. It
 
 =cut
 
+my $Test = Test::Builder->new;
+
 my $run;
 
 sub _counter {
@@ -105,7 +108,7 @@ sub _counter {
 }
 
 sub _tester {
is($_[0], 0, $_[1]);
$Test->is_num($_[0], 0, $_[1]);
  _counter(@_);
 }
 
@@ -144,24 +147,25 @@ sub import {
     }
    }
    if (!$vg) {
-    plan skip_all => 'No valgrind executable could be found in your path';
+    $Test->skip_all('No valgrind executable could be found in your path');
     return;
    } 
   }
-  pipe my $rdr, my $wtr or croak "pipe(\$rdr, \$wtr): $!";
+  pipe my $rdr, my $wtr or die "pipe(\$rdr, \$wtr): $!";
   my $pid = fork;
   if (!defined $pid) {
-   croak "fork(): $!";
+   die "fork(): $!";
   } elsif ($pid == 0) {
-   setpgrp 0, 0 or croak "setpgrp(0, 0): $!";
-   close $rdr or croak "close(\$rdr): $!";
-   open STDERR, '>&', $wtr or croak "open(STDERR, '>&', \$wtr): $!";
+   setpgrp 0, 0 or die "setpgrp(0, 0): $!";
+   close $rdr or die "close(\$rdr): $!";
+   fcntl $wtr, F_SETFD, 0 or die "fcntl(\$wtr, F_SETFD, 0): $!";
    my @args = (
     '--tool=memcheck',
     '--leak-check=full',
     '--leak-resolution=high',
     '--num-callers=' . $callers,
-    '--error-limit=yes'
+    '--error-limit=yes',
+    '--log-fd=' . fileno($wtr)
    );
    unless ($args{no_supp}) {
     for (Test::Valgrind::Suppressions::supp_path(), $args{supp}) {
@@ -179,19 +183,19 @@ sub import {
    local $ENV{PERL_DL_NONLAZY} = 1;
    exec $vg, @args;
   }
-  close $wtr or croak "close(\$wtr): $!";
+  close $wtr or die "close(\$wtr): $!";
   local $SIG{INT} = sub { kill -(SIGTERM) => $pid };
-  plan tests => 5 unless $args{no_test};
+  $Test->plan(tests => 5) unless $args{no_test} or defined $Test->has_plan;
   my @tests = (
    'errors',
    'definitely lost', 'indirectly lost', 'possibly lost', 'still reachable'
   );
   my %res = map { $_ => 0 } @tests;
   while (<$rdr>) {
-   diag $_ if $args{diag};
+   $Test->diag($_) if $args{diag};
    if (/^=+\d+=+\s*FATAL\s*:\s*(.*)/) {
     chomp(my $err = $1);
-    diag "Valgrind error: $err";
+    $Test->diag("Valgrind error: $err");
     $res{$_} = undef for @tests;
    }
    if (/ERROR\s+SUMMARY\s*:\s+(\d+)/) {
@@ -232,7 +236,7 @@ If your tests output to STDERR, everything will be eaten in the process. In part
 
 Valgrind 3.1.0 (L<http://valgrind.org>).
 
-L<Carp>, L<POSIX> (core modules since perl 5) and L<Test::More> (since 5.6.2).
+L<Carp>, L<Fcntl>, L<POSIX> (core modules since perl 5) and L<Test::Builder> (since 5.6.2).
 
 L<Perl::Destruct::Level>.