File: Slottable-mixin.html

package info (click to toggle)
firefox 143.0.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 4,617,328 kB
  • sloc: cpp: 7,478,492; javascript: 6,417,157; ansic: 3,720,058; python: 1,396,372; xml: 627,523; asm: 438,677; java: 186,156; sh: 63,477; makefile: 19,171; objc: 13,059; perl: 12,983; yacc: 4,583; cs: 3,846; pascal: 3,405; lex: 1,720; ruby: 1,003; exp: 762; php: 436; lisp: 258; awk: 247; sql: 66; sed: 53; csh: 10
file content (94 lines) | stat: -rw-r--r-- 4,613 bytes parent folder | download | duplicates (26)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
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>