=head1 VERSION
-Version 1.02
+Version 1.12
=cut
-our $VERSION = '1.02';
+our $VERSION = '1.12';
=head1 DESCRIPTION
=cut
-# All these modules are required at configure time.
+use File::Spec ();
+use Scalar::Util ();
-BEGIN {
- require File::Spec;
- require Scalar::Util;
+use Fcntl (); # F_SETFD
+use POSIX (); # SIGKILL
- require Fcntl; # F_SETFD
- require POSIX; # SIGKILL
-}
+use version ();
-use base qw/Test::Valgrind::Carp/;
+use base qw<Test::Valgrind::Carp>;
=head1 METHODS
=cut
-my $build_version = sub {
- require version;
- version->new($_[0]);
-};
-
sub new {
my $class = shift;
$class = ref($class) || $class;
my %args = @_;
my @paths;
- my $vg = delete $args{vg};
+ my $vg = delete $args{valgrind};
if (defined $vg and not ref $vg) {
@paths = ($vg);
} else {
$class->_croak('Empty valgrind candidates list') unless @paths;
my $min_version = delete $args{min_version};
- defined and not ref and $_ = $build_version->($_) for $min_version;
+ defined and not ref and $_ = version->new($_) for $min_version;
my ($valgrind, $version);
for (@paths) {
my $ver = qx/$_ --version/;
if ($ver =~ /^valgrind-(\d+(\.\d+)*)/) {
if ($min_version) {
- $version = $build_version->($1);
+ $version = version->new($1);
next if $version < $min_version;
} else {
$version = $1;
my ($self) = @_;
my $version = $self->{version};
- $self->{version} = $version = $build_version->($version) unless ref $version;
+ $self->{version} = $version = version->new($version) unless ref $version;
return $version;
}
=cut
-eval "sub $_ { \$_[0]->{$_} }" for qw/valgrind no_def_supp/;
+eval "sub $_ { \$_[0]->{$_} }" for qw<valgrind no_def_supp>;
=head2 C<extra_supps>
my %args = @_;
$self->start(%args);
- my $guard = bless sub { $self->finish } => 'Test::Valgrind::Session::Guard';
+ my $guard = Test::Valgrind::Session::Guard->new(sub { $self->finish });
$self->_run($args{command});
}
"Suppressions for this perl stored in $def_supp"
));
}
- push @supp_args, '--suppressions=' . $_ for $self->suppressions;
+ for ($self->suppressions) {
+ next unless -e $_;
+ $self->report($self->report_class->new_diag("Using suppression file $_"));
+ push @supp_args, "--suppressions=$_";
+ }
}
pipe my $vrdr, my $vwtr or $self->_croak("pipe(\$vrdr, \$vwtr): $!");
return;
}
-sub Test::Valgrind::Session::Guard::DESTROY { $_[0]->() }
+sub Test::Valgrind::Session::Guard::new { bless \($_[1]), $_[0] }
+
+sub Test::Valgrind::Session::Guard::DESTROY { ${$_[0]}->() }
=head2 C<action>
Read-only accessor for the C<tool> associated to the current run.
+=head2 C<parser>
+
+Read-only accessor for the C<parser> associated to the current tool.
+
=head2 C<command>
Read-only accessor for the C<command> associated to the current run.
my @members;
BEGIN {
- @members = qw/action tool command parser/;
+ @members = qw<action tool command parser>;
for (@members) {
eval "sub $_ { \@_ <= 1 ? \$_[0]->{$_} : (\$_[0]->{$_} = \$_[1]) }";
die if $@;
sub do_suppressions { $_[0]->action->do_suppressions }
+=head2 C<parser_class>
+
+Calls C<< ->tool->parser_class >> with the current session object as the unique argument.
+
+=cut
+
+sub parser_class { $_[0]->tool->parser_class($_[0]) }
+
=head2 C<report_class>
-Calls C<< ->action->report_class >> with the current session object as the unique argument.
+Calls C<< ->tool->report_class >> with the current session object as the unique argument.
=cut
my %args = @_;
- for (qw/action tool command/) {
+ for (qw<action tool command>) {
my $base = 'Test::Valgrind::' . ucfirst;
my $value = $args{$_};
$self->_croak("Invalid $_") unless Scalar::Util::blessed($value)
$self->$_($args{$_})
}
- delete @{$self}{qw/last_status exit_code/};
+ delete @{$self}{qw<last_status exit_code>};
$self->tool->start($self);
- $self->parser($self->tool->parser_class->new)->start($self);
+ $self->parser($self->parser_class->new)->start($self);
$self->action->start($self);
return;
return unless defined $report;
- for my $handler (qw/tool command/) {
+ for my $handler (qw<tool command>) {
$report = $self->$handler->filter($self, $report);
return unless defined $report;
}
=head1 COPYRIGHT & LICENSE
-Copyright 2009 Vincent Pit, all rights reserved.
+Copyright 2009,2010,2011 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.