/
error-reporting.t
124 lines (105 loc) 路 2.77 KB
/
error-reporting.t
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
use v6;
use Test;
plan 13;
BEGIN { @*INC.push('t/spec/packages') };
use Test::Util;
is_run "use v6;\n'a' =~ /foo/", {
status => { $_ != 0 },
out => '',
err => rx/<<2>>/
}, 'Parse error contains line number';
is_run "my \$x = 2 * 3;\ndie \$x", {
status => { $_ != 0 },
out => '',
err => all(rx/6/, rx/<<2>>/),
}, 'Runtime error contains line number';
is_run "use v6;\n\nsay 'Hello';\nsay 'a'.my_non_existent_method_6R5();",
{
status => { $_ != 0 },
out => /Hello\r?\n/,
err => all(rx/my_non_existent_method_6R5/, rx/<<4>>/),
}, 'Method not found error mentions method name and line number';
# RT #75446
is_run 'use v6;
sub bar {
pfff();
}
bar()',
{
status => { $_ != 0 },
out => '',
err => all(rx/pfff/, rx/<<3>>/),
}, 'got the right line number for nonexisting sub inside another sub';
is_run 'say 42; nosuchsub()',
{
status => { $_ != 0 },
out => '',
err => rx/nosuchsub/,
},
'non-existing subroutine is caught before run time';
# RT #74348
{
subset Even of Int where { $_ %% 2 };
sub f(Even $x) { $x };
try { eval 'f(3)' };
my $e = "$!";
diag "Error message: $e";
ok $e ~~ /:i 'type check'/,
'subset type check fail mentions type check';
ok $e ~~ /:i constraint/,
'subset type check fail mentions constraint';
}
# RT #76112
is_run 'use v6;
class A { has $.x is rw };
A.new.x(42);',
{
status => { $_ != 0 },
out => '',
err => rx/<<3>>/,
}, 'got the right line number for accessors';
# RT #80982
#?rakudo todo 'RT 80982'
is_run 'say 0080982',
{
status => 0,
out => "80982\n",
err => rx/ octal /,
}, 'use of leading zero causes warning about octal';
# RT #76986
#?niecza todo
is_run 'my $ = 2; my $ = 3; say q[alive]',
{
status => 0,
err => '',
out => "alive\n",
}, 'multiple anonymous variables do not warn or err out';
# RT #112724
is_run 'sub mysub {
+ Any # trigger an uninitialized warning
};
mysub()',
{
status => 0,
err => /<<2>>/ & /<<mysub>>/,
out => '',
}, 'warning reports correct line number and subroutine';
# RT #77736
is_run 'die "foo"; END { say "end run" }',
{
status => * != 0,
err => rx/foo/,
out => "end run\n",
},
'END phasers are run after die()';
# RT #113848
{
try eval ' # line 1
use v6; # line 2
(1 + 2) = 3; # line 3
';
#?niecza skip "Unable to resolve method backtrace in type Str"
ok ?( $!.backtrace.any.line == 3),
'correct line number reported for assignment to non-variable';
}
# vim: ft=perl6