File Coverage

blib/lib/Convert/TAP/Archive.pm
Criterion Covered Total %
statement 37 44 84.0
branch 2 4 50.0
condition 2 4 50.0
subroutine 9 9 100.0
pod 1 1 100.0
total 51 62 82.2


line stmt bran cond sub pod time code
1             # ABSTRACT: Read from a TAP archive and convert it for displaying
2              
3              
4             package Convert::TAP::Archive;
5             {
6             $Convert::TAP::Archive::VERSION = '0.004'; # TRIAL
7             }
8              
9 2     2   14423 use strict;
  2         5  
  2         55  
10 2     2   10 use warnings;
  2         4  
  2         59  
11              
12 2     2   805 use Capture::Tiny qw( capture_merged );
  2         39852  
  2         143  
13 2     2   925 use TAP::Harness;
  2         8536  
  2         58  
14 2     2   846 use TAP::Harness::Archive;
  2         212097  
  2         659  
15              
16             require Exporter;
17             our @ISA = qw(Exporter);
18             our @EXPORT = qw(convert_from_taparchive);
19              
20             # one and only subroutine of this module
21             sub convert_from_taparchive {
22              
23             # Input Arguments
24 1     1 1 103 my $archive_absolutepath = shift;
25 1   50     9 my $output_formatter_classname = shift || 'TAP::Formatter::HTML';
26 1   50     11 my $JS_inside_HTML = shift || 0; # boolean
27              
28             # This is the complicate but flexible version to:
29             # use TAP::Formatter::HTML;
30             # my $formatter = TAP::Formatter::HTML->new;
31 1         5 my $formatter;
32 1         14 (my $require_name = $output_formatter_classname . ".pm") =~ s{::}{/}g;
33 1         5 eval {
34 1         844 require $require_name;
35 1         42197 $formatter = $output_formatter_classname->new();
36             };
37 1 50       19041 die "Problems with formatter $output_formatter_classname"
38             . " at $require_name: $@"
39             if $@;
40              
41             # Now we do a lot of magic to convert this stuff...
42              
43 1         16 my $harness = TAP::Harness->new({ formatter => $formatter });
44              
45 1         253 $formatter->really_quiet(1);
46 1         19 $formatter->prepare;
47              
48 1         29 my $session;
49             my $aggregator = TAP::Harness::Archive->aggregator_from_archive({
50             archive => $archive_absolutepath,
51             parser_callbacks => {
52             ALL => sub {
53 3     3   1820 $session->result( $_[0] );
54             },
55             },
56             made_parser_callback => sub {
57 1     1   25362 $session = $formatter->open_test( $_[1], $_[0] );
58             }
59 1         23 });
60              
61 1         1266 $aggregator->start;
62 1         33 $aggregator->stop;
63              
64             # This code also prints to STDOUT but we will catch it!
65 1     1   50 my $html = capture_merged { $formatter->summary($aggregator) };
  1         1255  
66              
67 1 50       129336 unless ($JS_inside_HTML) {
68 1         44 return $html;
69             }
70             else {
71 0         0 my $js_script_tag = '';
74              
75 0         0 $html =~ s///;
76 0         0 $html =~ s/