Beta Shell
v2.0 ยท web2.us.cloudlogin.co
[FM]
[CMD]
[PHP]
[DB]
[INFO]
[SEC]
File Manager
~
/
usr
/
share
/
perl5
/
vendor_perl
/
Test
/
Valgrind
/
Action
Upload
5 items
Name
Size
Perms
Modified
Actions
[ .. / .. ]
Captor.pm
3.05 KB
-rw-r--r--
2016-08-01 20:36:05
Edit
Del
Suppressions.pm
4 KB
-rw-r--r--
2016-08-01 20:36:05
Edit
Del
Test.pm
4.48 KB
-rw-r--r--
2016-08-01 20:36:05
Edit
Del
Editing: Test.pm
(4.48 KB)
Path: /usr/share/perl5/vendor_perl/Test/Valgrind/Action/Test.pm
Back
package Test::Valgrind::Action::Test; use strict; use warnings; =head1 NAME Test::Valgrind::Action::Test - Test that an analysis didn't generate any error report. =head1 VERSION Version 1.19 =cut our $VERSION = '1.19'; =head1 DESCRIPTION This action uses C<Test::Builder> to plan and pass or fail tests according to the reports received. =cut use Test::Builder; use base qw<Test::Valgrind::Action Test::Valgrind::Action::Captor>; =head1 METHODS This class inherits L<Test::Valgrind::Action> and L<Test::Valgrind::Action::Captor>. =head2 C<new> my $tvat = Test::Valgrind::Action::Test->new( diag => $diag, extra_tests => $extra_tests, %extra_args, ); Your usual constructor. When C<$diag> is true, the original output of the command and the error reports are intermixed as diagnostics. C<$extra_tests> specifies how many extraneous tests you want to plan in addition to the default ones. Other arguments are passed straight to C<< Test::Valgrind::Action->new >>. =cut sub new { my $class = shift; $class = ref($class) || $class; my %args = @_; my $diag = delete $args{diag}; my $extra_tests = delete $args{extra_tests} || 0; my $self = bless $class->SUPER::new(%args), $class; $self->{diag} = $diag; $self->{extra_tests} = $extra_tests; $self; } =head2 C<diag> my $diag = $tvat->diag; Read-only accessor for the C<diag> option. =cut sub diag { $_[0]->{diag} } =head2 C<kinds> my @kinds = $tvat->kinds; Returns the list of all the monitored report kinds. =cut sub kinds { @{$_[0]->{kinds} || []} } sub start { my ($self, $sess) = @_; $self->SUPER::start($sess); my @kinds = grep $_ ne 'Diag', $sess->report_class->kinds; $self->{kinds} = \@kinds; $self->{status} = 0; my $tb = Test::Builder->new; $tb->plan(tests => $self->{extra_tests} + scalar @kinds); $self->restore_all_fh; delete $self->{capture}; if ($self->diag) { require File::Temp; $self->{capture} = File::Temp::tempfile(); $self->{capture_pos} = 0; } $self->save_fh(\*STDOUT => '>' => $self->{capture}); $self->save_fh(\*STDERR => '>' => $self->{capture}); return; } sub abort { my ($self, $sess, $msg) = @_; $self->restore_all_fh; my $tb = Test::Builder->new; my $plan = $tb->has_plan; if (defined $plan) { $tb->BAIL_OUT($msg); $self->{status} = 255; } else { $tb->skip_all($msg); $self->{status} = 0; } return; } sub report { my ($self, $sess, $report) = @_; if ($report->is_diag) { my $tb = Test::Builder->new; $tb->diag($report->data); return; } $self->SUPER::report($sess, $report); $self->{reports}->{$report->kind}->{$report->id} = $report; if ($self->diag) { my $tb = Test::Builder->new; my $fh = $self->{capture}; seek $fh, $self->{capture_pos}, 0; $tb->diag($_) while <$fh>; $self->{capture_pos} = tell $fh; $tb->diag($report->dump); } return; } sub finish { my ($self, $sess) = @_; $self->SUPER::finish($sess); my $tb = Test::Builder->new; $self->restore_all_fh; if (my $fh = $self->{capture}) { seek $fh, $self->{capture_pos}, 0; $tb->diag($_) while <$fh>; close $fh or $self->_croak('close(capture[' . fileno($fh) . "]): $!"); delete @{$self}{qw<capture capture_pos>}; } my $failed = 0; for my $kind ($self->kinds) { my $reports = $self->{reports}->{$kind} || { }; my $errors = keys %$reports; $tb->is_num($errors, 0, $kind); if ($errors) { ++$failed; unless ($self->diag) { $tb->diag("\n" . $_->dump) for values %$reports; } } } $self->{status} = $failed < 255 ? $failed : 254; return; } sub status { my ($self, $sess) = @_; $self->SUPER::status($sess); $self->{status}; } =head1 SEE ALSO L<Test::Valgrind>, L<Test::Valgrind::Action>. =head1 AUTHOR Vincent Pit, C<< <perl at profvince.com> >>, L<http://www.profvince.com>. You can contact me by mail or on C<irc.perl.org> (vincent). =head1 BUGS Please report any bugs or feature requests to C<bug-test-valgrind at rt.cpan.org>, or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Test-Valgrind>. 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::Action::Test =head1 COPYRIGHT & LICENSE Copyright 2009,2010,2011,2013,2015,2016 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::Action::Test