From dbf6ea44775a8735747ff4e57600cca115d3b9a2 Mon Sep 17 00:00:00 2001 From: David Dick Date: Fri, 19 Jan 2024 22:09:50 +1100 Subject: [PATCH] Changed the language method to languages --- README | 6 +++--- README.md | 4 ++-- lib/Firefox/Marionette.pm | 31 ++++++++++++++++++------------- t/01-marionette.t | 22 ++++++++++------------ 4 files changed, 33 insertions(+), 30 deletions(-) diff --git a/README b/README index 20c4821..eb4db95 100644 --- a/README +++ b/README @@ -1764,12 +1764,12 @@ SUBROUTINES/METHODS $firefox->key_up(CONTROL()) )->content(); - language + languages - accepts an optional value for the Accept-Language + accepts an optional list of values for the Accept-Language header and sets this using the profile preferences. It returns the - current value, such as 'en-US, en'. + current values as a list, such as ('en-US', 'en'). loaded diff --git a/README.md b/README.md index 1be3572..9d064ea 100644 --- a/README.md +++ b/README.md @@ -1366,9 +1366,9 @@ accepts a parameter describing a key and returns an action for use in the [perfo $firefox->key_up(CONTROL()) )->content(); -## language +## languages -accepts an optional value for the [Accept-Language](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) header and sets this using the profile preferences. It returns the current value, such as 'en-US, en'. +accepts an optional list of values for the [Accept-Language](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept-Language) header and sets this using the profile preferences. It returns the current values as a list, such as ('en-US', 'en'). ## loaded diff --git a/lib/Firefox/Marionette.pm b/lib/Firefox/Marionette.pm index 896c20b..940afff 100644 --- a/lib/Firefox/Marionette.pm +++ b/lib/Firefox/Marionette.pm @@ -199,21 +199,26 @@ sub BY_PARTIAL { return 'partial link text'; } -sub language { - my ( $self, $new_language ) = @_; +sub languages { + my ( $self, @new_languages ) = @_; my $pref_name = 'intl.accept_languages'; my $script = -'return branch.getComplexValue(arguments[0], Components.interfaces.nsIPrefLocalizedString).data'; - my $old = $self->_context('chrome'); - my $old_language = $self->script( - $self->_compress_script( $self->_prefs_interface_preamble() . $script ), - args => [$pref_name] - ); + 'return navigator.languages' + ; # branch.getComplexValue(arguments[0], Components.interfaces.nsIPrefLocalizedString).data'; + my $old = $self->_context('chrome'); + my @old_languages = @{ + $self->script( + $self->_compress_script( + $self->_prefs_interface_preamble() . $script + ), + args => [$pref_name] + ) + }; $self->_context($old); - if ( defined $new_language ) { - $self->set_pref( $pref_name, $new_language ); + if ( scalar @new_languages ) { + $self->set_pref( $pref_name, join q[, ], @new_languages ); } - return $old_language; + return @old_languages; } sub _prefs_interface_preamble { @@ -13048,9 +13053,9 @@ accepts a parameter describing a key and returns an action for use in the Lkey_up(CONTROL()) )->content(); -=head2 language +=head2 languages -accepts an optional value for the L header and sets this using the profile preferences. It returns the current value, such as 'en-US, en'. +accepts an optional list of values for the L header and sets this using the profile preferences. It returns the current values as a list, such as ('en-US', 'en'). =head2 loaded diff --git a/t/01-marionette.t b/t/01-marionette.t index 916a7da..98654a1 100755 --- a/t/01-marionette.t +++ b/t/01-marionette.t @@ -1482,19 +1482,17 @@ SKIP: { ok($firefox->aria_role($element) =~ /^(?:toggle[ ])?button$/smx, "Retrieved the ARIA role correctly:" . $firefox->aria_role($element)); ok($firefox->find_id('save')->aria_role() =~ /^(?:toggle[ ])?button$/smx, "Retrieved the ARIA label correctly:" . $firefox->find_id('save')->aria_role()); } - my $browser_language = $firefox->script('return navigator.language'); - my $quoted_browser_language = quotemeta $browser_language; - my $original_language = $firefox->language(); - ok($original_language =~ /^$quoted_browser_language/smx, "\$firefox->language() contains navigator.language as it's first entry:$original_language vs $browser_language"); - my $new_language = 'en-AU,en-GB, en'; - ok($firefox->language($new_language) eq $original_language, "\$firefox->language(\"$new_language\") returns correctly"); - $browser_language = $firefox->script('return navigator.language'); - $quoted_browser_language = quotemeta $browser_language; - ok($new_language =~ /^$quoted_browser_language/smx, "\$firefox->language() contains navigator.language as it's first entry:$new_language vs $browser_language"); + my $browser_language = join q[, ], @{$firefox->script('return navigator.languages')}; + my $original_language = join q[, ], $firefox->languages(); + ok($original_language eq $browser_language, "\$firefox->languages() equals navigator.languages:'$original_language' vs '$browser_language'"); + my $new_language = 'en-AU, en-GB, en'; + ok((join q[, ], $firefox->languages(split q[, ], $new_language)) eq $original_language, "\$firefox->languages(split q[, ], \"$new_language\") returns correctly"); + $browser_language = join q[, ], @{$firefox->script('return navigator.languages')}; + ok($new_language eq $browser_language, "\$firefox->languages() equals navigator.languages:'$new_language' vs '$browser_language'"); my $lone_language = 'en-GB'; - ok($firefox->language($lone_language) eq $new_language, "\$firefox->language(\"$lone_language\") returns correctly"); - $browser_language = $firefox->script('return navigator.language'); - ok($lone_language eq $browser_language, "\$firefox->language() matches navigator.language b/c there is only one entry:$lone_language vs $browser_language"); + ok((join q[, ], $firefox->languages($lone_language)) eq $new_language, "\$firefox->languages(\"$lone_language\") returns correctly"); + $browser_language = join q[, ], @{$firefox->script('return navigator.languages')}; + ok($lone_language eq $browser_language, "\$firefox->languages() matches navigator.language b/c there is only one entry:'$lone_language' vs '$browser_language'"); my $test_agent_string = "Firefox::Marionette v$Firefox::Marionette::VERSION test suite"; my $original_agent = $firefox->agent($test_agent_string); ok($original_agent, "\$firefox->agent() returns a user agent string:$original_agent");