| <!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> |