The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
#!perl -w
use strict;
use Test::More;
use MozRepl::RemoteObject;

my $repl;
my $ok = eval {
    $repl = MozRepl::RemoteObject->install_bridge();
    1;
};
if (! $ok) {
    my $err = $@;
    plan skip_all => "Couldn't connect to MozRepl: $@";
} else {
    plan tests => 9;
};

my $foo = $repl->declare(<<'JS')->();
    function () { return { val: "foo" } }
JS
isa_ok $foo, 'MozRepl::RemoteObject::Instance', "We hold onto a remote object in the first bridge";

my $second;
$ok = eval {
    $second = MozRepl::RemoteObject->install_bridge(
        #log => [qw[debug]],
    );
    1;
};

ok $ok, "We can create a second bridge instance"
    or diag $@;

my $bar = $repl->declare(<<'JS')->();
    function () { return { val: "bar" } }
JS
isa_ok $bar, 'MozRepl::RemoteObject::Instance', "We hold onto a remote object in the second bridge";

my $res;
$ok = eval {
    $res = $foo->{val};
    1
};
my $err = $@;
ok $ok, "We can still access a value from the first bridge instance";
is $@, '', "... no error was raised";
is $res, 'foo', "... and it's the correct value";

undef $res;
$ok = eval {
    $res = $bar->{val};
    1
};
$err = $@;
ok $ok, "We can still access a value from the second bridge instance";
is $@, '', "... no error was raised";
is $res, 'bar', "... and it's the correct value";