1#!perl 2 3use strict; 4use warnings; 5use Perl::Lint::Policy::Subroutines::ProhibitReturnSort; 6use t::Policy::Util qw/fetch_violations/; 7use Test::Base::Less; 8 9my $class_name = 'Subroutines::ProhibitReturnSort'; 10 11filters { 12 params => [qw/eval/], # TODO wrong! 13}; 14 15for my $block (blocks) { 16 my $violations = fetch_violations($class_name, $block->input, $block->params); 17 is scalar @$violations, $block->failures, $block->dscr; 18} 19 20done_testing; 21 22__DATA__ 23 24=== 25--- dscr: simple failure 26--- failures: 6 27--- params: 28--- input 29sub test_sub1 { 30 return sort @list; 31 return sort(@list); 32} 33 34sub test_sub2 { 35 return sort { $a <=> $b } @list; 36 return sort({ $a <=> $b } @list); 37} 38 39sub test_sub3 { 40 return sort @list if $bar; 41 return sort(@list) if $bar; 42} 43 44=== 45--- dscr: simple success 46--- failures: 0 47--- params: 48--- input 49sub test_sub1 { 50 @sorted = sort @list; 51 return @sorted; 52} 53 54sub test_sub2 { 55 return wantarray ? sort @list : $foo; 56} 57 58sub test_sub3 { 59 return map {func($_)} sort @list; 60} 61 62=== 63--- dscr: when used in conjunction with wantarray() 64--- failures: 0 65--- params: 66--- input 67sub test_sub1 { 68 if (wantarray) { 69 return sort @list; 70 } 71} 72sub test_sub2 { 73 return sort @list if wantarray; 74} 75 76=== 77--- dscr: "sort" used in other contexts... 78--- failures: 0 79--- params: 80--- input 81$foo{sort}; # hash key, not keyword 82sub foo {return}; # no sibling 83 84=== 85--- dscr: no lint 86--- failures: 3 87--- params: 88--- input 89sub test_sub1 { 90 return sort @list; ## no lint 91 return sort(@list); 92} 93 94sub test_sub2 { 95 return sort { $a <=> $b } @list; 96 return sort({ $a <=> $b } @list); ## no lint 97} 98 99sub test_sub3 { 100 return sort @list if $bar; ## no lint 101 return sort(@list) if $bar; 102} 103 104