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