#!perl -w use strict; use Test::More; use WWW::Mechanize::Firefox; my $mech = eval { WWW::Mechanize::Firefox->new( autodie => 0, )}; if (! $mech) { my $err = $@; plan skip_all => "Couldn't connect to MozRepl: $@"; exit } else { plan tests => 21; }; isa_ok $mech, 'WWW::Mechanize::Firefox'; my $browser = $mech->tab->{linkedBrowser}; my $name = 'click'; my $listener = $mech->_addEventListener($browser,$name); my $rn = $mech->repl->name; my $browser_id = $browser->__id; # Now fire the event my $event = $mech->repl->expr(<{busy}, 1, 'Event was fired'; is $listener->{event}, $name, '... and it was our event'; sub is_object($$$) { my ($l,$r,$name) = @_; my $is_id = $mech->repl->declare(<<'JS'); function (l,r) { return l === r }; JS ok $is_id->($l,$r), $name or diag "Got $l->{tagName}, expected $r->{tagName}"; }; # Now check that we can create a lock/listener # that listens on several objects for more than one event # and check that it triggers for every object/event combination my @events = (qw(load DOMContentLoaded error)); my $tab = $mech->tab; my $tab_id = $tab->__id; for my $name (@events) { $listener = $mech->_addEventListener([$browser,\@events], [$tab, \@events]); # Now fire the event my $event = $mech->repl->expr(<{busy}, 1, 'Event was fired'; is $listener->{event}, $name, "... and it was $name"; is_object $listener->{js_event}->{target}, $browser, "... on the browser"; $listener = $mech->_addEventListener([$browser,\@events], [$tab, \@events]); $event = $mech->repl->expr(<{busy}, 1, 'Event was fired'; is $listener->{event}, $name, "... and it was $name"; is_object $listener->{js_event}->{target}, $tab, "... on the tab"; }; $MozRepl::RemoteObject::WARN_ON_LEAKS++; undef $mech;