<reponame>hiikezoe/web-platform-tests
# META: timeout=long

from tests.support.inline import inline
from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
from tests.support.fixtures import create_dialog


alert_doc = inline("<script>window.alert()</script>")


def read_global(session, name):
    return session.execute_script("return %s;" % name)


def fullscreen(session):
    return session.transport.send("POST", "session/%s/window/fullscreen" % session.session_id)


# 10.7.5 Fullscreen Window


# 1. If the current top-level browsing context is no longer open, return error
#    with error code no such window.
def test_no_browsing_context(session, create_window):
    # step 1
    session.window_handle = create_window()
    session.close()
    response = fullscreen(session)
    assert_error(response, "no such window")


# [...]
# 2. Handle any user prompts and return its value if it is an error.
# [...]
# In order to handle any user prompts a remote end must take the following
# steps:
# 2. Run the substeps of the first matching user prompt handler:
#
#    [...]
#    - accept state
#      1. Accept the current user prompt.
#    [...]
#
# 3. Return success.
def test_handle_prompt_accept(new_session):
    _, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "accept"}})
    session.url = inline("<title>WD doc title</title>")
    create_dialog(session)("alert", text="accept #1", result_var="accept1")

    expected_title = read_global(session, "document.title")
    response = fullscreen(session)

    assert_success(response, expected_title)
    assert_dialog_handled(session, "accept #1")
    assert read_global(session, "accept1") == None

    expected_title = read_global(session, "document.title")
    create_dialog(session)("confirm", text="accept #2", result_var="accept2")

    response = fullscreen(session)

    assert_success(response, expected_title)
    assert_dialog_handled(session, "accept #2")
    assert read_global(session, "accept2"), True

    expected_title = read_global(session, "document.title")
    create_dialog(session)("prompt", text="accept #3", result_var="accept3")

    response = fullscreen(session)

    assert_success(response, expected_title)
    assert_dialog_handled(session, "accept #3")
    assert read_global(session, "accept3") == ""


# [...]
# 2. Handle any user prompts and return its value if it is an error.
# [...]
# In order to handle any user prompts a remote end must take the following
# steps:
# 2. Run the substeps of the first matching user prompt handler:
#
#    [...]
#    - missing value default state
#    - not in the table of simple dialogs
#      1. Dismiss the current user prompt.
#      2. Return error with error code unexpected alert open.
def test_handle_prompt_missing_value(session, create_dialog):
    session.url = inline("<title>WD doc title</title>")
    create_dialog("alert", text="dismiss #1", result_var="dismiss1")

    response = fullscreen(session)

    assert_error(response, "unexpected alert open")
    assert_dialog_handled(session, "dismiss #1")
    assert read_global(session, "accept1") == None

    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")

    response = fullscreen(session)

    assert_error(response, "unexpected alert open")
    assert_dialog_handled(session, "dismiss #2")
    assert read_global(session, "dismiss2") == False

    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")

    response = fullscreen(session)

    assert_error(response, "unexpected alert open")
    assert_dialog_handled(session, "dismiss #3")
    assert read_global(session, "dismiss3") == None


# 4. Call fullscreen an element with the current top-level browsing
# context's active document's document element.
def test_fullscreen(session):
    # step 4
    response = fullscreen(session)
    assert_success(response)
    assert session.execute_script("return window.fullScreen") == True


# 5. Return success with the JSON serialization of the current top-level
# browsing context's window rect.
#
# [...]
#
# A top-level browsing context's window rect is defined as a
# dictionary of the screenX, screenY, width and height attributes of the
# WindowProxy. Its JSON representation is the following:
#
#   x
#     WindowProxy's screenX attribute.
#
#   y
#     WindowProxy's screenY attribute.
#
#   width
#     Width of the top-level browsing context's outer dimensions,
#     including any browser chrome and externally drawn window
#     decorations in CSS reference pixels.
#
#   height
#     Height of the top-level browsing context's outer dimensions,
#     including any browser chrome and externally drawn window decorations
#     in CSS reference pixels.
#
#   state
#     The top-level browsing context's window state.
#
# [...]
#
# The top-level browsing context has an associated window state which
# describes what visibility state its OS widget window is in. It can be
# in one of the following states:
#
#   "maximized"
#     The window is maximized.
#
#   "minimized"
#     The window is iconified.
#
#   "normal"
#     The window is shown normally.
#
#   "fullscreen"
#     The window is in full screen mode.
#
# If for whatever reason the top-level browsing context's OS window
# cannot enter either of the window states, or if this concept is not
# applicable on the current system, the default state must be normal.
def test_payload(session):
    response = fullscreen(session)

    # step 5
    assert response.status == 200
    assert isinstance(response.body["value"], dict)

    rect = response.body["value"]
    assert "width" in rect
    assert "height" in rect
    assert "x" in rect
    assert "y" in rect
    assert isinstance(rect["width"], (int, float))
    assert isinstance(rect["height"], (int, float))
    assert isinstance(rect["x"], (int, float))
    assert isinstance(rect["y"], (int, float))


