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 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
#!/usr/bin/env perl
use strict;
use warnings;
use Test::More;
use Test::Deep;
use Test::FailWarnings;
use Data::Dumper;
use Config;
use Cwd;
use File::Temp;
use File::Slurper;
use JavaScript::QuickJS;
my $dir = File::Temp::tempdir( CLEANUP => 1 );
mkdir "$dir/my";
File::Slurper::write_binary(
"$dir/my/module.js",
"export const life = 42;\n",
);
my $cwd = Cwd::getcwd();
my $retval;
my $js = JavaScript::QuickJS->new()->set_globals(
_return => sub { $retval = shift },
);
#----------------------------------------------------------------------
eval { _test_module('(should fail)'); fail 'nonono' };
my $err = $@;
like($err, qr<ReferenceError>, 'module load should fail without default dir');
chdir $dir;
_test_module('before set_module_base()');
chdir $cwd;
is(
q<> . $js->set_module_base($dir),
"$js",
'set_module_base() returns object',
);
_test_module('after set_module_base()');
#----------------------------------------------------------------------
is(
q<> . $js->unset_module_base(),
"$js",
'unset_module_base() returns object',
);
eval { _test_module('(should fail)') };
$err = $@;
like($err, qr<ReferenceError>, 'module load should fail without default dir');
chdir $dir;
_test_module('after unset_module_base()');
sub _test_module {
my ($label) = @_;
my $ret = $js->eval_module(<<END);
import * as IMPORTED from 'my/module.js';
_return(IMPORTED.life);
export const foo = 123;
42;
END
isa_ok($ret, 'JavaScript::QuickJS::Promise', 'eval_module() returns promise');
my @from_then;
my @from_catch;
$ret->then(
sub { @from_then = @_ },
sub { @from_catch = @_ },
);
$js->await();
is_deeply(\@from_then, [undef], 'module promise resolution');
is_deeply(\@from_catch, [], 'module promise catch');
is( $retval, 42, "$label: module imported and used" );
$js = JavaScript::QuickJS->new()->set_globals(
_return => sub { $retval = shift },
);
}
undef $js;
chdir $cwd;
done_testing;
|