123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246 |
- <?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 type="application/javascript"
- src="chrome://mochikit/content/MochiKit/packed.js"/>
- <script type="application/javascript"
- src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/>
- <script type="application/javascript"
- 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;
- var prefix = "data:application/vnd.mozilla.xul+xml,<?xml-stylesheet href='chrome://global/skin' type='text/css'?><window " +
- "xmlns='http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul' " +
- "align='start' pack='start' style='-moz-appearance: none; margin: 0; padding: 0; border: 0; ";
- var suffix = "><resizer dir='bottomright' flex='1' width='150' height='150' style='-moz-appearance: none; margin: 0; border: 0; padding: 0;'/></window>";
- var titledpanel = "<panel noautohide='true' titlebar='normal' minwidth='120' minheight='140'/><label value='Test'/>";
- // 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",
- style: "", attrs: "",
- width: 150, height: 150 },
- { testname: "constraint min style",
- style: "min-width: 180px; min-height: 210px;", attrs: "",
- width: 180, height: 210 },
- { testname: "constraint max style",
- style: "max-width: 125px; max-height: 140px;", attrs: "",
- width: 125, height: 140 },
- { testname: "constraint min attributes",
- style: "", attrs: "minwidth='240' minheight='220'",
- width: 240, height: 220 },
- { testname: "constraint min attributes with width and height set",
- style: "", attrs: "width='190' height='220' minwidth='215' minheight='235'",
- width: 215, height: 235 },
- { testname: "constraint max attributes",
- style: "", attrs: "maxwidth='125' maxheight='95'",
- 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",
- style: "", attrs: "minwidth='210'",
- width: 210, height: 150 },
- { testname: "constraint max width attribute only",
- style: "", attrs: "maxwidth='128'",
- width: 128, height: 150 },
- { testname: "constraint max width attribute with minheight",
- style: "", attrs: "maxwidth='195' width='230' height='120' minheight='180'",
- width: 195, height: 180 },
- { testname: "constraint minwidth, minheight, maxwidth and maxheight set",
- style: "", attrs: "minwidth='120' maxwidth='480' minheight='110' maxheight='470'",
- 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.open(prefix + tests[gTestId].style + "' " + tests[gTestId].attrs + suffix, "_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.open(prefix + "'>" + titledpanel + "</window>", "_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), false);
- panel.addEventListener("popuphidden", () => done(panelwindow), false);
- }
- 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>
|