]> git.vpit.fr Git - perl/modules/Test-Valgrind.git/commitdiff
Add support for ->parser_class() in tools
authorVincent Pit <vince@profvince.com>
Sat, 19 Sep 2009 22:21:33 +0000 (00:21 +0200)
committerVincent Pit <vince@profvince.com>
Sat, 19 Sep 2009 22:23:13 +0000 (00:23 +0200)
lib/Test/Valgrind/Session.pm
lib/Test/Valgrind/Tool.pm
lib/Test/Valgrind/Tool/memcheck.pm

index c7485f18c14af68426b31c46d75355bb460e92b8..fe521a0e0907ef8edc18d36c253c538131b4af83 100644 (file)
@@ -388,7 +388,7 @@ sub start {
  delete @{$self}{qw/last_status exit_code/};
 
  $self->tool->start($self);
- $self->parser($self->tool->parser_class->new)->start($self);
+ $self->parser($self->tool->parser_class($self)->new)->start($self);
  $self->action->start($self);
 
  return;
index 147ee1109b00dc25851b6b8492f1d9d4c3ab50dd..077fc09257ce71dbc1be397fff912b61cd766cfe 100644 (file)
@@ -71,6 +71,16 @@ Defaults to return C<undef>, which skips suppression generation.
 
 sub new_trainer { }
 
+=head2 C<parser_class $session>
+
+Returns the class from which the parser for this tool output will be instanciated.
+
+This method must be implemented when subclassing.
+
+=cut
+
+sub parser_class;
+
 =head2 C<report_class $session>
 
 Returns the class in which suppression reports generated by this tool will be blessed.
index 1302efefc3750ed7b3af24b088382dacb3b78340..7869f568861ebd32e8dd82c6fea4b3fdef75a490 100644 (file)
@@ -73,6 +73,25 @@ sub callers { $_[0]->{callers} }
 
 sub suppressions_tag { 'memcheck-' . $_[1]->version }
 
+=head2 C<parser_class $session>
+
+This tool uses a C<Test::Valgrind::Parser::XML::Twig> parser in analysis mode, and a C<Test::Valgrind::Parser::Suppressions::Text> parser in suppressions mode.
+
+=cut
+
+sub parser_class {
+ my ($self, $session) = @_;
+
+ my $class = $session->do_suppressions
+           ? 'Test::Valgrind::Parser::Suppressions::Text'
+           : 'Test::Valgrind::Parser::XML::Twig';
+
+ local $@;
+ eval "require $class";
+
+ return $class;
+}
+
 =head2 C<report_class $session>
 
 This tool emits C<Test::Valgrind::Tool::memcheck::Report> object reports in analysis mode.