def test_fullscreen_twice_is_idempotent(session):
    assert session.execute_script("return window.fullScreen") is False

    first_response = fullscreen(session)
    assert_success(first_response)
    assert session.execute_script("return window.fullScreen") is True

    second_response = fullscreen(session)
    assert_success(second_response)
    assert session.execute_script("return window.fullScreen") is True

# META: timeout=long

from tests.support.inline import inline
from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
from tests.support.fixtures import create_dialog


alert_doc = inline("<script>window.alert()</script>")


def read_global(session, name):
    return session.execute_script("return %s;" % name)


def fullscreen(session):
    return session.transport.send("POST", "session/%s/window/fullscreen" % session.session_id)


# 10.7.5 Fullscreen Window


# 1. If the current top-level browsing context is no longer open, return error
#    with error code no such window.
def test_no_browsing_context(session, create_window):
    # step 1
    session.window_handle = create_window()
    session.close()
    response = fullscreen(session)
    assert_error(response, "no such window")


# [...]
# 2. Handle any user prompts and return its value if it is an error.
# [...]
# In order to handle any user prompts a remote end must take the following
# steps:
# 2. Run the substeps of the first matching user prompt handler:
#
#    [...]
#    - accept state
#      1. Accept the current user prompt.
#    [...]
#
# 3. Return success.
def test_handle_prompt_accept(new_session):
    _, session = new_session({"alwaysMatch": {"unhandledPromptBehavior": "accept"}})
    session.url = inline("<title>WD doc title</title>")
    create_dialog(session)("alert", text="accept #1", result_var="accept1")

    expected_title = read_global(session, "document.title")
    response = fullscreen(session)

    assert_success(response, expected_title)
    assert_dialog_handled(session, "accept #1")
    assert read_global(session, "accept1") == None

    expected_title = read_global(session, "document.title")
    create_dialog(session)("confirm", text="accept #2", result_var="accept2")

    response = fullscreen(session)

    assert_success(response, expected_title)
    assert_dialog_handled(session, "accept #2")
    assert read_global(session, "accept2"), True

    expected_title = read_global(session, "document.title")
    create_dialog(session)("prompt", text="accept #3", result_var="accept3")

    response = fullscreen(session)

    assert_success(response, expected_title)
    assert_dialog_handled(session, "accept #3")
    assert read_global(session, "accept3") == ""


# [...]
# 2. Handle any user prompts and return its value if it is an error.
# [...]
# In order to handle any user prompts a remote end must take the following
# steps:
# 2. Run the substeps of the first matching user prompt handler:
#
#    [...]
#    - missing value default state
#    - not in the table of simple dialogs
#      1. Dismiss the current user prompt.
#      2. Return error with error code unexpected alert open.
def test_handle_prompt_missing_value(session, create_dialog):
    session.url = inline("<title>WD doc title</title>")
    create_dialog("alert", text="dismiss #1", result_var="dismiss1")

    response = fullscreen(session)

    assert_error(response, "unexpected alert open")
    assert_dialog_handled(session, "dismiss #1")
    assert read_global(session, "accept1") == None

    create_dialog("confirm", text="dismiss #2", result_var="dismiss2")

    response = fullscreen(session)

    assert_error(response, "unexpected alert open")
    assert_dialog_handled(session, "dismiss #2")
    assert read_global(session, "dismiss2") == False

    create_dialog("prompt", text="dismiss #3", result_var="dismiss3")

    response = fullscreen(session)

    assert_error(response, "unexpected alert open")
    assert_dialog_handled(session, "dismiss #3")
    assert read_global(session, "dismiss3") == None


# 4. Call fullscreen an element with the current top-level browsing
# context's active document's document element.
def test_fullscreen(session):
    # step 4
    response = fullscreen(session)
    assert_success(response)
    assert session.execute_script("return window.fullScreen") == True


