]> git.vpit.fr Git - perl/modules/Test-Valgrind.git/commitdiff
Importing Test-Valgrind-0.02.tar.gz v0.02
authorVincent Pit <vince@profvince.com>
Sun, 29 Jun 2008 15:58:34 +0000 (17:58 +0200)
committerVincent Pit <vince@profvince.com>
Sun, 29 Jun 2008 15:58:34 +0000 (17:58 +0200)
Changes
MANIFEST
META.yml
Makefile.PL
README
lib/Test/Valgrind.pm
lib/Test/Valgrind/Suppressions.pm
lib/Test/Valgrind/Suppressions.tpl [new file with mode: 0644]
t/01-import.t
t/10-suppressions.t

diff --git a/Changes b/Changes
index 6533c9da1108e912faa452c2fa290e0ffad41a32..57c82a4fdefa0785ab574a084376ea9e6d6e7201 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,5 +1,16 @@
 Revision history for Test-Valgrind
 
+0.02    2008-04-21 15:25 UTC
+        + Add : Test::Valgrind now depends on Perl::Destruct::Level. This is
+                needed for non-debugging perls because we can't set their
+                level of memory cleanup correctness on exit with the
+                PERL_DESTRUCT_LEVEL environment variable.
+        + Add : Hardcode valgrind path into the new constant
+                Test::Valgrind::Suppressions::VG_PATH.
+        + Chg : Test::Valgrind::Suppressions::supppath() is now supp_path().
+        + Chg : lib/Test/Valgrind/Suppressions.pm.tpl was renamed to
+                lib/Test/Valgrind/Suppressions.tpl for file portability reasons.
+
 0.01    2008-04-19 15:50 UTC
         First version, released on an unsuspecting world.
 
index 21501aa1ca5e6e124cb545623732ffa750a3abc7..774c1e28863962e02c6a22ce4076fc39a8504799 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -7,6 +7,7 @@ gen.pl
 lib/Test/Valgrind.pm
 lib/Test/Valgrind/perlTestValgrind.supp
 lib/Test/Valgrind/Suppressions.pm
+lib/Test/Valgrind/Suppressions.tpl
 samples/map.pl
 t/00-load.t
 t/01-import.t
index f6ac31330612e6c6661e0783cbf588df38ffe98f..884e5f024bf44a178bdf6e38a0bcced47e4c55e6 100644 (file)
--- a/META.yml
+++ b/META.yml
@@ -1,7 +1,7 @@
 --- #YAML:1.0
 name:                Test-Valgrind
-version:             0.01
-abstract:            Test your code through valgrind.
+version:             0.02
+abstract:            Test Perl code through valgrind.
 license:             perl
 author:              
     - Vincent Pit <perl@profvince.com>
@@ -10,6 +10,7 @@ distribution_type:   module
 requires:     
     Carp:                          0
     Exporter:                      0
+    Perl::Destruct::Level:         0
     POSIX:                         0
     Test::More:                    0
 meta-spec:
index 62522ed70ce9a569008359466ec6adbced371ca4..1d37fb9cc8b427147f5454fbea4ed6a39c890012 100644 (file)
@@ -3,9 +3,10 @@ use warnings;
 use ExtUtils::MakeMaker;
 
 my $has_vg = 0;
