diff options
Diffstat (limited to 'browser/base/content/test/general/browser_bug585558.js')
-rw-r--r-- | browser/base/content/test/general/browser_bug585558.js | 153 |
1 files changed, 153 insertions, 0 deletions
diff --git a/browser/base/content/test/general/browser_bug585558.js b/browser/base/content/test/general/browser_bug585558.js new file mode 100644 index 000000000..bae832b4d --- /dev/null +++ b/browser/base/content/test/general/browser_bug585558.js @@ -0,0 +1,153 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ + */ + +var 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(); +} |