Thu, 22 Jan 2015 13:21:57 +0100
Incorporate requested changes from Mozilla in review:
https://bugzilla.mozilla.org/show_bug.cgi?id=1123480#c6
michael@0 | 1 | // -*- Mode: js2; tab-width: 2; indent-tabs-mode: nil; js2-basic-offset: 2; js2-skip-preprocessor-directives: t; -*- |
michael@0 | 2 | /* This Source Code Form is subject to the terms of the Mozilla Public |
michael@0 | 3 | * License, v. 2.0. If a copy of the MPL was not distributed with this |
michael@0 | 4 | * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ |
michael@0 | 5 | |
michael@0 | 6 | "use strict"; |
michael@0 | 7 | |
michael@0 | 8 | let mockTab = function(aName, aIsClosing) { |
michael@0 | 9 | this.name = aName; |
michael@0 | 10 | this.isClosing = aIsClosing; |
michael@0 | 11 | }; |
michael@0 | 12 | |
michael@0 | 13 | mockTab.prototype = { |
michael@0 | 14 | get chromeTab () { |
michael@0 | 15 | let getAttribute = () => this.isClosing; |
michael@0 | 16 | return { |
michael@0 | 17 | hasAttribute: getAttribute |
michael@0 | 18 | } |
michael@0 | 19 | } |
michael@0 | 20 | }; |
michael@0 | 21 | |
michael@0 | 22 | let getMockBrowserTabs = function(aTestTabs, aSelected) { |
michael@0 | 23 | let result = { |
michael@0 | 24 | _tabs: aTestTabs, |
michael@0 | 25 | _selectedTab: aTestTabs[aSelected || 0], |
michael@0 | 26 | getTabAtIndex: function(i) this._tabs[i] |
michael@0 | 27 | }; |
michael@0 | 28 | |
michael@0 | 29 | return [result, Browser.getNextTab.bind(result)]; |
michael@0 | 30 | }; |
michael@0 | 31 | |
michael@0 | 32 | gTests.push({ |
michael@0 | 33 | desc: "Test Browser.getNextTab", |
michael@0 | 34 | run: function() { |
michael@0 | 35 | let [lonlyTab, fakeGetNextTab] = getMockBrowserTabs( |
michael@0 | 36 | [new mockTab("a", false)]); |
michael@0 | 37 | |
michael@0 | 38 | ok(fakeGetNextTab(lonlyTab._selectedTab) == null, "null when only 1 tab left"); |
michael@0 | 39 | ok(fakeGetNextTab(new mockTab("x", false)) == null, "null when tab doesnt exist"); |
michael@0 | 40 | |
michael@0 | 41 | let [twoTabs, fakeGetNextTab] = getMockBrowserTabs( |
michael@0 | 42 | [new mockTab("a", false), new mockTab("b", false)]); |
michael@0 | 43 | ok(fakeGetNextTab(twoTabs._selectedTab).name == "b", "get next tab"); |
michael@0 | 44 | ok(fakeGetNextTab(twoTabs._tabs[1]).name == "a", "get selected tab"); |
michael@0 | 45 | |
michael@0 | 46 | let [twoTabsSecondSelected, fakeGetNextTab] = getMockBrowserTabs( |
michael@0 | 47 | [new mockTab("a", false), new mockTab("b", false)], 1); |
michael@0 | 48 | ok(fakeGetNextTab(twoTabsSecondSelected._selectedTab).name == "a", "get previous tab"); |
michael@0 | 49 | |
michael@0 | 50 | let [twoTabsOneClosing, fakeGetNextTab] = getMockBrowserTabs( |
michael@0 | 51 | [new mockTab("a", false), new mockTab("b", true)]); |
michael@0 | 52 | ok(fakeGetNextTab(twoTabsOneClosing._selectedTab) == null, "can't select closing tab"); |
michael@0 | 53 | ok(fakeGetNextTab(twoTabsOneClosing._tabs[1]).name == "a", "get previous tab"); |
michael@0 | 54 | |
michael@0 | 55 | let [twoTabsBothClosing, fakeGetNextTab] = getMockBrowserTabs( |
michael@0 | 56 | [new mockTab("a", true), new mockTab("b", true)]); |
michael@0 | 57 | ok(fakeGetNextTab(twoTabsBothClosing._selectedTab) == null, "can't select closing tab"); |
michael@0 | 58 | ok(fakeGetNextTab(twoTabsBothClosing._tabs[1]) == null, "can't select closing tab"); |
michael@0 | 59 | |
michael@0 | 60 | let [fiveTabsLastNotClosing, fakeGetNextTab] = getMockBrowserTabs( |
michael@0 | 61 | [new mockTab("a", false), new mockTab("b", true), new mockTab("c", true), new mockTab("d", true), new mockTab("e", false)]); |
michael@0 | 62 | ok(fakeGetNextTab(fiveTabsLastNotClosing._selectedTab).name == "e", "get next non-closing tab"); |
michael@0 | 63 | |
michael@0 | 64 | let [fiveTabsLastNotClosingLastSelected, fakeGetNextTab] = getMockBrowserTabs( |
michael@0 | 65 | [new mockTab("a", false), new mockTab("b", true), new mockTab("c", true), new mockTab("d", true), new mockTab("e", false)], 4); |
michael@0 | 66 | ok(fakeGetNextTab(fiveTabsLastNotClosingLastSelected._selectedTab).name == "a", "get previous non-closing tab"); |
michael@0 | 67 | } |
michael@0 | 68 | }); |
michael@0 | 69 | |
michael@0 | 70 | function test() { |
michael@0 | 71 | runTests(); |
michael@0 | 72 | } |