]> git.vpit.fr Git - perl/modules/Test-Valgrind.git/commitdiff
Tools can only be run in one session at a time by default
authorVincent Pit <vince@profvince.com>
Mon, 24 Aug 2009 22:55:28 +0000 (00:55 +0200)
committerVincent Pit <vince@profvince.com>
Mon, 24 Aug 2009 22:55:28 +0000 (00:55 +0200)
So that Tool::memcheck doesn't have to check if its private ->_session accessor is set

lib/Test/Valgrind/Tool.pm
lib/Test/Valgrind/Tool/memcheck.pm

index 9bd530f5a43f17ffc2c64a560b76dc0a22ce5653..a1211af7fb3a3dedaf668ca290980d677cfa15db 100644 (file)
@@ -58,7 +58,11 @@ sub new {
   return $tool->new(%args);
  }
 
- bless { }, $class;
+ my $self = bless { }, $class;
+
+ $self->started(undef);
+
+ $self;
 }
 
 =head2 C<new_trainer>
@@ -116,7 +120,7 @@ Defaults to the empty list.
 
 =cut
 
-sub args  { }
+sub args { }
 
 =head2 C<suppressions_tag $session>
 
@@ -128,25 +132,43 @@ This method must be implemented when subclassing.
 
 sub suppressions_tag;
 
+=head2 C<started>
+
+Specifies whether the tool is running (C<1>), stopped (C<0>) or was never started (C<undef>).
+
+=cut
+
+sub started { @_ <= 1 ? $_[0]->{started} : ($_[0]->{started} = $_[1]) }
+
 =head2 C<start $session>
 
 Called when the C<$session> starts.
 
-Defaults to void.
+Defaults to set L</started>.
 
 =cut
 
-sub start { }
+sub start {
+ my ($self) = @_;
+
+ $self->_croak('Tool already started') if $self->started;
+ $self->started(1);
+
+ return;
+}
 
 =head2 C<parse $session, $fh>
 
 Wraps around either L</parse_suppressions> or L</parse_analysis> depending on the running mode of the C<$session>.
+Croaks if the tool isn't started.
 
 =cut
 
 sub parse {
  my ($self, $sess, $fh) = @_;
 
+ $self->_croak('Tool isn\'t started') unless $self->started;
+
  if ($sess->do_suppressions) {
   $self->parse_suppressions($sess, $fh);
  } else {
@@ -178,11 +200,18 @@ sub parse_analysis;
 
 Called when the C<$session> finishes.
 
-Defaults to void.
+Defaults to clear L</started>.
 
 =cut
 
-sub finish { }
+sub finish {
+ my ($self) = @_;
+
+ return unless $self->started;
+ $self->started(0);
+
+ return;
+}
 
 =head1 SEE ALSO
 
index c32b2ae5e6d0a5792ad5d43f191968e4cbf8ea17..15b65870c7231724e24afc7e57a253c6829e43f6 100644 (file)
@@ -121,9 +121,6 @@ sub _session { @_ <= 1 ? $_[0]->{_session} : ($_[0]->{_session} = $_[1]) }
 sub start {
  my ($self, $sess) = @_;
 
- $self->_croak('This memcheck tool can\'t be run in two sessions at once')
-                                                             if $self->_session;
-
  $self->SUPER::start($sess);
  $self->_session($sess);