]> git.vpit.fr Git - perl/modules/Test-Valgrind.git/blobdiff - lib/Test/Valgrind/Session.pm
Add a new T::V::Command::Aggregate that aggregates several commands together
[perl/modules/Test-Valgrind.git] / lib / Test / Valgrind / Session.pm
index d65ca9e8a0c3763e83ba54bf0e9db264c951208b..3174bdef84d6962962d1457bbf5882405cb0ea05 100644 (file)
@@ -176,14 +176,31 @@ sub extra_supps { @{$_[0]->{extra_supps} || []} }
 
 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
  ));