Index: chrome/test/data/webui/menu_test.html |
diff --git a/chrome/test/data/webui/menu_test.html b/chrome/test/data/webui/menu_test.html |
index 7e0e9205a06d1766491e64abf1a9c0e387aebfd6..6d26cc3f7fa8e821f5eaf92c6b1cfc2996c860d8 100644 |
--- a/chrome/test/data/webui/menu_test.html |
+++ b/chrome/test/data/webui/menu_test.html |
@@ -3,9 +3,30 @@ |
<body> |
<script> |
-function testHandleMouseOver() { |
- var menu = new cr.ui.Menu; |
+/** @type {cr.ui.Menu} */ |
+var menu; |
+ |
+/** |
+ * @param {number} x The screenX coord of the mouseup event. |
+ * @param {number} y The screenY coord of the mouseup event. |
+ */ |
+function mouseUpAt(x, y) { |
+ var mouseUpEvent = new MouseEvent('mouseup', { |
+ bubbles: true, |
+ cancelable: true, |
+ target: menu, |
+ screenX: x, |
+ screenY: y, |
+ }); |
+ mouseUpEvent.isTrustedForTesting = true; |
+ return menu.dispatchEvent(mouseUpEvent); |
+} |
+ |
+function setUp() { |
+ menu = new cr.ui.Menu; |
+} |
+function testHandleMouseOver() { |
var called = false; |
menu.findMenuItem_ = function() { |
called = true; |
@@ -18,6 +39,30 @@ function testHandleMouseOver() { |
assertTrue(called); |
} |
+function testHandleMouseUp() { |
+ var realNow = Date.now; |
+ Date.now = function() { return 10; }; |
+ |
+ menu.show({x: 5, y: 5}); |
+ |
+ // Stop mouseups at the same time and position. |
+ assertFalse(mouseUpAt(5, 5)); |
+ |
+ // Allow mouseups with different positions but the same time. |
+ assertTrue(mouseUpAt(50, 50)); |
+ |
+ // Alow mouseups with the same position but different times. |
+ Date.now = function() { return 1000; }; |
+ assertTrue(mouseUpAt(5, 5)); |
+ |
+ Date.now = realNow; |
+} |
+ |
+function testShowViaKeyboardIgnoresMouseUps() { |
+ menu.show(); |
+ assertTrue(mouseUpAt(0, 0)); |
+} |
+ |
</script> |
</body> |
</html> |