michael@0: /* Any copyright is dedicated to the Public Domain. michael@0: http://creativecommons.org/publicdomain/zero/1.0/ */ michael@0: michael@0: function test() { michael@0: let cw; michael@0: let win; michael@0: let groupItemId; michael@0: let prefix = 'start'; michael@0: michael@0: let assertTabViewIsHidden = function () { michael@0: ok(!win.TabView.isVisible(), prefix + ': tabview is hidden'); michael@0: } michael@0: michael@0: let assertNumberOfGroups = function (num) { michael@0: is(cw.GroupItems.groupItems.length, num, prefix + ': there should be ' + num + ' groups'); michael@0: } michael@0: michael@0: let assertNumberOfTabs = function (num) { michael@0: is(win.gBrowser.visibleTabs.length, num, prefix + ': there should be ' + num + ' tabs'); michael@0: } michael@0: michael@0: let assertNumberOfPinnedTabs = function (num) { michael@0: is(win.gBrowser._numPinnedTabs, num, prefix + ': there should be ' + num + ' pinned tabs'); michael@0: } michael@0: michael@0: let assertGroupItemPreserved = function () { michael@0: is(cw.GroupItems.groupItems[0].id, groupItemId, prefix + ': groupItem was preserved'); michael@0: } michael@0: michael@0: let assertValidPrerequisites = function () { michael@0: assertNumberOfTabs(1); michael@0: assertNumberOfGroups(1); michael@0: assertNumberOfPinnedTabs(0); michael@0: assertTabViewIsHidden(); michael@0: } michael@0: michael@0: let createTab = function (url) { michael@0: return win.gBrowser.loadOneTab(url || 'http://mochi.test:8888/', {inBackground: true}); michael@0: } michael@0: michael@0: let createBlankTab = function () { michael@0: return createTab('about:blank'); michael@0: } michael@0: michael@0: let finishTest = function () { michael@0: prefix = 'finish'; michael@0: assertValidPrerequisites(); michael@0: promiseWindowClosed(win).then(finish); michael@0: } michael@0: michael@0: let testUndoCloseWithSelectedBlankTab = function () { michael@0: prefix = 'unpinned'; michael@0: let tab = createTab(); michael@0: assertNumberOfTabs(2); michael@0: michael@0: afterAllTabsLoaded(function () { michael@0: win.gBrowser.removeTab(tab); michael@0: assertNumberOfTabs(1); michael@0: assertNumberOfPinnedTabs(0); michael@0: michael@0: restoreTab(function () { michael@0: prefix = 'unpinned-restored'; michael@0: assertValidPrerequisites(); michael@0: assertGroupItemPreserved(); michael@0: michael@0: createBlankTab(); michael@0: afterAllTabsLoaded(testUndoCloseWithSelectedBlankPinnedTab, win); michael@0: }, 0, win); michael@0: }, win); michael@0: } michael@0: michael@0: let testUndoCloseWithSelectedBlankPinnedTab = function () { michael@0: prefix = 'pinned'; michael@0: assertNumberOfTabs(2); michael@0: michael@0: afterAllTabsLoaded(function () { michael@0: win.gBrowser.removeTab(win.gBrowser.tabs[0]); michael@0: win.gBrowser.pinTab(win.gBrowser.tabs[0]); michael@0: michael@0: assertNumberOfTabs(1); michael@0: assertNumberOfPinnedTabs(1); michael@0: michael@0: restoreTab(function () { michael@0: prefix = 'pinned-restored'; michael@0: assertValidPrerequisites(); michael@0: assertGroupItemPreserved(); michael@0: michael@0: createBlankTab(); michael@0: win.gBrowser.removeTab(win.gBrowser.tabs[0]); michael@0: michael@0: afterAllTabsLoaded(finishTest, win); michael@0: }, 0, win); michael@0: }, win); michael@0: } michael@0: michael@0: waitForExplicitFinish(); michael@0: michael@0: newWindowWithTabView(window => { michael@0: win = window; michael@0: michael@0: hideTabView(function () { michael@0: cw = win.TabView.getContentWindow(); michael@0: groupItemId = cw.GroupItems.groupItems[0].id; michael@0: michael@0: assertValidPrerequisites(); michael@0: testUndoCloseWithSelectedBlankTab(); michael@0: }, win); michael@0: }); michael@0: }