=head1 VERSION
-Version 1.01
+Version 1.02
=cut
-our $VERSION = '1.01';
+our $VERSION = '1.02';
=head1 DESCRIPTION
Runs the command C<$command> through C<valgrind> with the tool C<$tool>, which will report to the action C<$action>.
+If the command is a L<Test::Valgrind::Command::Aggregate> object, the action and the tool will be initialized once before running all the aggregated commands.
+
=cut
sub run {
my $self = shift;
- $self->start(@_);
+ my %args = @_;
+
+ $self->start(%args);
my $guard = bless sub { $self->finish } => 'Test::Valgrind::Session::Guard';
+ $self->_run($args{command});
+}
+
+sub _run {
+ my ($self, $cmd) = @_;
+
+ if ($cmd->isa('Test::Valgrind::Command::Aggregate')) {
+ $self->_run($_) for $cmd->commands;
+ return;
+ }
+
+ $self->command($cmd);
+
$self->report(Test::Valgrind::Report->new_diag(
'Using valgrind ' . $self->version . ' located at ' . $self->valgrind
));
=cut
sub report {
- my $self = shift;
- $self->action->report($self, @_);
+ my ($self, $report) = @_;
+
+ return unless defined $report;
+
+ $report = $self->command->filter($self, $report);
+ return unless defined $report;
+
+ $self->action->report($self, $report);
}
=head2 C<finish>