Blame dom/base/test/test_bug682592.html

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>