tor-browser

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

rect-hittest-002.html (4376B)


      1 <!DOCTYPE html>
      2 <title>elementFromPoint(...) on &lt;rect>s with simple strokes</title>
      3 <link rel="help" href="https://svgwg.org/svg2-draft/interact.html#hit-testing">
      4 <script src="/resources/testharness.js"></script>
      5 <script src="/resources/testharnessreport.js"></script>
      6 <style>
      7 #rect1:hover,
      8 #rect2:hover,
      9 #rect3:hover,
     10 #rect4:hover,
     11 #rect5:hover,
     12 #rect6:hover {
     13    stroke: #00f;
     14 }
     15 </style>
     16 <svg id="svg" width="420" height="300" version="1.1">
     17  <rect id="border" x="0.5" y="0.5" width="419" height="299" stroke="#000" stroke-width="1" fill="none"/>
     18 
     19  <rect id="rect1" x="70" y="30" width="100" height="80" stroke="#000" stroke-width="20" fill="none"/>
     20  <rect id="rect2" x="40" y="150" width="50" height="120" stroke="#000" stroke-width="20" fill="none" transform="rotate(20 65 210)"/>
     21  <rect id="rect3" x="140" y="200" width="150" height="70" stroke="#000" stroke-width="20" fill="none"/>
     22  <rect id="rect4" x="220" y="50" width="60" height="10" stroke="#000" stroke-width="20" fill="none"/>
     23  <rect id="rect5" x="230" y="100" width="10" height="60" stroke="#000" stroke-width="20" fill="none" transform="rotate(-45 235 130)"/>
     24  <rect id="rect6" x="310" y="130" width="10" height="10" stroke="#000" stroke-width="20" fill="none"/>
     25 </svg>
     26 <script>
     27 // Points are relative to the client rect of the <svg> root.
     28 const tests = [
     29  { x: 30, y: 12, expectedElemId: "svg" },
     30  { x: 118, y: 10, expectedElemId: "svg" },
     31  { x: 197, y: 12, expectedElemId: "svg" },
     32  { x: 201, y: 28, expectedElemId: "svg" },
     33  { x: 15, y: 70, expectedElemId: "svg" },
     34  { x: 97, y: 52, expectedElemId: "svg" },
     35  { x: 149, y: 49, expectedElemId: "svg" },
     36  { x: 85, y: 82, expectedElemId: "svg" },
     37  { x: 122, y: 98, expectedElemId: "svg" },
     38  { x: 154, y: 75, expectedElemId: "svg" },
     39  { x: 72, y: 130, expectedElemId: "svg" },
     40  { x: 48, y: 145, expectedElemId: "svg" },
     41  { x: 31, y: 279, expectedElemId: "svg" },
     42  { x: 28, y: 201, expectedElemId: "svg" },
     43  { x: 71, y: 179, expectedElemId: "svg" },
     44  { x: 43, y: 244, expectedElemId: "svg" },
     45  { x: 74, y: 219, expectedElemId: "svg" },
     46  { x: 94, y: 261, expectedElemId: "svg" },
     47  { x: 126, y: 231, expectedElemId: "svg" },
     48  { x: 146, y: 185, expectedElemId: "svg" },
     49  { x: 173, y: 216, expectedElemId: "svg" },
     50  { x: 225, y: 258, expectedElemId: "svg" },
     51  { x: 247, y: 284, expectedElemId: "svg" },
     52  { x: 286, y: 174, expectedElemId: "svg" },
     53  { x: 254, y: 120, expectedElemId: "svg" },
     54  { x: 203, y: 96, expectedElemId: "svg" },
     55  { x: 244, y: 163, expectedElemId: "svg" },
     56  { x: 300, y: 37, expectedElemId: "svg" },
     57  { x: 335, y: 136, expectedElemId: "svg" },
     58 
     59  // Test all four outer corner points of #rect1
     60  { x: 60, y: 20, expectedElemId: "rect1" },
     61  { x: 180, y: 20, expectedElemId: "rect1" },
     62  { x: 180, y: 120, expectedElemId: "rect1" },
     63  { x: 60, y: 120, expectedElemId: "rect1" },
     64  // Test all four interior corner points of #rect1
     65  { x: 80, y: 40, expectedElemId: "rect1" },
     66  { x: 160, y: 40, expectedElemId: "rect1" },
     67  { x: 160, y: 100, expectedElemId: "rect1" },
     68  { x: 80, y: 100, expectedElemId: "rect1" },
     69 
     70  { x: 67, y: 56, expectedElemId: "rect1" },
     71  { x: 146, y: 27, expectedElemId: "rect1" },
     72  { x: 173, y: 111, expectedElemId: "rect1" },
     73 
     74  { x: 28, y: 242, expectedElemId: "rect2" },
     75  { x: 51, y: 182, expectedElemId: "rect2" },
     76  { x: 89, y: 155, expectedElemId: "rect2" },
     77 
     78  { x: 136, y: 198, expectedElemId: "rect3" },
     79  { x: 177, y: 270, expectedElemId: "rect3" },
     80  { x: 275, y: 197, expectedElemId: "rect3" },
     81  { x: 297, y: 233, expectedElemId: "rect3" },
     82 
     83  { x: 235, y: 47, expectedElemId: "rect4" },
     84  { x: 272, y: 61, expectedElemId: "rect4" },
     85  { x: 290, y: 70, expectedElemId: "rect4" },
     86 
     87  { x: 233, y: 140, expectedElemId: "rect5" },
     88 
     89  { x: 312, y: 128, expectedElemId: "rect6" },
     90  { x: 330, y: 150, expectedElemId: "rect6" }
     91 ];
     92 
     93 setup(() => {
     94  const svg = document.getElementById("svg");
     95  const svgBounds = svg.getBoundingClientRect();
     96  window.svgOrigin = {
     97    x: svgBounds.left << 0,
     98    y: svgBounds.top << 0,
     99  };
    100 });
    101 
    102 tests.forEach(testcase => {
    103  test(t => {
    104    const expectedElem = document.getElementById(testcase.expectedElemId);
    105    const hitElem = document.elementFromPoint(svgOrigin.x + testcase.x, svgOrigin.y + testcase.y);
    106    assert_equals(hitElem, expectedElem);
    107  }, `${document.title}, element at (${testcase.x}, ${testcase.y})`);
    108 });
    109 </script>