1#!/usr/bin/perl
2
3use strict;
4use warnings;
5
6use Test::More tests => 38;
7use Parse::ErrorString::Perl;
8
9my $parser = Parse::ErrorString::Perl->new;
10
11# use strict;
12# use warnings;
13#
14# $kaboom;
15
16my $msg_compile = <<'ENDofMSG';
17Global symbol "$kaboom" requires explicit package name at error.pl line 8.
18Execution of error.pl aborted due to compilation errors.
19ENDofMSG
20
21my @errors_compile = $parser->parse_string($msg_compile);
22is( scalar(@errors_compile),          1,                                                        'msg_compile results' );
23is( $errors_compile[0]->message,      'Global symbol "$kaboom" requires explicit package name', 'msg_compile message' );
24is( $errors_compile[0]->file_msgpath, 'error.pl',                                               'msg_compile file' );
25is( $errors_compile[0]->line,         8,                                                        'msg_compile line' );
26
27
28# use strict;
29# use warnings;
30#
31# my $empty;
32# my $length = length($empty);
33#
34# my $zero = 0;
35# my $result = 5 / 0;
36
37my $msg_runtime = <<'ENDofMSG';
38Use of uninitialized value $empty in length at error.pl line 5.
39Illegal division by zero at error.pl line 8.
40ENDofMSG
41
42my @errors_runtime = $parser->parse_string($msg_runtime);
43is( scalar(@errors_runtime),          2,                                             'msg_runtime results' );
44is( $errors_runtime[0]->message,      'Use of uninitialized value $empty in length', 'msg_runtime 1 message' );
45is( $errors_runtime[0]->file_msgpath, 'error.pl',                                    'msg_runtime 1 file' );
46is( $errors_runtime[0]->line,         5,                                             'msg_runtime 1 line' );
47is( $errors_runtime[1]->message,      'Illegal division by zero',                    'msg_runtime 2 message' );
48is( $errors_runtime[1]->file_msgpath, 'error.pl',                                    'msg_runtime 2 file' );
49is( $errors_runtime[1]->line,         8,                                             'msg_runtime 2 line' );
50
51# use strict;
52# use warnings;
53#
54# my $string = 'tada';
55# kaboom
56#
57# my $length = 5;
58
59my $msg_near1 = <<'ENDofMSG';
60syntax error at error.pl line 7, near "kaboom
61
62my "
63Global symbol "$length" requires explicit package name at error.pl line 7.
64Execution of error.pl aborted due to compilation errors.
65ENDofMSG
66
67my @errors_near1 = $parser->parse_string($msg_near1);
68is( scalar(@errors_near1),          2,              'msg_near results' );
69is( $errors_near1[0]->message,      'syntax error', 'msg_near 1 message' );
70is( $errors_near1[0]->file_msgpath, 'error.pl',     'msg_near 1 file' );
71is( $errors_near1[0]->line,         7,              'msg_near 1 line' );
72is( $errors_near1[0]->near, 'kaboom
73
74my ', 'msg_near 1 near'
75);
76is( $errors_near1[1]->message,      'Global symbol "$length" requires explicit package name', 'msg_near 2 message' );
77is( $errors_near1[1]->file_msgpath, 'error.pl',                                               'msg_near 2 file' );
78is( $errors_near1[1]->line,         7,                                                        'msg_near 2 line' );
79
80# package;
81#
82my $msg_near2 = <<'ENDofMSG';
83syntax error at -e line 1, near "package;"
84-e had compilation errors.
85ENDofMSG
86
87my @errors_near2 = $parser->parse_string($msg_near2);
88is( scalar(@errors_near2),          1,              'msg_near 2 results' );
89is( $errors_near2[0]->message,      'syntax error', 'msg_near 2 message' );
90is( $errors_near2[0]->file_msgpath, '-e',           'msg_near 2 file' );
91is( $errors_near2[0]->line,         1,              'msg_near 2 line' );
92is( $errors_near2[0]->near,         'package;' );
93
94#use strict;
95#use warnings;
96#
97#if (1) { if (2)
98
99my $msg_at = <<'ENDofMSG';
100syntax error at error.pl line 4, at EOF
101Missing right curly or square bracket at error.pl line 4, at end of line
102Execution of error.pl aborted due to compilation errors.
103ENDofMSG
104
105my @errors_at = $parser->parse_string($msg_at);
106is( scalar(@errors_at),          2,                                       'msg_at results' );
107is( $errors_at[0]->message,      'syntax error',                          'msg_at 1 message' );
108is( $errors_at[0]->file_msgpath, 'error.pl',                              'msg_at 1 file' );
109is( $errors_at[0]->line,         4,                                       'msg_at 1 line' );
110is( $errors_at[0]->at,           'EOF',                                   'msg_at 1 at' );
111is( $errors_at[1]->message,      'Missing right curly or square bracket', 'msg_at 2 message' );
112is( $errors_at[1]->file_msgpath, 'error.pl',                              'msg_at 2 file' );
113is( $errors_at[1]->line,         4,                                       'msg_at 2 line' );
114is( $errors_at[1]->at,           'end of line',                           'msg_at 2 at' );
115
116# use strict;
117# use warnings;
118#
119# eval 'sub test {print}';
120# test();
121
122my $msg_eval = <<'ENDofMSG';
123Use of uninitialized value $_ in print at (eval 1) line 1.
124ENDofMSG
125
126my @errors_eval = $parser->parse_string($msg_eval);
127is( scalar(@errors_eval),          1,                                        'msg_eval results' );
128is( $errors_eval[0]->message,      'Use of uninitialized value $_ in print', 'msg_eval 1 message' );
129is( $errors_eval[0]->file_msgpath, '(eval 1)',                               'msg_eval 1 file' );
130is( $errors_eval[0]->file,         'eval',                                   'msg_eval 1 eval' );
131is( $errors_eval[0]->line,         1,                                        'msg_eval 1 line' );
132
133