| Test-Valgrind documentation | Contained in the Test-Valgrind distribution. |
Test::Valgrind::Action::Captor - Mock Test::Valgrind::Action for capturing output.
Version 1.12
This class provides helpers for saving, redirecting and restoring filehandles.
It's not meant to be used directly as an action.
newJust a croaking stub to remind you not to use this class as a real action.
save_fh $from, $mode [, $to ]Save the original filehandle $from opened with mode $mode, and redirect it to $to if it's defined or to /dev/null otherwise.
restore_all_fhRestore all the filehandles that were saved with save_fh to their original state.
The redirections aren't closed.
Vincent Pit, <perl at profvince.com>, http://www.profvince.com.
You can contact me by mail or on irc.perl.org (vincent).
Please report any bugs or feature requests to bug-test-valgrind at rt.cpan.org, or through the web interface at 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.
You can find documentation for this module with the perldoc command.
perldoc Test::Valgrind::Action::Captor
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.
| Test-Valgrind documentation | Contained in the Test-Valgrind distribution. |
package Test::Valgrind::Action::Captor; use strict; use warnings;
our $VERSION = '1.12';
use File::Spec (); use base qw/Test::Valgrind::Carp/;
sub new { shift->_croak('This mock action isn\'t meant to be used directly') } # Widely inspired from Capture::Tiny sub _redirect_fh { open $_[1], $_[2], $_[3] or $_[0]->_croak('open(' . fileno($_[1]) . ", '$_[2]', '$_[3]'): $!"); } sub _dup_fh { my $fd = fileno $_[3]; open $_[1], $_[2] . '&' . $fd or $_[0]->_croak('open(' . fileno($_[1]) . ", '$_[2]&', $fd): $!"); }
sub save_fh { my ($self, $from, $mode, $to) = @_; unless (defined fileno $from) { $self->_redirect_fh($from, $mode, File::Spec->devnull); push @{$self->{proxies}}, $from; } $self->_dup_fh(my $save, $mode, $from); push @{$self->{saves}}, [ $save, $mode, $from ]; if ($to and ref $to eq 'GLOB') { $self->_dup_fh($from, $mode, $to); } else { $self->_redirect_fh($from, $mode, defined $to ? $to : File::Spec->devnull); } return; }
sub restore_all_fh { my ($self) = @_; for (@{$self->{saves}}) { my ($save, $mode, $from) = @$_; $self->_dup_fh($from, $mode, $save); close $save or $self->_croak('close(saved[' . fileno($save) . "]): $!"); } delete $self->{saves}; for (@{$self->{proxies}}) { close $_ or $self->_croak('close(proxy[' . fileno($_) . "]): $!"); } delete $self->{proxies}; return; }
1; # End of Test::Valgrind::Action::Captor