-
Notifications
You must be signed in to change notification settings - Fork 135
/
dollar_bang.t
71 lines (55 loc) · 1.98 KB
/
dollar_bang.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
use v6;
use Test;
plan 15;
=begin desc
This test tests the C<$!> builtin.
=end desc
# L<S04/"Exceptions"/A bare die/fail takes $! as the default argument>
try { die "foo" };
ok defined($!), 'error in try makes $! defined';
try { 1 };
nok $!.defined, 'successful try { } resets $!';
try { 1.nonexisting_method; };
ok $!.defined, 'Calling a nonexisting method defines $!';
my $called;
sub foo(Str $s) { return $called++ }; #OK not used
my @a;
try { EVAL 'foo(@a,@a)' };
ok $!.defined, 'Calling a subroutine with a nonmatching signature sets $!';
ok !$called, 'The subroutine also was not called';
try { (1 div 0).Str };
ok $!.defined, 'Dividing one by zero sets $!';
sub incr ( $a is rw ) { $a++ };
try { incr(19) };
ok $!.defined, 'Modifying a constant sets $!';
try {
try {
die 'qwerty';
}
ok ~($!) ~~ /qwerty/, 'die sets $! properly';
die; # use the default argument
}
# RT #70011
{
undefine $!;
try { die('goodbye'); }
ok defined( $!.perl ), '$! has working Perl 6 object methods after try';
ok ($!.WHAT ~~ Exception), '$! is Exception object after try';
# - S04-statements/try.t tests $! being set after try.
# - S29-context/die.t tests $! being set after die.
# - also tested more generically above.
# So no need to test the value of #! again here.
#is $!, 'goodbye', '$! has correct value after try';
ok ($!), '$! as boolean works (true)';
try { EVAL q[ die('farewell'); ] };
ok defined($!.perl), '$! has working Perl 6 object methods after eval';
ok ($!.WHAT ~~ Exception), '$! is Exception object after eval';
# Although S29-context/die.t tests $! being set after die, it's not
# from within an eval, so we test the eval/die combination here.
# As that file (and also S04-statements/try.t) do equality comparisons
# rather than pattern matches, we check equality here, too.
is $!, 'farewell', '$! has correct value after eval';
try { 1; }
ok (! $!), '$! as boolean works (false)';
}
# vim: ft=perl6