blob: ba905d3ed6d8b19263edf5e654ee48c99cf57380 [file] [log] [blame]
<!DOCTYPE html>
<meta charset="utf-8" />
<title>'inert' is an HTML attribute and has no effect when used on other elements</title>
<link rel="author" title="Oriol Brufau" href="mailto:obrufau@igalia.com">
<style>
#tests {
line-height: 1.5em;
}
#tests svg {
height: 1.5em;
vertical-align: middle;
}
#tests svg > text {
transform: translateY(50%);
dominant-baseline: central;
}
#tests foreignObject {
height: 100%;
width: 100%;
}
</style>
<div id="log"></div>
<ul id="tests">
<!-- The 'inert' attribute only works on HTML elements -->
<li>
<span>non-inert</span>
</li>
<li>
<span inert>inert</span>
</li>
<li>
<foo>non-inert</foo>
</li>
<li>
<foo inert>inert</foo>
</li>
<li>
<foo-bar>non-inert</foo-bar>
</li>
<li>
<foo-bar inert>inert</foo-bar>
</li>
<li>
<math><mi>non-inert</mi></math>
</li>
<li>
<math inert><mi>non-inert</mi></math>
</li>
<li>
<math><mi inert>non-inert</mi></math>
</li>
<li>
<svg><text>non-inert</text></svg>
</li>
<li>
<svg inert><text>non-inert</text></svg>
</li>
<li>
<svg><text inert>non-inert</text></svg>
</li>
<!-- But non-HTML are inert if an HTML ancestor has the attribute -->
<li>
<span inert><span>inert</span></span>
</li>
<li>
<span inert><foo>inert</foo></span>
</li>
<li>
<span inert><foo-bar>inert</foo-bar></span>
</li>
<li>
<span inert><math><mi>inert</mi></math></span>
</li>
<li>
<span inert><svg><text>inert</text></svg></span>
</li>
<!-- HTML elements are not inert if an non-HTML ancestor has the attribute -->
<li>
<span data-move>non-inert</span>
<math inert><mi data-destination></mi></math>
</li>
<li>
<span data-move>non-inert</span>
<math><mi inert data-destination></mi></math>
</li>
<li>
<svg inert><foreignObject><span>non-inert</span></foreignobject></svg>
</li>
<li>
<svg><foreignObject inert><span>non-inert</span></foreignobject></svg>
</li>
<!-- HTML elements with non-HTML ancestors are inert if they have the attribute themselves -->
<li>
<span inert data-move>inert</span>
<math><mi data-destination></mi></math>
</li>
<li>
<foo inert data-move>inert</foo>
<math><mi data-destination></mi></math>
</li>
<li>
<foo-bar inert data-move>inert</foo-bar>
<math><mi data-destination></mi></math>
</li>
<li>
<svg><foreignObject><span inert>inert</span></foreignobject></svg>
</li>
<li>
<svg><foreignObject><foo inert>inert</foo></foreignobject></svg>
</li>
<li>
<svg><foreignObject><foo-bar inert>inert</foo-bar></foreignobject></svg>
</li>
</ul>
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
<script>
for (let li of document.querySelectorAll("#tests > li")) {
// The HTML parser would mess certain trees, fixup here.
const move = li.querySelector("[data-move]");
if (move) {
const destination = li.querySelector("[data-destination]");
destination.append(move);
move.removeAttribute("data-move");
destination.removeAttribute("data-destination");
}
test(() => {
assert_equals(li.childElementCount, 1);
const element = li.firstElementChild;
const selection = getSelection();
selection.selectAllChildren(element);
const selectionText = selection.toString().trim();
const textContent = element.textContent.trim();
if (textContent === "inert") {
assert_equals(selectionText, "");
} else {
assert_equals(selectionText, "non-inert");
}
}, li.innerHTML.trim());
}
</script>