Unreviewed. Update W3C WebDriver imported tests.
[WebKit-https.git] / WebDriverTests / imported / w3c / webdriver / tests / fullscreen_window.py
1 # META: timeout=long
2
3 from tests.support.asserts import assert_error, assert_success, assert_dialog_handled
4 from tests.support.fixtures import create_dialog
5 from tests.support.inline import inline
6
7
8 alert_doc = inline("<script>window.alert()</script>")
9
10
11 def read_global(session, name):
12     return session.execute_script("return %s;" % name)
13
14
15 def fullscreen(session):
16     return session.transport.send("POST", "session/%s/window/fullscreen" % session.session_id)
17
18
19 # 10.7.5 Fullscreen Window
20
21
22 def test_no_browsing_context(session, create_window):
23     """
24     1. If the current top-level browsing context is no longer open,
25     return error with error code no such window.
26
27     """
28     session.window_handle = create_window()
29     session.close()
30     response = fullscreen(session)
31     assert_error(response, "no such window")
32
33
34 def test_handle_prompt_dismiss_and_notify():
35     """TODO"""
36
37
38 def test_handle_prompt_accept_and_notify():
39     """TODO"""
40
41
42 def test_handle_prompt_ignore():
43     """TODO"""
44
45
46 def test_handle_prompt_accept(new_session, add_browser_capabilites):
47     """
48     2. Handle any user prompts and return its value if it is an error.
49
50     [...]
51
52     In order to handle any user prompts a remote end must take the
53     following steps:
54
55       [...]
56
57       2. Perform the following substeps based on the current session's
58       user prompt handler:
59
60         [...]
61
62         - accept state
63            Accept the current user prompt.
64
65     """
66     _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({"unhandledPromptBehavior": "accept"})}})
67     session.url = inline("<title>WD doc title</title>")
68     create_dialog(session)("alert", text="accept #1", result_var="accept1")
69
70     expected_title = read_global(session, "document.title")
71     response = fullscreen(session)
72
73     assert_success(response, expected_title)
74     assert_dialog_handled(session, "accept #1")
75     assert read_global(session, "accept1") == None
76
77     expected_title = read_global(session, "document.title")
78     create_dialog(session)("confirm", text="accept #2", result_var="accept2")
79
80     response = fullscreen(session)
81
82     assert_success(response, expected_title)
83     assert_dialog_handled(session, "accept #2")
84     assert read_global(session, "accept2"), True
85
86     expected_title = read_global(session, "document.title")
87     create_dialog(session)("prompt", text="accept #3", result_var="accept3")
88
89     response = fullscreen(session)
90
91     assert_success(response, expected_title)
92     assert_dialog_handled(session, "accept #3")
93     assert read_global(session, "accept3") == ""
94
95
96 def test_handle_prompt_missing_value(session, create_dialog):
97     """
98     2. Handle any user prompts and return its value if it is an error.
99
100     [...]
101
102     In order to handle any user prompts a remote end must take the
103     following steps:
104
105       [...]
106
107       2. Perform the following substeps based on the current session's
108       user prompt handler:
109
110         [...]
111
112         - missing value default state
113            1. Dismiss the current user prompt.
114            2. Return error with error code unexpected alert open.
115
116     """
117     session.url = inline("<title>WD doc title</title>")
118     create_dialog("alert", text="dismiss #1", result_var="dismiss1")
119
120     response = fullscreen(session)
121
122     assert_error(response, "unexpected alert open")
123     assert_dialog_handled(session, "dismiss #1")
124     assert read_global(session, "accept1") == None
125
126     create_dialog("confirm", text="dismiss #2", result_var="dismiss2")
127
128     response = fullscreen(session)
129
130     assert_error(response, "unexpected alert open")
131     assert_dialog_handled(session, "dismiss #2")
132     assert read_global(session, "dismiss2") == False
133
134     create_dialog("prompt", text="dismiss #3", result_var="dismiss3")
135
136     response = fullscreen(session)
137
138     assert_error(response, "unexpected alert open")
139     assert_dialog_handled(session, "dismiss #3")
140     assert read_global(session, "dismiss3") == None
141
142
143 def test_fullscreen(session):
144     """
145     4. Call fullscreen an element with the current top-level browsing
146     context's active document's document element.
147
148     """
149     response = fullscreen(session)
150     assert_success(response)
151     assert session.execute_script("return window.fullScreen") is True
152
153
154 def test_payload(session):
155     """
156     5. Return success with the JSON serialization of the current top-level
157     browsing context's window rect.
158
159     [...]
160
161     A top-level browsing context's window rect is defined as a
162     dictionary of the screenX, screenY, width and height attributes of
163     the WindowProxy. Its JSON representation is the following:
164
165     "x"
166         WindowProxy's screenX attribute.
167
168     "y"
169         WindowProxy's screenY attribute.
170
171     "width"
172         Width of the top-level browsing context's outer dimensions,
173         including any browser chrome and externally drawn window
174         decorations in CSS reference pixels.
175
176     "height"
177         Height of the top-level browsing context's outer dimensions,
178         including any browser chrome and externally drawn window
179         decorations in CSS reference pixels.
180
181     """
182     response = fullscreen(session)
183
184     # step 5
185     assert response.status == 200
186     assert isinstance(response.body["value"], dict)
187
188     value = response.body["value"]
189     assert "width" in value
190     assert "height" in value
191     assert "x" in value
192     assert "y" in value
193     assert isinstance(value["width"], int)
194     assert isinstance(value["height"], int)
195     assert isinstance(value["x"], int)
196     assert isinstance(value["y"], int)
197
198
199 def test_fullscreen_twice_is_idempotent(session):
200     assert session.execute_script("return window.fullScreen") is False
201
202     first_response = fullscreen(session)
203     assert_success(first_response)
204     assert session.execute_script("return window.fullScreen") is True
205
206     second_response = fullscreen(session)
207     assert_success(second_response)
208     assert session.execute_script("return window.fullScreen") is True