blob: 4b8a6d8a541d96dc2530e3aa2fd02d925b22f003 [file] [log] [blame]
<!DOCTYPE html>
<html>
<head>
<title>Shadow DOM: Extensions to NonDocumentTypeChildNode interface</title>
<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org">
<meta name="assert" content="NonDocumentTypeChildNode interface must have assignedSlot attribute">
<link rel="help" href="https://w3c.github.io/webcomponents/spec/shadow/#the-slot-element">
<script src="../../resources/testharness.js"></script>
<script src="../../resources/testharnessreport.js"></script>
<link rel='stylesheet' href='../../resources/testharness.css'>
</head>
<body>
<div id="log"></div>
<script>
test(function () {
assert_true('assignedSlot' in Element.prototype, 'assignedSlot must be defined on Element.prototype');
assert_true('assignedSlot' in document.createElement('div'), 'assignedSlot must be defined on a div element');
assert_true('assignedSlot' in CharacterData.prototype, 'assignedSlot must be defined on CharacterData.prototype');
assert_true('assignedSlot' in document.createTextNode(''), 'assignedSlot must be defined on a text node');
assert_true('assignedSlot' in document.createComment(''), 'assignedSlot must be defined on a comment node');
}, 'assignedSlot attribute must be defined on NonDocumentTypeChildNode interface');
test(function () {
assert_equals(document.createElement('div').assignedSlot, null, 'assignedSlot must be null when the element is not in any tree');
var shadowHost = document.createElement('div');
var shadowRoot = shadowHost.attachShadow({mode: 'open'});
var childElement = document.createElement('b');
shadowHost.appendChild(childElement);
assert_equals(childElement.assignedSlot, null, 'assignedSlot on an element must be null when a node is not assigned of any slot');
var childTextNode = document.createTextNode('');
shadowHost.appendChild(childTextNode);
assert_equals(childTextNode.assignedSlot, null, 'assignedSlot on a text node must be null when a node is not assigned of any slot');
var commentNode = document.createComment('');
shadowHost.appendChild(commentNode);
assert_equals(commentNode.assignedSlot, null, 'assignedSlot on a comment node must be null when a node is not assigned of any slot');
var slot = document.createElement('slot');
slot.name = 'foo';
shadowRoot.appendChild(slot);
assert_equals(childElement.assignedSlot, null, 'assignedSlot on an element must be null when a node does not match any slot');
assert_equals(childTextNode.assignedSlot, null, 'assignedSlot on a text node must be null when a node does not match any slot');
assert_equals(commentNode.assignedSlot, null, 'assignedSlot on a comment must be null when a node does not match any slot');
}, 'assignedSlot must return null when the node does not have an assigned node');
test(function () {
var shadowHost = document.createElement('div');
var childElement = document.createElement('b');
shadowHost.appendChild(childElement);
var childTextNode = document.createTextNode('');
shadowHost.appendChild(childTextNode);
var commentNode = document.createTextNode('');
shadowHost.appendChild(commentNode);
var shadowRoot = shadowHost.attachShadow({mode: 'open'});
var slot = document.createElement('slot');
shadowRoot.appendChild(slot);
assert_equals(childElement.assignedSlot, slot, 'assignedSlot on an element must return the assigned default slot element');
assert_equals(childTextNode.assignedSlot, slot, 'assignedSlot on a text node must return the assigned default slot element');
assert_equals(commentNode.assignedSlot, slot, 'assignedSlot on a comment node must return the assigned default slot element');
slot.name = 'foo';
assert_equals(childElement.assignedSlot, null, 'assignedSlot on an element must null when the element is unassigned from a slot element');
assert_equals(childTextNode.assignedSlot, null, 'assignedSlot on a text node must null when the node is unassigned from a slot element');
assert_equals(commentNode.assignedSlot, null, 'assignedSlot on a text node must null when the node is unassigned from a slot element');
childElement.slot = 'foo';
assert_equals(childElement.assignedSlot, slot, 'assignedSlot on an element must return the re-assigned slot element');
slot.name = null;
assert_equals(childTextNode.assignedSlot, slot, 'assignedSlot on a text node must return the re-assigned slot element');
assert_equals(commentNode.assignedSlot, slot, 'assignedSlot on a comment node must return the re-assigned slot element');
}, 'assignedSlot must return the assigned slot');
test(function () {
var shadowHost = document.createElement('div');
var childElement = document.createElement('b');
shadowHost.appendChild(childElement);
var childTextNode = document.createTextNode('');
shadowHost.appendChild(childTextNode);
var commentNode = document.createTextNode('');
shadowHost.appendChild(commentNode);
var shadowRoot = shadowHost.attachShadow({mode: 'closed'});
var slot = document.createElement('slot');
shadowRoot.appendChild(slot);
assert_equals(childElement.assignedSlot, null, 'assignedSlot on an element must return the assigned slot element.');
assert_equals(childTextNode.assignedSlot, null, 'assignedSlot on a text node must return the assigned slot element.');
assert_equals(commentNode.assignedSlot, null, 'assignedSlot on a comment node must return the assigned slot element.');
}, 'assignedSlot must return null when the assigned slot element is inside a closed shadow tree');
</script>
</body>
</html>