JE

 view release on metacpan or  search on metacpan

t/11.01-primary-expressions.t  view on Meta::CPAN

#!perl -T

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

use Test::More tests => 74;
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' );


$j->prop(global => $j); 

# Run JS tests

my $line = __LINE__+3; # If I put this on the next line, it gives the last
                       # line of the here-doc (or something like that).
defined $j->eval( <<'--end--', __FILE__, $line ) or die;

// ===================================================
// 11.1.1 this (not that)
// ===================================================

/* Tests 4-7 */

ok(global === this, '\'this\' keyword in global code')
eval("ok(global === this, '\\'this\\' keyword in global-eval code')")
obj = { f: function() {
	ok(this === obj, '\'this\' keyword in function code')
	eval("ok(this === obj, '\\'this\\' keyword in function-eval code')"
	)
} }
obj.f()


// ===================================================
// 11.1.2 Identifiers
// ===================================================
// (identifier resolution is defined in 10.1.4)

/* Test 8 */

var error
try {
	NaN = 333
	eval('NaN = 323'),
	pfpf = 3289
	eval('onetoh = 389')
	function(a) {
		tht =3 
		a=  3
		eval('thteoe = 3; a = 1')
	}()
}
catch(e) { error = true }
ok(!error, 'The result of evalling an identifier is always an lvalue')


// ===================================================
// 11.1.3 Array literals
// ===================================================

/* Tests 9-60 */

a = []
ok(a.length === 0,                               '[]')
a = [,]
ok(a.length === 1 && !('0' in a),                '[,]')
a = [, ,]
ok(a.length === 2 && !('0' in a) && !('1' in a), '[, ,]')
a = [1]
ok(a.length === 1 && a[0] === 1,                 '[ expr ]')
a = [1,2]
ok(a.length === 2 && a[0] === 1 && a[1] === 2,   '[ expr, expr ]')
a = [1, , 2]
ok(a.length === 3 && a[0] === 1 && !('1' in a) && a[2] === 2,
	'[ expr, , expr ]')
a = [1, ,, 2]
ok(a.length === 4 && a[0] === 1 && !('1' in a) && !('2' in a) &&
   a[3]     === 2,                              '[ expr, ,, expr ]')
a = [, 1]
ok(a.length === 2 && !('0' in a) && a[1] === 1, '[ , expr ]')
a = [, 1, 2]
ok(a.length === 3 && !('0' in a) && a[1] === 1 && a[2] === 2,
	'[ , expr, expr ]')
a = [, 1, , 2]
ok(a.length === 4 && !('0' in a) && a[1] === 1 && !('2' in a) &&
   a[3]     === 2, '[ , expr, , expr ]')
a = [, 1, ,, 2]
ok(a.length === 5 && !('0' in a) && a[1] === 1 && !('2' in a) &&
   !('3' in a)    && a[4] === 2, '[ , expr, ,, expr ]')
a = [,, 1]
ok(a.length === 3 && !('0' in a) && !('1' in a) && a[2] === 1,
	'[ ,, expr ]')
a = [,, 1, 2]
ok(a.length === 4 && !('0' in a) && !('1' in a) && a[2] === 1 &&
   a[3]     === 2, '[ ,, expr, expr ]')
a = [,, 1, , 2]
ok(a.length === 5 && !('0' in a) && !('1' in a) && a[2] === 1 &&
   !('3' in a)    && a[4] === 2, '[ ,, expr, , expr ]')
a = [,, 1, ,, 2]
ok(a.length === 6 && !('0' in a) && !('1' in a) && a[2] === 1 &&
   !('3' in a)    && !('4' in a) && a[5] === 2, '[ ,, expr, ,, expr ]')
a = [1,]
ok(a.length === 1 && a[0] === 1,                '[ expr, ]')
a = [1, 2,]



( run in 1.599 second using v1.01-cache-2.11-cpan-364913b4093 )