mirror of
https://github.com/servo/servo.git
synced 2025-08-15 02:15:33 +01:00
Update web-platform-tests to revision d8b8e0b8efe993a37404d6c6fc75e16fdc16b7d8
This commit is contained in:
parent
abc0f50d20
commit
e07315e6af
221 changed files with 7334 additions and 774 deletions
|
@ -0,0 +1,87 @@
|
|||
import math
|
||||
import pytest
|
||||
|
||||
from tests.support.asserts import assert_error, assert_success
|
||||
from tests.support.inline import inline
|
||||
|
||||
|
||||
def element_click(session, element):
|
||||
return session.transport.send(
|
||||
"POST", "session/{session_id}/element/{element_id}/click".format(
|
||||
session_id=session.session_id,
|
||||
element_id=element.id))
|
||||
|
||||
|
||||
def center_point(element):
|
||||
"""Calculates the in-view center point of a web element."""
|
||||
inner_width, inner_height = element.session.execute_script(
|
||||
"return [window.innerWidth, window.innerHeight]")
|
||||
rect = element.rect
|
||||
|
||||
# calculate the intersection of the rect that is inside the viewport
|
||||
visible = {
|
||||
"left": max(0, min(rect["x"], rect["x"] + rect["width"])),
|
||||
"right": min(inner_width, max(rect["x"], rect["x"] + rect["width"])),
|
||||
"top": max(0, min(rect["y"], rect["y"] + rect["height"])),
|
||||
"bottom": min(inner_height, max(rect["y"], rect["y"] + rect["height"])),
|
||||
}
|
||||
|
||||
# arrive at the centre point of the visible rectangle
|
||||
x = (visible["left"] + visible["right"]) / 2.0
|
||||
y = (visible["top"] + visible["bottom"]) / 2.0
|
||||
|
||||
# convert to CSS pixels, as centre point can be float
|
||||
return (math.floor(x), math.floor(y))
|
||||
|
||||
|
||||
def square(size):
|
||||
return inline("""
|
||||
<style>
|
||||
body {{ margin: 0 }}
|
||||
|
||||
div {{
|
||||
background: blue;
|
||||
width: {size}px;
|
||||
height: {size}px;
|
||||
}}
|
||||
</style>
|
||||
|
||||
<div id=target></div>
|
||||
|
||||
<script>
|
||||
window.clicks = [];
|
||||
let div = document.querySelector("div");
|
||||
div.addEventListener("click", ({{clientX, clientY}}) => window.clicks.push([clientX, clientY]));
|
||||
</script>
|
||||
""".format(size=size))
|
||||
|
||||
|
||||
def assert_one_click(session):
|
||||
"""Asserts there has only been one click, and returns that."""
|
||||
clicks = session.execute_script("return window.clicks")
|
||||
assert len(clicks) == 1
|
||||
return tuple(clicks[0])
|
||||
|
||||
|
||||
def test_entirely_in_view(session):
|
||||
session.url = square(444)
|
||||
element = session.find.css("#target", all=False)
|
||||
|
||||
response = element_click(session, element)
|
||||
assert_success(response)
|
||||
|
||||
click_point = assert_one_click(session)
|
||||
assert click_point == (222, 222)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("size", range(1, 11))
|
||||
def test_css_pixel_rounding(session, size):
|
||||
session.url = square(size)
|
||||
element = session.find.css("#target", all=False)
|
||||
expected_click_point = center_point(element)
|
||||
|
||||
response = element_click(session, element)
|
||||
assert_success(response)
|
||||
|
||||
actual_click_point = assert_one_click(session)
|
||||
assert actual_click_point == expected_click_point
|
|
@ -32,6 +32,15 @@ def test_element_not_interactable_out_of_view(session):
|
|||
assert_error(response, "element not interactable")
|
||||
|
||||
|
||||
@pytest.mark.parametrize("tag_name", ["div", "span"])
|
||||
def test_zero_sized_element(session, tag_name):
|
||||
session.url = inline("<{0}></{0}>".format(tag_name))
|
||||
element = session.find.css(tag_name, all=False)
|
||||
|
||||
response = element_click(session, element)
|
||||
assert_error(response, "element not interactable")
|
||||
|
||||
|
||||
def test_element_intercepted(session):
|
||||
session.url = inline("""
|
||||
<input type=button value=Roger style="position: absolute; left: 10px; top: 10px">
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue