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