tor-browser

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

test_text_scaled.html (5804B)


      1 <!DOCTYPE html>
      2 <html xmlns="http://www.w3.org/1999/xhtml">
      3 <!--
      4 https://bugzilla.mozilla.org/show_bug.cgi?id=655877
      5 -->
      6 <head>
      7  <title>Test for Bug 655877</title>
      8  <script src="/tests/SimpleTest/SimpleTest.js"></script>
      9  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css" />
     10 </head>
     11 <body>
     12 <a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=655877">Mozilla Bug 655877</a>
     13 <p id="display"></p>
     14 <div id="content" style="display: none"></div>
     15 
     16 <iframe id="svg" src="text-helper-scaled.svg"></iframe>
     17 
     18 <pre id="test">
     19 <script class="testbody" type="application/javascript">
     20 SimpleTest.waitForExplicitFinish();
     21 
     22 function runTest() {
     23  var doc = $("svg").contentWindow.document;
     24  var text1 = doc.getElementById("text1");
     25  var text2 = doc.getElementById("text2");
     26 
     27  var charWidth = text1.getSubStringLength(0, 1);
     28 
     29  if (navigator.userAgent.indexOf("Linux") > -1 && charWidth == 241) {
     30    // Workaround for a slight difference in 'charWidth' (i.e. the width of
     31    // the 'a' char) on Linux build machines after bug 1342951.  The issue
     32    // doesn't reproduce locally on Ubuntu 17.04 so is particularly tricky to
     33    // debug.
     34    charWidth = 240;
     35  }
     36 
     37  var epsilon = 0.001;
     38 
     39  function isClose(a, b, str) {
     40    ok(Math.abs(a - b) < epsilon, str + " - " + b + " should be close to " + a);
     41  }
     42 
     43  function isPointCloseX(pt1, x, y, str) {
     44    isClose(pt1.x, x, str + " x");
     45    is(pt1.y, y, str + " y");
     46  }
     47 
     48  function ymost(r) {
     49    return r.y + r.height;
     50  }
     51 
     52  var p = text1.getStartPositionOfChar(0);
     53 
     54  // Simple horizontal string
     55 
     56  is(text1.getNumberOfChars(), 3, "text1 length");
     57  ok(text1.getComputedTextLength() > 0, "text1 measured length");
     58  is(text1.getComputedTextLength(), text1.getSubStringLength(0, 3), "text1 substring length");
     59  isPointCloseX(text1.getStartPositionOfChar(0), 10, 400, "text1 char 0 start offset");
     60  isPointCloseX(text1.getStartPositionOfChar(1), 10 + charWidth, 400, "text1 char 1 start offset");
     61  isPointCloseX(text1.getStartPositionOfChar(2), 10 + 2 * charWidth, 400, "text1 char 2 start offset");
     62  isPointCloseX(text1.getEndPositionOfChar(0), 10 + charWidth, 400, "text1 char 0 end offset");
     63  isPointCloseX(text1.getEndPositionOfChar(1), 10 + 2 * charWidth, 400, "text1 char 1 end offset");
     64  isPointCloseX(text1.getEndPositionOfChar(2), 10 + 3 * charWidth, 400, "text1 char 2 end offset");
     65  is(text1.getExtentOfChar(0).x, 10, "text1 char 0 extent x");
     66  is(text1.getExtentOfChar(0).width, text1.getSubStringLength(0, 1), "text1 char 0 extent width");
     67  ok(text1.getExtentOfChar(0).y < 400, "text1 char 0 extent y");
     68  ok(ymost(text1.getExtentOfChar(0)) > 400, "text1 char 0 extent height");
     69  isClose(text1.getExtentOfChar(1).x, 10 + charWidth, "text1 char 1 extent x");
     70  is(text1.getExtentOfChar(1).width, text1.getSubStringLength(0, 1), "text1 char 1 extent width");
     71  is(text1.getExtentOfChar(1).y, text1.getExtentOfChar(0).y, "text1 char 0/1 extent y");
     72  is(text1.getExtentOfChar(1).height, text1.getExtentOfChar(0).height, "text1 char 0/1 extent height");
     73  is(text1.getExtentOfChar(2).x, 10 + 2 * charWidth, "text1 char 2 extent x");
     74  is(text1.getExtentOfChar(2).width, text1.getSubStringLength(0, 1), "text1 char 2 extent width");
     75  is(text1.getExtentOfChar(2).y, text1.getExtentOfChar(0).y, "text1 char 0/2 extent y");
     76  is(text1.getExtentOfChar(2).height, text1.getExtentOfChar(0).height, "text1 char 0/2 extent height");
     77  is(text1.getRotationOfChar(0), 0, "text1 char 0 rotation");
     78  is(text1.getRotationOfChar(1), 0, "text1 char 0 rotation");
     79  is(text1.getRotationOfChar(2), 0, "text1 char 0 rotation");
     80  p.x = 10 + 0.1;
     81  p.y = 400;
     82  is(text1.getCharNumAtPosition(p), 0, "text1 finding char 0 left edge");
     83  p.x = 10 + charWidth - 0.1;
     84  is(text1.getCharNumAtPosition(p), 0, "text1 finding char 0 on right");
     85  p.x = 10 - 0.1;
     86  is(text1.getCharNumAtPosition(p), -1, "text1 finding no char on left");
     87  p.x = 10 + 0.1;
     88  p.y = text1.getExtentOfChar(0).y - 0.1;
     89  is(text1.getCharNumAtPosition(p), -1, "text1 finding no char on top");
     90  p.y = text1.getExtentOfChar(0).y + 0.1;
     91  is(text1.getCharNumAtPosition(p), 0, "text1 finding char 0 top edge");
     92  p.x = 10 + 3 * charWidth - 0.1;
     93  is(text1.getCharNumAtPosition(p), 2, "text1 finding char 2 top edge");
     94  p.x = 10 + 3 * charWidth + 0.1;
     95  is(text1.getCharNumAtPosition(p), -1, "text1 finding no char on right");
     96 
     97  // Text along a thin rectangle path
     98 
     99  charWidth = text2.getSubStringLength(0, 1);
    100 
    101  is(text2.getNumberOfChars(), 26, "text2 length");
    102  ok(text2.getComputedTextLength() > 0, "text2 measured length");
    103  is(text2.getComputedTextLength(), text2.getSubStringLength(0, 26), "text2 substring length");
    104 
    105  // character 12 should be on the bottom side
    106  is(text2.getStartPositionOfChar(12).y, 860, "text2 char 12 start offset");
    107  isfuzzy(text2.getEndPositionOfChar(12).y, 860, 0.001, "text2 char 12 end offset");
    108  ok(text2.getExtentOfChar(12).y < 860, "text2 char 12 extent y");
    109  ok(ymost(text2.getExtentOfChar(12)) > 860, "text2 char 12 extent height");
    110  isfuzzy(text2.getRotationOfChar(12), 180, 0.001, "text2 char 12 rotation");
    111  p.x = text2.getExtentOfChar(12).x + 0.1;
    112  p.y = ymost(text2.getExtentOfChar(12)) - 0.1;
    113  is(text2.getCharNumAtPosition(p), 12, "text2 finding char 12");
    114  // This next test is tricky. The glyph for character 3 may overlap from the above
    115  // but character 12 wins because it's the last to render
    116  p.y = text2.getExtentOfChar(12).y + 0.1;
    117  is(text2.getCharNumAtPosition(p), 12, "text2 finding last rendered char");
    118 }
    119 
    120 function runTests() {
    121  runTest();
    122 
    123  var doc = $("svg").contentWindow.document;
    124  doc.getElementById("g").setAttribute("transform", "rotate(90 200 200)");
    125 
    126  runTest();
    127 
    128  SimpleTest.finish();
    129 }
    130 
    131 window.addEventListener("load", runTests);
    132 </script>
    133 </pre>
    134 </body>
    135 </html>