Anforderungen  |   Konzepte  |   Entwurf  |   Entwicklung  |   Qualitätssicherung  |   Lebenszyklus  |   Steuerung
 
 
 
 


Quelle  test_bug522601-shadow.xhtml   Sprache: unbekannt

 
<html xmlns="http://www.w3.org/1999/xhtml">
<!--
https://bugzilla.mozilla.org/show_bug.cgi?id=522601
-->
<head>
  <title>Test for Bug 522601</title>
  <script src="/tests/SimpleTest/SimpleTest.js"></script>
  <link rel="stylesheet" type="text/css" href="/tests/SimpleTest/test.css"/>
</head>
<body>
<template id="template"><div><slot/></div><slot name="foo"/></template>
<a target="_blank" href="https://bugzilla.mozilla.org/show_bug.cgi?id=522601">Mozilla Bug 522601</a>
<custom-element id="display">
  <span slot="foo" id="s">This is some text</span>
  More text
  <b id="b">Even more <i id="i1">Italic</i>text<i id="i2">And more italic</i></b></custom-element>
<div id="content" style="display: none">
</div>
<div id="subdoc">
  <iframe id="frame1" src="file_bug522601.html">frame text</iframe>
</div>
<pre id="test">
<script>
<![CDATA[

/** Test for Bug 522601 **/
SimpleTest.waitForExplicitFinish();

customElements.define("custom-element", class extends HTMLElement {
  constructor() {
    super();
    const template = document.getElementById("template");
    const shadowRoot = this.attachShadow({mode: "open"})
      .appendChild(template.content.cloneNode(true));
  }
});

function testFunc(walker, func, expectedNode, str) {
  var oldCurrent = SpecialPowers.unwrap(walker.currentNode);
  var newNode = SpecialPowers.unwrap(walker[func]());
  is(newNode, expectedNode, "Unexpected node after " + str);
  is(SpecialPowers.unwrap(walker.currentNode), newNode ? newNode : oldCurrent,
     "Unexpected current node after " + str);
}

addLoadEvent(function() {
 var walkerSubDocument =
    SpecialPowers.Cc["@mozilla.org/inspector/deep-tree-walker;1"]
              .createInstance(SpecialPowers.Ci.inIDeepTreeWalker);
  walkerSubDocument.showAnonymousContent = false;
  walkerSubDocument.showSubDocuments = true;
  walkerSubDocument.init($("frame1"));

  is(SpecialPowers.unwrap(walkerSubDocument.currentNode), $("frame1"), "Unexpected sub-doc root");
  testFunc(walkerSubDocument, "firstChild", $("frame1").contentDocument.doctype,
           "step to sub documents doctype");
  testFunc(walkerSubDocument, "nextSibling", $("frame1").contentDocument.documentElement,
           "step to sub documents documentElement");

  walkerSubDocument =
    SpecialPowers.Cc["@mozilla.org/inspector/deep-tree-walker;1"]
              .createInstance(SpecialPowers.Ci.inIDeepTreeWalker);
  walkerSubDocument.showAnonymousContent = false;
  walkerSubDocument.showSubDocuments = true;
  walkerSubDocument.showDocumentsAsNodes = true;
  walkerSubDocument.init($("frame1"));

  is(SpecialPowers.unwrap(walkerSubDocument.currentNode), $("frame1"), "Unexpected sub-doc root");
  testFunc(walkerSubDocument, "firstChild", $("frame1").contentDocument,
           "step to sub document");
  testFunc(walkerSubDocument, "firstChild", $("frame1").contentDocument.doctype,
           "step to sub documents doctype");
  testFunc(walkerSubDocument, "nextSibling", $("frame1").contentDocument.documentElement,
           "step to sub documents documentElement");

  walkerSubDocument.currentNode = $("frame1").contentDocument;
  is(SpecialPowers.unwrap(walkerSubDocument.currentNode), $("frame1").contentDocument,
     "setting currentNode to sub document");
  testFunc(walkerSubDocument, "nextSibling", null,
           "nextSibling for sub document is null");

  var walkerFrameChild =
    SpecialPowers.Cc["@mozilla.org/inspector/deep-tree-walker;1"]
              .createInstance(SpecialPowers.Ci.inIDeepTreeWalker);
  walkerFrameChild.showAnonymousContent = false;
  walkerFrameChild.showSubDocuments = false;
  walkerFrameChild.init($("frame1"));

  is(SpecialPowers.unwrap(walkerFrameChild.currentNode), $("frame1"), "Unexpected sub-doc root");
  testFunc(walkerFrameChild, "firstChild", $("frame1").firstChild,
           "step to frames child");

  var walkerNonAnon =
    SpecialPowers.Cc["@mozilla.org/inspector/deep-tree-walker;1"]
              .createInstance(SpecialPowers.Ci.inIDeepTreeWalker);
  walkerNonAnon.init($("display"));
  walkerNonAnon.showAnonymousContent = false;

  is(SpecialPowers.unwrap(walkerNonAnon.currentNode), $("display"), "Unexpected non-anon root");
  testFunc(walkerNonAnon, "nextNode", $("s").previousSibling,
           "step to some text");
  testFunc(walkerNonAnon, "nextNode", $("s"), "step to span");
  testFunc(walkerNonAnon, "nextNode", $("s").firstChild, "step to span text");
  testFunc(walkerNonAnon, "nextNode", $("s").nextSibling, "step to more text");
  testFunc(walkerNonAnon, "nextNode", $("b"), "step to bold");
  testFunc(walkerNonAnon, "nextNode", $("b").firstChild, "step to bold text");
  testFunc(walkerNonAnon, "nextNode", $("i1"), "step to first italic");
  testFunc(walkerNonAnon, "nextNode", $("i1").firstChild,
           "step to first italic text");
  testFunc(walkerNonAnon, "nextNode", $("i1").nextSibling,
           "step to more bold text");
  testFunc(walkerNonAnon, "nextNode", $("i2"), "step to second italic");
  testFunc(walkerNonAnon, "nextNode", $("i2").firstChild,
           "step to second italic text");
  testFunc(walkerNonAnon, "nextNode", null, "step past end");
  testFunc(walkerNonAnon, "parentNode", $("i2"), "step up to second italic");
  testFunc(walkerNonAnon, "parentNode", $("b"), "step up to bold");
  testFunc(walkerNonAnon, "nextNode", $("b").firstChild, "step to bold text again");
  testFunc(walkerNonAnon, "parentNode", $("b"), "step up to bold again");
  testFunc(walkerNonAnon, "parentNode", $("display"), "step up to display");
  testFunc(walkerNonAnon, "parentNode", null, "step up past root");
  testFunc(walkerNonAnon, "firstChild", $("s").previousSibling,
           "step firstChild to display first child");
  testFunc(walkerNonAnon, "nextSibling", $("s"),
           "step nextSibling to span");
  testFunc(walkerNonAnon, "nextSibling", $("s").nextSibling,
           "step nextSibling to more text");
  testFunc(walkerNonAnon, "nextSibling", $("b"), "step nextSibling to bold");
  testFunc(walkerNonAnon, "nextSibling", null, "step nextSibling past end");
  testFunc(walkerNonAnon, "previousSibling", $("s").nextSibling,
           "step previousSibling to more text");
  testFunc(walkerNonAnon, "previousSibling", $("s"),
           "step previousSibling to span");
  testFunc(walkerNonAnon, "previousSibling", $("s").previousSibling,
           "step previousSibling to display first child");
  testFunc(walkerNonAnon, "previousSibling", null,
           "step previousSibling past end");

  // Move the walker over to the end
  while (walkerNonAnon.nextNode()) { /* do nothing */ }

  is(SpecialPowers.unwrap(walkerNonAnon.currentNode), $("i2").firstChild, "unexpected last node");
  testFunc(walkerNonAnon, "previousNode", $("i2"), "step back to second italic");
  testFunc(walkerNonAnon, "previousNode", $("i1").nextSibling,
           "step back to more bold text");
  testFunc(walkerNonAnon, "previousNode", $("i1").firstChild,
           "step back to first italic text");
  testFunc(walkerNonAnon, "previousNode", $("i1"), "step back to first italic");
  testFunc(walkerNonAnon, "previousNode", $("b").firstChild,
           "step back to bold text");
  testFunc(walkerNonAnon, "previousNode", $("b"), "step back to bold");
  testFunc(walkerNonAnon, "previousNode", $("s").nextSibling, "step back to more text");
  testFunc(walkerNonAnon, "previousNode", $("s").firstChild, "step back to span text");
  testFunc(walkerNonAnon, "previousNode", $("s"), "step back to span");
  testFunc(walkerNonAnon, "previousNode", $("s").previousSibling,
           "step back to some text");
  testFunc(walkerNonAnon, "previousNode", $("display"),
           "step back to root");
  testFunc(walkerNonAnon, "previousNode", null,
           "step back past root");

  walkerNonAnon.currentNode =  $("s");
  is(SpecialPowers.unwrap(walkerNonAnon.currentNode), SpecialPowers.unwrap($("s")), 
     "Setting currentNode to span");

  var anonDiv = $("display").shadowRoot.children[0];

  try {
    walkerNonAnon.currentNode = anonDiv;
    // See bug 1586916.
    todo(false, "Setting current node to a node that is otherwise unreachable," +
              " with the current visibility settings should throw");
  } catch(e) {
    ok(e.toString().indexOf("NS_ERROR_ILLEGAL_VALUE") > -1, "Setting current node to an anon node should throw" +
       " NS_ERROR_ILLEGAL_VALUE if showAnonymousContent is set to false");
    is(SpecialPowers.unwrap(walkerNonAnon.currentNode), SpecialPowers.unwrap($("s")), 
       "An unsuccessfull set currentNode should leave behind the old state");
    testFunc(walkerNonAnon, "nextSibling", $("s").nextSibling, "nextSibling after set currentNode");
  }

  var slot = $("display").shadowRoot.querySelectorAll("slot")[0];
  var namedSlot = $("display").shadowRoot.querySelectorAll("slot")[1];

  var walkerAnon =
    SpecialPowers.Cc["@mozilla.org/inspector/deep-tree-walker;1"]
              .createInstance(SpecialPowers.Ci.inIDeepTreeWalker);
  walkerAnon.showAnonymousContent = true;
  walkerAnon.init($("display"));

  is(SpecialPowers.unwrap(walkerAnon.currentNode), $("display"), "Unexpected anon root");
  testFunc(walkerAnon, "nextNode", $("display").shadowRoot,
           "step to shadow root");
  testFunc(walkerAnon, "nextNode", anonDiv,
           "step to anonymous div");
  testFunc(walkerAnon, "nextNode", slot, "step into slot");
  testFunc(walkerAnon, "nextNode", namedSlot, "step into named slot");
  testFunc(walkerAnon, "nextNode", $("s").previousSibling, "step to light dom text (out of shadow tree)");
  testFunc(walkerAnon, "nextNode", $("s"), "step to span (anon)");
  testFunc(walkerAnon, "nextNode", $("s").firstChild, "step to span text (anon)");
  testFunc(walkerAnon, "nextNode", $("s").nextSibling, "step to more text (anon)");
  testFunc(walkerAnon, "nextNode", $("b"), "step to bold (anon)");
  testFunc(walkerAnon, "nextNode", $("b").firstChild, "step to bold text (anon)");
  testFunc(walkerAnon, "nextNode", $("i1"), "step to first italic (anon)");
  testFunc(walkerAnon, "nextNode", $("i1").firstChild,
           "step to first italic text (anon)");
  testFunc(walkerAnon, "nextNode", $("i1").nextSibling,
           "step to more bold text (anon)");
  testFunc(walkerAnon, "nextNode", $("i2"), "step to second italic (anon)");
  testFunc(walkerAnon, "nextNode", $("i2").firstChild,
           "step to second italic text (anon)");
  testFunc(walkerAnon, "nextNode", null, "step past end (anon)");
  testFunc(walkerAnon, "parentNode", $("i2"), "step up to italic (anon)");
  testFunc(walkerAnon, "parentNode", $("b"), "step up to bold (anon)");
  testFunc(walkerAnon, "parentNode", $("display"), "step up to display (anon)");
  testFunc(walkerAnon, "nextNode", $("display").shadowRoot, "step to shadow root again");
  testFunc(walkerAnon, "parentNode", $("display"),
           "step up to display again (anon)")
  testFunc(walkerAnon, "parentNode", null, "step up past root (anon)");
  testFunc(walkerAnon, "firstChild", $("display").shadowRoot,
           "step firstChild to display first child (anon)");
  testFunc(walkerAnon, "nextSibling", $("s").previousSibling,
           "step nextSibling text (anon)");
  testFunc(walkerAnon, "nextSibling", $("s"),
           "step nextSibling span (anon)");
  testFunc(walkerAnon, "nextSibling", $("s").nextSibling,
           "step nextSibling more text (anon)");
  testFunc(walkerAnon, "nextSibling", $("b"),
           "step nextSibling bold (anon)");
  testFunc(walkerAnon, "nextSibling", null, "step nextSibling past end (anon)");
  testFunc(walkerAnon, "previousSibling", $("s").nextSibling,
           "step previousSibling to more text");
  testFunc(walkerAnon, "previousSibling", $("s"),
           "step previousSibling to span");
  testFunc(walkerAnon, "previousSibling", $("s").previousSibling,
           "step previousSibling to prev text");
  testFunc(walkerAnon, "previousSibling", $("display").shadowRoot,
           "step shadowRoot");
  testFunc(walkerAnon, "previousSibling", null, "step previousSibling past end (anon)");

  // Move the walker over to the end
  while (walkerAnon.nextNode()) { /* do nothing */ }

  testFunc(walkerAnon, "previousNode", $("i2"), "step back to second italic (anon)");
  testFunc(walkerAnon, "previousNode", $("i1").nextSibling,
           "step back to more bold text (anon)");
  testFunc(walkerAnon, "previousNode", $("i1").firstChild,
           "step back to first italic text (anon)");
  testFunc(walkerAnon, "previousNode", $("i1"), "step back to first italic (anon)");
  testFunc(walkerAnon, "previousNode", $("b").firstChild, "step back to bold text (anon)");
  testFunc(walkerAnon, "previousNode", $("b"), "step back to bold (anon)");
  testFunc(walkerAnon, "previousNode", $("s").nextSibling, "step back to more text (anon)");
  testFunc(walkerAnon, "previousNode", $("s").firstChild,
           "step back to span text (anon)");
  testFunc(walkerAnon, "previousNode", $("s"),
           "step back to span (anon)");
  testFunc(walkerAnon, "previousNode", $("s").previousSibling,
           "step back to some text (anon)");
  testFunc(walkerAnon, "previousNode", namedSlot, "step back to named slot");
  testFunc(walkerAnon, "previousNode", slot, "step back to slot");
  testFunc(walkerAnon, "previousNode", anonDiv,
           "step back to anonymous div");
  testFunc(walkerAnon, "previousNode", $("display").shadowRoot, "step back to shadow root (anon)");
  testFunc(walkerAnon, "previousNode", $("display"), "step back to root (anon)");
  testFunc(walkerAnon, "previousNode", null, "step back past root (anon)");

  SimpleTest.finish();
});

]]>
</script>
</pre>
</body>
</html>

[ Dauer der Verarbeitung: 0.21 Sekunden  (vorverarbeitet)  ]

                                                                                                                                                                                                                                                                                                                                                                                                     


Neuigkeiten

     Aktuelles
     Motto des Tages

Software

     Produkte
     Quellcodebibliothek

Aktivitäten

     Artikel über Sicherheit
     Anleitung zur Aktivierung von SSL

Muße

     Gedichte
     Musik
     Bilder

Jenseits des Üblichen ....

Besucherstatistik

Besucherstatistik

Monitoring

Montastic status badge