| <!DOCTYPE html> |
| <html> |
| <head> |
| <style> |
| /* relative positioning ensures underlying RenderLayer */ |
| .container { |
| position: relative; |
| } |
| |
| .span { |
| display: boxed-inline; |
| margin: 2px; |
| border: solid; |
| } |
| </style> |
| <script src="../resources/shadow-test-driver.js"></script> |
| <script> |
| function testRemoveContent(callIfDone) { |
| var root = document.createElement('div'); |
| |
| // Create light tree. |
| root.innerHTML = "<span>LIGHT</span>"; |
| |
| // Create shadow tree. |
| var content = createContentWithSelect('span', 'FALLBACK'); |
| var sr = internals.ensureShadowRoot(root); |
| sr.appendChild(createSpanWithText("BEFORE")); |
| sr.appendChild(content); |
| sr.appendChild(createSpanWithText("AFTER")); |
| |
| document.getElementById('actual-container').appendChild(root); |
| |
| var f = (function(root, content, callIfDone) { |
| return function() { |
| content.parentNode.removeChild(content); |
| document.getElementById('expect-container').innerHTML = "<div><span>BEFORE</span><span>AFTER</span></div>"; |
| callIfDone(); |
| }; |
| })(root, content, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| function testRemoveContentToRecalc1(callIfDone) { |
| var root = document.createElement('div'); |
| |
| // Create light tree. |
| root.innerHTML = "<span class='c1'>LIGHT 1</span><span>LIGHT 2</span>"; |
| |
| // Create shadow tree. |
| var content1 = createContentWithSelect('.c1', 'FALLBACK'); |
| var content2 = createContentWithSelect('span', 'FALLBACK'); |
| var sr = internals.ensureShadowRoot(root); |
| sr.appendChild(createSpanWithText("BEFORE")); |
| sr.appendChild(content1); |
| sr.appendChild(createSpanWithText("MID")); |
| sr.appendChild(content2); |
| sr.appendChild(createSpanWithText("AFTER")); |
| |
| document.getElementById('actual-container').appendChild(root); |
| |
| var f = (function(root, content1, callIfDone) { |
| return function() { |
| content1.parentNode.removeChild(content1); |
| document.getElementById('expect-container').innerHTML = "<div><span>BEFORE</span><span>MID</span><span>LIGHT 1</span><span>LIGHT 2</span><span>AFTER</span></div>"; |
| callIfDone(); |
| }; |
| })(root, content1, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| function testRemoveContentToRecalc2(callIfDone) { |
| var root = document.createElement('div'); |
| |
| // Create light tree. |
| root.innerHTML = "<span>LIGHT 1</span><span class='c1'>LIGHT 2</span>"; |
| |
| // Create shadow tree. |
| var content1 = createContentWithSelect('.c1', 'FALLBACK'); |
| var content2 = createContentWithSelect('span', 'FALLBACK'); |
| var sr = internals.ensureShadowRoot(root); |
| sr.appendChild(createSpanWithText("BEFORE")); |
| sr.appendChild(content1); |
| sr.appendChild(createSpanWithText("MID")); |
| sr.appendChild(content2); |
| sr.appendChild(createSpanWithText("AFTER")); |
| |
| document.getElementById('actual-container').appendChild(root); |
| |
| var f = (function(root, content1, callIfDone) { |
| return function() { |
| content1.parentNode.removeChild(content1); |
| document.getElementById('expect-container').innerHTML = "<div><span>BEFORE</span><span>MID</span><span>LIGHT 1</span><span>LIGHT 2</span><span>AFTER</span></div>"; |
| callIfDone(); |
| }; |
| })(root, content1, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| function testRemoveContentAndRemoveLightChildren(callIfDone) { |
| var root = document.createElement('div'); |
| |
| // Create light tree. |
| root.innerHTML = "<span>LIGHT</span>"; |
| |
| // Create shadow tree. |
| var content = createContentWithSelect('span'); |
| var sr = internals.ensureShadowRoot(root); |
| sr.appendChild(createSpanWithText("BEFORE")); |
| sr.appendChild(content); |
| sr.appendChild(createSpanWithText("AFTER")); |
| |
| document.getElementById('actual-container').appendChild(root); |
| |
| var f = (function(root, content, callIfDone) { |
| return function() { |
| content.parentNode.removeChild(content); |
| removeAllChildren(root); |
| document.getElementById('expect-container').innerHTML = "<div><span>BEFORE</span><span>AFTER</span></div>"; |
| callIfDone(); |
| }; |
| })(root, content, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| function testAppendContent1(callIfDone) { |
| var root = document.createElement('div'); |
| |
| // Create light tree. |
| root.innerHTML = "<span>LIGHT</span>"; |
| |
| // Create shadow tree. |
| var sr = internals.ensureShadowRoot(root); |
| sr.appendChild(createSpanWithText("BEFORE")); |
| sr.appendChild(createSpanWithText("AFTER")); |
| |
| document.getElementById('actual-container').appendChild(root); |
| |
| var f = (function(root, callIfDone) { |
| return function() { |
| var content = createContentWithSelect('span', 'FALLBACK'); |
| var sr = internals.ensureShadowRoot(root); |
| sr.insertBefore(content, sr.lastChild); |
| document.getElementById('expect-container').innerHTML = "<div><span>BEFORE</span><SPAN>LIGHT</span><span>AFTER</span></div>"; |
| callIfDone(); |
| }; |
| })(root, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| function testAppendContent2(callIfDone) { |
| var root = document.createElement('div'); |
| |
| // Create light tree. |
| root.innerHTML = "<span>LIGHT 1</span><span class='c2'>LIGHT 2</span>"; |
| |
| // Create shadow tree. |
| var sr = internals.ensureShadowRoot(root); |
| sr.appendChild(createSpanWithText("BEFORE")); |
| sr.appendChild(createSpanWithText("AFTER")); |
| |
| document.getElementById('actual-container').appendChild(root); |
| |
| var f = (function(root, callIfDone) { |
| return function() { |
| var content1 = createContentWithSelect('.c2', 'FALLBACK'); |
| var content2 = createContentWithSelect('span', 'FALLBACK'); |
| var sr = internals.ensureShadowRoot(root); |
| sr.insertBefore(content1, sr.lastChild); |
| sr.insertBefore(content2, sr.lastChild); |
| document.getElementById('expect-container').innerHTML = "<div><span>BEFORE</span><span>LIGHT 2</span><span>LIGHT 1</span><span>AFTER</span></div>"; |
| callIfDone(); |
| }; |
| })(root, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| function testAppendContent3(callIfDone) { |
| var root = document.createElement('div'); |
| |
| // Create light tree. |
| root.innerHTML = "<span>LIGHT 1</span><span class='c2'>LIGHT 2</span>"; |
| |
| // Create shadow tree. |
| var sr = internals.ensureShadowRoot(root); |
| var mid = createSpanWithText("MID"); |
| sr.appendChild(createSpanWithText("BEFORE")); |
| sr.appendChild(mid); |
| sr.appendChild(createContentWithSelect('.c2', 'FALLBACK')); |
| sr.appendChild(createSpanWithText("AFTER")); |
| |
| document.getElementById('actual-container').appendChild(root); |
| |
| var f = (function(root, mid, callIfDone) { |
| return function() { |
| var content = createContentWithSelect('span', 'FALLBACK'); |
| var sr = internals.ensureShadowRoot(root); |
| sr.insertBefore(content, mid); |
| document.getElementById('expect-container').innerHTML = |
| "<div><span>BEFORE</span><span>LIGHT 1</span><span>LIGHT 2</span><span>MID</span><span>FALLBACK</span><span>AFTER</span></div>"; |
| callIfDone(); |
| }; |
| })(root, mid, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| function testChangeOrderOfContent(callIfDone) { |
| var root = document.createElement('div'); |
| |
| // Create light tree. |
| root.innerHTML = "<span class='c1'>LIGHT 1</span><span>LIGHT 2</span>"; |
| |
| // Create shadow tree. |
| var sr = internals.ensureShadowRoot(root); |
| var content1 = createContentWithSelect('.c1', 'FALLBACK'); |
| var content2 = createContentWithSelect('span', 'FALLBACK'); |
| sr.appendChild(createSpanWithText("BEFORE")); |
| sr.appendChild(content1); |
| sr.appendChild(content2); |
| sr.appendChild(createSpanWithText("AFTER")); |
| |
| document.getElementById('actual-container').appendChild(root); |
| |
| var f = (function(root, content1, callIfDone) { |
| return function() { |
| var sr = internals.ensureShadowRoot(root); |
| sr.removeChild(content1); |
| sr.insertBefore(content1, sr.lastChild); |
| document.getElementById('expect-container').innerHTML = |
| "<div><span>BEFORE</span><SPAN>LIGHT 1</span><span>LIGHT 2</span><span>FALLBACK</span><span>AFTER</span></div>"; |
| callIfDone(); |
| }; |
| })(root, content1, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| function testMoveLightChildOut(callIfDone) { |
| var root = document.createElement('div'); |
| |
| // Create light tree. |
| var n1 = document.createElement('div'); |
| n1.setAttribute('id', 'n1'); |
| n1.innerHTML = "<span id='light1'>LIGHT 1</span><span>LIGHT 2</span>"; |
| var n2 = document.createElement('div'); |
| n2.setAttribute('id', 'n2'); |
| |
| root.appendChild(n1); |
| root.appendChild(n2); |
| |
| // Create shadow tree in 'n1' |
| var sr = internals.ensureShadowRoot(n1); |
| var content = createContentWithSelect('span', 'FALLBACK'); |
| sr.appendChild(createSpanWithText("BEFORE")); |
| sr.appendChild(content); |
| sr.appendChild(createSpanWithText("AFTER")); |
| |
| document.getElementById('actual-container').appendChild(root); |
| |
| var f = (function(root, n2, callIfDone) { |
| return function() { |
| var e = document.getElementById('light1'); |
| e.parentNode.removeChild(e); |
| n2.appendChild(e); |
| |
| document.getElementById('expect-container').innerHTML = |
| "<div><div><span>BEFORE</span><span>LIGHT 2</span><span>AFTER</span></div><div><span>LIGHT 1</span></div></div>" |
| callIfDone(); |
| }; |
| })(root, n2, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| function testInsertBeforeFallback(callIfDone) { |
| document.getElementById('expect-container').innerHTML = |
| "<div><span>BEFORE</span><span>HOGE</span><span>FALLBACK</span><span>AFTER</span></div>"; |
| |
| var target = document.createElement('div'); |
| document.getElementById('actual-container').appendChild(target); |
| |
| var span1 = document.createElement('span'); |
| var root = internals.ensureShadowRoot(span1); |
| root.appendChild(createContentWithText("FALLBACK")); |
| |
| target.appendChild(createSpanWithText('BEFORE')); |
| target.appendChild(span1); |
| target.appendChild(createSpanWithText('AFTER')); |
| |
| var f = (function(target, span1, callIfDone) { return function() { |
| target.insertBefore(createSpanWithText('HOGE'), span1); |
| callIfDone(); |
| };})(target, span1, callIfDone); |
| |
| setTimeout(f, 0); |
| } |
| |
| var testFuncs = [ |
| testRemoveContent, |
| testRemoveContentToRecalc1, |
| testRemoveContentToRecalc2, |
| testRemoveContentAndRemoveLightChildren, |
| testAppendContent1, |
| testAppendContent2, |
| testAppendContent3, |
| testChangeOrderOfContent, |
| testMoveLightChildOut, |
| testInsertBeforeFallback |
| ]; |
| |
| </script> |
| </head> |
| <body onload="doTest(testFuncs)"> |
| |
| <div id="actual-container" class="container"></div> |
| <div id="expect-container" class="container"></div> |
| <pre id="console"></pre> |
| |
| </body> |
| </html> |