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
|
<!DOCTYPE html>
<title>getHTML ordering behavior</title>
<link rel='author' href='mailto:masonf@chromium.org'>
<link rel='help' href='https://github.com/whatwg/html/pull/10139'>
<script src='/resources/testharness.js'></script>
<script src='/resources/testharnessreport.js'></script>
<div id=tests>
<div data-name="base">
<template shadowrootmode=open shadowrootdelegatesfocus shadowrootserializable shadowrootclonable>
<slot></slot>
</template>
<span class=content>Content 1</span>
<span class=content>Content 2</span>
</div>
<div data-name="template position">
<span class=content>Content 1</span>
<template shadowrootmode=open shadowrootdelegatesfocus shadowrootserializable shadowrootclonable>
<slot></slot>
</template>
<span class=content>Content 2</span>
</div>
<div data-name="attribute position">
<template shadowrootclonable shadowrootserializable shadowrootdelegatesfocus shadowrootmode=open>
<slot></slot>
</template>
<span class=content>Content 1</span>
<span class=content>Content 2</span>
</div>
<div data-name="both template and attribute position">
<span class=content>Content 1</span>
<span class=content>Content 2</span>
<template shadowrootclonable shadowrootserializable shadowrootdelegatesfocus shadowrootmode=open>
<slot></slot>
</template>
</div>
</div>
<script>
function removeWhitespaceNodes(el) {
el.shadowRoot && removeWhitespaceNodes(el.shadowRoot);
var iter = document.createNodeIterator(el, NodeFilter.SHOW_TEXT,
(node) => (node.data.replace(/\s/g,'').length === 0) ?
NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_REJECT);
let node;
while (node = iter.nextNode()) {
node.remove();
}
return el;
}
const serialize = (host) => host.getHTML({shadowRoots: [host.shadowRoot]});
const testCases = Array.from(document.querySelectorAll('#tests>div'));
assert_true(testCases.length > 1);
const baseHost = removeWhitespaceNodes(testCases[0]);
const correctSerialization = serialize(baseHost);
baseHost.remove();
for(let i=1;i<testCases.length;++i) {
const thisHost = removeWhitespaceNodes(testCases[i]);
test(t => {
assert_equals(serialize(thisHost),correctSerialization,'Serialization should be identical');
thisHost.remove();
},thisHost.dataset.name);
}
</script>
|