diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-28 14:29:10 +0000 |
commit | 2aa4a82499d4becd2284cdb482213d541b8804dd (patch) | |
tree | b80bf8bf13c3766139fbacc530efd0dd9d54394c /layout/xul/test/test_windowminmaxsize.xhtml | |
parent | Initial commit. (diff) | |
download | firefox-upstream.tar.xz firefox-upstream.zip |
Adding upstream version 86.0.1.upstream/86.0.1upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'layout/xul/test/test_windowminmaxsize.xhtml')
-rw-r--r-- | layout/xul/test/test_windowminmaxsize.xhtml | 235 |
1 files changed, 235 insertions, 0 deletions
diff --git a/layout/xul/test/test_windowminmaxsize.xhtml b/layout/xul/test/test_windowminmaxsize.xhtml new file mode 100644 index 0000000000..7d58a0e49e --- /dev/null +++ b/layout/xul/test/test_windowminmaxsize.xhtml @@ -0,0 +1,235 @@ +<?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="Window Minimum and Maximum Size Tests" onload="nextTest()" + xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> + + <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> + <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"/> + +<panel id="panel" onpopupshown="doPanelTest(this)" onpopuphidden="nextPopupTest(this)" + align="start" pack="start" style="-moz-appearance: none; margin: 0; border: 0; padding: 0;"> + <resizer id="popupresizer" dir="bottomright" flex="1" width="60" height="60" + style="-moz-appearance: none; margin: 0; border: 0; padding: 0;"/> +</panel> + +<script> +<![CDATA[ + +SimpleTest.waitForExplicitFinish(); + +var gTestId = -1; + +// width and height in the tests below specify the expected size of the window. +// note, win8 has a minimum inner window size of around 122 pixels. Don't go below this on min-width tests. +var tests = [ + { testname: "unconstrained", + src: "windowminmaxsize1.xhtml", + width: 150, height: 150 }, + { testname: "constraint min style", + src: "windowminmaxsize2.xhtml", + width: 180, height: 210 }, + { testname: "constraint max style", + src: "windowminmaxsize3.xhtml", + width: 125, height: 140 }, + { testname: "constraint min attributes", + src: "windowminmaxsize4.xhtml", + width: 240, height: 220 }, + { testname: "constraint min attributes with width and height set", + src: "windowminmaxsize5.xhtml", + width: 215, height: 235 }, + { testname: "constraint max attributes", + src: "windowminmaxsize6.xhtml", + width: 125, height: 95 }, + // this gets the inner width as <window minwidth='210'> makes the box 210 pixels wide + { testname: "constraint min width attribute only", + src: "windowminmaxsize7.xhtml", + width: 210, height: 150 }, + { testname: "constraint max width attribute only", + src: "windowminmaxsize8.xhtml", + width: 128, height: 150 }, + { testname: "constraint max width attribute with minheight", + src: "windowminmaxsize9.xhtml", + width: 195, height: 180 }, + { testname: "constraint minwidth, minheight, maxwidth and maxheight set", + src: "windowminmaxsize10.xhtml", + width: 150, height: 150, last: true } +]; + +var popupTests = [ + { testname: "popup unconstrained", + width: 60, height: 60 + }, + { testname: "popup with minimum size", + minwidth: 150, minheight: 180, + width: 150, height: 180 + }, + { testname: "popup with maximum size", + maxwidth: 50, maxheight: 45, + width: 50, height: 45, + }, + { testname: "popup with minimum and size", + minwidth: 80, minheight: 70, maxwidth: 250, maxheight: 220, + width: 80, height: 70, last: true + } +]; + +function nextTest() +{ + // Run through each of the tests above by opening a simple window with + // the attributes or style defined for that test. The comparisons will be + // done by windowOpened. gTestId holds the index into the tests array. + if (++gTestId >= tests.length) { + // Now do the popup tests + gTestId = -1; + SimpleTest.waitForFocus(function () { nextPopupTest(document.getElementById("panel")) } ); + } + else { + tests[gTestId].window = window.browsingContext.topChromeWindow.open(tests[gTestId].src, "_blank", "chrome,resizable=yes"); + SimpleTest.waitForFocus(windowOpened, tests[gTestId].window); + } +} + +function windowOpened(otherWindow) +{ + // Check the width and the width plus one due to bug 696746. + ok(otherWindow.innerWidth == tests[gTestId].width || + otherWindow.innerWidth == tests[gTestId].width + 1, + tests[gTestId].testname + " width of " + otherWindow.innerWidth + " matches " + tests[gTestId].width); + is(otherWindow.innerHeight, tests[gTestId].height, tests[gTestId].testname + " height"); + + // On the last test, try moving the resizer to a size larger than the maximum + // and smaller than the minimum. This test is only done on Mac as the other + // platforms use native resizing. + if ('last' in tests[gTestId] && (navigator.platform.indexOf("Mac") == 0)) { + var resizer = otherWindow.document.documentElement.firstChild; + synthesizeMouse(resizer, 4, 4, { type:"mousedown" }, otherWindow); + synthesizeMouse(resizer, 800, 800, { type:"mousemove" }, otherWindow); + is(otherWindow.innerWidth, 480, "Width after maximum resize"); + is(otherWindow.innerHeight, 470, "Height after maximum resize"); + + synthesizeMouse(resizer, -100, -100, { type:"mousemove" }, otherWindow); + is(otherWindow.innerWidth, 120, "Width after minimum resize"); + is(otherWindow.innerHeight, 110, "Height after minimum resize"); + + synthesizeMouse(resizer, 4, 4, { type:"mouseup" }, otherWindow); + + // Change the minimum and maximum size and try resizing the window again. + otherWindow.document.documentElement.minWidth = 140; + otherWindow.document.documentElement.minHeight = 130; + otherWindow.document.documentElement.maxWidth = 380; + otherWindow.document.documentElement.maxHeight = 360; + + synthesizeMouse(resizer, 4, 4, { type:"mousedown" }, otherWindow); + synthesizeMouse(resizer, 800, 800, { type:"mousemove" }, otherWindow); + is(otherWindow.innerWidth, 380, "Width after changed maximum resize"); + is(otherWindow.innerHeight, 360, "Height after changed maximum resize"); + + synthesizeMouse(resizer, -100, -100, { type:"mousemove" }, otherWindow); + is(otherWindow.innerWidth, 140, "Width after changed minimum resize"); + is(otherWindow.innerHeight, 130, "Height after changed minimum resize"); + + synthesizeMouse(resizer, 4, 4, { type:"mouseup" }, otherWindow); + } + + otherWindow.close(); + nextTest(); +} + +function doPanelTest(panel) +{ + var rect = panel.getBoundingClientRect(); + is(rect.width, popupTests[gTestId].width, popupTests[gTestId].testname + " width"); + is(rect.height, popupTests[gTestId].height, popupTests[gTestId].testname + " height"); + + if ('last' in popupTests[gTestId]) { + var resizer = document.getElementById("popupresizer"); + synthesizeMouse(resizer, 4, 4, { type:"mousedown" }); + synthesizeMouse(resizer, 800, 800, { type:"mousemove" }); + + rect = panel.getBoundingClientRect(); + is(rect.width, 250, "Popup width after maximum resize"); + is(rect.height, 220, "Popup height after maximum resize"); + + synthesizeMouse(resizer, -100, -100, { type:"mousemove" }); + + rect = panel.getBoundingClientRect(); + is(rect.width, 80, "Popup width after minimum resize"); + is(rect.height, 70, "Popup height after minimum resize"); + + synthesizeMouse(resizer, 4, 4, { type:"mouseup" }); + } + + panel.hidePopup(); +} + +function nextPopupTest(panel) +{ + if (++gTestId >= popupTests.length) { + // Next, check a panel that has a titlebar to ensure that it is accounted for + // properly in the size. + var titledPanelWindow = window.browsingContext.topChromeWindow.open("titledpanelwindow.xhtml", "_blank", "chrome,resizable=yes"); + SimpleTest.waitForFocus(titledPanelWindowOpened, titledPanelWindow); + } + else { + function setattr(attr) { + if (attr in popupTests[gTestId]) + panel.setAttribute(attr, popupTests[gTestId][attr]); + else + panel.removeAttribute(attr); + } + setattr("minwidth"); + setattr("minheight"); + setattr("maxwidth"); + setattr("maxheight"); + + // Remove the flexibility as it causes the resizer to not shrink down + // when resizing. + if ("last" in popupTests[gTestId]) + document.getElementById("popupresizer").removeAttribute("flex"); + + // Prevent event loop starvation as a result of popup events being + // synchronous. See bug 1131576. + SimpleTest.executeSoon(() => { + // Non-chrome shells require focus to open a popup. + SimpleTest.waitForFocus(() => { panel.openPopup() }); + }); + } +} + +function titledPanelWindowOpened(panelwindow) +{ + var panel = panelwindow.document.documentElement.firstChild; + panel.openPopup(); + panel.addEventListener("popupshown", () => doTitledPanelTest(panel)); + panel.addEventListener("popuphidden", () => done(panelwindow)); +} + +function doTitledPanelTest(panel) +{ + var rect = panel.getBoundingClientRect(); + is(rect.width, 120, "panel with titlebar width"); + is(rect.height, 140, "panel with titlebar height"); + panel.hidePopup(); +} + +function done(panelwindow) +{ + panelwindow.close(); + SimpleTest.finish(); +} + +]]> +</script> + +<body xmlns="http://www.w3.org/1999/xhtml"> +<p id="display"> +</p> +<div id="content" style="display: none"> +</div> +<pre id="test"> +</pre> +</body> + +</window> |