diff --git a/webdriver/tests/bidi/emulation/set_locale_override/conftest.py b/webdriver/tests/bidi/emulation/set_locale_override/conftest.py index e687010128a470..d78cbb26562fac 100644 --- a/webdriver/tests/bidi/emulation/set_locale_override/conftest.py +++ b/webdriver/tests/bidi/emulation/set_locale_override/conftest.py @@ -55,3 +55,104 @@ def another_locale(default_locale, some_locale): raise Exception( f"Unexpectedly could not find locale different from the default {default_locale} and {some_locale}" ) + + +@pytest_asyncio.fixture +async def get_current_navigator_language(bidi_session): + async def get_current_navigator_language(context, sandbox=None): + result = await bidi_session.script.evaluate( + expression="navigator.language", + target=ContextTarget(context["context"], sandbox=sandbox), + await_promise=False, + ) + + return result["value"] + + return get_current_navigator_language + + +@pytest_asyncio.fixture +async def get_current_navigator_languages(bidi_session): + async def get_current_navigator_languages(context, sandbox=None): + result = await bidi_session.script.evaluate( + expression="navigator.languages", + target=ContextTarget(context["context"], sandbox=sandbox), + await_promise=False, + ) + + arr = [] + for item in result["value"]: + arr.append(item["value"]) + + return arr + + return get_current_navigator_languages + + +@pytest_asyncio.fixture +async def default_navigator_language(get_current_navigator_language, top_context): + """ + Returns default navigator.language value. + """ + return await get_current_navigator_language(top_context) + + +@pytest_asyncio.fixture +async def default_navigator_languages(get_current_navigator_languages, top_context): + """ + Returns default navigator.languages value. + """ + return await get_current_navigator_languages(top_context) + + +@pytest_asyncio.fixture +async def assert_locale_against_default( + get_current_locale, + get_current_navigator_language, + get_current_navigator_languages, + default_locale, + default_navigator_language, + default_navigator_languages, +): + """ + Assert JS locale and navigator.language/s against default values. + + Note: it's possible to have slightly different values between JS locale and + navigator.language/s, that's why we have to retrieve the default values + for each API. + """ + + async def assert_locale_against_default(context): + assert await get_current_locale(context) == default_locale + assert ( + await get_current_navigator_language(context) == default_navigator_language + ) + assert ( + await get_current_navigator_languages(context) + == default_navigator_languages + ) + + return assert_locale_against_default + + +@pytest_asyncio.fixture +async def assert_locale_against_value( + top_context, + get_current_locale, + get_current_navigator_language, + get_current_navigator_languages, +): + """ + Assert JS locale and navigator.language/s against provided value + """ + + async def assert_locale_against_value(value, context): + assert ( + context != top_context + ), "Provided context should be different from top_context" + + assert await get_current_locale(context) == value + assert await get_current_navigator_language(context) == value + assert await get_current_navigator_languages(context) == [value] + + return assert_locale_against_value diff --git a/webdriver/tests/bidi/emulation/set_locale_override/locale.py b/webdriver/tests/bidi/emulation/set_locale_override/locale.py index 3da7f62f520082..05bedb73b35341 100644 --- a/webdriver/tests/bidi/emulation/set_locale_override/locale.py +++ b/webdriver/tests/bidi/emulation/set_locale_override/locale.py @@ -3,33 +3,34 @@ pytestmark = pytest.mark.asyncio -async def test_locale_set_override_and_reset(bidi_session, top_context, - get_current_locale, default_locale, some_locale, another_locale): - assert await get_current_locale(top_context) == default_locale +async def test_locale_set_override_and_reset(bidi_session, new_tab, + some_locale, another_locale, + assert_locale_against_default, assert_locale_against_value): + await assert_locale_against_default(new_tab) # Set locale override. await bidi_session.emulation.set_locale_override( - contexts=[top_context["context"]], + contexts=[new_tab["context"]], locale=some_locale ) - assert await get_current_locale(top_context) == some_locale + await assert_locale_against_value(some_locale, new_tab) - # Set locale override. + # Set another locale override. await bidi_session.emulation.set_locale_override( - contexts=[top_context["context"]], + contexts=[new_tab["context"]], locale=another_locale ) - assert await get_current_locale(top_context) == another_locale + await assert_locale_against_value(another_locale, new_tab) - # Set locale override. + # Reset locale override. await bidi_session.emulation.set_locale_override( - contexts=[top_context["context"]], + contexts=[new_tab["context"]], locale=None ) - assert await get_current_locale(top_context) == default_locale + await assert_locale_against_default(new_tab) @pytest.mark.parametrize("value", [