#!perl use Test::More tests => 6; use strict; use warnings; use Test::Exception; use JavaScript; my $rt1 = JavaScript::Runtime->new(); my $cx1 = $rt1->create_context(); $cx1->eval(q[ function multiply(a, b) { return a * b; } ]); is($cx1->call("multiply", 2, 3), 6, 'Called JavaScript function via name'); throws_ok { $cx1->call("divide", 6, 2) } qr/Undefined subroutine divide/, "Called non-existing function and got exception"; my $func = $cx1->eval(q{ /* Return a JavaScript function object */ multiply; }); isa_ok($func, "JavaScript::Function"); is($cx1->call($func, 4, 3), 12, 'Called JavaScript function via JavaScript::Function object via $context->call'); is($func->(4, 5), 20, "Called JavaScript function via JavaScript::Function object direct invocation"); # Make sure functions aren't shared between contexts my $cx2 = $rt1->create_context(); throws_ok { $cx2->call("multiply", 2, 3); } qr/Undefined subroutine multiply/, "Functions are context-bound";