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 => 5;
use strict;
use utf8;

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


my $j = new JE;

$j->prop({
	name => 'only_read',
	value  => $j->upgrade('anything will do'),
	readonly => 1,
});
$j->prop({
	name => 'delete_me_if_you_can',
	value  => $j->upgrade('anything will do'),
	dontdel => 1,
});
$j->prop({
	name => 'unlisted',
	value  => $j->upgrade('anything will do'),
	dontenum => 1,
});


# 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
only_read = 'Well?'
ok(only_read === 'anything will do', 'can\'t change readonly properties')

//test 4
for(var p in this) p == 'unlisted' && (found_unlisted = true)
ok(!this.found_unlisted,
	'unenumerable properties are unenumerated by for-in')

//test 5
ok(!delete delete_me_if_you_can && 'delete_me_if_you_can' in this,
	'can\'t delete undeleteables')

--end--