Firefox-Marionette
view release on metacpan or search on metacpan
t/01-marionette.t view on Meta::CPAN
my $at_least_one_success;
my $terminated;
my $class;
my $arch_32bit_re = qr/^(?:x86|arm(?:hf|el)?)$/smxi;
my $quoted_home_directory = quotemeta File::HomeDir->my_home();
my $is_covering = !!(eval 'Devel::Cover::get_coverage()');
my $oldfh = select STDOUT; $| = 1; select $oldfh;
$oldfh = select STDERR; $| = 1; select $oldfh;
if (defined $ENV{WATERFOX}) {
$class = 'Waterfox::Marionette';
$class->import(qw(:all));
} else {
$class = 'Firefox::Marionette';
$class->import(qw(:all));
}
diag("Starting test at " . localtime);
my $alarm;
if (defined $ENV{FIREFOX_ALARM}) {
if ($ENV{FIREFOX_ALARM} =~ /^(\d{1,6})\s*$/smx) {
($alarm) = ($1);
diag("Setting the ALARM value to $alarm");
alarm $alarm;
} else {
die "Invalid value of FIREFOX_ALARM ($ENV{FIREFOX_ALARM})";
}
}
foreach my $name (qw(FIREFOX_HOST FIREFOX_USER)) {
if (exists $ENV{$name}) {
if (defined $ENV{$name}) {
$ENV{$name} =~ s/\s*$//smx;
} else {
die "This is just not possible:$name";
}
}
}
my $test_time_limit = 90;
my $page_content = 'page-content';
my $form_control = 'form-control';
my $css_form_control = 'input.form-control';
my $footer_links = 'footer-links';
my $xpath_for_read_text_and_size = '//a[@class="keyboard-shortcuts"]';
my $freeipapi_uri = 'data:application/json,{"ipVersion":6,"ipAddress":"2001:8001:4ab3:d800:7215:c1fe:fc85:1329","latitude":-37.5,"longitude":144.5,"countryName":"Australia","countryCode":"AU","timeZone":"+11:00","zipCode":"3000","cityName":"Melbourne...
my $geocode_maps_uri = 'data:application/json,[{"place_id":18637666,"licence":"Data © OpenStreetMap contributors, ODbL 1.0. https://osm.org/copyright","osm_type":"node","osm_id":6173167285,"boundingbox":["-37.6","-37.4","144.4","144.5"],"lat":"-37.5...
my $positionstack_uri = 'data:application/json,{"data":[{"latitude":-37.5,"longitude":144.5,"type":"address","name":"101 Collins Street","number":"101","postal_code":"3000","street":"Collins Street","confidence":1,"region":"Victoria","region_code":"V...
my $ipgeolocation_uri = 'data:application/json,{"ip":"2001:8001:4ab3:d800:7215:c1fe:fc85:1329","continent_code":"OC","continent_name":"Oceania","country_code2":"AU","country_code3":"AUS","country_name":"Australia","country_name_official":"Commonwealt...
my $ipstack_uri = 'data:application/json,{"ip": "2001:8003:4a03:d800:7285:c2ff:fe85:1528", "type": "ipv6", "continent_code": "OC", "continent_name": "Oceania", "country_code": "AU", "country_name": "Australia", "region_code": "VIC", "region_name": "V...
my $dummy1_uri = 'data:application/json,{"latitude":40.7,"longitude":-73.9,"time_zone":{"current_time":"2024-01-09 04:36:29.524-0500"}}'; # dummy data for testing (roughly new york)
my $dummy2_uri = 'data:application/json,{"latitude":40.7,"longitude":-73.9,"time_zone":{"current_time":"1234abc"}}'; # dummy data for testing bad data
my $most_common_useragent = q[Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/110.0.0.0 Safari/537.36];
my $useragents_me_uri = qq[data:application/json,{"about": "Use this API to get a list of current popular useragents. Please post a link back to the site if you find it useful!", "terms": "As the data here don't change sooner than once per week, you ...
my $min_geo_version = 60;
my $min_stealth_version = 59;
if (($^O eq 'MSWin32') || ($^O eq 'cygwin')) {
} elsif ($> == 0) { # see RT#131304
my $current = $ENV{HOME};
my $correct = (getpwuid($>))[7];
if ($current eq $correct) {
} else {
$ENV{HOME} = $correct;
diag("Running as root. Resetting HOME environment variable from $current to $ENV{HOME}");
diag("Could be running in an environment where sudo does not reset the HOME environment variable, such as ubuntu");
}
foreach my $env_name (
'XAUTHORITY', # see GH#1
'XDG_RUNTIME_DIR', # see GH#33
) {
if ( exists $ENV{$env_name} ) {
delete $ENV{$env_name};
warn "Running as root. Deleting the $env_name environment variable\n";
}
}
}
my @sig_nums = split q[ ], $Config{sig_num};
my @sig_names = split q[ ], $Config{sig_name};
my %signals_by_name;
my $idx = 0;
foreach my $sig_name (@sig_names) {
$signals_by_name{$sig_name} = $sig_nums[$idx];
$idx += 1;
}
$SIG{INT} = sub { $terminated = 1; die "Caught an INT signal"; };
$SIG{TERM} = sub { $terminated = 1; die "Caught a TERM signal"; };
sub wait_for_server_on {
my ($daemon, $url, $pid) = @_;
my $host = URI->new($url)->host();
my $port = URI->new($url)->port();
undef $daemon;
CONNECT: while (!IO::Socket::IP->new(Type => Socket::SOCK_STREAM(), PeerPort => $port, PeerHost => $host)) {
diag("Waiting for server ($pid) to listen on $host:$port:$!");
waitpid $pid, POSIX::WNOHANG();
if (kill 0, $pid) {
sleep 1;
} else {
diag("Server ($pid) has exited");
last CONNECT;
}
}
return
}
sub empty_port {
socket my $socket, Socket::PF_INET(), Socket::SOCK_STREAM(), 0 or die "Failed to create a socket:$!";
bind $socket, Socket::sockaddr_in( 0, Socket::INADDR_LOOPBACK() ) or die "Failed to bind socket:$!";
my $port = ( Socket::sockaddr_in( getsockname $socket ) )[0];
close $socket or die "Failed to close random socket:$!";
return $port;
}
sub process_alive {
my ($pid) = @_;
if ($^O eq 'MSWin32') {
if (Win32::Process::Open(my $process, $pid, 0)) {
$process->GetExitCode( my $exit_code );
t/01-marionette.t view on Meta::CPAN
}
if ($skip_message) {
skip($skip_message, 5);
}
ok($firefox, "Firefox has started in Marionette mode with visible set to 0");
my $capabilities = $firefox->capabilities();
ok((ref $capabilities) eq 'Firefox::Marionette::Capabilities', "\$firefox->capabilities() returns a Firefox::Marionette::Capabilities object");
SKIP: {
if (!$capabilities->proxy()) {
diag("\$capabilities->proxy is not supported for " . $capabilities->browser_version());
skip("\$capabilities->proxy is not supported for " . $capabilities->browser_version(), 4);
}
ok($capabilities->proxy()->type() eq 'manual', "\$capabilities->proxy()->type() is 'manual'");
ok($capabilities->proxy()->http() eq $proxy_host, "\$capabilities->proxy()->http() is '$proxy_host':" . $capabilities->proxy()->http());
ok($capabilities->proxy()->https() eq $proxy_host, "\$capabilities->proxy()->https() is '$proxy_host'");
}
TODO: {
local $TODO = $correct_exit_status == 0 ? q[] : "$version_string is not exiting cleanly";
ok($firefox->quit() == $correct_exit_status, "Firefox has closed with an exit status of $correct_exit_status:" . $firefox->child_error());
}
}
SKIP: {
if ($major_version > 138) {
($skip_message, $firefox) = start_firefox(0, system_access => 0);
if (!$skip_message) {
$at_least_one_success = 1;
}
if ($skip_message) {
skip($skip_message, 5);
}
ok($firefox->content(), "\$firefox->content() is called to prove we are okay");
eval {
$firefox->chrome();
};
chomp $@;
ok($@, "Unable to move to chrome mode when system_access is turned off:$@");
ok($firefox->quit() == 0, "Firefox has closed with an exit status of 0:" . $firefox->child_error());
}
}
SKIP: {
if (($^O eq 'cygwin') ||
($^O eq 'darwin') ||
($^O eq 'MSWin32'))
{
skip("Skipping exit status tests on $^O", 2);
} elsif (out_of_time()) {
skip("Skipping exit status b/c out of time", 2);
}
my $argument_string = q[];
if ($ENV{FIREFOX_VISIBLE}) {
$argument_string = q[visible => 1];
}
my $exit_status = system { $^X } $^X, (map { "-I$_" } @INC), '-MFirefox::Marionette', '-e', "my \$f = Firefox::Marionette->new($argument_string); exit 0";
ok($exit_status == 0, "Firefox::Marionette doesn't alter the exit code of the parent process if it isn't closed cleanly");
$exit_status = system { $^X } $^X, (map { "-I$_" } @INC), '-MFirefox::Marionette', '-e', "my \$f = Firefox::Marionette->new($argument_string); \$f = undef; exit 0";
ok($exit_status == 0, "Firefox::Marionette doesn't alter the exit code of the parent process if it is 'undefed'");
if ($ENV{RELEASE_TESTING}) {
if ($ENV{FIREFOX_HOST}) {
my $user = getpwuid($>);;
my $host = $ENV{FIREFOX_HOST};
if ($ENV{FIREFOX_USER}) {
$user = $ENV{FIREFOX_USER};
} elsif (($ENV{FIREFOX_HOST} eq 'localhost') && (!$ENV{FIREFOX_PORT})) {
$user = 'firefox';
}
my $handle = File::Temp->new( TEMPLATE => File::Spec->catfile( File::Spec->tmpdir(), 'firefox_test_ssh_local_directory_XXXXXXXXXXX')) or Firefox::Marionette::Exception->throw( "Failed to open temporary file for writing:$!");
fcntl $handle, Fcntl::F_SETFD(), 0 or Carp::croak("Can't clear close-on-exec flag on temporary file:$!");
my $via = $ENV{FIREFOX_VIA} ? q[, via => "] . $ENV{FIREFOX_VIA} . q["] : q[];
my $handle_fileno = fileno $handle;
my $command = join q[ ], $^X, (map { "-I$_" } @INC), '-MFirefox::Marionette', '-e', q['open(my $fh, ">&=", ] . $handle_fileno . q[) or die "OPEN:$!"; $f = Firefox::Marionette->new( user => "] . $user . q[", host => "] . $host . q["] . $via . ($arg...
$command =~ s/([@])/\\$1/smxg;
my $output = `$command`;
$handle->seek(0,0) or die "Failed to seek on temporary file:$!";
my $result = read($handle, my $directory, 2048) or die "Failed to read from temporary file:$!";
ok(!-d $directory, "Firefox::Marionette->new() cleans up the ssh local directory at $directory");
} else {
my $command = join q[ ], $^X, (map { "-I$_" } @INC), '-MFirefox::Marionette', '-e', qq['\$f = Firefox::Marionette->new($argument_string); print \$f->root_directory();'];
my $directory = `$command`;
ok(!-d $directory, "Firefox::Marionette->new() cleans up the local directory at $directory");
}
}
}
ok($profiles_work, "Specified profile names work");
ok($at_least_one_success, "At least one firefox start worked");
eval "no warnings; sub File::Temp::newdir { \$! = POSIX::EACCES(); return; } use warnings;";
ok(!$@, "File::Temp::newdir is redefined to fail:$@");
eval { $class->new(); };
my $output = "$@";
chomp $output;
ok($@->isa('Firefox::Marionette::Exception'), "When File::Temp::newdir is forced to fail, a Firefox::Marionette::Exception is thrown:$output");
my $total_run_time = time - $^T;
if (defined $alarm) {
my $remaining_time = ($alarm - $total_run_time);
diag("Total runtime is " . $total_run_time . " seconds (remaining time before alarm of $alarm is $remaining_time)");
} else {
diag("Total runtime is " . $total_run_time . " seconds");
}
done_testing();
( run in 1.534 second using v1.01-cache-2.11-cpan-364913b4093 )