X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FTest-Valgrind.git;a=blobdiff_plain;f=lib%2FTest%2FValgrind%2FSession.pm;h=3174bdef84d6962962d1457bbf5882405cb0ea05;hp=d65ca9e8a0c3763e83ba54bf0e9db264c951208b;hb=0e79c45af8d5eabe900280cc0e5467936467dee9;hpb=f040b7d40c89671ee109c2554dbb5471fe88b449 diff --git a/lib/Test/Valgrind/Session.pm b/lib/Test/Valgrind/Session.pm index d65ca9e..3174bde 100644 --- a/lib/Test/Valgrind/Session.pm +++ b/lib/Test/Valgrind/Session.pm @@ -176,14 +176,31 @@ sub extra_supps { @{$_[0]->{extra_supps} || []} } Runs the command C<$command> through C with the tool C<$tool>, which will report to the action C<$action>. +If the command is a L 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 ));