forked from mirrors/gecko-dev
Backed out changeset 1c3329958b8a (bug 1362034) Backed out changeset f68b1b76af36 (bug 1362034) --HG-- extra : histedit_source : 6169c5ffe856266d3bc8b2ca32f4b67054c71bbe
133 lines
4 KiB
JavaScript
133 lines
4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
var tabs = [];
|
|
|
|
function addTab(aURL) {
|
|
tabs.push(BrowserTestUtils.addTab(gBrowser, aURL, {
|
|
skipAnimation: true,
|
|
}));
|
|
}
|
|
|
|
function switchTab(index) {
|
|
return BrowserTestUtils.switchTab(gBrowser, gBrowser.tabs[index]);
|
|
}
|
|
|
|
function testAttrib(tabIndex, attrib, expected) {
|
|
is(gBrowser.tabs[tabIndex].hasAttribute(attrib), expected,
|
|
`tab #${tabIndex} should${expected ? "" : "n't"} have the ${attrib} attribute`);
|
|
}
|
|
|
|
add_task(async function setup() {
|
|
is(gBrowser.tabs.length, 1, "one tab is open initially");
|
|
|
|
addTab("http://mochi.test:8888/#0");
|
|
addTab("http://mochi.test:8888/#1");
|
|
addTab("http://mochi.test:8888/#2");
|
|
addTab("http://mochi.test:8888/#3");
|
|
|
|
is(gBrowser.tabs.length, 5, "five tabs are open after setup");
|
|
});
|
|
|
|
// Add several new tabs in sequence, hiding some, to ensure that the
|
|
// correct attributes get set
|
|
add_task(async function test() {
|
|
testAttrib(0, "first-visible-tab", true);
|
|
testAttrib(4, "last-visible-tab", true);
|
|
testAttrib(0, "visuallyselected", true);
|
|
testAttrib(0, "beforeselected-visible", false);
|
|
|
|
await switchTab(2);
|
|
|
|
testAttrib(2, "visuallyselected", true);
|
|
testAttrib(1, "beforeselected-visible", true);
|
|
|
|
gBrowser.hideTab(gBrowser.tabs[1]);
|
|
|
|
testAttrib(0, "beforeselected-visible", true);
|
|
|
|
gBrowser.showTab(gBrowser.tabs[1]);
|
|
|
|
testAttrib(1, "beforeselected-visible", true);
|
|
testAttrib(0, "beforeselected-visible", false);
|
|
|
|
await switchTab(1);
|
|
|
|
testAttrib(0, "beforeselected-visible", true);
|
|
|
|
gBrowser.hideTab(gBrowser.tabs[0]);
|
|
|
|
testAttrib(0, "first-visible-tab", false);
|
|
testAttrib(1, "first-visible-tab", true);
|
|
testAttrib(0, "beforeselected-visible", false);
|
|
|
|
gBrowser.showTab(gBrowser.tabs[0]);
|
|
|
|
testAttrib(0, "first-visible-tab", true);
|
|
testAttrib(0, "beforeselected-visible", true);
|
|
|
|
gBrowser.moveTabTo(gBrowser.selectedTab, 3);
|
|
|
|
testAttrib(2, "beforeselected-visible", true);
|
|
});
|
|
|
|
add_task(async function test_hoverOne() {
|
|
await switchTab(0);
|
|
EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[4], { type: "mousemove" });
|
|
testAttrib(3, "beforehovered", true);
|
|
EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[3], { type: "mousemove" });
|
|
testAttrib(2, "beforehovered", true);
|
|
testAttrib(2, "afterhovered", false);
|
|
testAttrib(4, "afterhovered", true);
|
|
testAttrib(4, "beforehovered", false);
|
|
testAttrib(0, "beforehovered", false);
|
|
testAttrib(0, "afterhovered", false);
|
|
testAttrib(1, "beforehovered", false);
|
|
testAttrib(1, "afterhovered", false);
|
|
testAttrib(3, "beforehovered", false);
|
|
testAttrib(3, "afterhovered", false);
|
|
});
|
|
|
|
// Test that the afterhovered and beforehovered attributes are still there when
|
|
// a tab is selected and then unselected again. See bug 856107.
|
|
add_task(async function test_hoverStatePersistence() {
|
|
gBrowser.removeTab(tabs.pop());
|
|
|
|
function assertState() {
|
|
testAttrib(0, "beforehovered", true);
|
|
testAttrib(0, "afterhovered", false);
|
|
testAttrib(2, "afterhovered", true);
|
|
testAttrib(2, "beforehovered", false);
|
|
testAttrib(1, "beforehovered", false);
|
|
testAttrib(1, "afterhovered", false);
|
|
testAttrib(3, "beforehovered", false);
|
|
testAttrib(3, "afterhovered", false);
|
|
}
|
|
|
|
await switchTab(3);
|
|
EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[1], { type: "mousemove" });
|
|
assertState();
|
|
await switchTab(1);
|
|
assertState();
|
|
await switchTab(3);
|
|
assertState();
|
|
});
|
|
|
|
add_task(async function test_pinning() {
|
|
testAttrib(3, "last-visible-tab", true);
|
|
testAttrib(3, "visuallyselected", true);
|
|
testAttrib(2, "beforeselected-visible", true);
|
|
// Causes gBrowser.tabs to change indices
|
|
gBrowser.pinTab(gBrowser.tabs[3]);
|
|
testAttrib(3, "last-visible-tab", true);
|
|
testAttrib(0, "first-visible-tab", true);
|
|
testAttrib(2, "beforeselected-visible", false);
|
|
testAttrib(0, "visuallyselected", true);
|
|
await switchTab(1);
|
|
testAttrib(0, "beforeselected-visible", true);
|
|
});
|
|
|
|
add_task(function cleanup() {
|
|
tabs.forEach(gBrowser.removeTab, gBrowser);
|
|
});
|