Bug 1385476 - Make modifier click tests each use new session; r?ato
The changes that allow Marionette to synthesize dblclick events
cause consecutive modifier click tests to interfere with each other
by generating extra dblclick events.
I have removed some incorrect tests for ctrl+click, but
I will add them back in
Bug 1421323.
MozReview-Commit-ID: 9uhDAawLd4v
--- a/testing/web-platform/meta/MANIFEST.json
+++ b/testing/web-platform/meta/MANIFEST.json
@@ -373315,16 +373315,24 @@
"css/vendor-imports/mozilla/mozilla-central-reftests/text3/text-align-match-parent-01.html": [
[
"/css/vendor-imports/mozilla/mozilla-central-reftests/text3/text-align-match-parent-01.html",
{}
]
]
},
"wdspec": {
+ "webdriver/tests/actions/control_click.py": [
+ [
+ "/webdriver/tests/actions/control_click.py",
+ {
+ "timeout": "long"
+ }
+ ]
+ ],
"webdriver/tests/actions/key.py": [
[
"/webdriver/tests/actions/key.py",
{}
]
],
"webdriver/tests/actions/key_shortcuts.py": [
[
@@ -575908,54 +575916,58 @@
"webdriver/tests/actions/__init__.py": [
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
"support"
],
"webdriver/tests/actions/conftest.py": [
"50a848f9c9734535e13d72469f8e385a5f25b7d0",
"support"
],
+ "webdriver/tests/actions/control_click.py": [
+ "11d77f102a0f44f6f08b1429a1fcdc09b3a75f6b",
+ "wdspec"
+ ],
"webdriver/tests/actions/key.py": [
"d589b53f0096893600e696b43ec19ca84e5ee2ab",
"wdspec"
],
"webdriver/tests/actions/key_shortcuts.py": [
"dbe27dd0b1625169fc8cc2055f8fb49d5a4a78d2",
"wdspec"
],
"webdriver/tests/actions/modifier_click.py": [
- "2ec22f44973e6da3b9506ad7cc9fd0949f3ef8b5",
+ "be31579cae0cb3dd26a913ce0d966be72fd79495",
"wdspec"
],
"webdriver/tests/actions/mouse.py": [
- "34cfad361b1954cb9d246cf522335bf2ae511235",
+ "b9e814deb09b29dbfd64b522943a17a7b4b2a131",
"wdspec"
],
"webdriver/tests/actions/mouse_dblclick.py": [
- "cc453062825bd393b177599f486a533afe7c1062",
+ "61bab159bf1ccc7d44e4034a3e67d60b13fc1607",
"wdspec"
],
"webdriver/tests/actions/sequence.py": [
- "8c948c12cea1e2e8f2de845555817910904f757a",
+ "d43caf0f8607a76c3baed7806664b686bde21fda",
"wdspec"
],
"webdriver/tests/actions/special_keys.py": [
"64eb2401664b71d68f7b53e236a947eec6d651cc",
"wdspec"
],
"webdriver/tests/actions/support/__init__.py": [
"da39a3ee5e6b4b0d3255bfef95601890afd80709",
"support"
],
"webdriver/tests/actions/support/keys.py": [
"528ab8473914c14f9671d89b8a888d30162714ec",
"support"
],
"webdriver/tests/actions/support/mouse.py": [
- "2943c684195a5d21484eded16746711396dc730b",
+ "0a6fca5e3fe20db114dbee1dd9d290ec343f6f9c",
"support"
],
"webdriver/tests/actions/support/refine.py": [
"0d244bffe67ef57be68aad99f1cbc7440ff80e27",
"support"
],
"webdriver/tests/actions/support/test_actions_wdspec.html": [
"95203777fcc012ab64465287737a89a4ba2c31dc",
--- a/testing/web-platform/tests/webdriver/tests/actions/modifier_click.py
+++ b/testing/web-platform/tests/webdriver/tests/actions/modifier_click.py
@@ -1,74 +1,117 @@
# META: timeout=long
import pytest
from tests.actions.support.refine import filter_dict, get_events
from tests.actions.support.keys import Keys
+# Using local fixtures because we want to start a new session between
+# each test, otherwise the clicks in each test interfere with each other.
+@pytest.fixture(autouse=True)
+def release_actions(mod_click_session, request):
+ request.addfinalizer(mod_click_session.actions.release)
+
+
+@pytest.fixture
+def mod_click_session(new_session, url, add_browser_capabilites):
+ _, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
+ session.url = url("/webdriver/tests/actions/support/test_actions_wdspec.html")
+
+ return session
+
+@pytest.fixture
+def key_chain(mod_click_session):
+ return mod_click_session.actions.sequence("key", "keyboard_id")
+
+
+@pytest.fixture
+def mouse_chain(mod_click_session):
+ return mod_click_session.actions.sequence(
+ "pointer",
+ "pointer_id",
+ {"pointerType": "mouse"})
+
+
@pytest.mark.parametrize("modifier, prop", [
- (Keys.CONTROL, "ctrlKey"),
- (Keys.ALT, "altKey"),
- (Keys.META, "metaKey"),
- (Keys.SHIFT, "shiftKey"),
- (Keys.R_CONTROL, "ctrlKey"),
- (Keys.R_ALT, "altKey"),
- (Keys.R_META, "metaKey"),
- (Keys.R_SHIFT, "shiftKey"),
+ (Keys.ALT, "altKey"),
+ (Keys.R_ALT, "altKey"),
+ (Keys.META, "metaKey"),
+ (Keys.R_META, "metaKey"),
+ (Keys.SHIFT, "shiftKey"),
+ (Keys.R_SHIFT, "shiftKey"),
])
-def test_modifier_click(session,
- test_actions_page,
+def test_modifier_click(mod_click_session,
key_chain,
mouse_chain,
modifier,
prop):
key_chain \
- .pause(0) \
+ .pause(200) \
.key_down(modifier) \
.pause(200) \
.key_up(modifier)
- outer = session.find.css("#outer", all=False)
+ outer = mod_click_session.find.css("#outer", all=False)
mouse_chain.click(element=outer)
- session.actions.perform([key_chain.dict, mouse_chain.dict])
+ mod_click_session.actions.perform([key_chain.dict, mouse_chain.dict])
expected = [
{"type": "mousemove"},
{"type": "mousedown"},
{"type": "mouseup"},
{"type": "click"},
]
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)]
+ print get_events(mod_click_session)
+ filtered_events = [filter_dict(e, expected[0]) for e in get_events(mod_click_session)]
assert expected == filtered_events
-def test_release_control_click(session, key_reporter, key_chain, mouse_chain):
+def test_many_modifiers_click(mod_click_session, key_chain, mouse_chain):
+ outer = mod_click_session.find.css("#outer", all=False)
key_chain \
.pause(0) \
- .key_down(Keys.CONTROL)
+ .key_down(Keys.CONTROL) \
+ .key_down(Keys.SHIFT) \
+ .pause(0) \
+ .key_up(Keys.CONTROL) \
+ .key_up(Keys.SHIFT)
mouse_chain \
- .pointer_move(0, 0, origin=key_reporter) \
+ .pointer_move(0, 0, origin=outer) \
+ .pause(0) \
+ .pointer_down() \
+ .pointer_up() \
+ .pause(0) \
+ .pause(0) \
.pointer_down()
- session.actions.perform([key_chain.dict, mouse_chain.dict])
- session.execute_script("""
- var keyReporter = document.getElementById("keys");
- ["mousedown", "mouseup"].forEach((e) => {
- keyReporter.addEventListener(e, recordPointerEvent);
- });
- resetEvents();
- """)
- session.actions.release()
+ mod_click_session.actions.perform([key_chain.dict, mouse_chain.dict])
expected = [
+ {"type": "mousemove"},
+ # shift and ctrl presses
+ {"type": "mousedown"},
{"type": "mouseup"},
- {"type": "keyup"},
+ {"type": "click"},
+ # no modifiers pressed
+ {"type": "mousedown"},
]
- events = [filter_dict(e, expected[0]) for e in get_events(session)]
+ defaults = {
+ "altKey": False,
+ "metaKey": False,
+ "shiftKey": False,
+ "ctrlKey": False
+ }
+ for e in expected:
+ e.update(defaults)
+ for e in expected[1:4]:
+ e["shiftKey"] = True
+ e["ctrlKey"] = True
+ events = [filter_dict(e, expected[0]) for e in get_events(mod_click_session)]
assert events == expected
--- a/testing/web-platform/tests/webdriver/tests/actions/mouse_dblclick.py
+++ b/testing/web-platform/tests/webdriver/tests/actions/mouse_dblclick.py
@@ -20,30 +20,30 @@ def release_actions(dblclick_session, re
def dblclick_session(new_session, url, add_browser_capabilites):
_, session = new_session({"capabilities": {"alwaysMatch": add_browser_capabilites({})}})
session.url = url("/webdriver/tests/actions/support/test_actions_wdspec.html")
return session
@pytest.fixture
-def mouse_chain_for_dblclick(dblclick_session):
+def mouse_chain(dblclick_session):
return dblclick_session.actions.sequence(
"pointer",
"pointer_id",
{"pointerType": "mouse"})
@pytest.mark.parametrize("click_pause", [0, 200])
-def test_dblclick_at_coordinates(dblclick_session, mouse_chain_for_dblclick, click_pause):
+def test_dblclick_at_coordinates(dblclick_session, mouse_chain, click_pause):
div_point = {
"x": 82,
"y": 187,
}
- mouse_chain_for_dblclick \
+ mouse_chain \
.pointer_move(div_point["x"], div_point["y"]) \
.click() \
.pause(click_pause) \
.click() \
.perform()
events = get_events(dblclick_session)
assert_move_to_coordinates(div_point, "outer", events)
expected = [
@@ -55,20 +55,20 @@ def test_dblclick_at_coordinates(dblclic
{"type": "click", "button": 0},
{"type": "dblclick", "button": 0},
]
assert len(events) == 8
filtered_events = [filter_dict(e, expected[0]) for e in events]
assert expected == filtered_events[1:]
-def test_dblclick_with_pause_after_second_pointerdown(dblclick_session, mouse_chain_for_dblclick):
+def test_dblclick_with_pause_after_second_pointerdown(dblclick_session, mouse_chain):
outer = dblclick_session.find.css("#outer", all=False)
center = get_center(outer.rect)
- mouse_chain_for_dblclick \
+ mouse_chain \
.pointer_move(int(center["x"]), int(center["y"])) \
.click() \
.pointer_down() \
.pause(_DBLCLICK_INTERVAL + 10) \
.pointer_up() \
.perform()
events = get_events(dblclick_session)
expected = [
@@ -80,20 +80,20 @@ def test_dblclick_with_pause_after_secon
{"type": "click", "button": 0},
{"type": "dblclick", "button": 0},
]
assert len(events) == 8
filtered_events = [filter_dict(e, expected[0]) for e in events]
assert expected == filtered_events[1:]
-def test_no_dblclick(dblclick_session, mouse_chain_for_dblclick):
+def test_no_dblclick(dblclick_session, mouse_chain):
outer = dblclick_session.find.css("#outer", all=False)
center = get_center(outer.rect)
- mouse_chain_for_dblclick \
+ mouse_chain \
.pointer_move(int(center["x"]), int(center["y"])) \
.click() \
.pause(_DBLCLICK_INTERVAL + 10) \
.click() \
.perform()
events = get_events(dblclick_session)
expected = [
{"type": "mousedown", "button": 0},
--- a/testing/web-platform/tests/webdriver/tests/actions/sequence.py
+++ b/testing/web-platform/tests/webdriver/tests/actions/sequence.py
@@ -32,50 +32,8 @@ def test_release_char_sequence_sends_key
events = [filter_dict(e, expected[0]) for e in events]
assert events == expected
def test_release_no_actions_sends_no_events(session, key_reporter):
session.actions.release()
assert len(get_keys(key_reporter)) == 0
assert len(get_events(session)) == 0
-
-
-def test_many_modifiers_click(session, test_actions_page, key_chain, mouse_chain):
- outer = session.find.css("#outer", all=False)
- key_chain \
- .pause(0) \
- .key_down(Keys.CONTROL) \
- .key_down(Keys.SHIFT) \
- .pause(0) \
- .key_up(Keys.CONTROL) \
- .key_up(Keys.SHIFT)
- mouse_chain \
- .pointer_move(0, 0, origin=outer) \
- .pause(0) \
- .pointer_down() \
- .pointer_up() \
- .pause(0) \
- .pause(0) \
- .pointer_down()
- session.actions.perform([key_chain.dict, mouse_chain.dict])
- expected = [
- {"type": "mousemove"},
- # shift and ctrl presses
- {"type": "mousedown"},
- {"type": "mouseup"},
- {"type": "click"},
- # no modifiers pressed
- {"type": "mousedown"},
- ]
- defaults = {
- "altKey": False,
- "metaKey": False,
- "shiftKey": False,
- "ctrlKey": False
- }
- for e in expected:
- e.update(defaults)
- for e in expected[1:4]:
- e["shiftKey"] = True
- e["ctrlKey"] = True
- events = [filter_dict(e, expected[0]) for e in get_events(session)]
- assert events == expected