span-limits.html (3462B)
1 <!DOCTYPE html> 2 <title>Limits on colSpan/rowSpan</title> 3 <meta name="timeout" content="long"> 4 <script src=/resources/testharness.js></script> 5 <script src=/resources/testharnessreport.js></script> 6 <div id=log></div> 7 8 <table border=1> 9 <tr><td colspan=500>a<td colspan=500 id=a1>a 10 <!-- This cell must span the previous two --> 11 <tr><td colspan=1000 id=a2>a 12 </table> 13 14 <table border=1> 15 <tr><td colspan=1000 id=b1>a<td>a 16 <!-- This cell must span only the first cell in the previous row --> 17 <tr><td colspan=1001 id=b2>a 18 </table> 19 20 <table border=1 style="float:left"> 21 <!-- The first column must go all the way down to the bottom --> 22 <tr><td rowspan=65534 id=c1>a<td> 23 <!-- We'll add another 65533 rows later --> 24 </table> 25 26 <table border=1> 27 <!-- The first column must go one cell below the bottom --> 28 <tr><td rowspan=65535 id=d1>a<td> 29 <!-- We'll add another 65534 rows later --> 30 </table> 31 32 <table> 33 <tr> 34 <td id="rowspan-limit-test1" rowspan=5></td> 35 <td id="rowspan-limit-test2" rowspan=0></td> 36 <td id="rowspan-limit-test3" rowspan=1000></td> 37 <td id="rowspan-limit-test4" rowspan=65534></td> 38 <td id="rowspan-limit-test5" rowspan=65535></td> 39 <td id="rowspan-limit-test6" rowspan=5555555></td> 40 </tr> 41 </table> 42 43 <script> 44 var $ = document.querySelector.bind(document); 45 46 test(() => { 47 assert_equals($("#a2").getBoundingClientRect().right, 48 $("#a1").getBoundingClientRect().right); 49 }, "colspan of 1000 must work"); 50 51 test(() => { 52 assert_equals($("#b2").getBoundingClientRect().right, 53 $("#b1").getBoundingClientRect().right); 54 }, "colspan of 1001 must be treated as 1000"); 55 56 test(() => { 57 var s = ""; 58 for (var i = 0; i < 65532; i++) { 59 s += "<tr><td>"; 60 } 61 s += "<tr><td id=c2>"; 62 document.querySelectorAll("table")[2].firstElementChild.innerHTML += s; 63 assert_equals($("#c1").getBoundingClientRect().bottom, 64 $("#c2").getBoundingClientRect().bottom); 65 }, "rowspan of 65534 must work"); 66 67 test(() => { 68 var s = ""; 69 for (var i = 0; i < 65532; i++) { 70 s += "<tr><td>"; 71 } 72 s += "<tr><td id=d2><tr><td>a<td>"; 73 document.querySelectorAll("table")[3].firstElementChild.innerHTML += s; 74 assert_equals($("#d1").getBoundingClientRect().bottom, 75 $("#d2").getBoundingClientRect().bottom); 76 }, "rowspan of 65535 must be treated as 65534"); 77 78 test(() => { 79 let td = document.createElement("td"); 80 td.rowSpan = 5; 81 assert_equals(td.rowSpan, 5); 82 83 td.rowSpan = 0; 84 assert_equals(td.rowSpan, 0); 85 86 td.rowSpan = 1000; 87 assert_equals(td.rowSpan, 1000); 88 89 td.rowSpan = 65534; 90 assert_equals(td.rowSpan, 65534); 91 92 td.rowSpan = 65535; 93 assert_equals(td.rowSpan, 65534); 94 95 td.rowSpan = 555555; 96 assert_equals(td.rowSpan, 65534); 97 }, "rowspan must be clamped to [0, 65534] when set via script"); 98 99 test(() => { 100 assert_equals(document.getElementById("rowspan-limit-test1").rowSpan, 5); 101 assert_equals(document.getElementById("rowspan-limit-test2").rowSpan, 0); 102 assert_equals(document.getElementById("rowspan-limit-test3").rowSpan, 1000); 103 assert_equals(document.getElementById("rowspan-limit-test4").rowSpan, 65534); 104 assert_equals(document.getElementById("rowspan-limit-test5").rowSpan, 65534); 105 assert_equals(document.getElementById("rowspan-limit-test6").rowSpan, 65534); 106 }, "rowspan must be clamped to [0, 65534] when parsing attributes"); 107 </script>