
## parse empty try string
set test eval-catch-1
set prog_output "^$"
do_test eval-catch-1.m

## parse empty catch string
set test eval-catch-2
set prog_output "^$"
do_test eval-catch-2.m

## suppress error; do not execute code after error
set test eval-catch-3
set prog_output "^ans = 2"
do_test eval-catch-3.m

## execute catch clause
set test eval-catch-4
set prog_output "^ans = 1"
do_test eval-catch-4.m

## lasterr works in and out of the catch string.
set test eval-catch-5
set prog_output "ans = error: `a' undefined.*\n\nans = error: `a' undefined"
do_test eval-catch-5.m

## throw a user-defined error
set test eval-catch-6
set prog_output "ans = error: user-defined error\n\nans = error: user-defined error"
do_test eval-catch-6.m

## pass lasterr to user-defined subroutine
set test eval-catch-7
set prog_output "^ans = <error: `a' undefined.*\n>"
do_test eval-catch-7.m

## handle nested eval: eval in try-string
set test eval-catch-8
set prog_output "ans = error: `a' undefined.*\n\nans = error: `b' undefined.*\n$"
do_test eval-catch-8.m

## handle nested eval: eval nested in catch-string
set test eval-catch-9
set prog_output "ans = error: `b' undefined.*\n\nans = error: `b' undefined.*\n$"
do_test eval-catch-9.m

## re-throw an error
set test eval-catch-10
set prog_output "ans = error: rethrow: error: `a' undefined.*\n"
do_test eval-catch-10.m
