1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90
|
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Test::Deep;
use Test::FailWarnings;
use Data::Dumper;
use Config;
use Types::Serialiser;
use JavaScript::QuickJS;
{
my $js = JavaScript::QuickJS->new();
$js->set_globals( foo => sub { } );
}
{
my $ret;
{
my $js = JavaScript::QuickJS->new()->set_globals(
__return => sub { $ret = shift; () },
);
$js->eval('__return( function add1(a) { return 1 + a } )');
$js->set_globals( __return => undef );
}
is(
$ret->(1),
2,
'add1 called without QuickJS instance',
);
undef $ret;
}
{
my $js = JavaScript::QuickJS->new();
my $struct = $js->eval('[[[]]]');
is_deeply($struct, [[[]]], 'nested arrays');
my $gives_deep = $js->eval('a => [[[a]]]');
my $got = $gives_deep->([]);
is_deeply($got, [[[[]]]], 'nested arrays from funcref') or diag explain $got;
}
{
my $ret;
JavaScript::QuickJS->new()->set_globals(
__return => sub { $ret = shift; () },
)->eval(qq/
__return( {
add1: a => 1 + a,
deepen: a => [a],
} );
/);
my @to_deepen = (
123,
[],
[123],
{},
{ foo => 234 },
);
for my $specimen (@to_deepen) {
my $out = $ret->{'deepen'}->($specimen);
my $render = do {
local $Data::Dumper::Terse = 1;
local $Data::Dumper::Indent = 0;
Data::Dumper::Dumper($specimen);
};
cmp_deeply( $out, [$specimen], "deepen: $render" ) or diag explain $out;
}
undef $ret;
}
done_testing;
|