mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-14 15:37:55 +00:00
153 lines
6.4 KiB
JavaScript
153 lines
6.4 KiB
JavaScript
/* Any copyright is dedicated to the Public Domain.
|
|
* http://creativecommons.org/publicdomain/zero/1.0/
|
|
*/
|
|
|
|
let tabs = [];
|
|
|
|
function addTab(aURL) {
|
|
tabs.push(gBrowser.addTab(aURL, {skipAnimation: true}));
|
|
}
|
|
|
|
function testAttrib(elem, attrib, attribValue, msg) {
|
|
is(elem.hasAttribute(attrib), attribValue, msg);
|
|
}
|
|
|
|
function test() {
|
|
waitForExplicitFinish();
|
|
is(gBrowser.tabs.length, 1, "one tab is open initially");
|
|
|
|
// Add several new tabs in sequence, hiding some, to ensure that the
|
|
// correct attributes get set
|
|
|
|
addTab("http://mochi.test:8888/#0");
|
|
addTab("http://mochi.test:8888/#1");
|
|
addTab("http://mochi.test:8888/#2");
|
|
addTab("http://mochi.test:8888/#3");
|
|
|
|
gBrowser.selectedTab = gBrowser.tabs[0];
|
|
testAttrib(gBrowser.tabs[0], "first-visible-tab", true,
|
|
"First tab marked first-visible-tab!");
|
|
testAttrib(gBrowser.tabs[4], "last-visible-tab", true,
|
|
"Fifth tab marked last-visible-tab!");
|
|
testAttrib(gBrowser.tabs[0], "selected", true, "First tab marked selected!");
|
|
testAttrib(gBrowser.tabs[0], "afterselected-visible", false,
|
|
"First tab not marked afterselected-visible!");
|
|
testAttrib(gBrowser.tabs[1], "afterselected-visible", true,
|
|
"Second tab marked afterselected-visible!");
|
|
gBrowser.hideTab(gBrowser.tabs[1]);
|
|
executeSoon(test_hideSecond);
|
|
}
|
|
|
|
function test_hideSecond() {
|
|
testAttrib(gBrowser.tabs[2], "afterselected-visible", true,
|
|
"Third tab marked afterselected-visible!");
|
|
gBrowser.showTab(gBrowser.tabs[1])
|
|
executeSoon(test_showSecond);
|
|
}
|
|
|
|
function test_showSecond() {
|
|
testAttrib(gBrowser.tabs[1], "afterselected-visible", true,
|
|
"Second tab marked afterselected-visible!");
|
|
testAttrib(gBrowser.tabs[2], "afterselected-visible", false,
|
|
"Third tab not marked as afterselected-visible!");
|
|
gBrowser.selectedTab = gBrowser.tabs[1];
|
|
gBrowser.hideTab(gBrowser.tabs[0]);
|
|
executeSoon(test_hideFirst);
|
|
}
|
|
|
|
function test_hideFirst() {
|
|
testAttrib(gBrowser.tabs[0], "first-visible-tab", false,
|
|
"Hidden first tab not marked first-visible-tab!");
|
|
testAttrib(gBrowser.tabs[1], "first-visible-tab", true,
|
|
"Second tab marked first-visible-tab!");
|
|
gBrowser.showTab(gBrowser.tabs[0]);
|
|
executeSoon(test_showFirst);
|
|
}
|
|
|
|
function test_showFirst() {
|
|
testAttrib(gBrowser.tabs[0], "first-visible-tab", true,
|
|
"First tab marked first-visible-tab!");
|
|
gBrowser.selectedTab = gBrowser.tabs[2];
|
|
testAttrib(gBrowser.tabs[3], "afterselected-visible", true,
|
|
"Fourth tab marked afterselected-visible!");
|
|
|
|
gBrowser.moveTabTo(gBrowser.selectedTab, 1);
|
|
executeSoon(test_movedLower);
|
|
}
|
|
|
|
function test_movedLower() {
|
|
testAttrib(gBrowser.tabs[2], "afterselected-visible", true,
|
|
"Third tab marked afterselected-visible!");
|
|
test_hoverOne();
|
|
}
|
|
|
|
function test_hoverOne() {
|
|
EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[4], { type: "mousemove" });
|
|
testAttrib(gBrowser.tabs[3], "beforehovered", true, "Fourth tab marked beforehovered");
|
|
EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[3], { type: "mousemove" });
|
|
testAttrib(gBrowser.tabs[2], "beforehovered", true, "Third tab marked beforehovered!");
|
|
testAttrib(gBrowser.tabs[2], "afterhovered", false, "Third tab not marked afterhovered!");
|
|
testAttrib(gBrowser.tabs[4], "afterhovered", true, "Fifth tab marked afterhovered!");
|
|
testAttrib(gBrowser.tabs[4], "beforehovered", false, "Fifth tab not marked beforehovered!");
|
|
testAttrib(gBrowser.tabs[0], "beforehovered", false, "First tab not marked beforehovered!");
|
|
testAttrib(gBrowser.tabs[0], "afterhovered", false, "First tab not marked afterhovered!");
|
|
testAttrib(gBrowser.tabs[1], "beforehovered", false, "Second tab not marked beforehovered!");
|
|
testAttrib(gBrowser.tabs[1], "afterhovered", false, "Second tab not marked afterhovered!");
|
|
testAttrib(gBrowser.tabs[3], "beforehovered", false, "Fourth tab not marked beforehovered!");
|
|
testAttrib(gBrowser.tabs[3], "afterhovered", false, "Fourth tab not marked afterhovered!");
|
|
gBrowser.removeTab(tabs.pop());
|
|
executeSoon(test_hoverStatePersistence);
|
|
}
|
|
|
|
function test_hoverStatePersistence() {
|
|
// Test that the afterhovered and beforehovered attributes are still there when
|
|
// a tab is selected and then unselected again. See bug 856107.
|
|
|
|
function assertState() {
|
|
testAttrib(gBrowser.tabs[0], "beforehovered", true, "First tab still marked beforehovered!");
|
|
testAttrib(gBrowser.tabs[0], "afterhovered", false, "First tab not marked afterhovered!");
|
|
testAttrib(gBrowser.tabs[2], "afterhovered", true, "Third tab still marked afterhovered!");
|
|
testAttrib(gBrowser.tabs[2], "beforehovered", false, "Third tab not marked afterhovered!");
|
|
testAttrib(gBrowser.tabs[1], "beforehovered", false, "Second tab not marked beforehovered!");
|
|
testAttrib(gBrowser.tabs[1], "afterhovered", false, "Second tab not marked afterhovered!");
|
|
testAttrib(gBrowser.tabs[3], "beforehovered", false, "Fourth tab not marked beforehovered!");
|
|
testAttrib(gBrowser.tabs[3], "afterhovered", false, "Fourth tab not marked afterhovered!");
|
|
}
|
|
|
|
gBrowser.selectedTab = gBrowser.tabs[3];
|
|
EventUtils.synthesizeMouseAtCenter(gBrowser.tabs[1], { type: "mousemove" });
|
|
assertState();
|
|
gBrowser.selectedTab = gBrowser.tabs[1];
|
|
assertState();
|
|
gBrowser.selectedTab = gBrowser.tabs[3];
|
|
assertState();
|
|
executeSoon(test_pinning);
|
|
}
|
|
|
|
function test_pinning() {
|
|
gBrowser.selectedTab = gBrowser.tabs[3];
|
|
testAttrib(gBrowser.tabs[3], "last-visible-tab", true,
|
|
"Fourth tab marked last-visible-tab!");
|
|
testAttrib(gBrowser.tabs[3], "selected", true, "Fourth tab marked selected!");
|
|
testAttrib(gBrowser.tabs[3], "afterselected-visible", false,
|
|
"Fourth tab not marked afterselected-visible!");
|
|
// Causes gBrowser.tabs to change indices
|
|
gBrowser.pinTab(gBrowser.tabs[3]);
|
|
testAttrib(gBrowser.tabs[3], "last-visible-tab", true,
|
|
"Fourth tab marked last-visible-tab!");
|
|
testAttrib(gBrowser.tabs[1], "afterselected-visible", true,
|
|
"Second tab marked afterselected-visible!");
|
|
testAttrib(gBrowser.tabs[0], "first-visible-tab", true,
|
|
"First tab marked first-visible-tab!");
|
|
testAttrib(gBrowser.tabs[0], "selected", true, "First tab marked selected!");
|
|
gBrowser.selectedTab = gBrowser.tabs[1];
|
|
testAttrib(gBrowser.tabs[2], "afterselected-visible", true,
|
|
"Third tab marked afterselected-visible!");
|
|
test_cleanUp();
|
|
}
|
|
|
|
function test_cleanUp() {
|
|
tabs.forEach(gBrowser.removeTab, gBrowser);
|
|
finish();
|
|
}
|