diff -r 000000000000 -r 6474c204b198 browser/components/tabview/test/browser_tabview_bug633190.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/browser/components/tabview/test/browser_tabview_bug633190.js Wed Dec 31 06:09:35 2014 +0100 @@ -0,0 +1,86 @@ +/* Any copyright is dedicated to the Public Domain. + http://creativecommons.org/publicdomain/zero/1.0/ */ + +let origTab = gBrowser.visibleTabs[0]; +let contentWindow; + +function test() { + waitForExplicitFinish(); + + test1(); +} + +// Open a new tab when the active tab item belongs to a group item. +function test1() { + registerCleanupFunction(function () TabView.hide()); + + showTabView(function() { + ok(origTab._tabViewTabItem.parent, "The original tab belongs to a group"); + + contentWindow = TabView.getContentWindow(); + contentWindow.UI.setActive(origTab._tabViewTabItem); + + testCreateTabAndThen(test2); + }); +} + +// Open a new tab when the active tab item is nothing. +function test2() { + showTabView(function() { + contentWindow.UI.setActive(null, { onlyRemoveActiveTab: true }); + + testCreateTabAndThen(test3); + }); +} + +// Open a new tab when the active tab item is an orphan tab. +function test3() { + showTabView(function() { + let groupItem = origTab._tabViewTabItem.parent; + let tabItems = groupItem.getChildren(); + is(tabItems.length, 3, "There are 3 tab items in the group"); + + let lastTabItem = tabItems[tabItems.length - 1]; + groupItem.remove(lastTabItem); + + let orphanedTabs = contentWindow.GroupItems.getOrphanedTabs(); + is(orphanedTabs.length, 1, "There should be 1 orphan tab"); + is(orphanedTabs[0], lastTabItem, "The tab item is the same as the orphan tab"); + + contentWindow.UI.setActive(lastTabItem); + + testCreateTabAndThen(function() { + hideTabView(finish); + }); + }); +} + +function testCreateTabAndThen(callback) { + ok(TabView.isVisible(), "Tab View is visible"); + + // detect tab open and zoomed in event. + let onTabOpen = function(event) { + gBrowser.tabContainer.removeEventListener("TabOpen", onTabOpen, false); + + // ensure that the default tabview listener is called before so the + // tab._tabViewTabItem exists + executeSoon(function() { + let tab = event.target; + tabItem = tab._tabViewTabItem; + ok(tabItem, "Tab item is available after tab open"); + + registerCleanupFunction(function () gBrowser.removeTab(tab)) + + tabItem.addSubscriber("zoomedIn", function onZoomedIn() { + tabItem.removeSubscriber("zoomedIn", onZoomedIn); + + is(gBrowser.selectedTab, tab, + "The selected tab is the same as the newly opened tab"); + executeSoon(callback); + }); + }); + } + gBrowser.tabContainer.addEventListener("TabOpen", onTabOpen, false); + // use the menu item (the same as pressing cmd/ctrl + t) + document.getElementById("menu_newNavigatorTab").doCommand(); +}