1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
|
<!DOCTYPE html>
<head>
<meta charset="utf-8">
<link rel="author" title="Vincent Hilla" href="mailto:vhilla@mozilla.com">
<link rel="help" href="https://html.spec.whatwg.org/multipage/dom.html#the-directionality">
<script src="/resources/testharness.js"></script>
<script src="/resources/testharnessreport.js"></script>
</head>
<body>
<div id="test1" dir="auto">
<![CDATA[foo]]>اختبر
</div>
<iframe src="cdata-iframe.xhtml"></iframe>
<script>
function awaitMessage(msg) {
return new Promise(res => {
function waitAndRemove(e) {
if (e.data != msg)
return;
window.removeEventListener("message", waitAndRemove);
res();
}
window.addEventListener("message", waitAndRemove);
});
}
const subframeLoaded = awaitMessage("subframe-loaded");
async function createXHTMLCase(id) {
await subframeLoaded;
let iframe = document.querySelector("iframe");
iframe.contentWindow.postMessage(id, "*");
await awaitMessage(id);
const doc = iframe.contentDocument;
const div = doc.getElementById(id);
const cdata = div.firstChild;
return [div, cdata];
}
test(function() {
const div = document.getElementById("test1");
assert_true(div.matches(":dir(rtl)"));
}, "Content of CDATA is ignored for dir=auto in html document");
promise_test(async function() {
let [div, cdata] = await createXHTMLCase(1);
assert_true(div.matches(":dir(ltr)"));
}, "Text in CDATASection is considered when determining auto directionality");
promise_test(async function() {
let [div, cdata] = await createXHTMLCase(2);
assert_true(div.matches(":dir(ltr)"));
cdata.remove();
assert_true(div.matches(":dir(rtl)"));
}, "Directionality is updated when removing CDATASection");
promise_test(async function() {
let [div, cdata] = await createXHTMLCase(3);
assert_true(div.matches(":dir(ltr)"));
cdata.textContent = "اختبر";
assert_true(div.matches(":dir(rtl)"));
}, "Directionality is updated when changing text of CDATASection");
</script>
</body>
</html>
|