|
1 <?xml version="1.0"?> |
|
2 <?xml-stylesheet href="chrome://global/skin" type="text/css"?> |
|
3 <?xml-stylesheet href="chrome://mochikit/content/tests/SimpleTest/test.css" type="text/css"?> |
|
4 <!-- |
|
5 https://bugzilla.mozilla.org/show_bug.cgi?id=420499 |
|
6 --> |
|
7 <window title="Mozilla Bug 420499" onload="setTimeout(focusInput, 500);" |
|
8 xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"> |
|
9 <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/SimpleTest.js"/> |
|
10 <script type="application/javascript" src="chrome://mochikit/content/tests/SimpleTest/EventUtils.js"></script> |
|
11 |
|
12 |
|
13 |
|
14 <menu id="menu" label="Menu"> |
|
15 <menupopup id="file-popup"> |
|
16 <!-- <textbox id="some-text" maxlength="10" value="some text"/> --> |
|
17 <menu label="submenu"> |
|
18 <menupopup id="file-popup-inner"> |
|
19 |
|
20 <menuitem label="Item1"/> |
|
21 <menuitem label="Item2"/> |
|
22 <textbox id="some-text" maxlength="10" value="some more text"/> |
|
23 </menupopup> |
|
24 </menu> |
|
25 <menuitem label="Item3"/> |
|
26 <menuitem label="Item4"/> |
|
27 </menupopup> |
|
28 </menu> |
|
29 |
|
30 <popupset> |
|
31 <popup id="contextmenu"> |
|
32 <menuitem label="Cut"/> |
|
33 <menuitem label="Copy"/> |
|
34 <menuitem label="Paste"/> |
|
35 </popup> |
|
36 <tooltip id="tooltip" orient="vertical"> |
|
37 <description value="This is a tooltip"/> |
|
38 </tooltip> |
|
39 </popupset> |
|
40 |
|
41 <!-- test results are displayed in the html:body --> |
|
42 <body xmlns="http://www.w3.org/1999/xhtml" bgcolor="white"> |
|
43 |
|
44 <p id="par1">Paragraph 1</p> |
|
45 <p id="par2">Paragraph 2</p> |
|
46 <p id="par3">Paragraph 3</p> |
|
47 <p id="par4">Paragraph 4</p> |
|
48 <p id="par5">Paragraph 5</p> |
|
49 |
|
50 <input type="text" id="text-input" maxlength="10" value="some more text"/> <br /> |
|
51 |
|
52 <a href="https://bugzilla.mozilla.org/show_bug.cgi?id=420499" |
|
53 target="_blank">Mozilla Bug 420499</a> |
|
54 </body> |
|
55 |
|
56 <!-- test code goes here --> |
|
57 <script type="application/javascript"><![CDATA[ |
|
58 |
|
59 /** Test for Bug 420499 **/ |
|
60 SimpleTest.waitForExplicitFinish(); |
|
61 |
|
62 function getSelectionController() { |
|
63 return document.docShell |
|
64 .QueryInterface(Components.interfaces.nsIInterfaceRequestor) |
|
65 .getInterface(Components.interfaces.nsISelectionDisplay) |
|
66 .QueryInterface(Components.interfaces.nsISelectionController); |
|
67 } |
|
68 |
|
69 function isCaretVisible() { |
|
70 window.QueryInterface(Components.interfaces.nsIInterfaceRequestor); |
|
71 var docShell = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) |
|
72 .getInterface(Components.interfaces.nsIWebNavigation) |
|
73 .QueryInterface(Components.interfaces.nsIDocShell); |
|
74 var selCon = docShell.QueryInterface(Components.interfaces.nsIInterfaceRequestor) |
|
75 .getInterface(Components.interfaces.nsISelectionDisplay) |
|
76 .QueryInterface(Components.interfaces.nsISelectionController); |
|
77 return selCon.caretVisible; |
|
78 } |
|
79 |
|
80 function focusInput() { |
|
81 ok(!isCaretVisible(), "Caret shouldn't be visible"); |
|
82 $("text-input").focus(); |
|
83 ok(isCaretVisible(), "Caret should be visible when input focused"); |
|
84 window.addEventListener("popupshown", popupMenuShownHandler, false); |
|
85 $("menu").open = true; |
|
86 } |
|
87 |
|
88 function popupMenuShownHandler() { |
|
89 window.removeEventListener("popupshown", popupMenuShownHandler, false); |
|
90 ok(!isCaretVisible(), "Caret shouldn't be visible when menu open"); |
|
91 window.addEventListener("popuphidden", ensureParagraphFocused, false); |
|
92 $("menu").open = false; |
|
93 } |
|
94 |
|
95 function ensureParagraphFocused() { |
|
96 window.removeEventListener("popuphidden", ensureParagraphFocused, false); |
|
97 ok(isCaretVisible(), "Caret should have returned to previous focus"); |
|
98 window.addEventListener("popupshown", popupMenuShownHandler2, false); |
|
99 $("contextmenu").openPopup($('text-input'), "topleft" , -1 , -1 , true, true); |
|
100 } |
|
101 |
|
102 function popupMenuShownHandler2() { |
|
103 window.removeEventListener("popupshown", popupMenuShownHandler2, false); |
|
104 ok(isCaretVisible(), "Caret should be visible when context menu open"); |
|
105 window.addEventListener("popuphidden", ensureParagraphFocused2, false); |
|
106 document.getElementById("contextmenu").hidePopup(); |
|
107 } |
|
108 |
|
109 function ensureParagraphFocused2() { |
|
110 window.removeEventListener("popuphidden", ensureParagraphFocused2, false); |
|
111 ok(isCaretVisible(), "Caret should still be visible"); |
|
112 window.addEventListener("popupshown", tooltipShownHandler, false); |
|
113 $("tooltip").openPopup($('text-input'), "topleft" , -1 , -1 , false, true); |
|
114 } |
|
115 |
|
116 function tooltipShownHandler() { |
|
117 window.removeEventListener("popupshown", tooltipShownHandler, false); |
|
118 ok(isCaretVisible(), "Caret should be visible when tooltip is visible"); |
|
119 window.addEventListener("popuphidden", ensureParagraphFocused3, false); |
|
120 document.getElementById("tooltip").hidePopup(); |
|
121 } |
|
122 |
|
123 function ensureParagraphFocused3() { |
|
124 window.removeEventListener("popuphidden", ensureParagraphFocused2, false); |
|
125 ok(isCaretVisible(), "Caret should still be visible"); |
|
126 SimpleTest.finish(); |
|
127 } |
|
128 ]]></script> |
|
129 </window> |