Convert-TAP-Archive

 view release on metacpan or  search on metacpan

lib/Convert/TAP/Archive.pm  view on Meta::CPAN


package Convert::TAP::Archive;
{
  $Convert::TAP::Archive::VERSION = '0.005';
}

use strict;
use warnings;

use Capture::Tiny qw( capture_merged );
use TAP::Harness;
use TAP::Harness::Archive;

require Exporter;
our @ISA = qw(Exporter);
our @EXPORT = qw(convert_from_taparchive);

# one and only subroutine of this module
sub convert_from_taparchive {

    my %args = @_;

    # Input Arguments: archive, formatter, force_inline
    # Set default values:
    die 'no archive specified'
        unless (exists $args{archive});
    $args{formatter} = 'TAP::Formatter::HTML'
        unless (exists $args{formatter});
    $args{force_inline} = 0
        unless (exists $args{force_inline});

    # This is the complicate but flexible version to:
    #   use TAP::Formatter::HTML;
    #   my $formatter = TAP::Formatter::HTML->new;
    my $formatter;
    (my $require_name = $args{formatter} . ".pm") =~ s{::}{/}g;
    eval {
        require $require_name;
        $formatter = $args{formatter}->new();
    };  
    die "Problems with formatter $args{formatter}"
      . " at $require_name: $@"
        if $@;

    # if set, include all CSS and JS in HTML file
    if ($args{force_inline}) {
        $formatter->force_inline_css(1);
        $formatter->force_inline_js (1);
    }

    # Now we do a lot of magic to convert this stuff...

    my $harness = TAP::Harness->new({ formatter => $formatter }); 

    $formatter->really_quiet(1);
    $formatter->prepare;

    my $session;
    my $aggregator = TAP::Harness::Archive->aggregator_from_archive({ 
        archive          => $args{archive},
        parser_callbacks => {
            ALL => sub {
                $session->result( $_[0] );
            },  
        },  
        made_parser_callback => sub {
            $session = $formatter->open_test( $_[1], $_[0] );
        }   
    });

    $aggregator->start;
    $aggregator->stop;

    # This code also prints to STDOUT but we will catch it!
    return capture_merged { $formatter->summary($aggregator) };

}

1;

__END__

=pod

=head1 NAME

Convert::TAP::Archive - Read from a TAP archive and convert it for displaying

=head1 VERSION

version 0.005

=head1 SYNOPSIS

 use Convert::TAP::Archive qw(convert_from_taparchive);

 my $html = convert_from_taparchive(
                archive   => '/must/be/the/complete/path/to/test.tar.gz',
                formatter => 'TAP::Formatter::HTML',
            );

=encoding utf8

=head1 IMPORTANT NOTE

B<THIS MODULE IS DEPRECATED!>
Please see L<Archive::TAP::Convert> instead.

=head1 ABOUT

This modul can be of help for you if you have TAP archives (e.g. created with C<prove -a> and now you wish to have the content of this archives in a special format like HTML or JUnit (or whatever format).

=head1 EXPORTED METHODS

=head2 convert_from_taparchive

The method takes three arguments.
Only C<archive> is required.
It takes the B<full> path to your TAP archive.
The C<formatter> defaults to C<TAP::Formatter::HTML>, but you can give any other formatter.
The method will return the content of the TAP archive, parsed according to the formatter you have specified.



( run in 1.298 second using v1.01-cache-2.11-cpan-140bd7fdf52 )