File Coverage

blib/lib/Test2/Plugin/Wrap2ndArgumentOfFailedCompareTestWithString.pm
Criterion Covered Total %
statement 36 36 100.0
branch 5 8 62.5
condition 3 3 100.0
subroutine 9 9 100.0
pod 0 1 0.0
total 53 57 92.9


line stmt bran cond sub pod time code
1             package Test2::Plugin::Wrap2ndArgumentOfFailedCompareTestWithString;
2 2     2   982 use strict;
  2         5  
  2         54  
3 2     2   9 use warnings;
  2         4  
  2         50  
4 2     2   395 use PPIx::Utils qw(parse_arg_list);
  2         110339  
  2         117  
5 2     2   15 use PPI;
  2         4  
  2         47  
6 2         645 use Test2::API qw(
7             test2_add_callback_post_load
8             test2_stack
9 2     2   531 );
  2         57008  
10              
11             my $loaded = 0;
12              
13             sub import {
14 2     2   17 my ($class) = @_;
15              
16 2 50       10 return if $loaded++;
17              
18             test2_add_callback_post_load(sub {
19 2     2   130 my $hub = test2_stack()->top;
20              
21 2         4397 $hub->listen(\&listener, inherit => 1);
22 2         14 });
23             }
24              
25             sub listener {
26 7     7 0 8916 my ($hub, $event) = @_;
27              
28 7 100       42 return unless $event->causes_fail;
29              
30 1         9 my $trace = $event->trace;
31 1         6 my $file = $trace->file;
32 1         6 my $line = $trace->line;
33              
34 1         11 my $doc = PPI::Document->new($file);
35             my $stmt = $doc->find_first(sub {
36 47     47   4489 my (undef, $elem) = @_;
37 47   100     140 return $elem->isa('PPI::Statement') && $elem->line_number == $line;
38 1         18919 });
39 1 50       30 return unless $stmt;
40              
41 1         6 my $second_arg = (parse_arg_list($stmt->first_token))[1]->[0];
42 1 50       208 return unless $second_arg;
43              
44             # A -> string(A)
45 1         4 $second_arg->insert_before(PPI::Token::Word->new('string'));
46 1         66 $second_arg->insert_before(PPI::Token::Structure->new('('));
47 1         44 $second_arg->insert_after(PPI::Token::Structure->new(')'));
48              
49 1         54 $doc->save($file);
50             }
51              
52             1;
53             __END__