Skip to content

Commit 6bafaf3

Browse files
whimboomoz-wptsync-bot
authored andcommitted
[wdspec] Split out event tests from /webdriver/tests/bidi/input/perform_actions/key.py.
Differential Revision: https://phabricator.services.mozilla.com/D178673 bugzilla-url: https://bugzilla.mozilla.org/show_bug.cgi?id=1834248 gecko-commit: 98c5e7b30305512e38bc66b38c93a69647c472a0 gecko-reviewers: webdriver-reviewers, jdescottes
1 parent b09d34f commit 6bafaf3

File tree

2 files changed

+272
-264
lines changed

2 files changed

+272
-264
lines changed

webdriver/tests/bidi/input/perform_actions/key.py

Lines changed: 2 additions & 264 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,9 @@
1-
import copy
21
import pytest
32

4-
from collections import defaultdict
5-
63
from webdriver.bidi.modules.input import Actions
7-
from webdriver.bidi.modules.script import ContextTarget
84

9-
from tests.support.helpers import filter_dict, filter_supported_key_events
10-
from tests.support.keys import ALL_EVENTS, Keys, ALTERNATIVE_KEY_NAMES
11-
from .. import get_events, get_keys_value
5+
from tests.support.keys import Keys
6+
from .. import get_keys_value
127

138
pytestmark = pytest.mark.asyncio
149

