| <!DOCTYPE html> |
| <title>HTMLTableElement.rows</title> |
| <script src="/resources/testharness.js"></script> |
| <script src="/resources/testharnessreport.js"></script> |
| <div id="log"></div> |
| <script> |
| function assert_nodelist_equals(actual, expected) { |
| assert_equals(actual.length, expected.length); |
| |
| for (var i = 0; i < actual.length; ++i) { |
| assert_true(i in actual); |
| assert_true(actual.hasOwnProperty(i), |
| "property " + i + " expected to be present on the object"); |
| assert_equals(actual.item(i), expected[i]); |
| assert_equals(actual[i], expected[i]); |
| } |
| } |
| |
| function test_table_simple(group, table) { |
| var foo1 = group.appendChild(document.createElement("tr")); |
| foo1.id = "foo"; |
| var bar1 = group.appendChild(document.createElement("tr")); |
| bar1.id = "bar"; |
| var foo2 = group.appendChild(document.createElement("tr")); |
| foo2.id = "foo"; |
| var bar2 = group.appendChild(document.createElement("tr")); |
| bar2.id = "bar"; |
| |
| assert_true(table.rows instanceof HTMLCollection, "table.rows should be a HTMLCollection."); |
| assert_nodelist_equals(table.rows, [foo1, bar1, foo2, bar2]); |
| assert_equals(table.rows.foo, foo1); |
| assert_equals(table.rows["foo"], foo1); |
| assert_equals(table.rows.namedItem("foo"), foo1); |
| assert_equals(table.rows.bar, bar1); |
| assert_equals(table.rows["bar"], bar1); |
| assert_equals(table.rows.namedItem("bar"), bar1); |
| } |
| test(function() { |
| var table = document.createElement("table"); |
| test_table_simple(table, table); |
| }, "Children of table"); |
| test(function() { |
| var table = document.createElement("table"); |
| var group = table.appendChild(document.createElement("thead")); |
| test_table_simple(group, table); |
| }, "Children of thead"); |
| test(function() { |
| var table = document.createElement("table"); |
| var group = table.appendChild(document.createElement("tbody")); |
| test_table_simple(group, table); |
| }, "Children of tbody"); |
| test(function() { |
| var table = document.createElement("table"); |
| var group = table.appendChild(document.createElement("tfoot")); |
| test_table_simple(group, table); |
| }, "Children of tfoot"); |
| test(function() { |
| var table = document.createElement("table"); |
| var orphan1 = table.appendChild(document.createElement("tr")); |
| orphan1.id = "orphan1"; |
| var foot1 = table.appendChild(document.createElement("tfoot")); |
| var orphan2 = table.appendChild(document.createElement("tr")); |
| orphan2.id = "orphan2"; |
| var foot2 = table.appendChild(document.createElement("tfoot")); |
| var orphan3 = table.appendChild(document.createElement("tr")); |
| orphan3.id = "orphan3"; |
| var body1 = table.appendChild(document.createElement("tbody")); |
| var orphan4 = table.appendChild(document.createElement("tr")); |
| orphan4.id = "orphan4"; |
| var body2 = table.appendChild(document.createElement("tbody")); |
| var orphan5 = table.appendChild(document.createElement("tr")); |
| orphan5.id = "orphan5"; |
| var head1 = table.appendChild(document.createElement("thead")); |
| var orphan6 = table.appendChild(document.createElement("tr")); |
| orphan6.id = "orphan6"; |
| var head2 = table.appendChild(document.createElement("thead")); |
| var orphan7 = table.appendChild(document.createElement("tr")); |
| orphan7.id = "orphan7"; |
| |
| var foot1row1 = foot1.appendChild(document.createElement("tr")); |
| foot1row1.id = "foot1row1"; |
| var foot1row2 = foot1.appendChild(document.createElement("tr")); |
| foot1row2.id = "foot1row2"; |
| var foot2row1 = foot2.appendChild(document.createElement("tr")); |
| foot2row1.id = "foot2row1"; |
| var foot2row2 = foot2.appendChild(document.createElement("tr")); |
| foot2row2.id = "foot2row2"; |
| |
| var body1row1 = body1.appendChild(document.createElement("tr")); |
| body1row1.id = "body1row1"; |
| var body1row2 = body1.appendChild(document.createElement("tr")); |
| body1row2.id = "body1row2"; |
| var body2row1 = body2.appendChild(document.createElement("tr")); |
| body2row1.id = "body2row1"; |
| var body2row2 = body2.appendChild(document.createElement("tr")); |
| body2row2.id = "body2row2"; |
| |
| var head1row1 = head1.appendChild(document.createElement("tr")); |
| head1row1.id = "head1row1"; |
| var head1row2 = head1.appendChild(document.createElement("tr")); |
| head1row2.id = "head1row2"; |
| var head2row1 = head2.appendChild(document.createElement("tr")); |
| head2row1.id = "head2row1"; |
| var head2row2 = head2.appendChild(document.createElement("tr")); |
| head2row2.id = "head2row2"; |
| |
| // These elements should not end up in any collection. |
| table.appendChild(document.createElement("div")) |
| .appendChild(document.createElement("tr")); |
| foot1.appendChild(document.createElement("div")) |
| .appendChild(document.createElement("tr")); |
| body1.appendChild(document.createElement("div")) |
| .appendChild(document.createElement("tr")); |
| head1.appendChild(document.createElement("div")) |
| .appendChild(document.createElement("tr")); |
| table.appendChild(document.createElementNS("http://example.com/test", "tr")); |
| foot1.appendChild(document.createElementNS("http://example.com/test", "tr")); |
| body1.appendChild(document.createElementNS("http://example.com/test", "tr")); |
| head1.appendChild(document.createElementNS("http://example.com/test", "tr")); |
| |
| assert_true(table.rows instanceof HTMLCollection, "table.rows should be a HTMLCollection."); |
| assert_nodelist_equals(table.rows, [ |
| // thead |
| head1row1, |
| head1row2, |
| head2row1, |
| head2row2, |
| |
| // tbody + table |
| orphan1, |
| orphan2, |
| orphan3, |
| body1row1, |
| body1row2, |
| orphan4, |
| body2row1, |
| body2row2, |
| orphan5, |
| orphan6, |
| orphan7, |
| |
| // tfoot |
| foot1row1, |
| foot1row2, |
| foot2row1, |
| foot2row2 |
| ]); |
| |
| var ids = [ |
| "orphan1", |
| "orphan2", |
| "orphan3", |
| "orphan4", |
| "orphan5", |
| "orphan6", |
| "orphan7", |
| "foot1row1", |
| "foot1row2", |
| "foot2row1", |
| "foot2row2", |
| "body1row1", |
| "body1row2", |
| "body2row1", |
| "body2row2", |
| "head1row1", |
| "head1row2", |
| "head2row1", |
| "head2row2" |
| ]; |
| ids.forEach(function(id) { |
| assert_equals(table.rows.namedItem(id).id, id); |
| assert_true(id in table.rows); |
| assert_equals(table.rows[id].id, id); |
| assert_true(id in table.rows); |
| }); |
| while (table.firstChild) { |
| table.removeChild(table.firstChild); |
| } |
| ids.forEach(function(id) { |
| assert_equals(table.rows.namedItem(id), null); |
| assert_false(id in table.rows); |
| assert_equals(table.rows[id], undefined); |
| assert_false(id in table.rows); |
| }); |
| }, "Complicated case"); |
| </script> |