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   1059 use strict;
  2         6  
  2         60  
3 2     2   11 use warnings;
  2         5  
  2         57  
4 2     2   449 use PPIx::Utils qw(parse_arg_list);
  2         132151  
  2         137  
5 2     2   16 use PPI;
  2         4  
  2         54  
6 2         755 use Test2::API qw(
7             test2_add_callback_post_load
8             test2_stack
9 2     2   645 );
  2         72213  
10              
11             my $loaded = 0;
12              
13             sub import {
14 2     2   19 my ($class) = @_;
15              
16 2 50       14 return if $loaded++;
17              
18             test2_add_callback_post_load(sub {
19 2     2   196 my $hub = test2_stack()->top;
20              
21 2         5668 $hub->listen(\&listener, inherit => 1);
22 2         15 });
23             }
24              
25             sub listener {
26 7     7 0 11192 my ($hub, $event) = @_;
27              
28 7 100       51 return unless $event->causes_fail;
29              
30 1         13 my $trace = $event->trace;
31 1         8 my $file = $trace->file;
32 1         8 my $line = $trace->line;
33              
34 1         16 my $doc = PPI::Document->new($file);
35             my $stmt = $doc->find_first(sub {
36 47     47   5777 my (undef, $elem) = @_;
37 47   100     198 return $elem->isa('PPI::Statement') && $elem->line_number == $line;
38 1         24246 });
39 1 50       48 return unless $stmt;
40              
41 1         9 my $second_arg = (parse_arg_list($stmt->first_token))[1]->[0];
42 1 50       276 return unless $second_arg;
43              
44             # A -> string(A)
45 1         6 $second_arg->insert_before(PPI::Token::Word->new('string'));
46 1         84 $second_arg->insert_before(PPI::Token::Structure->new('('));
47 1         70 $second_arg->insert_after(PPI::Token::Structure->new(')'));
48              
49 1         80 $doc->save($file);
50             }
51              
52             1;
53             __END__