# 5. Return success with the JSON serialization of the current top-level
# browsing context's window rect.
#
# [...]
#
# A top-level browsing context's window rect is defined as a
# dictionary of the screenX, screenY, width and height attributes of the
# WindowProxy. Its JSON representation is the following:
#
#   x
#     WindowProxy's screenX attribute.
#
#   y
#     WindowProxy's screenY attribute.
#
#   width
#     Width of the top-level browsing context's outer dimensions,
#     including any browser chrome and externally drawn window
#     decorations in CSS reference pixels.
#
#   height
#     Height of the top-level browsing context's outer dimensions,
#     including any browser chrome and externally drawn window decorations
#     in CSS reference pixels.
#
#   state
#     The top-level browsing context's window state.
#
# [...]
#
# The top-level browsing context has an associated window state which
# describes what visibility state its OS widget window is in. It can be
# in one of the following states:
#
#   "maximized"
#     The window is maximized.
#
#   "minimized"
#     The window is iconified.
#
#   "normal"
#     The window is shown normally.
#
#   "fullscreen"
#     The window is in full screen mode.
#
# If for whatever reason the top-level browsing context's OS window
# cannot enter either of the window states, or if this concept is not
# applicable on the current system, the default state must be normal.
def test_payload(session):
    response = fullscreen(session)

    # step 5
    assert response.status == 200
    assert isinstance(response.body["value"], dict)

    rect = response.body["value"]
    assert "width" in rect
    assert "height" in rect
    assert "x" in rect
    assert "y" in rect
    assert isinstance(rect["width"], (int, float))
    assert isinstance(rect["height"], (int, float))
    assert isinstance(rect["x"], (int, float))
    assert isinstance(rect["y"], (int, float))


def test_fullscreen_twice_is_idempotent(session):
    assert session.execute_script("return window.fullScreen") is False

    first_response = fullscreen(session)
    assert_success(first_response)
    assert session.execute_script("return window.fullScreen") is True

    second_response = fullscreen(session)
    assert_success(second_response)
    assert session.execute_script("return window.fullScreen") is True
# META: timeout=long # 10.7.5 Fullscreen Window # 1. If the current top-level browsing context is no longer open, return error #    with error code no such window. # step 1 # [...] # 2. Handle any user prompts and return its value if it is an error. # [...] # In order to handle any user prompts a remote end must take the following # steps: # 2. Run the substeps of the first matching user prompt handler: # #    [...] #    - accept state #      1. Accept the current user prompt. #    [...] # # 3. Return success. #1", result_var="accept1") #1") #2", result_var="accept2") #2") #3", result_var="accept3") #3") # [...] # 2. Handle any user prompts and return its value if it is an error. # [...] # In order to handle any user prompts a remote end must take the following # steps: # 2. Run the substeps of the first matching user prompt handler: # #    [...] #    - missing value default state #    - not in the table of simple dialogs #      1. Dismiss the current user prompt. #      2. Return error with error code unexpected alert open. #1", result_var="dismiss1") #1") #2", result_var="dismiss2") #2") #3", result_var="dismiss3") #3") # 4. Call fullscreen an element with the current top-level browsing # context's active document's document element. # step 4 # 5. Return success with the JSON serialization of the current top-level # browsing context's window rect. # # [...] # # A top-level browsing context's window rect is defined as a # dictionary of the screenX, screenY, width and height attributes of the # WindowProxy. Its JSON representation is the following: # #   x #     WindowProxy's screenX attribute. # #   y #     WindowProxy's screenY attribute. # #   width #     Width of the top-level browsing context's outer dimensions, #     including any browser chrome and externally drawn window #     decorations in CSS reference pixels. # #   height #     Height of the top-level browsing context's outer dimensions, #     including any browser chrome and externally drawn window decorations #     in CSS reference pixels. # #   state #     The top-level browsing context's window state. # # [...] # # The top-level browsing context has an associated window state which # describes what visibility state its OS widget window is in. It can be # in one of the following states: # #   "maximized" #     The window is maximized. # #   "minimized" #     The window is iconified. # #   "normal" #     The window is shown normally. # #   "fullscreen" #     The window is in full screen mode. # # If for whatever reason the top-level browsing context's OS window # cannot enter either of the window states, or if this concept is not # applicable on the current system, the default state must be normal. # step 5