Ticket #1209: 09-outline.t

File 09-outline.t, 4.0 KB (added by bowtie, 4 years ago)

upgraded test file for Moose outline

Line 
1#!/usr/bin/eval perl
2
3use strict;
4
5BEGIN {
6    $^W = 1;
7}
8
9use Test::More;
10use Test::Differences;
11use PPI;
12use PPIx::EditorTools::Outline;
13
14BEGIN {
15    if ( $PPI::VERSION =~ /_/ ) {
16        plan skip_all => "Need released version of PPI. You have $PPI::VERSION";
17        exit 0;
18    }
19}
20
21my @cases = (
22    {
23        file     => 't/outline/Foo.pm',
24        expected => [
25            {
26                'modules' => [
27                    {
28                        name => 'Method::Signatures',
29                        line => 3,
30                    },
31                ],
32                'methods' => [
33                    {
34                        name => 'new',
35                        line => 5,
36                    },
37                    {
38                        name => 'hello',
39                        line => 8,
40                    }
41                ],
42                'line' => 1,
43                'name' => 'Foo',
44            }
45        ],
46    },
47    {
48        file     => 't/outline/file1.pl',
49        expected => [
50            {
51                'methods' => [
52                    {
53                        'line' => 6,
54                        'name' => 'qwer'
55                    }
56                ],
57                'modules' => [
58                    {
59                        'line' => 2,
60                        'name' => 'Abc'
61                    }
62                ],
63                'name'     => 'main',
64                'pragmata' => [
65                    {
66                        'line' => 1,
67                        'name' => 'strict'
68                    },
69                    {
70                        'line' => 1,
71                        'name' => 'warnings'
72                    }
73                ]
74            }
75        ],
76    },
77    {
78        code => <<'END_CODE',
79use strict;
80END_CODE
81        expected => [
82            {
83                'pragmata' => [
84                    {
85                        'line' => 1,
86                        name   => 'strict',
87                    },
88                ],
89                'name' => 'main',
90            },
91        ],
92    },
93    {
94        file     => 't/outline/file2.pl',
95        expected => [
96            {
97                'methods' => [
98                    {
99                        'line' => 14,
100                        'name' => 'abc'
101                    },
102                    {
103                        'line' => 19,
104                        'name' => 'def'
105                    },
106                    {
107                        'line' => 26,
108                        'name' => 'xyz'
109                    }
110                ],
111                'name'     => 'main',
112                'pragmata' => [
113                    {
114                        'line' => 4,
115                        'name' => 'strict'
116                    },
117                    {
118                        'line' => 5,
119                        'name' => 'autodie'
120                    },
121                    {
122                        'line' => 6,
123                        'name' => 'warnings'
124                    },
125                    {
126                        'line' => 8,
127                        'name' => 'lib'
128                    }
129                ]
130            }
131        ]
132    },
133
134);
135
136#plan tests => @cases * 1;
137
138# use PPIx::EditorTools::Outline;
139
140foreach my $c (@cases) {
141    my $code = $c->{code};
142    if ( $c->{file} ) {
143        open my $fh, '<', $c->{file} or die;
144        local $/ = undef;
145        $code = <$fh>;
146    }
147    my $outline = PPIx::EditorTools::Outline->new->find( code => $code );
148
149    #diag explain $outline;
150    is_deeply $outline, $c->{expected} or diag explain $outline;
151}
152
153##############
154# Moose outline testing follows
155##############
156
157my @moo_cases = (
158    {
159        file     => 't/outline/Mooclass.pm',
160        expected => [
161            {
162                'modules' => [
163                    {
164                        'name' => 'MooseX::Declare',
165                        'line' => 1,
166                    },
167                ],
168                'methods' => [
169                    {
170                        'name' => 'pub_sub',
171                        'line' => 12,
172                    },
173                    {
174                        'name' => '_pri_sub',
175                        'line' => 16,
176                    },
177                    {
178                        'name' => 'mm_before',
179                        'line' => 20
180                    },
181                    {
182                        'name' => 'mm_after',
183                        'line' => 24
184                    },
185                    {
186                        'name' => 'mm_around',
187                        'line' => 28
188                    },
189                    {
190                        'name' => 'mm_override',
191                        'line' => 32
192                    },
193                    {
194                        'name' => 'mm_augment',
195                        'line' => 36
196                    },
197                ],
198                'line'       => 3,
199                'name'       => 'Mooclass',
200                'attributes' => [
201                    {
202                        'name' => 'moo_att',
203                        'line' => 5
204                    },
205                    {
206                        'name' => 'label',
207                        'line' => 7
208                    },
209                    {
210                        'name' => 'progress',
211                        'line' => 7
212                    },
213                    {
214                        'name' => 'butWarn',
215                        'line' => 7
216                    },
217                    {
218                        'name' => 'butTime',
219                        'line' => 7
220                    },
221                    {
222                        'name' => 'start_stop',
223                        'line' => 7
224                    },
225                    {
226                        'name' => 'account',
227                        'line' => 10
228                    },
229                ],
230            }
231        ],
232    },
233    {
234        file     => 't/outline/Moorole.pm',
235        expected => [
236            {
237                'modules' => [
238                    {
239                        'name' => 'MooseX::Declare',
240                        'line' => 1,
241                    },
242                ],
243                'line' => 3,
244                'name' => 'Moorole',
245
246                'attributes' => [
247                    {
248                        'line' => 7,
249                        'name' => 'balance'
250                    },
251                    {
252                        'line' => 13,
253                        'name' => 'overdraft'
254                    }
255                ],
256                'pragmata' => [
257                    {
258                        'line' => 5,
259                        'name' => 'version'
260                    }
261                ]
262            }
263          ]
264    },
265);
266
267foreach my $c (@moo_cases) {
268    my $code = $c->{code};
269    if ( $c->{file} ) {
270        open my $fh, '<', $c->{file} or die;
271        local $/ = undef;
272        $code = <$fh>;
273    }
274    my $outline = PPIx::EditorTools::Outline->new->find( code => $code );
275    is_deeply $outline, $c->{expected} or diag explain $outline;
276}
277
278done_testing()