+my $vg;
 print 'Checking for valgrind >= 3.1.0 in PATH... ';
 for (split /:/, $ENV{PATH}) {
my $vg = $_ . '/valgrind';
+ $vg = $_ . '/valgrind';
  if (-x $vg) {
   my $ver = qx/$vg --version/;
   if ($ver =~ s/^valgrind-//) {
@@ -38,7 +39,17 @@ sub build_req {
  return $build_req;
 }
 
-my $supp = 'Test/Valgrind/perlTestValgrind.supp';
+my $supp = 'lib/Test/Valgrind/Suppressions';
+open my $tpl, '<', $supp . '.tpl' or die "open($supp.tpl): $!";
+open my $out, '>', $supp . '.pm'  or die "open($supp.pm): $!";
+while (<$tpl>) {
+ s/(VG_PATH\s*=>\s*)undef/$1'$vg'/g;
+ print $out $_;
+}
+close $out;
+close $tpl;
+
+$supp = 'Test/Valgrind/perlTestValgrind.supp';
 
 WriteMakefile(
     NAME          => 'Test::Valgrind',
@@ -55,10 +66,11 @@ WriteMakefile(
         'lib/' . $supp => '$(INST_ARCHLIB)/' . $supp,
     },
     PREREQ_PM     => {
-        'Carp'       => 0,
-        'Exporter'   => 0,
-        'POSIX'      => 0,
-        'Test::More' => 0,
+        'Carp'                  => 0,
+        'Exporter'              => 0,
+        'POSIX'                 => 0,
+        'Perl::Destruct::Level' => 0,
+        'Test::More'            => 0,
     },
     dist          => {
         PREOP      => 'pod2text lib/Test/Valgrind.pm > $(DISTVNAME)/README; '
diff --git a/README b/README
index acbd863cb62d0428c47f1f438205bdac9cd089a0..8ece675236afba73fbc9ff552fee60b166fbc767 100644 (file)
--- a/README
+++ b/README
@@ -1,13 +1,13 @@
 NAME
-    Test::Valgrind - Test your code through valgrind.
+    Test::Valgrind - Test Perl code through valgrind.
 
 VERSION
-    Version 0.01
+    Version 0.02
 
 SYNOPSIS
         use Test::More;
         eval 'use Test::Valgrind';
-        plan skip_all => 'Test::Valgrind is required to test your distribution with valgrind';
+        plan skip_all => 'Test::Valgrind is required to test your distribution with valgrind' if $@;
 
         # Code to inspect for memory leaks/errors.
 
@@ -20,6 +20,10 @@ DESCRIPTION
     parent then parses the report output by valgrind and pass or fail tests
     accordingly.
 
+    You can also use it from the command-line to test a given script :
+
+        perl -MTest::Valgrind leaky.pl
+
 CONFIGURATION
     You can pass parameters to "import" as a list of key / value pairs,
     where valid keys are :
@@ -46,15 +50,25 @@ CONFIGURATION
 
 CAVEATS
     You can't use this module to test code given by the "-e" command-line
-    switch. This module is not really secure. It's definitely not taint
-    safe. That shouldn't be a problem for test files. If your tests output
-    to STDERR, everything will be eaten in the process.
+    switch.
+
+    Results will most likely be better if your perl is built with debugging
+    enabled. Using the latest valgrind available will also help.
+
+    This module is not really secure. It's definitely not taint safe. That
+    shouldn't be a problem for test files.
+
+    If your tests output to STDERR, everything will be eaten in the process.
+    In particular, running this module against test files will obliterate
+    their original test results.
 
 DEPENDENCIES
     Valgrind 3.1.0 (<http://valgrind.org>).
 
     Carp, POSIX (core modules since perl 5) and Test::More (since 5.6.2).
 
+    Perl::Destruct::Level.
+
 AUTHOR
     Vincent Pit, "<perl at profvince.com>", <http://www.profvince.com>.
 
@@ -73,6 +87,13 @@ SUPPORT
 
         perldoc Test::Valgrind
 
+ACKNOWLEDGEMENTS
+    Rafaël Garcia-Suarez, for writing and instructing me about the
+    existence of Perl::Destruct::Level (Elizabeth Mattijsen is a close
+    second).
+
+    H.Merijn Brand, for daring to test this thing.
+
 COPYRIGHT & LICENSE
     Copyright 2008 Vincent Pit, all rights reserved.
 
index 647cde94f088f4419d454caf5694c0bb3597c227..b4ce02226566ccf6e2bffeb157338ff315f86989 100644 (file)
@@ -7,25 +7,27 @@ use Carp qw/croak/;
 use POSIX qw/SIGTERM/;
 use Test::More;
 
+use Perl::Destruct::Level level => 3;
+
 use Test::Valgrind::Suppressions;
 
 =head1 NAME
 
-Test::Valgrind - Test your code through valgrind.
+Test::Valgrind - Test Perl code through valgrind.
 
 =head1 VERSION
 
-Version 0.01
+Version 0.02
 
 =cut
 
-our $VERSION = '0.01';
+our $VERSION = '0.02';
 
 =head1 SYNOPSIS
 
     use Test::More;
     eval 'use Test::Valgrind';
-    plan skip_all => 'Test::Valgrind is required to test your distribution with valgrind';
+    plan skip_all => 'Test::Valgrind is required to test your distribution with valgrind' if $@;
 
     # Code to inspect for memory leaks/errors.
 
@@ -33,6 +35,10 @@ our $VERSION = '0.01';
 
 This module lets you run some code through the B<valgrind> memory debugger, to test it for memory errors and leaks. Just add C<use Test::Valgrind> at the beginning of the code you want to test. Behind the hood, C<Test::Valgrind::import> forks so that the child can basically C<exec 'valgrind', $^X, $0> (except that of course C<$0> isn't right there). The parent then parses the report output by valgrind and pass or fail tests accordingly.
 
+You can also use it from the command-line to test a given script :
+
+    perl -MTest::Valgrind leaky.pl
+
 =head1 CONFIGURATION
 
 You can pass parameters to C<import> as a list of key / value pairs, where valid keys are :
@@ -112,7 +118,7 @@ sub import {
     '--error-limit=yes'
    );
    unless ($args{no_supp}) {
-    for (Test::Valgrind::Suppressions::supppath(), $args{supp}) {
+    for (Test::Valgrind::Suppressions::supp_path(), $args{supp}) {
      push @args, '--suppressions=' . $_ if $_;
     }
    }
@@ -125,7 +131,8 @@ sub import {
    print STDERR "valgrind @args\n" if $args{diag};
    local $ENV{PERL_DESTRUCT_LEVEL} = 3;
    local $ENV{PERL_DL_NONLAZY} = 1;
-   exec 'valgrind', @args;
+   my $vg = Test::Valgrind::Suppressions::VG_PATH;
+   exec $vg, @args if $vg and -x $vg;
   }
   close $wtr or croak "close(\$wtr): $!";
   local $SIG{INT} = sub { kill -(SIGTERM) => $pid };
@@ -168,8 +175,12 @@ sub import {
 =head1 CAVEATS
 
 You can't use this module to test code given by the C<-e> command-line switch.
+
+Results will most likely be better if your perl is built with debugging enabled. Using the latest valgrind available will also help.
+
 This module is not really secure. It's definitely not taint safe. That shouldn't be a problem for test files.
-If your tests output to STDERR, everything will be eaten in the process.
+
+If your tests output to STDERR, everything will be eaten in the process. In particular, running this module against test files will obliterate their original test results.
 
 =head1 DEPENDENCIES
 
@@ -177,6 +188,8 @@ 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<Perl::Destruct::Level>.
+
 =head1 AUTHOR
 
 Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>.
@@ -193,12 +206,17 @@ You can find documentation for this module with the perldoc command.
 
     perldoc Test::Valgrind
 
+=head1 ACKNOWLEDGEMENTS
+
+Rafaël Garcia-Suarez, for writing and instructing me about the existence of L<Perl::Destruct::Level> (Elizabeth Mattijsen is a close second).
+
+H.Merijn Brand, for daring to test this thing.
+
 =head1 COPYRIGHT & LICENSE
 
 Copyright 2008 Vincent Pit, all rights reserved.
 
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
 
 =cut
 
index 12c6607155af75585812bc0f1b6aa0136795b556..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,82 +0,0 @@
-package Test::Valgrind::Suppressions;
-
-use strict;
-use warnings;
-
-=head1 NAME
-
-Test::Valgrind::Suppressions - Placeholder for architecture-dependant perl suppressions.
-
-=head1 VERSION
-
-Version 0.01
-
-=cut
-
-our $VERSION = '0.01';
-
-=head1 DESCRIPTION
-
-L<Test::Valgrind> needs suppressions so that perl's errors aren't reported. However, these suppressions depend widely on the architecture, perl's version and the features it has been build with (e.g. threads). The goal of this module is hence to be installed together with the suppression file generated when the Test-Valgrind distribution was built, and to handle back to L<Test::Valgrind> the path to the suppression file.
-
-=head1 FUNCTIONS
-
-=head2 C<supppath>
-
-Returns the path to the suppression file that applies to the current running perl, or C<undef> when no such file is available.
-
-=cut
-
-sub supppath {
- my $pkg = __PACKAGE__;
- $pkg =~ s!::!/!g;
- $pkg .= '.pm';
- return if not $INC{$pkg};
- my $supp = $INC{$pkg};
- $supp =~ s![^/]*$!perlTestValgrind.supp!;
- return (-f $supp) ? $supp : undef;
-}
-
-=head1 EXPORT
-
-This module exports the L</supppath> function only on demand, either by giving its name, or by the C<:funcs> or C<:all> tags.
-
-=cut
-
-use base qw/Exporter/;
-
-our @EXPORT         = ();
-our %EXPORT_TAGS    = ( 'funcs' =>  [ qw/supppath/ ] );
-our @EXPORT_OK      = map { @$_ } values %EXPORT_TAGS;
-$EXPORT_TAGS{'all'} = [ @EXPORT_OK ];
-
-=head1 SEE ALSO
-
-L<Test::Valgrind>.
-
-=head1 AUTHOR
-
-Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>.
-
-You can contact me by mail or on #perl @ FreeNode (vincent or Prof_Vince).
-
-=head1 BUGS
-
-Please report any bugs or feature requests to C<bug-test-valgrind-suppressions at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Valgrind>.  I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
-
-=head1 SUPPORT
-
-You can find documentation for this module with the perldoc command.
-
-    perldoc Test::Valgrind::Suppressions
-
-=head1 COPYRIGHT & LICENSE
-
-Copyright 2008 Vincent Pit, all rights reserved.
-
-This program is free software; you can redistribute it and/or modify it
-under the same terms as Perl itself.
-
-=cut
-
-1; # End of Test::Valgrind::Suppressions
diff --git a/lib/Test/Valgrind/Suppressions.tpl b/lib/Test/Valgrind/Suppressions.tpl
new file mode 100644 (file)
index 0000000..f3f7636
--- /dev/null
@@ -0,0 +1,94 @@
+package Test::Valgrind::Suppressions;
+
+use strict;
+use warnings;
+
+=head1 NAME
+
+Test::Valgrind::Suppressions - Placeholder for architecture-dependant perl suppressions.
+
+=head1 VERSION
+
+Version 0.02
+
+=cut
+
+our $VERSION = '0.02';
+
+=head1 DESCRIPTION
+
+L<Test::Valgrind> needs suppressions so that perl's errors aren't reported. However, these suppressions depend widely on the architecture, perl's version and the features it has been build with (e.g. threads). The goal of this module is hence to be installed together with the suppression file generated when the Test-Valgrind distribution was built, and to handle back to L<Test::Valgrind> the path to the suppression file.
+
+=head1 FUNCTIONS
+
+=head2 C<supp_path>
+
+Returns the path to the suppression file that applies to the current running perl, or C<undef> when no such file is available.
+
+=cut
+
+sub supp_path {
+ my $pkg = __PACKAGE__;
+ $pkg =~ s!::!/!g;
+ $pkg .= '.pm';
+ return if not $INC{$pkg};
+ my $supp = $INC{$pkg};
+ $supp =~ s![^/]*$!perlTestValgrind.supp!;
+ return (-f $supp) ? $supp : undef;
+}
+
+=head1 CONSTANTS
+
+=head2 C<VG_PATH>
+
+The path to the valgrind binary from which the suppressions were generated.
+
+=cut
+
+use constant VG_PATH => undef;
+
+=head1 EXPORT
+
+This module exports the L</supp_path> function and the L</VG_PATH> constants only on demand, either by giving their name explicitely or by the C<:funcs>, C<:consts> or C<:all> tags.
+
+=cut
+
+use base qw/Exporter/;
+
+our @EXPORT         = ();
+our %EXPORT_TAGS    = (
+ 'funcs'  => [ qw/supp_path/ ],
+ 'consts' => [ qw/VG_PATH/ ]
+);
+our @EXPORT_OK      = map { @$_ } values %EXPORT_TAGS;
+$EXPORT_TAGS{'all'} = [ @EXPORT_OK ];
+
+=head1 SEE ALSO
+
+L<Test::Valgrind>.
+
+=head1 AUTHOR
+
+Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>.
+
+You can contact me by mail or on #perl @ FreeNode (vincent or Prof_Vince).
+
+=head1 BUGS
+
+Please report any bugs or feature requests to C<bug-test-valgrind-suppressions at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Valgrind>.  I will be notified, and then you'll automatically be notified of progress on your bug as I make changes.
+
+=head1 SUPPORT
+
+You can find documentation for this module with the perldoc command.
+
+    perldoc Test::Valgrind::Suppressions
+
+=head1 COPYRIGHT & LICENSE
+
+Copyright 2008 Vincent Pit, all rights reserved.
+
+This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
+
+=cut
+
+1; # End of Test::Valgrind::Suppressions
index 8a40f8a1b5ed803afc0eba1760b778b33b1cdfc6..cb0938f7ae33efa1049fbf0e3685549c913566c8 100644 (file)
@@ -3,11 +3,11 @@
 use strict;
 use warnings;
 
-use Test::More tests => 1;
+use Test::More tests => 2;
 
 require Test::Valgrind::Suppressions;
 
-for (qw/supppath/) {
+for (qw/supp_path VG_PATH/) {
  eval { Test::Valgrind::Suppressions->import($_) };
  ok(!$@, 'import ' . $_);
 }
index 9dc37d9e73ff75131c01bedf5c25f3673d67579a..935dfbee5011d98d7388764c39b8c3f15766ae3b 100644 (file)
@@ -2,10 +2,12 @@
 
 use strict;
 use warnings;
-use Test::More tests => 1;
+use Test::More tests => 2;
 
-use Test::Valgrind::Suppressions qw/supppath/;
+use Test::Valgrind::Suppressions qw/supp_path VG_PATH/;
 
-my $path = supppath();
+my $path = supp_path();
 like($path, qr!Test/Valgrind/perlTestValgrind\.supp$!,
      'supppath() returns the path to the suppression file');
+
+isnt(VG_PATH, undef, 'VG_PATH is defined');