#!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{}' );