| Test-Harness documentation | Contained in the Test-Harness distribution. |
TAP::Parser::SourceHandler::Handle - Stream TAP from an IO::Handle or a GLOB.
Version 3.23
use TAP::Parser::Source; use TAP::Parser::SourceHandler::Executable; my $source = TAP::Parser::Source->new->raw( \*TAP_FILE ); $source->assemble_meta; my $class = 'TAP::Parser::SourceHandler::Handle'; my $vote = $class->can_handle( $source ); my $iter = $class->make_iterator( $source );
This is a raw TAP stored in an IO Handle TAP::Parser::SourceHandler class. It has 2 jobs:
1. Figure out if the TAP::Parser::Source it's given is an IO::Handle or GLOB containing raw TAP output (can_handle).
2. Creates an iterator for IO::Handle's & globs (make_iterator).
Unless you're writing a plugin or subclassing TAP::Parser, you probably won't need to use this module directly.
can_handlemy $vote = $class->can_handle( $source );
Casts the following votes:
0.9 if $source is an IO::Handle 0.8 if $source is a glob
make_iteratormy $iterator = $class->make_iterator( $source );
Returns a new TAP::Parser::Iterator::Stream for the source.
iterator_classThe class of iterator to use, override if you're sub-classing. Defaults to TAP::Parser::Iterator::Stream.
Please see SUBCLASSING in TAP::Parser for a subclassing overview.
| Test-Harness documentation | Contained in the Test-Harness distribution. |
package TAP::Parser::SourceHandler::Handle; use strict; use vars qw($VERSION @ISA); use TAP::Parser::SourceHandler (); use TAP::Parser::IteratorFactory (); use TAP::Parser::Iterator::Stream (); @ISA = qw(TAP::Parser::SourceHandler); TAP::Parser::IteratorFactory->register_handler(__PACKAGE__);
$VERSION = '3.23';
sub can_handle { my ( $class, $src ) = @_; my $meta = $src->meta; return 0.9 if $meta->{is_object} && UNIVERSAL::isa( $src->raw, 'IO::Handle' ); return 0.8 if $meta->{is_glob}; return 0; }
sub make_iterator { my ( $class, $source ) = @_; $class->_croak('$source->raw must be a glob ref or an IO::Handle') unless $source->meta->{is_glob} || UNIVERSAL::isa( $source->raw, 'IO::Handle' ); return $class->iterator_class->new( $source->raw ); }
use constant iterator_class => 'TAP::Parser::Iterator::Stream'; 1;