#!perl use strict; use Test::More; use JavaScript; BEGIN { # Skip these test if we don't have JavaScript 1.7 or later my $version = (JavaScript::get_engine_version())[1]; $version =~ s/\.\d$// if $version =~ /\d+\.\d+\.\d+$/; plan skip_all => "Engine version 1.7 or later require" if $version < 1.7; } plan tests => 17; my $runtime = new JavaScript::Runtime(); my $context = $runtime->create_context(); my $ret = $context->eval(<bind_function( name => 'perl5_eval', func => sub { my $ret = eval $_[0]; die $@ if $@; $ret } ); $context->bind_function( name => 'alert', func => sub { warn @_ } ); $context->bind_function( name => 'isa_ok', func => sub { isa_ok($_[0], $_[1]) } ); $context->bind_function( name => 'is', func => \&is ); $ret = $context->eval(< "fnord\\n"}; print "bar\\n"'); 1; EOP is_deeply($@, { foo => "fnord\n"} ); is($ret, undef); $ret = $context->eval(<eval(< "fnord\\n"}; print "bar\\n"'); } catch (e) { isa_ok(e, "HASH"); throw e; } 1; EOP is_deeply($@, { foo => "fnord\n"} ); is($ret, undef); $ret = $context->eval(<eval(<eval(<eval(<bind_class(constructor => sub { die "Can't create"; }, name => 'CantCreate'); $ret = $context->eval("var f = new CantCreate"); like($@, qr/Can't create/);