From: Vincent Pit Date: Tue, 15 Sep 2009 09:21:15 +0000 (+0200) Subject: Factor the start/finish logic into a new Test::Valgrind::Component base class X-Git-Tag: v1.10~17 X-Git-Url: http://git.vpit.fr/?p=perl%2Fmodules%2FTest-Valgrind.git;a=commitdiff_plain;h=943acd9991dfbe73afc5eca6921767f098f5e6a9 Factor the start/finish logic into a new Test::Valgrind::Component base class --- diff --git a/MANIFEST b/MANIFEST index 8f37508..996df19 100644 --- a/MANIFEST +++ b/MANIFEST @@ -14,6 +14,7 @@ lib/Test/Valgrind/Command.pm lib/Test/Valgrind/Command/Aggregate.pm lib/Test/Valgrind/Command/Perl.pm lib/Test/Valgrind/Command/PerlScript.pm +lib/Test/Valgrind/Component.pm lib/Test/Valgrind/Parser.pm lib/Test/Valgrind/Parser/Suppressions/Text.pm lib/Test/Valgrind/Parser/Text.pm diff --git a/lib/Test/Valgrind/Action.pm b/lib/Test/Valgrind/Action.pm index 84aae69..d972db3 100644 --- a/lib/Test/Valgrind/Action.pm +++ b/lib/Test/Valgrind/Action.pm @@ -23,7 +23,7 @@ Actions are called each time a tool encounter an error and decide what to do wit =cut -use base qw/Test::Valgrind::Carp/; +use base qw/Test::Valgrind::Component Test::Valgrind::Carp/; =head1 METHODS @@ -49,11 +49,7 @@ sub new { return $action->new(%args); } - my $self = bless { }, $class; - - $self->started(undef); - - $self; + $class->SUPER::new(@_); } =head2 C @@ -64,37 +60,18 @@ Indicates if the action wants C to run in suppression-generating mode sub do_suppressions { 0 } -=head2 C - -Specifies whether the action is running (C<1>), stopped (C<0>) or was never started (C). - -=cut - -sub started { @_ <= 1 ? $_[0]->{started} : ($_[0]->{started} = $_[1]) } - =head2 C Called when the C<$session> starts. -Defaults to set L. - -=cut - -sub start { - my ($self) = @_; - - $self->_croak('Action already started') if $self->started; - $self->started(1); - - return; -} +Defaults to set L. =head2 C Invoked each time the C process attached to the C<$session> spots an error. C<$report> is a L object describing the error. -Defaults to check L. +Defaults to check L. =cut @@ -120,18 +97,7 @@ sub abort { $_[0]->_croak($_[2]) } Called when the C<$session> finishes. -Defaults to clear L. - -=cut - -sub finish { - my ($self) = @_; - - return unless $self->started; - $self->started(0); - - return; -} +Defaults to clear L. =head2 C @@ -152,7 +118,7 @@ sub status { =head1 SEE ALSO -L, L. +L, L, L. =head1 AUTHOR diff --git a/lib/Test/Valgrind/Component.pm b/lib/Test/Valgrind/Component.pm new file mode 100644 index 0000000..3b7a570 --- /dev/null +++ b/lib/Test/Valgrind/Component.pm @@ -0,0 +1,116 @@ +package Test::Valgrind::Component; + +use strict; +use warnings; + +=head1 NAME + +Test::Valgrind::Component - Base class for Test::Valgrind components. + +=head1 VERSION + +Version 1.02 + +=cut + +our $VERSION = '1.02'; + +use Scalar::Util (); + +use base qw/Test::Valgrind::Carp/; + +=head1 METHODS + +=head2 C + +Basic constructor. + +=cut + +sub new { + my $self = shift; + + my $class = $self; + if (Scalar::Util::blessed($self)) { + $class = ref $self; + if ($self->isa(__PACKAGE__)) { + $self->{started} = undef; + return $self; + } + } + + bless { + started => undef, + }, $class; +} + +=head2 C + +Specifies whether the component is running (C<1>), stopped (C<0>) or was never started (C). + +=cut + +sub started { @_ <= 1 ? $_[0]->{started} : ($_[0]->{started} = $_[1] ? 1 : 0) } + +=head2 C + +Marks the component as started, and throws an exception if it was already. +Returns its self object. + +=cut + +sub start { + my ($self) = @_; + + $self->_croak(ref($self) . ' component already started') if $self->started; + $self->started(1); + + $self; +} + +=head2 C + +Marks the component as stopped, and throws an exception if it wasn't started. +Returns its self object. + +=cut + +sub finish { + my ($self) = @_; + + $self->_croak(ref($self) . ' component is not started') unless $self->started; + $self->started(0); + + $self; +} + +=head1 SEE ALSO + +L. + +=head1 AUTHOR + +Vincent Pit, C<< >>, L. + +You can contact me by mail or on C (vincent). + +=head1 BUGS + +Please report any bugs or feature requests to C, or through the web interface at L. +I will be notified, and then you'll automatically be notified of progress on your bug as I make changes. + +=head1 SUPPORT + +You can find documentation for this module with the perldoc command. + + perldoc Test::Valgrind::Component + +=head1 COPYRIGHT & LICENSE + +Copyright 2009 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. + +=cut + +1; # End of Test::Valgrind::Component diff --git a/lib/Test/Valgrind/Parser.pm b/lib/Test/Valgrind/Parser.pm index e4b68b6..217a0b1 100644 --- a/lib/Test/Valgrind/Parser.pm +++ b/lib/Test/Valgrind/Parser.pm @@ -21,21 +21,12 @@ This class is the base for L parsers. =cut -use base qw/Test::Valgrind::Carp/; +use base qw/Test::Valgrind::Component Test::Valgrind::Carp/; =head1 METHODS =head2 C -=cut - -sub new { - my $class = shift; - $class = ref($class) || $class; - - bless { }, $class; -} - =head2 C Returns the list of parser-specific arguments that are to be passed to C. @@ -54,9 +45,21 @@ This method must be implemented when subclassing. sub parse; +=head2 C + +Called when the C<$session> starts. + +Defaults to set L. + +=head2 C + +Called when the C<$session> finishes. + +Defaults to clear L. + =head1 SEE ALSO -L, L. +L, L, L. =head1 AUTHOR diff --git a/lib/Test/Valgrind/Tool.pm b/lib/Test/Valgrind/Tool.pm index a1211af..a82b95d 100644 --- a/lib/Test/Valgrind/Tool.pm +++ b/lib/Test/Valgrind/Tool.pm @@ -24,7 +24,7 @@ They are expected to function both in suppressions generation and in analysis mo =cut -use base qw/Test::Valgrind::Carp/; +use base qw/Test::Valgrind::Component Test::Valgrind::Carp/; =head1 METHODS @@ -58,11 +58,7 @@ sub new { return $tool->new(%args); } - my $self = bless { }, $class; - - $self->started(undef); - - $self; + $class->SUPER::new(@_); } =head2 C @@ -132,30 +128,11 @@ This method must be implemented when subclassing. sub suppressions_tag; -=head2 C - -Specifies whether the tool is running (C<1>), stopped (C<0>) or was never started (C). - -=cut - -sub started { @_ <= 1 ? $_[0]->{started} : ($_[0]->{started} = $_[1]) } - =head2 C Called when the C<$session> starts. -Defaults to set L. - -=cut - -sub start { - my ($self) = @_; - - $self->_croak('Tool already started') if $self->started; - $self->started(1); - - return; -} +Defaults to set L. =head2 C @@ -200,22 +177,11 @@ sub parse_analysis; Called when the C<$session> finishes. -Defaults to clear L. - -=cut - -sub finish { - my ($self) = @_; - - return unless $self->started; - $self->started(0); - - return; -} +Defaults to clear L. =head1 SEE ALSO -L, L. +L, L, L. =head1 AUTHOR