Source code
Revision control
Copy as Markdown
Other Tools
Test Info: Warnings
- This test has a WPT meta file that expects 7 subtest issues.
- This WPT test may be referenced by the following Test IDs:
- /css/css-pseudo/CSSPseudoElement-convertPoint.tentative.html - WPT Dashboard Interop Dashboard
<!DOCTYPE html>
<title>CSS Pseudo Test: CSSPseudoElement GeometryUtils - coordinate conversion</title>
<link rel="help" href="https://drafts.csswg.org/css-pseudo-4/#CSSPseudoElement-interface">
<link rel="help" href="https://drafts.csswg.org/cssom-view-1/#extension-to-the-geometryutils-interface">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<style>
#container {
position: absolute;
left: 100px;
top: 50px;
width: 300px;
height: 200px;
}
#target {
position: absolute;
left: 50px;
top: 30px;
width: 100px;
height: 80px;
}
#target::before {
content: '';
display: block;
position: absolute;
left: 10px;
top: 5px;
width: 30px;
height: 20px;
}
#reference {
position: absolute;
left: 200px;
top: 100px;
width: 50px;
height: 50px;
}
</style>
<div id="container">
<div id="target"></div>
<div id="reference"></div>
</div>
<script>
test(() => {
let pseudo = target.pseudo("::before");
assert_true(typeof pseudo.convertPointFromNode === 'function', 'convertPointFromNode should be a function');
assert_true(typeof pseudo.convertQuadFromNode === 'function', 'convertQuadFromNode should be a function');
assert_true(typeof pseudo.convertRectFromNode === 'function', 'convertRectFromNode should be a function');
}, 'CSSPseudoElement should have coordinate conversion methods');
test(() => {
let pseudo = target.pseudo("::before");
let point = pseudo.convertPointFromNode({ x: 0, y: 0 }, target);
assert_true(point instanceof DOMPoint, 'should return a DOMPoint');
}, 'convertPointFromNode returns DOMPoint');
test(() => {
let pseudo = target.pseudo("::before");
let rect = new DOMRectReadOnly(0, 0, 10, 10);
let quad = pseudo.convertRectFromNode(rect, target);
assert_true(quad instanceof DOMQuad, 'should return a DOMQuad');
}, 'convertRectFromNode returns DOMQuad');
test(() => {
let pseudo = target.pseudo("::before");
let inputQuad = {
p1: { x: 0, y: 0 },
p2: { x: 10, y: 0 },
p3: { x: 10, y: 10 },
p4: { x: 0, y: 10 }
};
let quad = pseudo.convertQuadFromNode(inputQuad, target);
assert_true(quad instanceof DOMQuad, 'should return a DOMQuad');
}, 'convertQuadFromNode returns DOMQuad');
test(() => {
let pseudo = target.pseudo("::before");
// Convert origin of target to pseudo-element coordinate space
let point = pseudo.convertPointFromNode({ x: 0, y: 0 }, target);
// The ::before is at (10, 5) relative to target
// So target's (0,0) in ::before's space should be (-10, -5)
assert_approx_equals(point.x, -10, 1, 'x coordinate');
assert_approx_equals(point.y, -5, 1, 'y coordinate');
}, 'convertPointFromNode converts coordinates correctly');
test(() => {
let pseudo = target.pseudo("::before");
// Convert a point from document coordinates
let point = pseudo.convertPointFromNode({ x: 0, y: 0 }, document);
assert_true(point instanceof DOMPoint, 'should return a DOMPoint from document');
}, 'convertPointFromNode works with Document as source');
test(() => {
let pseudo = target.pseudo("::before");
// Convert from another element
let point = pseudo.convertPointFromNode({ x: 0, y: 0 }, reference);
assert_true(point instanceof DOMPoint, 'should return a DOMPoint from element');
}, 'convertPointFromNode works with Element as source');
</script>