tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

test_bug682592.html (5884B)


      1 <!DOCTYPE html>
      2 <html>
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=682592
      5 -->
      6 <head>
      7    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
      8    <title>Test for bug 682592</title>
      9    <script src="/tests/SimpleTest/WindowSnapshot.js"></script>
     10    <script src="/tests/SimpleTest/SimpleTest.js"></script>
     11    <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     12 </head>
     13 <body>
     14 <p id="display"></p>
     15 <div id="content">
     16 <iframe id="iframe-ref"></iframe>
     17 <iframe id="iframe-test"></iframe>
     18 </div>
     19 <pre id="test">
     20 <script class="testbody" type="text/javascript">
     21 /** Test for Bug 682592 */
     22 
     23 /* 
     24   We want to check that bidi is detected correctly. So, we have a reference
     25   document where ltr is set explicitely with <bdo> element. Then, we compare
     26   it with test document.
     27 
     28   In mozilla, once bidi has been detected in a document, document always
     29   consider it's in bidi mode. So, if one fragment enables bidi correctly, and
     30   we create or update a fragment in the same document, that operation may not
     31   enable bidi by itself, but it will not be detected. So, we need to have new
     32   document for each test.
     33 
     34   So, instead of many diferent reftests, this mochitest implements a
     35   reftest-like. It creates reference text fragments in reference iframe, test
     36   text fragments in test iframe, and compare the documents. Then, it reloads
     37   test iframe. Reference iframe does not need to be reloaded between tests.
     38   It's ok (and maybe, desired) to keep bidi always enabled in that document. 
     39 */
     40 
     41 SimpleTest.waitForExplicitFinish();
     42 SimpleTest.requestLongerTimeout(3);
     43 if (navigator.platform.startsWith("Linux arm")) { /* bugs 982875, 999429 */
     44  SimpleTest.expectAssertions(0, 4);
     45 }
     46 
     47 var page = `<!DOCTYPE html>
     48 <html><meta charset='UTF-8'><body><p id="content"></p></body></html>`;
     49 var refFrame = document.getElementById("iframe-ref")
     50 var testFrame = document.getElementById("iframe-test");
     51 
     52 refFrame.addEventListener("load", function() {
     53  testFrame.addEventListener("load", async function() {
     54    let {done} = tests.next();
     55    if (!done) {
     56      ok(compareSnapshots(await snapshotWindow(testFrame.contentWindow), 
     57                          await snapshotWindow(refFrame.contentWindow), true)[0], 
     58         "bidi is not detected correctly");
     59 
     60      testFrame.contentWindow.location.reload();
     61    } else {
     62      SimpleTest.finish();
     63    }
     64  });
     65  testFrame.srcdoc = page;
     66 });
     67 refFrame.srcdoc = page;
     68 
     69 var rtl = "עִבְרִית";
     70 var non8bit =  "ʃ";
     71 var is8bit = "a";
     72 
     73 // concats aStr aNumber of times
     74 function strMult(aStr, aNumber) {
     75  if (aNumber === 0) {
     76    return "";
     77  }
     78  return strMult(aStr, aNumber - 1) + aStr;
     79 }
     80 
     81 function* runTests () {
     82  var ltr = "", prefix = null;
     83  var refContainer = refFrame.contentDocument.getElementById('content');
     84  var testContainer, textNode;
     85  var i = 0;
     86 
     87  // 8bit chars + bidi
     88  for (i = 0; i <= 16; i++) {
     89    ltr = strMult(is8bit, i);
     90    refContainer.innerHTML = ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
     91    testContainer = testFrame.contentDocument.getElementById('content');
     92    testContainer.innerHTML = ltr + rtl;
     93    yield undefined;
     94  }
     95 
     96  // non-8bit char + 8bit chars + bidi
     97  for (i = 0; i <= 16; i++) {
     98    ltr = non8bit + strMult(is8bit, i);
     99    refContainer.innerHTML = ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
    100    testContainer = testFrame.contentDocument.getElementById('content');
    101    testContainer.innerHTML = ltr + rtl;
    102    yield undefined;
    103  }
    104 
    105  // appendData
    106  for (i = 0; i <= 16; i++) {
    107    ltr = strMult(is8bit, i);
    108    refContainer.innerHTML = ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
    109    testContainer = testFrame.contentDocument.getElementById('content');
    110    textNode = document.createTextNode("");
    111    testContainer.appendChild(textNode);
    112    textNode.appendData(ltr + rtl);
    113    yield undefined;
    114  }
    115 
    116  for (i = 0; i <= 16; i++) {
    117    ltr = non8bit + strMult(is8bit, i);
    118    refContainer.innerHTML = ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
    119    testContainer = testFrame.contentDocument.getElementById('content');
    120    textNode = document.createTextNode("");
    121    testContainer.appendChild(textNode);
    122    textNode.appendData(ltr + rtl);
    123    yield undefined;
    124  }
    125 
    126  // appendData with 8bit prefix
    127  for (i = 0; i <= 16; i++) {
    128    prefix = is8bit;
    129    ltr = strMult(is8bit, i);
    130    refContainer.innerHTML = prefix + ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
    131    testContainer = testFrame.contentDocument.getElementById('content');
    132    textNode = document.createTextNode(prefix);
    133    testContainer.appendChild(textNode);
    134    textNode.appendData(ltr + rtl);
    135    yield undefined;
    136  }
    137 
    138  for (i = 0; i <= 16; i++) {
    139    prefix = is8bit;
    140    ltr = non8bit + strMult(is8bit, i);
    141    refContainer.innerHTML = prefix + ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
    142    testContainer = testFrame.contentDocument.getElementById('content');
    143    textNode = document.createTextNode(prefix);
    144    testContainer.appendChild(textNode);
    145    textNode.appendData(ltr + rtl);
    146    yield undefined;
    147  }
    148 
    149  // appendData with non-8bit prefix
    150  for (i = 0; i <= 16; i++) {
    151    prefix = non8bit;
    152    ltr = strMult(is8bit, i);
    153    refContainer.innerHTML = prefix + ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
    154    testContainer = testFrame.contentDocument.getElementById('content');
    155    textNode = document.createTextNode(prefix);
    156    testContainer.appendChild(textNode);
    157    textNode.appendData(ltr + rtl);
    158    yield undefined;
    159  }
    160 
    161  for (i = 0; i <= 16; i++) {
    162    prefix = non8bit;
    163    ltr = non8bit + strMult(is8bit, i);
    164    refContainer.innerHTML = prefix + ltr + '<bdo dir="rtl">' + rtl + '</bdo>';
    165    testContainer = testFrame.contentDocument.getElementById('content');
    166    textNode = document.createTextNode(prefix);
    167    testContainer.appendChild(textNode);
    168    textNode.appendData(ltr + rtl);
    169    yield undefined;
    170  }
    171 };
    172 
    173 var tests = runTests();
    174 
    175 </script>
    176 </pre>
    177 </body>
    178 </html>