gecko-dev/browser/base/content/test/tabs/browser_positional_attributes.js
Jonathan Kingston 2f0987a202 Bug 1362034 - Tests for addTab() to provide the correct triggering principal. r=ckerschb r?=gijs
Summary: Depends on D2046

Reviewers: ckerschb!, Gijs!

Tags: #secure-revision

Bug #: 1362034

Differential Revision: https://phabricator.services.mozilla.com/D2047

--HG--
extra : source : 33884d05cc94463950b31fab1fd2f37ada9becef
extra : intermediate-source : 72471adb75d5ec3dc2b0c8f972a6f1f26bfd3ae2
extra : histedit_source : f384cbab58401575afc3443c9a431b73cff806d4
2018-07-06 21:16:29 +01:00

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);
});