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

BEGIN { require './t/test.pl' }

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

# Test 1: See if the module loads
BEGIN { use_ok('JE') };

my $j = new JE;

# Test 2: Bind the ok function
isa_ok( $j->new_function( ok => \&ok ), 'JE::Object::Function' );

# Run JS tests

defined $j->eval( <<'--end--' ) or die;

// test 3
ok(
	function() {
		return
		true
	}() === undefined, '"return\\ntrue" returns undefined'
);

// test 4
try {
	eval('throw\nup')
}
catch (fire) {
	ok( fire instanceof SyntaxError,
		'"throw\\nup" throws a SyntaxError');
}


// test 5
x = true
do {
	loose: {
		break
		loose
	}
	x = false
} while(0)
ok(x, '"break\\n<identifier>" ignores the identifier');


// test 6
x = true
do {
	eavesdropping: {
		continue
		eavesdropping
	}
	x = false
} while(0)
ok(x, '"continue\\n<identifier>" ignores the identifier');


// test 7
a = b = 5
a
++
b
ok(a === 5 && b === 6, '"a\\n++\\nb" means "a; ++b"')

// test 8
a = b = 5
a
--
b
ok(a === 5 && b === 4, '"a\\n--\\nb" means "a; --b"')


// test 9
ok
(true, 'semicolons are not inserted before argument lists')



--end--