Index: LayoutTests/imported/web-platform-tests/html/semantics/tabular-data/the-table-element/table-rows.html |
diff --git a/LayoutTests/imported/web-platform-tests/html/semantics/tabular-data/the-table-element/table-rows.html b/LayoutTests/imported/web-platform-tests/html/semantics/tabular-data/the-table-element/table-rows.html |
new file mode 100644 |
index 0000000000000000000000000000000000000000..43fe783d0a51eab92f2419998d85106a28fa2f41 |
--- /dev/null |
+++ b/LayoutTests/imported/web-platform-tests/html/semantics/tabular-data/the-table-element/table-rows.html |
@@ -0,0 +1,186 @@ |
+<!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> |