1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/browser/components/sessionstore/test/browser_480148.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,216 @@ 1.4 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.5 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.6 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.7 + 1.8 +function test() { 1.9 + /** Test for Bug 484108 **/ 1.10 + waitForExplicitFinish(); 1.11 + requestLongerTimeout(5); 1.12 + 1.13 + // builds the tests state based on a few parameters 1.14 + function buildTestState(num, selected, hidden, pinned) { 1.15 + let state = { windows: [ { "tabs": [], "selected": selected + 1 } ] }; 1.16 + while (num--) { 1.17 + state.windows[0].tabs.push({ 1.18 + entries: [ 1.19 + { url: "http://example.com/?t=" + state.windows[0].tabs.length } 1.20 + ] 1.21 + }); 1.22 + let i = state.windows[0].tabs.length - 1; 1.23 + if (hidden.length > 0 && i == hidden[0]) { 1.24 + state.windows[0].tabs[i].hidden = true; 1.25 + hidden.splice(0, 1); 1.26 + } 1.27 + if (pinned.length > 0 && i == pinned[0]) { 1.28 + state.windows[0].tabs[i].pinned = true; 1.29 + pinned.splice(0, 1); 1.30 + } 1.31 + } 1.32 + return state; 1.33 + } 1.34 + 1.35 + let tests = [ 1.36 + { testNum: 1, 1.37 + totalTabs: 13, 1.38 + selectedTab: 0, 1.39 + shownTabs: 6, 1.40 + hiddenTabs: [], 1.41 + pinnedTabs: [], 1.42 + order: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 1.43 + }, 1.44 + { testNum: 2, 1.45 + totalTabs: 13, 1.46 + selectedTab: 12, 1.47 + shownTabs: 6, 1.48 + hiddenTabs: [], 1.49 + pinnedTabs: [], 1.50 + order: [12, 7, 8, 9, 10, 11, 0, 1, 2, 3, 4, 5, 6] 1.51 + }, 1.52 + { testNum: 3, 1.53 + totalTabs: 13, 1.54 + selectedTab: 3, 1.55 + shownTabs: 6, 1.56 + hiddenTabs: [], 1.57 + pinnedTabs: [], 1.58 + order: [3, 4, 5, 6, 7, 8, 0, 1, 2, 9, 10, 11, 12] 1.59 + }, 1.60 + { testNum: 4, 1.61 + totalTabs: 13, 1.62 + selectedTab: 10, 1.63 + shownTabs: 6, 1.64 + hiddenTabs: [], 1.65 + pinnedTabs: [], 1.66 + order: [10, 7, 8, 9, 11, 12, 0, 1, 2, 3, 4, 5, 6] 1.67 + }, 1.68 + { testNum: 5, 1.69 + totalTabs: 13, 1.70 + selectedTab: 12, 1.71 + shownTabs: 6, 1.72 + hiddenTabs: [0, 4, 9], 1.73 + pinnedTabs: [], 1.74 + order: [12, 6, 7, 8, 10, 11, 1, 2, 3, 5, 0, 4, 9] 1.75 + }, 1.76 + { testNum: 6, 1.77 + totalTabs: 13, 1.78 + selectedTab: 3, 1.79 + shownTabs: 6, 1.80 + hiddenTabs: [1, 7, 12], 1.81 + pinnedTabs: [], 1.82 + order: [3, 4, 5, 6, 8, 9, 0, 2, 10, 11, 1, 7, 12] 1.83 + }, 1.84 + { testNum: 7, 1.85 + totalTabs: 13, 1.86 + selectedTab: 3, 1.87 + shownTabs: 6, 1.88 + hiddenTabs: [0, 1, 2], 1.89 + pinnedTabs: [], 1.90 + order: [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 0, 1, 2] 1.91 + }, 1.92 + { testNum: 8, 1.93 + totalTabs: 13, 1.94 + selectedTab: 0, 1.95 + shownTabs: 6, 1.96 + hiddenTabs: [], 1.97 + pinnedTabs: [0], 1.98 + order: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 1.99 + }, 1.100 + { testNum: 9, 1.101 + totalTabs: 13, 1.102 + selectedTab: 1, 1.103 + shownTabs: 6, 1.104 + hiddenTabs: [], 1.105 + pinnedTabs: [0], 1.106 + order: [1, 0, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 1.107 + }, 1.108 + { testNum: 10, 1.109 + totalTabs: 13, 1.110 + selectedTab: 3, 1.111 + shownTabs: 6, 1.112 + hiddenTabs: [2], 1.113 + pinnedTabs: [0,1], 1.114 + order: [3, 0, 1, 4, 5, 6, 7, 8, 9, 10, 11, 12, 2] 1.115 + }, 1.116 + { testNum: 11, 1.117 + totalTabs: 13, 1.118 + selectedTab: 12, 1.119 + shownTabs: 6, 1.120 + hiddenTabs: [], 1.121 + pinnedTabs: [0,1,2], 1.122 + order: [12, 0, 1, 2, 7, 8, 9, 10, 11, 3, 4, 5, 6] 1.123 + }, 1.124 + { testNum: 12, 1.125 + totalTabs: 13, 1.126 + selectedTab: 6, 1.127 + shownTabs: 6, 1.128 + hiddenTabs: [3,4,5], 1.129 + pinnedTabs: [0,1,2], 1.130 + order: [6, 0, 1, 2, 7, 8, 9, 10, 11, 12, 3, 4, 5] 1.131 + }, 1.132 + { testNum: 13, 1.133 + totalTabs: 13, 1.134 + selectedTab: 1, 1.135 + shownTabs: 6, 1.136 + hiddenTabs: [3,4,5], 1.137 + pinnedTabs: [0,1,2], 1.138 + order: [1, 0, 2, 6, 7, 8, 9, 10, 11, 12, 3, 4, 5] 1.139 + }, 1.140 + { testNum: 14, 1.141 + totalTabs: 13, 1.142 + selectedTab: 2, 1.143 + shownTabs: 6, 1.144 + hiddenTabs: [], 1.145 + pinnedTabs: [0,1,2], 1.146 + order: [2, 0, 1, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] 1.147 + }, 1.148 + { testNum: 15, 1.149 + totalTabs: 13, 1.150 + selectedTab: 3, 1.151 + shownTabs: 6, 1.152 + hiddenTabs: [1,4], 1.153 + pinnedTabs: [0,1,2], 1.154 + order: [3, 0, 1, 2, 5, 6, 7, 8, 9, 10, 11, 12, 4] 1.155 + } 1.156 + ]; 1.157 + 1.158 + let tabMinWidth = 1.159 + parseInt(getComputedStyle(gBrowser.selectedTab, null).minWidth); 1.160 + let testIndex = 0; 1.161 + 1.162 + function runNextTest() { 1.163 + if (tests.length == 0) { 1.164 + finish(); 1.165 + return; 1.166 + } 1.167 + 1.168 + let wu = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor) 1.169 + .getInterface(Components.interfaces.nsIDOMWindowUtils); 1.170 + wu.garbageCollect(); 1.171 + 1.172 + setTimeout(function() { 1.173 + info ("Starting test " + (++testIndex)); 1.174 + let test = tests.shift(); 1.175 + let state = buildTestState(test.totalTabs, test.selectedTab, 1.176 + test.hiddenTabs, test.pinnedTabs); 1.177 + let tabbarWidth = Math.floor((test.shownTabs - 0.5) * tabMinWidth); 1.178 + let win = openDialog(location, "_blank", "chrome,all,dialog=no"); 1.179 + let tabsRestored = []; 1.180 + 1.181 + win.addEventListener("SSTabRestoring", function onSSTabRestoring(aEvent) { 1.182 + let tab = aEvent.originalTarget; 1.183 + let tabLink = tab.linkedBrowser.currentURI.spec; 1.184 + let tabIndex = 1.185 + tabLink.substring(tabLink.indexOf("?t=") + 3, tabLink.length); 1.186 + 1.187 + // we need to compare with the tab's restoring index, no with the 1.188 + // position index, since the pinned tabs change the positions in the 1.189 + // tabbar. 1.190 + tabsRestored.push(tabIndex); 1.191 + 1.192 + if (tabsRestored.length < state.windows[0].tabs.length) 1.193 + return; 1.194 + 1.195 + // all of the tabs should be restoring or restored by now 1.196 + is(tabsRestored.length, state.windows[0].tabs.length, 1.197 + "Test #" + testIndex + ": Number of restored tabs is as expected"); 1.198 + 1.199 + is(tabsRestored.join(" "), test.order.join(" "), 1.200 + "Test #" + testIndex + ": 'visible' tabs restored first"); 1.201 + 1.202 + // cleanup 1.203 + win.removeEventListener("SSTabRestoring", onSSTabRestoring, false); 1.204 + win.close(); 1.205 + executeSoon(runNextTest); 1.206 + }, false); 1.207 + 1.208 + whenWindowLoaded(win, function(aEvent) { 1.209 + let extent = 1.210 + win.outerWidth - win.gBrowser.tabContainer.mTabstrip.scrollClientSize; 1.211 + let windowWidth = tabbarWidth + extent; 1.212 + win.resizeTo(windowWidth, win.outerHeight); 1.213 + ss.setWindowState(win, JSON.stringify(state), true); 1.214 + }); 1.215 + }, 1000); 1.216 + }; 1.217 + 1.218 + runNextTest(); 1.219 +}