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

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


my $j = new JE;


# Tests 2-3: Bind the ok and diag functions
isa_ok( $j->new_function( ok  => \&ok   ), 'JE::Object::Function' );
isa_ok( $j->new_function( diag => \&diag ), 'JE::Object::Function' );


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

// ===================================================
// 11.3.1 ++
// ===================================================

/* Tests 4-11 */

x = void 0;
ok(isNaN(x++) && isNaN(x), 'undefined++')
x = null
ok(x++===0&&x===1,         'null++')
x = true
ok(x++===1&&x===2,         'true++')
x = false
ok(x++===0&&x===1,         'false++')
x = 'a'
ok(isNaN(x++) && isNaN(x), '"a"++')
x = '3'
ok(x++===3&&x===4,         '"3"++')
x = 4.2
ok(x++===4.2&&x===5.2,     '4.2++')
x = {}
ok(isNaN(x++) && isNaN(x), '{}++')


// ===================================================
// 11.3.2 --
// ===================================================

/* Tests 12-19 */

x = void 0;
ok(isNaN(x--) && isNaN(x), 'undefined--')
x = null
ok(x--===0&&x===-1,        'null--')
x = true
ok(x--===1&&x===0,         'true--')
x = false
ok(x--===0&&x===-1,        'false--')
x = 'a'
ok(isNaN(x--) && isNaN(x), '"a"--')
x = '3'
ok(x--===3&&x===2,         '"3"--')
x = 4.2
ok(x--===4.2&&x===3.2,     '4.2--')
x = {}
ok(isNaN(x--) && isNaN(x), '{}--')


--end--