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


Quelle  test_popupreflows.xhtml   Sprache: unbekannt

 
<?xml version="1.0"?>
<?xml-stylesheet href="chrome://global/skin" type="text/css"?>
<?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?>

<window title="Popup Reflow Tests"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

  <panel id="testPanel"
         type="arrow"
         noautohide="true">
  </panel>

  <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>

<script>
<![CDATA[
let panel, anchor;

// A reflow observer - it just remembers the stack trace of all sync reflows
// done by the panel.
let observer = {
  reflows: [],
  reflow () {
    // Ignore reflows triggered by native code
    // (Reflows from native code only have an empty stack after the first frame)
    var path = (new Error().stack).split("\n").slice(1).join("");
    if (path === "") {
      return;
    }

    this.reflows.push(new Error().stack);
  },

  reflowInterruptible () {
    // We're not interested in interruptible reflows.  Why, you ask?  Because
    // we've simply cargo-culted this test from browser_tabopen_reflows.js!
  },

  QueryInterface: ChromeUtils.generateQI(["nsIReflowObserver",
                                          "nsISupportsWeakReference"])
};

// A test utility that counts the reflows caused by a test function.  If the
// count of reflows isn't what is expected, it causes a test failure and logs
// the stack trace of all seen reflows.
function countReflows(testfn, expected) {
  return new Promise(resolve => {
    observer.reflows = [];
    let docShell = panel.ownerGlobal.docShell;
    docShell.addWeakReflowObserver(observer);
    testfn().then(() => {
      docShell.removeWeakReflowObserver(observer);
      SimpleTest.is(observer.reflows.length, expected, "correct number of reflows");
      if (observer.reflows.length != expected) {
        SimpleTest.info("stack traces of reflows:\n" + observer.reflows.join("\n") + "\n");
      }
      resolve();
    });
  });
}

function openPopup() {
  return new Promise(resolve => {
    panel.addEventListener("popupshown", function popupshown() {
      resolve();
    }, {once: true});
    panel.openPopup(anchor, "before_start");
  });
}

// ********************
// The actual tests...
// We only have one atm - simply open a popup.
//
function testSimplePanel() {
  return openPopup();
}

// ********************
// The test harness...
//
SimpleTest.waitForExplicitFinish();

addEventListener("load", function() {
  anchor = document.getElementById("anchor");
  panel = document.getElementById("testPanel");

  // and off we go...
  countReflows(testSimplePanel, 0).then(SimpleTest.finish);
});
]]>
</script>
<body xmlns="http://www.w3.org/1999/xhtml">
  <p>The anchor --> <span id="anchor">v</span> <--</p>
</body>
</window>

[ Dauer der Verarbeitung: 0.2 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