mirror of
https://github.com/servo/servo
synced 2026-05-11 01:22:19 +02:00
277 lines
9.7 KiB
HTML
277 lines
9.7 KiB
HTML
<!DOCTYPE HTML>
|
|
<html>
|
|
<head>
|
|
<meta charset="utf-8">
|
|
<title>Creating and deleting captions</title>
|
|
<link rel="author" title="Erika Navara" href="mailto:edoyle@microsoft.com">
|
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/#the-table-element" />
|
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-createcaption" />
|
|
<link rel="help" href="https://html.spec.whatwg.org/multipage/#dom-table-deletecaption" />
|
|
<script src="/resources/testharness.js"></script>
|
|
<script src="/resources/testharnessreport.js"></script>
|
|
</head>
|
|
<body>
|
|
<div id="log"></div>
|
|
<table id="table0" style="display:none">
|
|
</table>
|
|
<table id="table1" style="display:none">
|
|
<caption id="caption1">caption</caption>
|
|
<tr>
|
|
<td>cell</td>
|
|
<td>cell</td>
|
|
</tr>
|
|
</table>
|
|
<table id="table2" style="display:none">
|
|
<foo:caption>caption</foo:caption>
|
|
<tr>
|
|
<td>cell</td>
|
|
<td>cell</td>
|
|
</tr>
|
|
</table>
|
|
<table id="table3" style="display:none">
|
|
<caption id="caption3">caption 3</caption>
|
|
<tr>
|
|
<td>cell</td>
|
|
<td>cell</td>
|
|
</tr>
|
|
</table>
|
|
<table id="table4" style="display:none">
|
|
</table>
|
|
<table id="table5" style="display:none">
|
|
</table>
|
|
<table id="table6" style="display:none">
|
|
<caption id="caption6">caption 6</caption>
|
|
<tr>
|
|
<td>cell</td>
|
|
<td>cell</td>
|
|
</tr>
|
|
</table>
|
|
<table id="table7" style="display:none">
|
|
<caption id="caption7">caption 7</caption>
|
|
<tbody id="tbody7">
|
|
<tr>
|
|
<td>cell</td>
|
|
<td>cell</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
<table id="table10" style="display:none">
|
|
<tbody>
|
|
<tr>
|
|
<td>cell</td>
|
|
<td>cell</td>
|
|
</tr>
|
|
</tbody>
|
|
<caption>caption 10</caption>
|
|
</table>
|
|
<table id="table11" style="display:none">
|
|
<caption id="caption11">caption 11</caption>
|
|
</table>
|
|
<table id="table12" style="display:none">
|
|
<caption>caption 1</caption>
|
|
<caption>caption 2</caption>
|
|
</table>
|
|
<table id="table13" style="display:none">
|
|
</table>
|
|
<table id="table14" style="display:none">
|
|
<tbody>
|
|
<tr>
|
|
<td>cell</td>
|
|
<td>cell</td>
|
|
</tr>
|
|
</tbody>
|
|
<caption id="caption14">caption 14</caption>
|
|
</table>
|
|
<script>
|
|
test(function () {
|
|
var table0 = document.getElementById('table0');
|
|
var caption = document.createElementNS("foo", "caption");
|
|
table0.appendChild(caption);
|
|
var table0FirstNode = table0.firstChild;
|
|
var testCaption = table0.createCaption();
|
|
assert_not_equals(testCaption, table0FirstNode);
|
|
assert_equals(testCaption, table0.firstChild);
|
|
}, "createCaption method creates new caption if existing caption is not in html namespace")
|
|
|
|
test(function () {
|
|
var table1 = document.getElementById('table1');
|
|
var testCaption = table1.createCaption();
|
|
var table1FirstCaption = table1.caption;
|
|
assert_equals(testCaption, table1FirstCaption);
|
|
}, "createCaption method returns the first caption element child of the table")
|
|
|
|
test(function () {
|
|
var table2 = document.getElementById('table2');
|
|
var test2Caption = table2.createCaption();
|
|
var table2FirstNode = table2.firstChild;
|
|
assert_true(test2Caption instanceof HTMLTableCaptionElement);
|
|
assert_equals(table2FirstNode, test2Caption);
|
|
}, "createCaption method creates a new caption and inserts it as the first node of the table element")
|
|
|
|
test(function () {
|
|
var table = document.createElement('table');
|
|
assert_equals(table.createCaption(), table.createCaption());
|
|
}, "createCaption will not create new caption if one exists")
|
|
|
|
test(function () {
|
|
var table = document.createElementNS("http://www.w3.org/1999/xhtml", "foo:table")
|
|
var caption = table.createCaption();
|
|
assert_equals(caption.prefix, null);
|
|
}, "createCaption will not copy table's prefix")
|
|
|
|
test(function () {
|
|
var table3 = document.getElementById('table3');
|
|
assert_equals(table3.caption.textContent, "caption 3");
|
|
table3.deleteCaption();
|
|
assert_equals(table3.caption, null);
|
|
}, "deleteCaption method removes the first caption element child of the table element")
|
|
|
|
test(function () {
|
|
var table4 = document.getElementById('table4');
|
|
var caption = document.createElementNS("foo", "caption");
|
|
table4.appendChild(caption);
|
|
table4.deleteCaption();
|
|
assert_equals(caption.parentNode, table4);
|
|
}, "deleteCaption method not remove caption that is not in html namespace")
|
|
|
|
test(function() {
|
|
var table5 = document.getElementById('table5');
|
|
var caption = document.createElement('caption');
|
|
caption.appendChild(table5)
|
|
|
|
// Node cannot be inserted at the specified point in the hierarchy
|
|
assert_throws("HierarchyRequestError", function() {
|
|
table5.caption = caption;
|
|
});
|
|
|
|
assert_not_equals(table5.caption, caption);
|
|
}, "Setting caption rethrows exception");
|
|
|
|
test(function() {
|
|
var table6 = document.getElementById("table6");
|
|
var caption = document.getElementById("caption6");
|
|
assert_equals(table6.caption, caption);
|
|
|
|
var newCaption = document.createElement("caption");
|
|
table6.caption = newCaption;
|
|
assert_equals(newCaption.parentNode, table6);
|
|
assert_equals(table6.firstChild, newCaption);
|
|
assert_equals(table6.caption, newCaption);
|
|
}, "Assigning a caption to table.caption")
|
|
|
|
test(function() {
|
|
var table7 = document.getElementById("table7");
|
|
var caption = document.getElementById("caption7");
|
|
assert_equals(table7.caption, caption);
|
|
|
|
table7.caption = null;
|
|
assert_equals(caption.parentNode, null);
|
|
assert_equals(table7.firstElementChild, document.getElementById("tbody7"));
|
|
assert_equals(table7.caption, null);
|
|
}, "Assigning null to table.caption")
|
|
|
|
test(function() {
|
|
var table8 = document.createElement("table");
|
|
var caption = document.createElement("captİon");
|
|
assert_throws(new TypeError(), function() {
|
|
table8.caption = caption;
|
|
});
|
|
}, "Assigning a non-caption to table.caption")
|
|
|
|
test(function() {
|
|
var table9 = document.createElement("table");
|
|
var caption = document.createElementNS("http://www.example.com", "caption");
|
|
assert_throws(new TypeError(), function() {
|
|
table9.caption = caption;
|
|
});
|
|
}, "Assigning a foreign caption to table.caption")
|
|
|
|
test(function() {
|
|
var table = document.createElement("table");
|
|
var caption = document.createElement("caption");
|
|
caption.innerHTML = "new caption";
|
|
table.caption = caption;
|
|
|
|
assert_equals(caption.parentNode, table);
|
|
assert_equals(table.firstChild, caption);
|
|
assert_equals(table.caption.innerHTML, "new caption");
|
|
}, "Set table.caption when the table doesn't already have a caption")
|
|
|
|
test(function() {
|
|
var table10 = document.getElementById("table10");
|
|
var caption = document.createElement("caption");
|
|
caption.innerHTML = "new caption";
|
|
table10.caption = caption;
|
|
|
|
assert_equals(caption.parentNode, table10);
|
|
assert_equals(table10.firstChild, caption);
|
|
assert_equals(table10.caption.innerHTML, "new caption");
|
|
|
|
var captions = table10.getElementsByTagName('caption');
|
|
assert_equals(captions.length, 1);
|
|
}, "Set table.caption when the table has a caption child but with other siblings before it")
|
|
|
|
test(function() {
|
|
var table11 = document.getElementById("table11");
|
|
var caption = document.createElement("caption");
|
|
caption.innerHTML = "new caption";
|
|
table11.caption = caption;
|
|
|
|
assert_equals(caption.parentNode, table11);
|
|
assert_equals(table11.firstChild, caption);
|
|
assert_equals(table11.caption.innerHTML, "new caption");
|
|
|
|
var captions = table11.getElementsByTagName('caption');
|
|
assert_equals(captions.length, 1);
|
|
}, "Set table.caption when the table has a caption descendant")
|
|
|
|
test(function() {
|
|
var table12 = document.getElementById("table12");
|
|
var caption = document.createElement("caption");
|
|
caption.innerHTML = "new caption";
|
|
table12.caption = caption;
|
|
|
|
assert_equals(caption.parentNode, table12);
|
|
assert_equals(table12.firstChild, caption);
|
|
assert_equals(table12.caption.innerHTML, "new caption");
|
|
|
|
var captions = table12.getElementsByTagName('caption');
|
|
assert_equals(captions.length, 2);
|
|
assert_equals(captions[0].innerHTML, "new caption");
|
|
assert_equals(captions[1].innerHTML, "caption 2");
|
|
}, "Set table.caption when the table has two caption children")
|
|
|
|
promise_test(async t => {
|
|
var table13 = document.getElementById("table13");
|
|
var iframe = document.createElement("iframe");
|
|
iframe.srcdoc = '<table><caption id="caption13">caption 13</caption></table>';
|
|
document.body.appendChild(iframe);
|
|
|
|
var iframeWatcher = new EventWatcher(t, iframe, "load");
|
|
await iframeWatcher.wait_for("load");
|
|
var caption = iframe.contentWindow.document.getElementById("caption13");
|
|
table13.caption = caption;
|
|
|
|
assert_equals(caption.parentNode, table13);
|
|
assert_equals(table13.firstChild, caption);
|
|
assert_equals(table13.caption.innerHTML, "caption 13");
|
|
|
|
var captions = table13.getElementsByTagName('caption');
|
|
assert_equals(captions.length, 1);
|
|
}, "Assigning a caption has a different owner document to table.caption")
|
|
|
|
test(function() {
|
|
var table14 = document.getElementById("table14");
|
|
var caption = document.getElementById("caption14");
|
|
table14.caption = caption;
|
|
|
|
assert_equals(caption.parentNode, table14);
|
|
assert_equals(table14.firstChild, caption);
|
|
|
|
var captions = table14.getElementsByTagName('caption');
|
|
assert_equals(captions.length, 1);
|
|
}, "Assigning the caption already in the table to table.caption")
|
|
</script>
|
|
</body>
|
|
</html>
|