browser/components/sessionstore/test/browser_480148.js

changeset 0
6474c204b198
     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 +}

mercurial