X-Git-Url: http://git.vpit.fr/?a=blobdiff_plain;f=lib%2FTest%2FValgrind%2FTool.pm;h=c7dd55c03cdff6f500aebd956305f8175817c92b;hb=b34179155630f5f4cbea1749af4054a746ded9a4;hp=9bd530f5a43f17ffc2c64a560b76dc0a22ce5653;hpb=1b06adb9788085e8aad3af42ea384153cd0a4fe6;p=perl%2Fmodules%2FTest-Valgrind.git diff --git a/lib/Test/Valgrind/Tool.pm b/lib/Test/Valgrind/Tool.pm index 9bd530f..c7dd55c 100644 --- a/lib/Test/Valgrind/Tool.pm +++ b/lib/Test/Valgrind/Tool.pm @@ -9,11 +9,11 @@ Test::Valgrind::Tool - Base class for Test::Valgrind tools. =head1 VERSION -Version 1.02 +Version 1.17 =cut -our $VERSION = '1.02'; +our $VERSION = '1.17'; =head1 DESCRIPTION @@ -24,12 +24,16 @@ They are expected to function both in suppressions generation and in analysis mo =cut -use base qw/Test::Valgrind::Carp/; +use Test::Valgrind::Util; + +use base qw; =head1 METHODS =head2 C + my $required_version = $tvt->requires_version; + The minimum C version needed to run this tool. Defaults to C<3.1.0>. @@ -37,7 +41,9 @@ Defaults to C<3.1.0>. sub requires_version { '3.1.0' } -=head2 C<< new tool => $tool >> +=head2 C + + my $tvt = Test::Valgrind::Tool->new(tool => $tool); Creates a new tool object of type C<$tool> by requiring and redispatching the method call to the module named C<$tool> if it contains C<'::'> or to C otherwise. The class represented by C<$tool> must inherit this class. @@ -51,18 +57,20 @@ sub new { my %args = @_; if ($class eq __PACKAGE__) { - my $tool = delete $args{tool} || 'memcheck'; - $tool =~ s/[^\w:]//g; - $tool = __PACKAGE__ . "::$tool" if $tool !~ /::/; - $class->_croak("Couldn't load tool $tool: $@") unless eval "require $tool; 1"; + my ($tool, $msg) = Test::Valgrind::Util::validate_subclass( + delete $args{tool} || 'memcheck', + ); + $class->_croak($msg) unless defined $tool; return $tool->new(%args); } - bless { }, $class; + $class->SUPER::new(@_); } =head2 C + my $tvt_train = Test::Valgrind::Tool->new_trainer; + Creates a new tool object suitable for generating suppressions. Defaults to return C, which skips suppression generation. @@ -71,43 +79,33 @@ Defaults to return C, which skips suppression generation. sub new_trainer { } -=head2 C - -Wraps around either L or L depending on the running mode of the C<$session>. +=head2 C -=cut - -sub report_class { - my ($self, $sess) = @_; - - if ($sess->do_suppressions) { - $self->report_class_suppressions($sess); - } else { - $self->report_class_analysis($sess); - } -} + my $parser_class = $tvt->parser_class($session); -=head2 C - -Returns the class in which suppression reports generated by this tool will be blessed. +Returns the class from which the parser for this tool output will be instanciated. This method must be implemented when subclassing. =cut -sub report_class_suppression; +sub parser_class; -=head2 C +=head2 C -Returns the class in which error reports generated by this tool will be blessed. + my $report_class = $tvt->report_class($session); + +Returns the class in which suppression reports generated by this tool will be blessed. This method must be implemented when subclassing. =cut -sub report_class_analysis; +sub report_class; + +=head2 C -=head2 C + my @args = $tvt->args($session); Returns the list of tool-specific arguments that are to be passed to C. All the suppression arguments are already handled by the session. @@ -116,9 +114,11 @@ Defaults to the empty list. =cut -sub args { } +sub args { } -=head2 C +=head2 C + + my $tag = $tvt->suppressions_tag($session); Returns a identifier that will be used to pick up the right suppressions for running the tool, or C to indicate that no special suppressions are needed. @@ -128,65 +128,38 @@ This method must be implemented when subclassing. sub suppressions_tag; -=head2 C - -Called when the C<$session> starts. +=head2 C -Defaults to void. + $tvt->start($session); -=cut - -sub start { } - -=head2 C - -Wraps around either L or L depending on the running mode of the C<$session>. - -=cut +Called when the C<$session> starts. -sub parse { - my ($self, $sess, $fh) = @_; +Defaults to set L. - if ($sess->do_suppressions) { - $self->parse_suppressions($sess, $fh); - } else { - $self->parse_analysis($sess, $fh); - } -} +=head2 C -=head2 C + my $filtered_report = $tvt->filter($session, $report); -Parse the suppression reports that the C process attached to the session C<$session> send through the filehandle C<$fh>. +The C<$session> calls this method after receiving a report from the parser and before letting the command filter it. +You can either return a mangled C<$report> (which does not need to be a clone of the original) or C if you want the action to ignore it completely. -This method must be implemented when subclassing. +Defaults to the identity function. =cut -sub parse_suppressions; +sub filter { $_[2] } -=head2 C +=head2 C -Parse the error reports sent by the C process attached to the session C<$session> through the filehandle C<$fh>. - -This method must be implemented when subclassing. - -=cut - -sub parse_analysis; - -=head2 C + $tvt->finish($session); Called when the C<$session> finishes. -Defaults to void. - -=cut - -sub finish { } +Defaults to clear L. =head1 SEE ALSO -L, L. +L, L, L. =head1 AUTHOR @@ -207,7 +180,7 @@ You can find documentation for this module with the perldoc command. =head1 COPYRIGHT & LICENSE -Copyright 2009 Vincent Pit, all rights reserved. +Copyright 2009,2010,2011,2013,2015 Vincent Pit, all rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.