|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
<html>
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
https://bugzilla.mozilla.org/show_bug.cgi?id=682592
|
|
Packit |
f0b94e |
-->
|
|
Packit |
f0b94e |
<head>
|
|
Packit |
f0b94e |
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
|
|
Packit |
f0b94e |
<title>Test for bug 682592</title>
|
|
Packit |
f0b94e |
<script type="text/javascript" src="/tests/SimpleTest/WindowSnapshot.js"></script>
|
|
Packit |
f0b94e |
<script type="text/javascript" src="/tests/SimpleTest/SimpleTest.js"></script>
|
|
Packit |
f0b94e |
<link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
|
|
Packit |
f0b94e |
</head>
|
|
Packit |
f0b94e |
<body>
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
<iframe id="iframe-ref"></iframe>
|
|
Packit |
f0b94e |
<iframe id="iframe-test"></iframe>
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
<script class="testbody" type="text/javascript">
|
|
Packit |
f0b94e |
/** Test for Bug 682592 **/
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
/*
|
|
Packit |
f0b94e |
We want to check that bidi is detected correctly. So, we have a reference
|
|
Packit |
f0b94e |
document where ltr is set explicitely with <bdo> element. Then, we compare
|
|
Packit |
f0b94e |
it with test document.
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
In mozilla, once bidi has been detected in a document, document always
|
|
Packit |
f0b94e |
consider it's in bidi mode. So, if one fragment enables bidi correctly, and
|
|
Packit |
f0b94e |
we create or update a fragment in the same document, that operation may not
|
|
Packit |
f0b94e |
enable bidi by itself, but it will not be detected. So, we need to have new
|
|
Packit |
f0b94e |
document for each test.
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
So, instead of many diferent reftests, this mochitest implements a
|
|
Packit |
f0b94e |
reftest-like. It creates reference text fragments in reference iframe, test
|
|
Packit |
f0b94e |
text fragments in test iframe, and compare the documents. Then, it reloads
|
|
Packit |
f0b94e |
test iframe. Reference iframe does not need to be reloaded between tests.
|
|
Packit |
f0b94e |
It's ok (and maybe, desired) to keep bidi always enabled in that document.
|
|
Packit |
f0b94e |
*/
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
SimpleTest.waitForExplicitFinish();
|
|
Packit |
f0b94e |
SimpleTest.requestLongerTimeout(3);
|
|
Packit |
f0b94e |
if (navigator.platform.startsWith("Linux arm")) { /* bugs 982875, 999429 */
|
|
Packit |
f0b94e |
SimpleTest.expectAssertions(0, 4);
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
var page = `
|
|
Packit |
f0b94e |
<html><meta charset='UTF-8'><body></body></html>`;
|
|
Packit |
f0b94e |
var refFrame = document.getElementById("iframe-ref")
|
|
Packit |
f0b94e |
var testFrame = document.getElementById("iframe-test");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
refFrame.addEventListener("load", function() {
|
|
Packit |
f0b94e |
testFrame.addEventListener("load", function() {
|
|
Packit |
f0b94e |
let {done} = tests.next();
|
|
Packit |
f0b94e |
if (!done) {
|
|
Packit |
f0b94e |
ok(compareSnapshots(snapshotWindow(testFrame.contentWindow),
|
|
Packit |
f0b94e |
snapshotWindow(refFrame.contentWindow), true)[0],
|
|
Packit |
f0b94e |
"bidi is not detected correctly");
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
testFrame.contentWindow.location.reload();
|
|
Packit |
f0b94e |
} else {
|
|
Packit |
f0b94e |
SimpleTest.finish();
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
});
|
|
Packit |
f0b94e |
testFrame.srcdoc = page;
|
|
Packit |
f0b94e |
});
|
|
Packit |
f0b94e |
refFrame.srcdoc = page;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
var rtl = "עִבְרִית";
|
|
Packit |
f0b94e |
var non8bit = "ʃ";
|
|
Packit |
f0b94e |
var is8bit = "a";
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// concats aStr aNumber of times
|
|
Packit |
f0b94e |
function strMult(aStr, aNumber) {
|
|
Packit |
f0b94e |
if (aNumber === 0) {
|
|
Packit |
f0b94e |
return "";
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
return strMult(aStr, aNumber - 1) + aStr;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
function* runTests () {
|
|
Packit |
f0b94e |
var ltr = "", prefix = null;
|
|
Packit |
f0b94e |
var refContainer = refFrame.contentDocument.getElementById('content');
|
|
Packit |
f0b94e |
var testContainer, textNode;
|
|
Packit |
f0b94e |
var i = 0;
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// 8bit chars + bidi
|
|
Packit |
f0b94e |
for (i = 0; i <= 16; i++) {
|
|
Packit |
f0b94e |
ltr = strMult(is8bit, i);
|
|
Packit |
f0b94e |
refContainer.innerHTML = ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
|
|
Packit |
f0b94e |
testContainer = testFrame.contentDocument.getElementById('content');
|
|
Packit |
f0b94e |
testContainer.innerHTML = ltr + rtl;
|
|
Packit |
f0b94e |
yield undefined;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// non-8bit char + 8bit chars + bidi
|
|
Packit |
f0b94e |
for (i = 0; i <= 16; i++) {
|
|
Packit |
f0b94e |
ltr = non8bit + strMult(is8bit, i);
|
|
Packit |
f0b94e |
refContainer.innerHTML = ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
|
|
Packit |
f0b94e |
testContainer = testFrame.contentDocument.getElementById('content');
|
|
Packit |
f0b94e |
testContainer.innerHTML = ltr + rtl;
|
|
Packit |
f0b94e |
yield undefined;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// appendData
|
|
Packit |
f0b94e |
for (i = 0; i <= 16; i++) {
|
|
Packit |
f0b94e |
ltr = strMult(is8bit, i);
|
|
Packit |
f0b94e |
refContainer.innerHTML = ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
|
|
Packit |
f0b94e |
testContainer = testFrame.contentDocument.getElementById('content');
|
|
Packit |
f0b94e |
textNode = document.createTextNode("");
|
|
Packit |
f0b94e |
testContainer.appendChild(textNode);
|
|
Packit |
f0b94e |
textNode.appendData(ltr + rtl);
|
|
Packit |
f0b94e |
yield undefined;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
for (i = 0; i <= 16; i++) {
|
|
Packit |
f0b94e |
ltr = non8bit + strMult(is8bit, i);
|
|
Packit |
f0b94e |
refContainer.innerHTML = ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
|
|
Packit |
f0b94e |
testContainer = testFrame.contentDocument.getElementById('content');
|
|
Packit |
f0b94e |
textNode = document.createTextNode("");
|
|
Packit |
f0b94e |
testContainer.appendChild(textNode);
|
|
Packit |
f0b94e |
textNode.appendData(ltr + rtl);
|
|
Packit |
f0b94e |
yield undefined;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// appendData with 8bit prefix
|
|
Packit |
f0b94e |
for (i = 0; i <= 16; i++) {
|
|
Packit |
f0b94e |
prefix = is8bit;
|
|
Packit |
f0b94e |
ltr = strMult(is8bit, i);
|
|
Packit |
f0b94e |
refContainer.innerHTML = prefix + ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
|
|
Packit |
f0b94e |
testContainer = testFrame.contentDocument.getElementById('content');
|
|
Packit |
f0b94e |
textNode = document.createTextNode(prefix);
|
|
Packit |
f0b94e |
testContainer.appendChild(textNode);
|
|
Packit |
f0b94e |
textNode.appendData(ltr + rtl);
|
|
Packit |
f0b94e |
yield undefined;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
for (i = 0; i <= 16; i++) {
|
|
Packit |
f0b94e |
prefix = is8bit;
|
|
Packit |
f0b94e |
ltr = non8bit + strMult(is8bit, i);
|
|
Packit |
f0b94e |
refContainer.innerHTML = prefix + ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
|
|
Packit |
f0b94e |
testContainer = testFrame.contentDocument.getElementById('content');
|
|
Packit |
f0b94e |
textNode = document.createTextNode(prefix);
|
|
Packit |
f0b94e |
testContainer.appendChild(textNode);
|
|
Packit |
f0b94e |
textNode.appendData(ltr + rtl);
|
|
Packit |
f0b94e |
yield undefined;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
// appendData with non-8bit prefix
|
|
Packit |
f0b94e |
for (i = 0; i <= 16; i++) {
|
|
Packit |
f0b94e |
prefix = non8bit;
|
|
Packit |
f0b94e |
ltr = strMult(is8bit, i);
|
|
Packit |
f0b94e |
refContainer.innerHTML = prefix + ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
|
|
Packit |
f0b94e |
testContainer = testFrame.contentDocument.getElementById('content');
|
|
Packit |
f0b94e |
textNode = document.createTextNode(prefix);
|
|
Packit |
f0b94e |
testContainer.appendChild(textNode);
|
|
Packit |
f0b94e |
textNode.appendData(ltr + rtl);
|
|
Packit |
f0b94e |
yield undefined;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
for (i = 0; i <= 16; i++) {
|
|
Packit |
f0b94e |
prefix = non8bit;
|
|
Packit |
f0b94e |
ltr = non8bit + strMult(is8bit, i);
|
|
Packit |
f0b94e |
refContainer.innerHTML = prefix + ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
|
|
Packit |
f0b94e |
testContainer = testFrame.contentDocument.getElementById('content');
|
|
Packit |
f0b94e |
textNode = document.createTextNode(prefix);
|
|
Packit |
f0b94e |
testContainer.appendChild(textNode);
|
|
Packit |
f0b94e |
textNode.appendData(ltr + rtl);
|
|
Packit |
f0b94e |
yield undefined;
|
|
Packit |
f0b94e |
}
|
|
Packit |
f0b94e |
};
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
var tests = runTests();
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
</script>
|
|
Packit |
f0b94e |
|
|
Packit |
f0b94e |
</body>
|
|
Packit |
f0b94e |
</html>
|