OLD | NEW |
(Empty) | |
| 1 <html> |
| 2 <head> |
| 3 <script src="../../../resources/js-test.js"></script> |
| 4 </head> |
| 5 <body> |
| 6 <p>Test [un]registering a <style scoped> element from its parent</p> |
| 7 <div id="scope1"> |
| 8 <style id="global1"></style> |
| 9 <style scoped='scoped1' id="scoped1"></style> |
| 10 </div> |
| 11 <div id="scope2"> |
| 12 </div> |
| 13 |
| 14 <div id="console"></div> |
| 15 |
| 16 <script> |
| 17 if (!window.internals || !window.internals.numberOfScopedHTMLStyleChildr
en) |
| 18 debug("windows.internals.numberOfScopedHTMLStyleChildren not found!"
); |
| 19 else { |
| 20 var scope1 = document.getElementById('scope1'); |
| 21 var scope2 = document.getElementById('scope2'); |
| 22 var scope3 = document.createElement('div'); |
| 23 |
| 24 var global1 = document.getElementById('global1'); |
| 25 var scoped1 = document.getElementById('scoped1'); |
| 26 |
| 27 var global2 = document.createElement('style'); |
| 28 var scoped2 = document.createElement('style'); |
| 29 scoped2.setAttribute('scoped', 'scoped'); |
| 30 var scoped3 = document.createElement('style'); |
| 31 scoped3.scoped = true; |
| 32 |
| 33 /* NOTE: <style scoped> outside the document is NOT registered! */ |
| 34 debug("--- Initial ---"); |
| 35 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "1");
/* in tree */ |
| 36 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "0");
/* out of tree */ |
| 37 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "0");
/* out of tree */ |
| 38 |
| 39 debug("--- Attaching ---"); |
| 40 scope2.appendChild(scoped2); |
| 41 scope2.appendChild(global2); |
| 42 scope3.appendChild(scoped3); |
| 43 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "1");
/* in tree */ |
| 44 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "1");
/* in tree */ |
| 45 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "0");
/* out of tree */ |
| 46 |
| 47 debug("--- Unsetting @scoped ---"); |
| 48 scoped1.scoped = false; |
| 49 scoped2.scoped = false; |
| 50 scoped3.removeAttribute('scoped'); |
| 51 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "0");
/* in tree */ |
| 52 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "0");
/* in tree */ |
| 53 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "0");
/* out of tree */ |
| 54 |
| 55 debug("--- Re-setting @scoped ---"); |
| 56 scoped1.scoped = true; |
| 57 scoped2.setAttribute('scoped', 'scoped'); |
| 58 scoped3.setAttribute('scoped', ''); |
| 59 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "1");
/* in tree */ |
| 60 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "1");
/* in tree */ |
| 61 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "0");
/* out of tree */ |
| 62 |
| 63 debug("--- Inserting/removing scope elements from document ---"); |
| 64 document.body.insertBefore(scope3, scope2); |
| 65 document.body.removeChild(scope2); |
| 66 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "1");
/* in tree */ |
| 67 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "0");
/* out of tree */ |
| 68 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "1");
/* in tree */ |
| 69 |
| 70 debug("--- Multiple scoped style elements within single scope ---"); |
| 71 scope2.removeChild(scoped2); |
| 72 scope2.removeChild(global2); |
| 73 scope3.removeChild(scoped3); |
| 74 scope1.appendChild(scoped3); |
| 75 scope1.appendChild(scoped2); |
| 76 scope1.appendChild(global2); |
| 77 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "3");
/* in tree */ |
| 78 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "0");
/* out of tree */ |
| 79 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "0");
/* in tree */ |
| 80 |
| 81 debug("--- Removing scoping element from document ---"); |
| 82 document.body.removeChild(scope1); |
| 83 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "0");
/* out of tree */ |
| 84 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "0");
/* out of tree */ |
| 85 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "0");
/* in tree */ |
| 86 |
| 87 debug("--- Inserting scope within other scope ---"); |
| 88 document.body.insertBefore(scope2, scope3); |
| 89 scope1.removeChild(scoped2); |
| 90 scope2.appendChild(scoped2); |
| 91 scope2.appendChild(scope1); |
| 92 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "2");
/* in tree, child of scope2 */ |
| 93 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "1");
/* in tree */ |
| 94 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "0");
/* in tree */ |
| 95 |
| 96 debug("--- Cloning <style scoped> and parents ---"); |
| 97 var clonescope1deep = scope1.cloneNode(true); |
| 98 var clonescope1shallow = scope1.cloneNode(false); |
| 99 var clonescope2deep = scope2.cloneNode(true); |
| 100 var clonescope2shallow = scope2.cloneNode(false); |
| 101 var clonescoped1deep = scoped1.cloneNode(true); |
| 102 var clonescoped1shallow = scoped1.cloneNode(false); |
| 103 var clonescoped2deep = scoped2.cloneNode(true); |
| 104 var clonescoped2shallow = scoped2.cloneNode(false); |
| 105 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "2");
/* in tree, child of scope2 */ |
| 106 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "1");
/* in tree */ |
| 107 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "0");
/* in tree */ |
| 108 shouldBe("internals.numberOfScopedHTMLStyleChildren(clonescope1deep)
", "0"); /* out of tree */ |
| 109 shouldBe("internals.numberOfScopedHTMLStyleChildren(clonescope1shall
ow)", "0"); /* out of tree */ |
| 110 shouldBe("internals.numberOfScopedHTMLStyleChildren(clonescope2deep)
", "0"); /* out of tree */ |
| 111 shouldBe("internals.numberOfScopedHTMLStyleChildren(clonescope2shall
ow)", "0"); /* out of tree */ |
| 112 |
| 113 debug("--- inserting clones into single parent ---"); |
| 114 scope3.appendChild(clonescope1deep); |
| 115 scope3.appendChild(clonescope1shallow); |
| 116 scope3.appendChild(clonescope2deep); |
| 117 scope3.appendChild(clonescope2shallow); |
| 118 scope3.appendChild(clonescoped1deep); |
| 119 scope3.appendChild(clonescoped1shallow); |
| 120 scope3.appendChild(clonescoped2deep); |
| 121 scope3.appendChild(clonescoped2shallow); |
| 122 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "2");
/* in tree, child of scope2 */ |
| 123 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "1");
/* in tree */ |
| 124 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "4");
/* in tree */ |
| 125 shouldBe("internals.numberOfScopedHTMLStyleChildren(clonescope1deep)
", "2"); /* in tree */ |
| 126 shouldBe("internals.numberOfScopedHTMLStyleChildren(clonescope1shall
ow)", "0"); /* in tree */ |
| 127 shouldBe("internals.numberOfScopedHTMLStyleChildren(clonescope2deep)
", "1"); /* in tree */ |
| 128 shouldBe("internals.numberOfScopedHTMLStyleChildren(clonescope2shall
ow)", "0"); /* in tree */ |
| 129 |
| 130 debug("--- Unsetting @scoped in nested scope ---"); |
| 131 scoped1.scoped = false; |
| 132 scoped2.removeAttribute('scoped'); |
| 133 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope1)", "1");
/* in tree, child of scope2 */ |
| 134 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope2)", "0");
/* in tree */ |
| 135 shouldBe("internals.numberOfScopedHTMLStyleChildren(scope3)", "4");
/* in tree */ |
| 136 |
| 137 debug("--- DONE ---"); |
| 138 } |
| 139 var successfullyParsed = true; |
| 140 </script> |
| 141 </body> |
| 142 </html> |
OLD | NEW |