@@ -50,263 +45,6 @@ async def test_key_codepoint(
5045
assert keys_value == value
5146

5247

53-
@pytest.mark.parametrize(
54-
"key,event",
55-
[
56-
(Keys.ESCAPE, "ESCAPE"),
57-
(Keys.RIGHT, "RIGHT"),
58-
],
59-
)
60-
async def test_key_non_printable_key(
61-
bidi_session, top_context, setup_key_test, key, event
62-
):
63-
code = ALL_EVENTS[event]["code"]
64-
value = ALL_EVENTS[event]["key"]
65-
66-
actions = Actions()
67-
(actions.add_key().key_down(key).key_up(key))
68-
await bidi_session.input.perform_actions(
69-
actions=actions, context=top_context["context"]
70-
)
71-
all_events = await get_events(bidi_session, top_context["context"])
72-
73-
expected = [
74-
{"code": code, "key": value, "type": "keydown"},
75-
{"code": code, "key": value, "type": "keypress"},
76-
{"code": code, "key": value, "type": "keyup"},
77-
]
78-
79-
# Make a copy for alternate key property values
80-
# Note: only keydown and keyup are affected by alternate key names
81-
alt_expected = copy.deepcopy(expected)
82-
if event in ALTERNATIVE_KEY_NAMES:
83-
alt_expected[0]["key"] = ALTERNATIVE_KEY_NAMES[event]
84-
alt_expected[2]["key"] = ALTERNATIVE_KEY_NAMES[event]
85-
86-
(_, expected) = filter_supported_key_events(all_events, expected)
87-
(events, alt_expected) = filter_supported_key_events(all_events, alt_expected)
88-
if len(events) == 2:
89-
# most browsers don't send a keypress for non-printable keys
90-
assert events == [expected[0], expected[2]] or events == [
91-
alt_expected[0],
92-
alt_expected[2],
93-
]
94-
else:
95-
assert events == expected or events == alt_expected
96-
97-
keys_value = await get_keys_value(bidi_session, top_context["context"])
98-
assert len(keys_value) == 0
99-
100-
101-
@pytest.mark.parametrize(
102-
"key, event",
103-
[
104-
(Keys.ALT, "ALT"),
105-
(Keys.CONTROL, "CONTROL"),
106-
(Keys.META, "META"),
107-
(Keys.SHIFT, "SHIFT"),
108-
(Keys.R_ALT, "R_ALT"),
109-
(Keys.R_CONTROL, "R_CONTROL"),
110-
(Keys.R_META, "R_META"),
111-
(Keys.R_SHIFT, "R_SHIFT"),
112-
],
113-
)
114-
async def test_key_modifier_key(
115-
bidi_session, top_context, setup_key_test, key, event
116-
):
117-
code = ALL_EVENTS[event]["code"]
118-
value = ALL_EVENTS[event]["key"]
119-
120-
actions = Actions()
121-
(actions.add_key().key_down(key).key_up(key))
122-
await bidi_session.input.perform_actions(
123-
actions=actions, context=top_context["context"]
124-
)
125-
all_events = await get_events(bidi_session, top_context["context"])
126-
127-
expected = [
128-
{"code": code, "key": value, "type": "keydown"},
129-
{"code": code, "key": value, "type": "keyup"},
130-
]
131-
132-
(events, expected) = filter_supported_key_events(all_events, expected)
133-
assert events == expected
134-
135-
keys_value = await get_keys_value(bidi_session, top_context["context"])
136-
assert len(keys_value) == 0
137-
138-
139-
@pytest.mark.parametrize(
140-
"value,code",
141-
[
142-
("a", "KeyA"),
143-
("a", "KeyA"),
144-
('"', "Quote"),
145-
(",", "Comma"),
146-
("\u00E0", ""),
147-
("\u0416", ""),
148-
("@", "Digit2"),
149-
("\u2603", ""),
150-
("\uF6C2", ""), # PUA
151-
],
152-
)
153-
async def test_key_printable_key(
154-
bidi_session,
155-
top_context,
156-
setup_key_test,
157-
value,
158-
code,
159-
):
160-
actions = Actions()
161-
(actions.add_key().key_down(value).key_up(value))
162-
await bidi_session.input.perform_actions(
163-
actions=actions, context=top_context["context"]
164-
)
165-
166-
all_events = await get_events(bidi_session, top_context["context"])
167-
168-
expected = [
169-
{"code": code, "key": value, "type": "keydown"},
170-
{"code": code, "key": value, "type": "keypress"},
171-
{"code": code, "key": value, "type": "keyup"},
172-
]
173-
174-
(events, expected) = filter_supported_key_events(all_events, expected)
175-
assert events == expected
176-
177-
keys_value = await get_keys_value(bidi_session, top_context["context"])
178-
assert keys_value == value
179-
180-
181-
@pytest.mark.parametrize("use_keyup", [True, False])
182-
async def test_key_printable_sequence(
183-
bidi_session, top_context, setup_key_test, use_keyup
184-
):
185-
actions = Actions()
186-
key_source = actions.add_key()
187-
if use_keyup:
188-
actions.add_key().send_keys("ab")
189-
else:
190-
actions.add_key().key_down("a").key_down("b")
191-
192-
await bidi_session.input.perform_actions(
193-
actions=actions, context=top_context["context"]
194-
)
195-
all_events = await get_events(bidi_session, top_context["context"])
196-
197-
expected = [
198-
{"code": "KeyA", "key": "a", "type": "keydown"},
199-
{"code": "KeyA", "key": "a", "type": "keypress"},
200-
{"code": "KeyA", "key": "a", "type": "keyup"},
201-
{"code": "KeyB", "key": "b", "type": "keydown"},
202-
{"code": "KeyB", "key": "b", "type": "keypress"},
203-
{"code": "KeyB", "key": "b", "type": "keyup"},
204-
]
205-
expected = [e for e in expected if use_keyup or e["type"] is not "keyup"]
206-
207-
(events, expected) = filter_supported_key_events(all_events, expected)
208-
assert events == expected
209-
210-
keys_value = await get_keys_value(bidi_session, top_context["context"])
211-
assert keys_value == "ab"
212-
213-
214-
@pytest.mark.parametrize("name,expected", ALL_EVENTS.items())
215-
async def test_key_special_key_sends_keydown(
216-
bidi_session,
217-
top_context,
218-
setup_key_test,
219-
name,
220-
expected,
221-
):
222-
if name.startswith("F"):
223-
# Prevent default behavior for F1, etc., but only after keydown
224-
# bubbles up to body. (Otherwise activated browser menus/functions
225-
# may interfere with subsequent tests.)
226-
await bidi_session.script.evaluate(
227-
expression="""
228-
document.body.addEventListener("keydown",
229-
function(e) { e.preventDefault() });
230-
""",
231-
target=ContextTarget(top_context["context"]),
232-
await_promise=False,
233-
)
234-
235-
actions = Actions()
236-
(actions.add_key().key_down(getattr(Keys, name)))
237-
await bidi_session.input.perform_actions(
238-
actions=actions, context=top_context["context"]
239-
)
240-
241-
# only interested in keydown
242-
all_events = await get_events(bidi_session, top_context["context"])
243-
first_event = all_events[0]
244-
# make a copy so we can throw out irrelevant keys and compare to events
245-
expected = dict(expected)
246-
247-
del expected["value"]
248-
249-
# make another copy for alternative key names
250-
alt_expected = copy.deepcopy(expected)
251-
if name in ALTERNATIVE_KEY_NAMES:
252-
alt_expected["key"] = ALTERNATIVE_KEY_NAMES[name]
253-
254-
# check and remove keys that aren't in expected
255-
assert first_event["type"] == "keydown"
256-
assert first_event["repeat"] is False
257-
first_event = filter_dict(first_event, expected)
258-
if first_event["code"] is None:
259-
del first_event["code"]
260-
del expected["code"]
261-
del alt_expected["code"]
262-
assert first_event == expected or first_event == alt_expected
263-
# only printable characters should be recorded in input field
264-
keys_value = await get_keys_value(bidi_session, top_context["context"])
265-
if len(expected["key"]) == 1:
266-
assert keys_value == expected["key"]
267-
else:
268-
assert len(keys_value) == 0
269-
270-
271-
async def test_key_space(bidi_session, top_context, setup_key_test):
272-
actions = Actions()
273-
(
274-
actions.add_key()
275-
.key_down(Keys.SPACE)
276-
.key_up(Keys.SPACE)
277-
.key_down(" ")
278-
.key_up(" ")
279-
)
280-
281-
await bidi_session.input.perform_actions(
282-
actions=actions, context=top_context["context"]
283-
)
284-
all_events = await get_events(bidi_session, top_context["context"])
285-
286-
by_type = defaultdict(list)
287-
for event in all_events:
288-
by_type[event["type"]].append(event)
289-
290-
for event_type in by_type:
291-
events = by_type[event_type]
292-
assert len(events) == 2
293-
assert events[0] == events[1]
294-
295-
296-
async def test_keyup_only_sends_no_events(bidi_session, top_context, setup_key_test):
297-
actions = Actions()
298-
actions.add_key().key_up("a")
299-
await bidi_session.input.perform_actions(
300-
actions=actions, context=top_context["context"]
301-
)
302-
303-
events = await get_events(bidi_session, top_context["context"])
304-
assert len(events) == 0
305-
306-
keys_value = await get_keys_value(bidi_session, top_context["context"])
307-
assert len(keys_value) == 0
308-
309-
31048
async def test_null_response_value(bidi_session, top_context):
31149
actions = Actions()
31250
actions.add_key().key_down("a").key_up("a")

0 commit comments

Comments
 (0)