forked from mirrors/gecko-dev
		
	
		
			
				
	
	
		
			132 lines
		
	
	
	
		
			4.8 KiB
		
	
	
	
		
			HTML
		
	
	
	
	
	
			
		
		
	
	
			132 lines
		
	
	
	
		
			4.8 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"?>
 | |
| <!--
 | |
|   XUL Widget Test for scrollbars
 | |
|   -->
 | |
| <window title="Scrollbar"
 | |
|   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"/>
 | |
| 
 | |
|   <!-- test results are displayed in the html:body -->
 | |
|   <body xmlns="http://www.w3.org/1999/xhtml"/>
 | |
|   
 | |
|   <hbox>
 | |
|       <scrollbar orient="horizontal"
 | |
|                  id="scroller"
 | |
|                  curpos="0"
 | |
|                  maxpos="600"
 | |
|                  pageincrement="400"
 | |
|                  width="500"
 | |
|                  style="margin:0"/>
 | |
|   </hbox>
 | |
|   
 | |
|   <!-- test code goes here -->
 | |
|   <script type="application/javascript"><![CDATA[
 | |
| 
 | |
| /** Test for Scrollbar **/
 | |
| var scrollbarTester = {
 | |
|   scrollbar: null,
 | |
|   middlePref: false,
 | |
|   startTest() {
 | |
|     this.scrollbar = $("scroller");
 | |
|     this.middlePref = this.getMiddlePref();
 | |
|     var self = this;
 | |
|     [0, 1, 2].map(function(button) {
 | |
|       [false, true].map(function(alt) {
 | |
|         [false, true].map(function(shift) {
 | |
|           self.testThumbDragging(button, alt, shift);
 | |
|         })
 | |
|       })
 | |
|     });
 | |
|     SimpleTest.finish();
 | |
|   },
 | |
|   testThumbDragging(button, withAlt, withShift) {
 | |
|     this.reset();
 | |
|     var x = 160; // on the right half of the thumb
 | |
|     var y = 5;
 | |
| 
 | |
|     var isMac = navigator.platform.includes("Mac");
 | |
|     let runtime = SpecialPowers.Services.appinfo;
 | |
|     var isGtk = runtime.widgetToolkit.includes("gtk");
 | |
|     
 | |
|     // Start the drag.
 | |
|     this.mousedown(x, y, button, withAlt, withShift);
 | |
|     var newPos = this.getPos();
 | |
|     var scrollToClick = (newPos != 0);
 | |
|     if (isMac || isGtk) {
 | |
|       ok(!scrollToClick, "On Linux and Mac OS X, clicking the scrollbar thumb "+
 | |
|                          "should never move it.");
 | |
|     } else if (button == 0 && withShift) {
 | |
|       ok(scrollToClick, "On platforms other than Linux and Mac OS X, holding "+
 | |
|                         "shift should enable scroll-to-click on the scrollbar thumb.");
 | |
|     } else if (button == 1 && this.middlePref) {
 | |
|       ok(scrollToClick, "When middlemouse.scrollbarPosition is on, clicking the "+
 | |
|                         "thumb with the middle mouse button should center it "+
 | |
|                         "around the cursor.")
 | |
|     }
 | |
| 
 | |
|     // Move one pixel to the right.
 | |
|     this.mousemove(x+1, y, button, withAlt, withShift);
 | |
|     var newPos2 = this.getPos();
 | |
|     if (newPos2 != newPos) {
 | |
|       ok(newPos2 > newPos, "Scrollbar thumb should follow the mouse when dragged.");
 | |
|       ok(newPos2 - newPos < 3, "Scrollbar shouldn't move further than the mouse when dragged.");
 | |
|       ok(button == 0 || (button == 1 && this.middlePref) || (button == 2 && isGtk),
 | |
|          "Dragging the scrollbar should only be possible with the left mouse button.");
 | |
|     } else if (button == 0) {
 | |
|       // Dragging had no effect.
 | |
|       ok(false, "Dragging the scrollbar thumb should work.");
 | |
|     } else if (button == 1 && this.middlePref && (!isGtk && !isMac)) {
 | |
|       ok(false, "When middlemouse.scrollbarPosition is on, dragging the "+
 | |
|                 "scrollbar thumb should be possible using the middle mouse button.");
 | |
|     } else {
 | |
|       ok(true, "Dragging works correctly.");
 | |
|     }
 | |
| 
 | |
|     // Release the mouse button.
 | |
|     this.mouseup(x+1, y, button, withAlt, withShift);
 | |
|     var newPos3 = this.getPos();
 | |
|     ok(newPos3 == newPos2,
 | |
|        "Releasing the mouse button after dragging the thumb shouldn't move it.");
 | |
|   },
 | |
|   getMiddlePref() {
 | |
|     // It would be better to test with different middlePref settings,
 | |
|     // but the setting is only queried once, at browser startup, so
 | |
|     // changing it here wouldn't have any effect
 | |
|     var mouseBranch = SpecialPowers.Services.prefs.getBranch("middlemouse.");
 | |
|     return mouseBranch.getBoolPref("scrollbarPosition");
 | |
|   },
 | |
|   setPos(pos) {
 | |
|     this.scrollbar.setAttribute("curpos", pos);
 | |
|   },
 | |
|   getPos() {
 | |
|     return this.scrollbar.getAttribute("curpos");
 | |
|   },
 | |
|   reset() {
 | |
|     this.setPos(0);
 | |
|   },
 | |
|   mousedown(x, y, button, alt, shift) {
 | |
|     synthesizeMouse(this.scrollbar, x, y, { type: "mousedown", 'button': button,
 | |
|                                                 altKey: alt, shiftKey: shift });
 | |
|   },
 | |
|   mousemove(x, y, button, alt, shift) {
 | |
|     synthesizeMouse(this.scrollbar, x, y, { type: "mousemove", 'button': button,
 | |
|                                                 altKey: alt, shiftKey: shift });
 | |
|   },
 | |
|   mouseup(x, y, button, alt, shift) {
 | |
|     synthesizeMouse(this.scrollbar, x, y, { type: "mouseup", 'button': button,
 | |
|                                                 altKey: alt, shiftKey: shift });
 | |
|   }
 | |
| }
 | |
| 
 | |
| function doTest() {
 | |
|   setTimeout(function() { scrollbarTester.startTest(); }, 0);
 | |
| }
 | |
| 
 | |
| SimpleTest.waitForExplicitFinish();
 | |
| addLoadEvent(doTest);
 | |
| 
 | |
| ]]></script>
 | |
| </window>
 | 
