diff options
Diffstat (limited to 'testing/web-platform/tests/shadow-dom/Slottable-mixin.html')
-rw-r--r-- | testing/web-platform/tests/shadow-dom/Slottable-mixin.html | 94 |
1 files changed, 94 insertions, 0 deletions
diff --git a/testing/web-platform/tests/shadow-dom/Slottable-mixin.html b/testing/web-platform/tests/shadow-dom/Slottable-mixin.html new file mode 100644 index 0000000000..84c7fce445 --- /dev/null +++ b/testing/web-platform/tests/shadow-dom/Slottable-mixin.html @@ -0,0 +1,94 @@ +<!DOCTYPE html> +<html> +<head> +<title>Shadow DOM: Slottable mixin</title> +<meta name="author" title="Ryosuke Niwa" href="mailto:rniwa@webkit.org"> +<meta name="assert" content="Element and Text interfaces must implement Slottable mixin"> +<link rel="help" href="https://dom.spec.whatwg.org/#slotable"> +<script src="/resources/testharness.js"></script> +<script src="/resources/testharnessreport.js"></script> +</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 Text.prototype, 'assignedSlot must be defined on Text.prototype'); + assert_true('assignedSlot' in document.createTextNode(''), 'assignedSlot must be defined on a text node'); + assert_false('assignedSlot' in document.createComment(''), 'assignedSlot must not be defined on a comment node'); + assert_false('assignedSlot' in document.createProcessingInstruction('target', 'data'), 'assignedSlot must not be defined on a processing instruction node'); + +}, 'assignedSlot attribute must be defined on Element and Text interfaces'); + +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 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'); + +}, '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 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'); + + 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'); + + childElement.slot = 'foo'; + assert_equals(childElement.assignedSlot, slot, 'assignedSlot on an element must return the re-assigned slot element'); + + slot.removeAttribute('name'); + assert_equals(childTextNode.assignedSlot, slot, 'assignedSlot on a text 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 shadowRoot = shadowHost.attachShadow({mode: 'closed'}); + var slot = document.createElement('slot'); + shadowRoot.appendChild(slot); + + assert_equals(childElement.assignedSlot, null, 'assignedSlot on an element must return null if the slot is inside a closed shadow tree.'); + assert_equals(childTextNode.assignedSlot, null, 'assignedSlot on a text node must return null if the slot is inside a closed shadow tree.'); + +}, 'assignedSlot must return null when the assigned slot element is inside a closed shadow tree'); + +</script> +</body> +</html> |