File Coverage

blib/lib/App/MigrateToTest2V0/Rule/ReplaceUseTestMoreToUseTest2V0.pm
Criterion Covered Total %
statement 44 44 100.0
branch 7 8 87.5
condition 3 3 100.0
subroutine 5 5 100.0
pod 0 1 0.0
total 59 61 96.7


line stmt bran cond sub pod time code
1             package App::MigrateToTest2V0::Rule::ReplaceUseTestMoreToUseTest2V0;
2 4     4   1004 use strict;
  4         11  
  4         132  
3 4     4   22 use warnings;
  4         8  
  4         126  
4 4     4   46 use parent 'App::MigrateToTest2V0::Rule';
  4         11  
  4         23  
5              
6             sub apply {
7 14     14 0 44 my ($class, $doc) = @_;
8              
9             my $use = $doc->find_first(sub {
10 135     135   1728 my (undef, $elem) = @_;
11 135   100     540 return $elem->isa('PPI::Statement::Include') && $elem->module eq 'Test::More';
12 14         118 });
13 14 100       345 return unless $use;
14              
15 4         14 my $module_name_token = $use->schild(1);
16 4         74 $module_name_token->set_content('Test2::V0');
17              
18 4 100       27 return unless $use->arguments;
19              
20 2         83 my $arg_kind = ($use->arguments)[0];
21             # add statement
22 2 100       66 if ($arg_kind eq 'tests') {
    50          
23             # plan tests => ...;
24 1         23 my $test_num = ($use->arguments)[2];
25 1         33 my $plan_stmt = PPI::Statement->new;
26 1         14 $plan_stmt->add_element(PPI::Token::Whitespace->new("\n"));
27 1         86 $plan_stmt->add_element(PPI::Token::Word->new('plan'));
28 1         20 $plan_stmt->add_element(PPI::Token::Whitespace->new(' '));
29 1         29 $plan_stmt->add_element(PPI::Token::Word->new('tests'));
30 1         28 $plan_stmt->add_element(PPI::Token::Whitespace->new(' '));
31 1         18 $plan_stmt->add_element(PPI::Token::Operator->new('=>'));
32 1         19 $plan_stmt->add_element(PPI::Token::Whitespace->new(' '));
33 1         22 $plan_stmt->add_element($test_num->clone);
34 1         40 $plan_stmt->add_element(PPI::Token::Structure->new(';'));
35 1         23 $use->insert_after($plan_stmt);
36             } elsif ($arg_kind eq 'skip_all') {
37             # skip_all ...;
38 1         28 my $skip_reason = ($use->arguments)[2];
39 1         35 my $skip_all_stmt = PPI::Statement->new;
40 1         13 $skip_all_stmt->add_element(PPI::Token::Whitespace->new("\n"));
41 1         23 $skip_all_stmt->add_element(PPI::Token::Word->new('skip_all'));
42 1         19 $skip_all_stmt->add_element(PPI::Token::Whitespace->new(' '));
43 1         23 $skip_all_stmt->add_element($skip_reason->clone);
44 1         25 $skip_all_stmt->add_element(PPI::Token::Structure->new(';'));
45 1         20 $use->insert_after($skip_all_stmt);
46             }
47              
48             # remove arguments
49 2         144 my $elem = $module_name_token->next_sibling;
50 2         50 while ($elem->content ne ';') {
51 12         99 my $next = $elem->next_sibling;
52 12         242 $elem->remove;
53 12         398 $elem = $next;
54             }
55             }
56              
57             1;