Test::Valgrind::Action::Captor - Mock Test::Valgrind::Action for capturing output.


Test-Valgrind documentation Contained in the Test-Valgrind distribution.

Index


Code Index:

NAME

Top

Test::Valgrind::Action::Captor - Mock Test::Valgrind::Action for capturing output.

VERSION

Top

Version 1.12

DESCRIPTION

Top

This class provides helpers for saving, redirecting and restoring filehandles.

It's not meant to be used directly as an action.

METHODS

Top

new

Just 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_fh

Restore all the filehandles that were saved with save_fh to their original state.

The redirections aren't closed.

SEE ALSO

Top

Test::Valgrind, Test::Valgrind::Action.

Capture::Tiny.

AUTHOR

Top

Vincent Pit, <perl at profvince.com>, http://www.profvince.com.

You can contact me by mail or on irc.perl.org (vincent).

BUGS

Top

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.

SUPPORT

Top

You can find documentation for this module with the perldoc command.

    perldoc Test::Valgrind::Action::Captor

COPYRIGHT & LICENSE

Top


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