Skip to content

Commit

Permalink
Add tests for direction and bidi isolation behavior of <slot> element.
Browse files Browse the repository at this point in the history
These tests are based on the tests previously in
https://crrev.com/c/4800075 and https://crrev.com/c/4973701, but are
revised to reflect that the HTML spec changes that those changes were
implementing have been reverted in
whatwg/html#9880

Bug: 576815
Change-Id: Id4536cb39691c2d234113f891f96d7100c7eeea4
  • Loading branch information
dbaron authored and chromium-wpt-export-bot committed Jan 24, 2024
1 parent ac4e3bc commit 1072bdd
Show file tree
Hide file tree
Showing 3 changed files with 102 additions and 0 deletions.
72 changes: 72 additions & 0 deletions html/rendering/bidi-rendering/slot-direction.window.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
// https://html.spec.whatwg.org/multipage/rendering.html#bidi-rendering
// https://github.com/whatwg/html/pull/9796
// https://github.com/whatwg/html/pull/9880

for (let t of [
{
description: "<slot> inherits direction from parent",
shadow_tree: `
<div dir=ltr data-expected="ltr">
<slot data-expected="ltr"></slot>
</div>
`,
host_dir: "rtl",
},
{
description: "<slot> inherits CSS direction from parent",
shadow_tree: `
<div style="direction: ltr" data-expected="ltr">
<slot data-expected="ltr"></slot>
</div>
`,
host_dir: "rtl",
},
{
description: "<slot dir=ltr>",
shadow_tree: `
<slot dir="ltr" data-expected="ltr"></slot>
`,
host_dir: "rtl",
},
{
description: "<slot dir=rtl>",
shadow_tree: `
<slot dir="rtl" data-expected="rtl"></slot>
`,
host_dir: "ltr",
},
{
description: "<slot dir=auto> resolving to LTR",
shadow_tree: `
<slot dir="ltr" data-expected="ltr"></slot>
`,
host_dir: "rtl",
host_contents: "A",
},
{
description: "<slot dir=auto> resolving to RTL",
shadow_tree: `
<slot dir="rtl" data-expected="rtl"></slot>
`,
host_dir: "ltr",
host_contents: "\u0627",
},
]) {
test(() => {
let host = document.createElement("div");
document.body.appendChild(host);
host.dir = t.host_dir;
if ("host_contents" in t) {
host.innerHTML = t.host_contents;
}

let root = host.attachShadow({mode: "open"});
root.innerHTML = t.shadow_tree;

for (let e of Array.from(root.querySelectorAll("[data-expected]"))) {
assert_equals(getComputedStyle(e).direction, e.getAttribute("data-expected"), `direction of ${e.nodeName}`);
}

host.remove();
}, `<slot> element sets CSS direction property: ${t.description}`);
}
8 changes: 8 additions & 0 deletions html/rendering/bidi-rendering/slot-no-isolate-001-ref.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
<!DOCTYPE html>
<title>HTML Rendering: slot element has unicode-bidi: isolate</title>
<link rel="author" title="L. David Baron" href="https://dbaron.org/">
<link rel="author" title="Google" href="http://www.google.com/">

<div style="unicode-bidi: bidi-override; direction: ltr;">&#x5D1;-&#x5D0;</div>

<div>normal</div>
22 changes: 22 additions & 0 deletions html/rendering/bidi-rendering/slot-no-isolate-001.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
<!DOCTYPE html>
<title>HTML Rendering: slot element has unicode-bidi: isolate</title>
<link rel="author" title="L. David Baron" href="https://dbaron.org/">
<link rel="author" title="Google" href="http://www.google.com/">
<link rel="help" href="https://html.spec.whatwg.org/multipage/rendering.html#bidi-rendering">
<link rel="help" href="https://github.com/whatwg/html/pull/9880">
<link rel="match" href="slot-no-isolate-001-ref.html">

<div>&#x5D0;-<span id="e">&#x5D1;</span></div>

<div id="v"></div>

<script>

let e = document.getElementById("e");
let root = e.attachShadow({mode: "open"});
// use display:inline to override default display:contents
root.innerHTML = "<slot style='display:inline'>\u05D2</slot>";
let val = getComputedStyle(root.querySelector("slot")).unicodeBidi;
document.getElementById("v").innerText = val;

</script>

0 comments on commit 1072bdd

Please sign in to comment.