TAP::Parser::SourceHandler::Perl(3p) Perl Programmers Reference Guide

TAP::Parser::SourceHandler::Perl(3p) Perl Programmers Reference Guide #

TAP::Parser::SourceHandler::Perl(3p) Perl Programmers Reference Guide

NNAAMMEE #

 TAP::Parser::SourceHandler::Perl - Stream TAP from a Perl executable

VVEERRSSIIOONN #

 Version 3.44

SSYYNNOOPPSSIISS #

   use TAP::Parser::Source;
   use TAP::Parser::SourceHandler::Perl;

   my $source = TAP::Parser::Source->new->raw( \'script.pl' );
   $source->assemble_meta;

   my $class = 'TAP::Parser::SourceHandler::Perl';
   my $vote  = $class->can_handle( $source );
   my $iter  = $class->make_iterator( $source );

DDEESSCCRRIIPPTTIIOONN #

 This is a _P_e_r_l TAP::Parser::SourceHandler - it has 2 jobs:

 1. Figure out if the TAP::Parser::Source it's given is actually a Perl
 script ("can_handle").

 2. Creates an iterator for Perl sources ("make_iterator").

 Unless you're writing a plugin or subclassing TAP::Parser, you probably
 won't need to use this module directly.

MMEETTHHOODDSS #

CCllaassss MMeetthhooddss _"_c_a_n___h_a_n_d_l_e_"

   my $vote = $class->can_handle( $source );

 Only votes if $source looks like a file.  Casts the following votes:

   0.9  if it has a shebang ala "#!...perl"
   0.3  if it has any shebang
   0.8  if it's a .t file
   0.9  if it's a .pl file
   0.75 if it's in a 't' directory
   0.25 by default (backwards compat)

 _"_m_a_k_e___i_t_e_r_a_t_o_r_"

   my $iterator = $class->make_iterator( $source );

 Constructs & returns a new TAP::Parser::Iterator::Process for the source.
 Assumes "$source->raw" contains a reference to the perl script.  "croak"s
 if the file could not be found.

 The command to run is built as follows:

   $perl @switches $perl_script @test_args

 The perl command to use is determined by "get_perl".  The command
 generated is guaranteed to preserve:

PERL5LIB #

PERL5OPT #

   Taint Mode, if set in the script's shebang

 _N_o_t_e_: the command generated will _n_o_t respect any shebang line defined in
 your Perl script.  This is only a problem if you have compiled a custom
 version of Perl or if you want to use a specific version of Perl for one
 test and a different version for another, for example:

   #!/path/to/a/custom_perl --some --args
   #!/usr/local/perl-5.6/bin/perl -w

 Currently you need to write a plugin to get around this.

 _"_g_e_t___t_a_i_n_t_"

 Decode any taint switches from a Perl shebang line.

   # $taint will be 't'
   my $taint = TAP::Parser::SourceHandler::Perl->get_taint( '#!/usr/bin/perl -t' );

   # $untaint will be undefined
   my $untaint = TAP::Parser::SourceHandler::Perl->get_taint( '#!/usr/bin/perl' );

 _"_g_e_t___p_e_r_l_"

 Gets the version of Perl currently running the test suite.

SSUUBBCCLLAASSSSIINNGG #

 Please see "SUBCLASSING" in TAP::Parser for a subclassing overview.

EExxaammppllee package MyPerlSourceHandler;

   use strict;

   use TAP::Parser::SourceHandler::Perl;

   use base 'TAP::Parser::SourceHandler::Perl';

   # use the version of perl from the shebang line in the test file
   sub get_perl {
       my $self = shift;
       if (my $shebang = $self->shebang( $self->{file} )) {
           $shebang =~ /^#!(.*\bperl.*?)(?:(?:\s)|(?:$))/;
           return $1 if $1;
       }
       return $self->SUPER::get_perl(@_);
   }

SSEEEE AALLSSOO #

 TAP::Object, TAP::Parser, TAP::Parser::IteratorFactory,
 TAP::Parser::SourceHandler, TAP::Parser::SourceHandler::Executable,
 TAP::Parser::SourceHandler::File, TAP::Parser::SourceHandler::Handle,
 TAP::Parser::SourceHandler::RawTAP

perl v5.36.3 2023-02-15 TAP::Parser::SourceHandler::Perl(3p)