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


Quelle  test_sizemode_events.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="Test for bug 715867"
  xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">

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

<body  xmlns="http://www.w3.org/1999/xhtml">
<p id="display"></p>
<div id="content" style="display: none">

</div>
<pre id="test">
</pre>
</body>

<script class="testbody">
<![CDATA[

const XUL_NS = "http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul";

let gWindow = null;

const kIsLinux = navigator.platform.includes("Lin");
const kIsMacOS = navigator.platform.includes("Mac");
// On Linux and macOS sizemode changes might be async.
const kAsyncChanges = kIsLinux || kIsMacOS;

let gSizeModeDidChange = false;
let gSizeModeDidChangeTo = 0;

function sizemodeChanged() {
  gSizeModeDidChange = true;
  gSizeModeDidChangeTo = gWindow.windowState;
}

async function expectSizeModeChange(newMode, duringActionCallback) {
  gSizeModeDidChange = false;

  let promise = null;
  if (kAsyncChanges) {
    if (newMode) {
      promise = new Promise(resolve => {
        gWindow.addEventListener("sizemodechange", function() {
          SimpleTest.executeSoon(resolve);
        }, { once: true })
      });
    } else {
      promise = new Promise(SimpleTest.executeSoon);
    }
  }

  duringActionCallback();

  if (promise) {
    await promise;
  }

  if (newMode == 0) {
    // No change should have taken place, no event should have fired.
    ok(!gSizeModeDidChange, "No sizemodechange event should have fired.");
  } else {
    // Size mode change event was expected to fire.
    ok(gSizeModeDidChange, "A sizemodechanged event should have fired.");
    is(gSizeModeDidChangeTo, newMode, "The new sizemode should have the expected value.");
    const expectedHidden = newMode == gWindow.STATE_MINIMIZED || gWindow.isFullyOccluded;
    if (gWindow.document.hidden != expectedHidden) {
      await new Promise(resolve => {
        gWindow.addEventListener("visibilitychange", resolve, { once: true });
      });
    }
    is(gWindow.document.hidden, expectedHidden, "Should be inactive if minimized or occluded.");
  }
}

function startTest() {
  openWindow();
}

function openWindow() {
  gWindow = window.browsingContext.topChromeWindow
                  .open('empty_window.xhtml', '_blank', 'chrome,screenX=50,screenY=50,width=200,height=200,resizable');
  SimpleTest.waitForFocus(runTest, gWindow);
}

async function runTest() {
  // Install event handler.
  gWindow.addEventListener("sizemodechange", sizemodeChanged);

  // Run tests.
  info("Testing minimize()");
  await expectSizeModeChange(gWindow.STATE_MINIMIZED, function () {
    gWindow.minimize();
  });

  info("Testing restore() after minimize()");
  await expectSizeModeChange(gWindow.STATE_NORMAL, function () {
    gWindow.restore();
  });

  info("Testing maximize()");
  await expectSizeModeChange(gWindow.STATE_MAXIMIZED, function () {
    gWindow.maximize();
  });

  info("Testing restore() after maximize()");
  await expectSizeModeChange(gWindow.STATE_NORMAL, function () {
    gWindow.restore();
  });

  // Normal window resizing shouldn't fire a sizemodechanged event, bug 715867.
  info("Testing resizeTo() horizontal");
  await expectSizeModeChange(0, function () {
    gWindow.resizeTo(gWindow.outerWidth + 10, gWindow.outerHeight);
  });

  info("Testing resizeTo() vertical");
  await expectSizeModeChange(0, function () {
    gWindow.resizeTo(gWindow.outerWidth, gWindow.outerHeight + 10);
  });

  // Resizing a maximized window should change to normal sizemode.
  info("maximize() in preparation for resize");
  await expectSizeModeChange(gWindow.STATE_MAXIMIZED, function () {
    gWindow.maximize();
  });

  info("Testing resizeTo() from maximized");
  await expectSizeModeChange(gWindow.STATE_NORMAL, function () {
    // MacOS treats windows close to the available screen size as maximized.
    // Shrinking the window by only 10px isn't enough to change the sizemode.
    gWindow.resizeTo(gWindow.outerWidth / 2, gWindow.outerHeight / 2);
  });

  gWindow.removeEventListener("sizemodechange", sizemodeChanged);
  gWindow.close();
  SimpleTest.finish();
}

SimpleTest.waitForExplicitFinish();
SimpleTest.waitForFocus(startTest);

]]>
</script>

</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