The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -T

use Test::More tests => 9;
use strict;
use utf8;

#--------------------------------------------------------------------#
# Test 1: See if the module loads

BEGIN { use_ok('JE') };

#--------------------------------------------------------------------#
# Test 2: Parse code

my $j = new JE;

isa_ok( my $code = $j->parse( <<'--end--' ), 'JE::Code');

try { t4 = 4; throw 5 }
catch ( a ) { t4b = 5 }

try { t5 = 5 }
finally { t5b = 'b' }

try { t6a = 'a'; throw 'up' }
catch ( ateed ) { t6b = 'b' }
finally { t6c = 'de' }


try{t7 = 4; throw 5}catch(a){t7b = 5}
try{t8 = 5}finally{t8b = 'b'}
try{t9a = 'a'; throw 'up'}catch(ateed){t9b = 'b'}finally{t9c = 'de'}

--end--

#--------------------------------------------------------------------#
# Test 3: Run code

$code->execute;
is($@, '', 'execute code');

#--------------------------------------------------------------------#
# Tests 4-9: Check side-effects

ok( $j->prop('t4') eq 4 &&
    $j->prop('t4b') eq 5,  'try { } catch ( a ) { }'        );
ok( $j->prop('t5')  eq 5 &&
    $j->prop('t5b') eq 'b', 'try { } finally { }'               );
ok( $j->prop('t6a') eq 'a' && $j->prop('t6b') eq 'b' && 
    $j->prop('t6c') eq 'de', 'try { } catch ( a ) { } finally { }' );
ok( $j->prop('t7')  eq 4    &&
    $j->prop('t7b') eq 5,    'try{}catch(a){}'                        );
ok( $j->prop('t8')  eq 5    &&
    $j->prop('t8b') eq 'b',  'try{}finally{}'                           );
ok( $j->prop('t9a') eq 'a' && $j->prop('t9b') eq 'b' && 
    $j->prop('t9c') eq 'de', 'try{}catch(a){}finally{}'                  );