#!perl
use Test::More tests => 24;
use strict;
use warnings;
use JavaScript;
my $rt = JavaScript::Runtime->new();
my $cx = $rt->create_context();
$cx->bind_function(ok => \&ok);
{
my $arr = JavaScript::PerlArray->new();
ok(defined $arr);
isa_ok($arr, "JavaScript::PerlArray");
ok($arr->get_ref);
my $av = $arr->get_ref;
is(ref $av, "ARRAY");
is_deeply($arr->get_ref, []);
}
{
my $arr = $cx->eval(q/
var array = new PerlArray();
ok(array instanceof PerlArray);
array;
/);
isa_ok($arr, "JavaScript::PerlArray");
is_deeply($arr->get_ref, []);
}
{
my $arr = JavaScript::PerlArray->new();
push @{$arr->get_ref}, 10, 20, 30;
$cx->eval(q/
function check_perlarray(arr) {
ok(arr instanceof PerlArray);
ok(arr.length == 3);
ok(arr[0] == 10);
ok(arr[1] == 20);
ok(arr[2] == 30);
ok(arr[-1] == 30);
}
/);
$cx->call(check_perlarray => $arr);
}
{
$cx->eval(q/
var array = new PerlArray();
array.push(10);
ok(array.length == 1);
ok(array[0] == 10);
array.unshift(20, 30);
ok(array.length == 3);
ok(array[0] == 20 && array[1] == 30 && array[2] == 10);
ok(array.shift() == 20);
ok(array.length == 2);
ok(array.pop() == 10);
ok(array.length == 1);
/)
}
{
my $arr = JavaScript::PerlArray->new();
$cx->eval(q/
function populate_perlarray_via_index(array) {
array[2] = 20;
}
/);
is_deeply($arr->get_ref, []);
$cx->call(populate_perlarray_via_index => $arr);
is_deeply($arr->get_ref, [undef, undef, 20]);
}