|
1 /* Any copyright is dedicated to the Public Domain. |
|
2 * http://creativecommons.org/publicdomain/zero/1.0/ |
|
3 */ |
|
4 |
|
5 let tabs = []; |
|
6 |
|
7 function addTab(aURL) { |
|
8 tabs.push(gBrowser.addTab(aURL, {skipAnimation: true})); |
|
9 } |
|
10 |
|
11 function testAttrib(elem, attrib, attribValue, msg) { |
|
12 is(elem.hasAttribute(attrib), attribValue, msg); |
|
13 } |
|
14 |
|
15 function test() { |
|
16 waitForExplicitFinish(); |
|
17 is(gBrowser.tabs.length, 1, "one tab is open initially"); |
|
18 |
|
19 // Add several new tabs in sequence, hiding some, to ensure that the |
|
20 // correct attributes get set |
|
21 |
|
22 addTab("http://mochi.test:8888/#0"); |
|
23 addTab("http://mochi.test:8888/#1"); |
|
24 addTab("http://mochi.test:8888/#2"); |
|
25 addTab("http://mochi.test:8888/#3"); |
|
26 |
|
27 gBrowser.selectedTab = gBrowser.tabs[0]; |
|
28 testAttrib(gBrowser.tabs[0], "first-visible-tab", true, |
|
29 "First tab marked first-visible-tab!"); |
|
30 testAttrib(gBrowser.tabs[4], "last-visible-tab", true, |
|
31 "Fifth tab marked last-visible-tab!"); |
|
32 testAttrib(gBrowser.tabs[0], "selected", true, "First tab marked selected!"); |
|
33 testAttrib(gBrowser.tabs[0], "afterselected-visible", false, |
|
34 "First tab not marked afterselected-visible!"); |
|
35 testAttrib(gBrowser.tabs[1], "afterselected-visible", true, |
|
36 "Second tab marked afterselected-visible!"); |
|
37 gBrowser.hideTab(gBrowser.tabs[1]); |
|
38 executeSoon(test_hideSecond); |
|
39 } |
|
40 |
|
41 function test_hideSecond() { |
|
42 testAttrib(gBrowser.tabs[2], "afterselected-visible", true, |
|
43 "Third tab marked afterselected-visible!"); |
|
44 gBrowser.showTab(gBrowser.tabs[1]) |
|
45 executeSoon(test_showSecond); |
|
46 } |
|
47 |
|
48 function test_showSecond() { |
|
49 testAttrib(gBrowser.tabs[1], "afterselected-visible", true, |
|
50 "Second tab marked afterselected-visible!"); |
|
51 testAttrib(gBrowser.tabs[2], "afterselected-visible", false, |
|
52 "Third tab not marked as afterselected-visible!"); |
|
53 gBrowser.selectedTab = gBrowser.tabs[1]; |
|
54 gBrowser.hideTab(gBrowser.tabs[0]); |
|
55 executeSoon(test_hideFirst); |
|
56 } |
|
57 |
|
58 function test_hideFirst() { |
|
59 testAttrib(gBrowser.tabs[0], "first-visible-tab", false, |
|
60 "Hidden first tab not marked first-visible-tab!"); |
|
61 testAttrib(gBrowser.tabs[1], "first-visible-tab", true, |
|
62 "Second tab marked first-visible-tab!"); |
|
63 gBrowser.showTab(gBrowser.tabs[0]); |
|
64 executeSoon(test_showFirst); |
|
65 } |
|
66 |
|
67 function test_showFirst() { |
|
68 testAttrib(gBrowser.tabs[0], "first-visible-tab", true, |
|
69 "First tab marked first-visible-tab!"); |
|
70 gBrowser.selectedTab = gBrowser.tabs[2]; |
|
71 testAttrib(gBrowser.tabs[3], "afterselected-visible", true, |
|
72 "Fourth tab marked afterselected-visible!"); |
|
73 |
|
74 gBrowser.moveTabTo(gBrowser.selectedTab, 1); |
|
75 executeSoon(test_movedLower); |
|
76 } |
|
77 |
|
78 function test_movedLower() { |
|
79 testAttrib(gBrowser.tabs[2], "afterselected-visible", true, |
|
80 "Third tab marked afterselected-visible!"); |
|
81 test_hoverOne(); |
|
82 } |
|
83 |
|
84 function test_hoverOne() { |
|
85 EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[4], { type: "mousemove" }); |
|
86 testAttrib(gBrowser.tabs[3], "beforehovered", true, "Fourth tab marked beforehovered"); |
|
87 EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[3], { type: "mousemove" }); |
|
88 testAttrib(gBrowser.tabs[2], "beforehovered", true, "Third tab marked beforehovered!"); |
|
89 testAttrib(gBrowser.tabs[2], "afterhovered", false, "Third tab not marked afterhovered!"); |
|
90 testAttrib(gBrowser.tabs[4], "afterhovered", true, "Fifth tab marked afterhovered!"); |
|
91 testAttrib(gBrowser.tabs[4], "beforehovered", false, "Fifth tab not marked beforehovered!"); |
|
92 testAttrib(gBrowser.tabs[0], "beforehovered", false, "First tab not marked beforehovered!"); |
|
93 testAttrib(gBrowser.tabs[0], "afterhovered", false, "First tab not marked afterhovered!"); |
|
94 testAttrib(gBrowser.tabs[1], "beforehovered", false, "Second tab not marked beforehovered!"); |
|
95 testAttrib(gBrowser.tabs[1], "afterhovered", false, "Second tab not marked afterhovered!"); |
|
96 testAttrib(gBrowser.tabs[3], "beforehovered", false, "Fourth tab not marked beforehovered!"); |
|
97 testAttrib(gBrowser.tabs[3], "afterhovered", false, "Fourth tab not marked afterhovered!"); |
|
98 gBrowser.removeTab(tabs.pop()); |
|
99 executeSoon(test_hoverStatePersistence); |
|
100 } |
|
101 |
|
102 function test_hoverStatePersistence() { |
|
103 // Test that the afterhovered and beforehovered attributes are still there when |
|
104 // a tab is selected and then unselected again. See bug 856107. |
|
105 |
|
106 function assertState() { |
|
107 testAttrib(gBrowser.tabs[0], "beforehovered", true, "First tab still marked beforehovered!"); |
|
108 testAttrib(gBrowser.tabs[0], "afterhovered", false, "First tab not marked afterhovered!"); |
|
109 testAttrib(gBrowser.tabs[2], "afterhovered", true, "Third tab still marked afterhovered!"); |
|
110 testAttrib(gBrowser.tabs[2], "beforehovered", false, "Third tab not marked afterhovered!"); |
|
111 testAttrib(gBrowser.tabs[1], "beforehovered", false, "Second tab not marked beforehovered!"); |
|
112 testAttrib(gBrowser.tabs[1], "afterhovered", false, "Second tab not marked afterhovered!"); |
|
113 testAttrib(gBrowser.tabs[3], "beforehovered", false, "Fourth tab not marked beforehovered!"); |
|
114 testAttrib(gBrowser.tabs[3], "afterhovered", false, "Fourth tab not marked afterhovered!"); |
|
115 } |
|
116 |
|
117 gBrowser.selectedTab = gBrowser.tabs[3]; |
|
118 EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[1], { type: "mousemove" }); |
|
119 assertState(); |
|
120 gBrowser.selectedTab = gBrowser.tabs[1]; |
|
121 assertState(); |
|
122 gBrowser.selectedTab = gBrowser.tabs[3]; |
|
123 assertState(); |
|
124 executeSoon(test_pinning); |
|
125 } |
|
126 |
|
127 function test_pinning() { |
|
128 gBrowser.selectedTab = gBrowser.tabs[3]; |
|
129 testAttrib(gBrowser.tabs[3], "last-visible-tab", true, |
|
130 "Fourth tab marked last-visible-tab!"); |
|
131 testAttrib(gBrowser.tabs[3], "selected", true, "Fourth tab marked selected!"); |
|
132 testAttrib(gBrowser.tabs[3], "afterselected-visible", false, |
|
133 "Fourth tab not marked afterselected-visible!"); |
|
134 // Causes gBrowser.tabs to change indices |
|
135 gBrowser.pinTab(gBrowser.tabs[3]); |
|
136 testAttrib(gBrowser.tabs[3], "last-visible-tab", true, |
|
137 "Fourth tab marked last-visible-tab!"); |
|
138 testAttrib(gBrowser.tabs[1], "afterselected-visible", true, |
|
139 "Second tab marked afterselected-visible!"); |
|
140 testAttrib(gBrowser.tabs[0], "first-visible-tab", true, |
|
141 "First tab marked first-visible-tab!"); |
|
142 testAttrib(gBrowser.tabs[0], "selected", true, "First tab marked selected!"); |
|
143 gBrowser.selectedTab = gBrowser.tabs[1]; |
|
144 testAttrib(gBrowser.tabs[2], "afterselected-visible", true, |
|
145 "Third tab marked afterselected-visible!"); |
|
146 test_cleanUp(); |
|
147 } |
|
148 |
|
149 function test_cleanUp() { |
|
150 tabs.forEach(gBrowser.removeTab, gBrowser); |
|
151 finish(); |
|
152 } |