use v6-alpha; use Test; plan 14; # L =pod Tests for the die() builtin =cut ok(!try { die "foo"; 1 }); my $error = $!; is($error, 'foo', 'got $! correctly'); my $foo = "-foo-"; try { $foo = die "bar" }; $foo; # this is testing for a bug where an error is stored into $foo in # the above eval; unfortunately the if below doesn't detect this on it's # own, so this lone $foo will die if the bug is present ok($foo eq "-foo-"); sub recurse { my $level=@_[0]; $level>0 or die "Only this\n"; recurse(--$level); } try { recurse(1) }; is($!, "Only this\n"); # die in if,map,grep etc. is ({ try { map { die }, 1,2,3 }; 42 }()), 42, "die in map"; is ({ try { grep { die }, 1,2,3 }; 42 }()), 42, "die in grep"; is ({ try { sort { die }, 1,2,3 }; 42 }()), 42, "die in sort"; is ({ try { reduce { die }, 1,2,3 }; 42 }()), 42, "die in reduce"; is ({ try { min { die }, 1,2,3 }; 42 }()), 42, "die in min"; is ({ try { max { die }, 1,2,3 }; 42 }()), 42, "die in max"; is ({ try { for 1,2,3 { die } }; 42 }()), 42, "die in for"; is ({ try { if 1 { die } else { die } }; 42 }()), 42, "die in if"; my sub die_in_return () { return die }; is ({ try { die_in_return(); 23 }; 42 }()), 42, "die in return"; # If one of the above tests caused weird continuation bugs, the following line # will be executed multiple times, resulting in a "too many tests run" error # (which is what we want). (Test primarily aimed at PIL2JS) is 42-19, 23, "basic sanity";