table-rows.html (7109B)
1 <!DOCTYPE html> 2 <title>HTMLTableElement.rows</title> 3 <script src="/resources/testharness.js"></script> 4 <script src="/resources/testharnessreport.js"></script> 5 <div id="log"></div> 6 <script> 7 function assert_nodelist_equals(actual, expected) { 8 assert_equals(actual.length, expected.length); 9 10 for (var i = 0; i < actual.length; ++i) { 11 assert_true(i in actual); 12 assert_true(actual.hasOwnProperty(i), 13 "property " + i + " expected to be present on the object"); 14 assert_equals(actual.item(i), expected[i]); 15 assert_equals(actual[i], expected[i]); 16 } 17 } 18 19 function test_table_simple(group, table) { 20 var foo1 = group.appendChild(document.createElement("tr")); 21 foo1.id = "foo"; 22 var bar1 = group.appendChild(document.createElement("tr")); 23 bar1.id = "bar"; 24 var foo2 = group.appendChild(document.createElement("tr")); 25 foo2.id = "foo"; 26 var bar2 = group.appendChild(document.createElement("tr")); 27 bar2.id = "bar"; 28 29 assert_true(table.rows instanceof HTMLCollection, "table.rows should be a HTMLCollection."); 30 assert_nodelist_equals(table.rows, [foo1, bar1, foo2, bar2]); 31 assert_equals(table.rows.foo, foo1); 32 assert_equals(table.rows["foo"], foo1); 33 assert_equals(table.rows.namedItem("foo"), foo1); 34 assert_equals(table.rows.bar, bar1); 35 assert_equals(table.rows["bar"], bar1); 36 assert_equals(table.rows.namedItem("bar"), bar1); 37 assert_array_equals(Object.getOwnPropertyNames(table.rows), [ 38 "0", 39 "1", 40 "2", 41 "3", 42 "foo", 43 "bar" 44 ]); 45 } 46 test(function() { 47 var table = document.createElement("table"); 48 test_table_simple(table, table); 49 }, "Children of table"); 50 test(function() { 51 var table = document.createElement("table"); 52 var group = table.appendChild(document.createElement("thead")); 53 test_table_simple(group, table); 54 }, "Children of thead"); 55 test(function() { 56 var table = document.createElement("table"); 57 var group = table.appendChild(document.createElement("tbody")); 58 test_table_simple(group, table); 59 }, "Children of tbody"); 60 test(function() { 61 var table = document.createElement("table"); 62 var group = table.appendChild(document.createElement("tfoot")); 63 test_table_simple(group, table); 64 }, "Children of tfoot"); 65 test(function() { 66 var table = document.createElement("table"); 67 var orphan1 = table.appendChild(document.createElement("tr")); 68 orphan1.id = "orphan1"; 69 var foot1 = table.appendChild(document.createElement("tfoot")); 70 var orphan2 = table.appendChild(document.createElement("tr")); 71 orphan2.id = "orphan2"; 72 var foot2 = table.appendChild(document.createElement("tfoot")); 73 var orphan3 = table.appendChild(document.createElement("tr")); 74 orphan3.id = "orphan3"; 75 var body1 = table.appendChild(document.createElement("tbody")); 76 var orphan4 = table.appendChild(document.createElement("tr")); 77 orphan4.id = "orphan4"; 78 var body2 = table.appendChild(document.createElement("tbody")); 79 var orphan5 = table.appendChild(document.createElement("tr")); 80 orphan5.id = "orphan5"; 81 var head1 = table.appendChild(document.createElement("thead")); 82 var orphan6 = table.appendChild(document.createElement("tr")); 83 orphan6.id = "orphan6"; 84 var head2 = table.appendChild(document.createElement("thead")); 85 var orphan7 = table.appendChild(document.createElement("tr")); 86 orphan7.id = "orphan7"; 87 88 var foot1row1 = foot1.appendChild(document.createElement("tr")); 89 foot1row1.id = "foot1row1"; 90 var foot1row2 = foot1.appendChild(document.createElement("tr")); 91 foot1row2.id = "foot1row2"; 92 var foot2row1 = foot2.appendChild(document.createElement("tr")); 93 foot2row1.id = "foot2row1"; 94 var foot2row2 = foot2.appendChild(document.createElement("tr")); 95 foot2row2.id = "foot2row2"; 96 97 var body1row1 = body1.appendChild(document.createElement("tr")); 98 body1row1.id = "body1row1"; 99 var body1row2 = body1.appendChild(document.createElement("tr")); 100 body1row2.id = "body1row2"; 101 var body2row1 = body2.appendChild(document.createElement("tr")); 102 body2row1.id = "body2row1"; 103 var body2row2 = body2.appendChild(document.createElement("tr")); 104 body2row2.id = "body2row2"; 105 106 var head1row1 = head1.appendChild(document.createElement("tr")); 107 head1row1.id = "head1row1"; 108 var head1row2 = head1.appendChild(document.createElement("tr")); 109 head1row2.id = "head1row2"; 110 var head2row1 = head2.appendChild(document.createElement("tr")); 111 head2row1.id = "head2row1"; 112 var head2row2 = head2.appendChild(document.createElement("tr")); 113 head2row2.id = "head2row2"; 114 115 // These elements should not end up in any collection. 116 table.appendChild(document.createElement("div")) 117 .appendChild(document.createElement("tr")); 118 foot1.appendChild(document.createElement("div")) 119 .appendChild(document.createElement("tr")); 120 body1.appendChild(document.createElement("div")) 121 .appendChild(document.createElement("tr")); 122 head1.appendChild(document.createElement("div")) 123 .appendChild(document.createElement("tr")); 124 table.appendChild(document.createElementNS("http://example.com/test", "tr")); 125 foot1.appendChild(document.createElementNS("http://example.com/test", "tr")); 126 body1.appendChild(document.createElementNS("http://example.com/test", "tr")); 127 head1.appendChild(document.createElementNS("http://example.com/test", "tr")); 128 129 assert_true(table.rows instanceof HTMLCollection, "table.rows should be a HTMLCollection."); 130 assert_nodelist_equals(table.rows, [ 131 // thead 132 head1row1, 133 head1row2, 134 head2row1, 135 head2row2, 136 137 // tbody + table 138 orphan1, 139 orphan2, 140 orphan3, 141 body1row1, 142 body1row2, 143 orphan4, 144 body2row1, 145 body2row2, 146 orphan5, 147 orphan6, 148 orphan7, 149 150 // tfoot 151 foot1row1, 152 foot1row2, 153 foot2row1, 154 foot2row2 155 ]); 156 assert_array_equals(Object.getOwnPropertyNames(table.rows), [ 157 "0", 158 "1", 159 "2", 160 "3", 161 "4", 162 "5", 163 "6", 164 "7", 165 "8", 166 "9", 167 "10", 168 "11", 169 "12", 170 "13", 171 "14", 172 "15", 173 "16", 174 "17", 175 "18", 176 "head1row1", 177 "head1row2", 178 "head2row1", 179 "head2row2", 180 "orphan1", 181 "orphan2", 182 "orphan3", 183 "body1row1", 184 "body1row2", 185 "orphan4", 186 "body2row1", 187 "body2row2", 188 "orphan5", 189 "orphan6", 190 "orphan7", 191 "foot1row1", 192 "foot1row2", 193 "foot2row1", 194 "foot2row2" 195 ]); 196 197 var ids = [ 198 "orphan1", 199 "orphan2", 200 "orphan3", 201 "orphan4", 202 "orphan5", 203 "orphan6", 204 "orphan7", 205 "foot1row1", 206 "foot1row2", 207 "foot2row1", 208 "foot2row2", 209 "body1row1", 210 "body1row2", 211 "body2row1", 212 "body2row2", 213 "head1row1", 214 "head1row2", 215 "head2row1", 216 "head2row2" 217 ]; 218 ids.forEach(function(id) { 219 assert_equals(table.rows.namedItem(id).id, id); 220 assert_true(id in table.rows); 221 assert_equals(table.rows[id].id, id); 222 assert_true(id in table.rows); 223 }); 224 while (table.firstChild) { 225 table.removeChild(table.firstChild); 226 } 227 ids.forEach(function(id) { 228 assert_equals(table.rows.namedItem(id), null); 229 assert_false(id in table.rows); 230 assert_equals(table.rows[id], undefined); 231 assert_false(id in table.rows); 232 }); 233 }, "Complicated case"); 234 </script>