forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			93 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			93 lines
		
	
	
	
		
			2.6 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
| <?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 Recreate Test"
 | |
|   onload="setTimeout(init, 0)"
 | |
|   xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul">
 | |
| 
 | |
|   <script src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"></script>
 | |
|   <script src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script>
 | |
| 
 | |
| <!--
 | |
|   This is a test for bug 388361.
 | |
| 
 | |
|   This test checks that a menulist's popup is properly created and sized when
 | |
|   the popup node is removed and another added in its place.
 | |
| 
 | |
|   -->
 | |
| 
 | |
| <script>
 | |
| <![CDATA[
 | |
| SimpleTest.waitForExplicitFinish();
 | |
| 
 | |
| var gState = "before";
 | |
| 
 | |
| function init()
 | |
| {
 | |
|   document.getElementById("menulist").open = true;
 | |
| }
 | |
| 
 | |
| function isWithinHalfPixel(a, b)
 | |
| {
 | |
|   return Math.abs(a - b) <= 0.5;
 | |
| }
 | |
| 
 | |
| const ismac = navigator.platform.indexOf("Mac") == 0;
 | |
| function inputMargin(el) {
 | |
|   let cs = getComputedStyle(el);
 | |
|   // XXX Internal properties are not exposed in getComputedStyle, so we have to
 | |
|   // use margin and rely on our knowledge of them matching negative margins
 | |
|   // where appropriate.
 | |
|   // return parseFloat(cs.getPropertyValue("-moz-window-input-region-margin"));
 | |
|   return ismac ? 0 : Math.max(-parseFloat(cs.marginLeft), 0);
 | |
| }
 | |
| 
 | |
| function recreate()
 | |
| {
 | |
|   if (gState == "before") {
 | |
|     var element = document.getElementById("menulist");
 | |
|     while (element.hasChildNodes())
 | |
|       element.firstChild.remove();
 | |
|     element.appendItem("Cat");
 | |
|     gState = "after";
 | |
|     document.getElementById("menulist").open = true;
 | |
|   }
 | |
|   else {
 | |
|     SimpleTest.finish();
 | |
|   }
 | |
| }
 | |
| 
 | |
| function checkSize()
 | |
| {
 | |
|   var menulist = document.getElementById("menulist");
 | |
|   var menurect = menulist.getBoundingClientRect();
 | |
|   var popuprect = menulist.menupopup.getBoundingClientRect();
 | |
| 
 | |
|   let marginLeft = parseFloat(getComputedStyle(menulist.menupopup).marginLeft);
 | |
|   ok(isWithinHalfPixel(menurect.left + marginLeft, popuprect.left), "left position " + gState);
 | |
|   ok(isWithinHalfPixel(menurect.right + marginLeft + 2 * inputMargin(menulist.menupopup), popuprect.right), "right position " + gState);
 | |
|   ok(Math.round(popuprect.right) - Math.round(popuprect.left) > 0, "height " + gState)
 | |
|   document.getElementById("menulist").open = false;
 | |
| }
 | |
| ]]>
 | |
| </script>
 | |
| 
 | |
| <hbox align="center" pack="center">
 | |
|   <menulist id="menulist" onpopupshown="checkSize();" onpopuphidden="recreate();">
 | |
|     <menupopup position="after_start">
 | |
|       <menuitem label="Cat"/>
 | |
|     </menupopup>
 | |
|   </menulist>
 | |
| </hbox>
 | |
| 
 | |
| <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>
 | 
