blob: fda3f18bbc1c9cdcede30abe74f6d4e2f297d48f [file] [log] [blame]
import pytest
from tests.perform_actions.support.keys import Keys
from tests.perform_actions.support.refine import filter_dict, get_events
@pytest.mark.parametrize("modifier, prop", [
(Keys.CONTROL, "ctrlKey"),
(Keys.R_CONTROL, "ctrlKey"),
])
def test_control_click(session, test_actions_page, key_chain, mouse_chain, modifier, prop):
os = session.capabilities["platformName"]
key_chain \
.pause(0) \
.key_down(modifier) \
.pause(200) \
.key_up(modifier)
outer = session.find.css("#outer", all=False)
mouse_chain.click(element=outer)
session.actions.perform([key_chain.dict, mouse_chain.dict])
if os != "mac":
expected = [
{"type": "mousemove"},
{"type": "mousedown"},
{"type": "mouseup"},
{"type": "click"},
]
else:
expected = [
{"type": "mousemove"},
{"type": "mousedown"},
{"type": "contextmenu"},
{"type": "mouseup"},
]
defaults = {
"altKey": False,
"metaKey": False,
"shiftKey": False,
"ctrlKey": False
}
for e in expected:
e.update(defaults)
if e["type"] != "mousemove":
e[prop] = True
filtered_events = [filter_dict(e, expected[0]) for e in get_events(session)]
assert expected == filtered_events
def test_release_control_click(session, key_reporter, key_chain, mouse_chain):
# The context menu stays visible during subsequent tests so let's not
# display it in the first place.
session.execute_script("""
var keyReporter = document.getElementById("keys");
document.addEventListener("contextmenu", function(e) {
e.preventDefault();
});
""")
key_chain \
.pause(0) \
.key_down(Keys.CONTROL)
mouse_chain \
.pointer_move(0, 0, origin=key_reporter) \
.pointer_down()
session.actions.perform([key_chain.dict, mouse_chain.dict])
session.execute_script("""
var keyReporter = document.getElementById("keys");
keyReporter.addEventListener("mousedown", recordPointerEvent);
keyReporter.addEventListener("mouseup", recordPointerEvent);
resetEvents();
""")
session.actions.release()
expected = [
{"type": "mouseup"},
{"type": "keyup"},
]
events = [filter_dict(e, expected[0]) for e in get_events(session)]
assert events == expected