browser/base/content/test/general/browser_ctrlTab.js

changeset 0
6474c204b198
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/browser/base/content/test/general/browser_ctrlTab.js	Wed Dec 31 06:09:35 2014 +0100
     1.3 @@ -0,0 +1,151 @@
     1.4 +function test() {
     1.5 +  gPrefService.setBoolPref("browser.ctrlTab.previews", true);
     1.6 +
     1.7 +  gBrowser.addTab();
     1.8 +  gBrowser.addTab();
     1.9 +  gBrowser.addTab();
    1.10 +
    1.11 +  checkTabs(4);
    1.12 +
    1.13 +  ctrlTabTest([2]      , 1, 0);
    1.14 +  ctrlTabTest([2, 3, 1], 2, 2);
    1.15 +  ctrlTabTest([]       , 4, 2);
    1.16 +
    1.17 +  {
    1.18 +    let selectedIndex = gBrowser.tabContainer.selectedIndex;
    1.19 +    pressCtrlTab();
    1.20 +    pressCtrlTab(true);
    1.21 +    releaseCtrl();
    1.22 +    is(gBrowser.tabContainer.selectedIndex, selectedIndex,
    1.23 +       "Ctrl+Tab -> Ctrl+Shift+Tab keeps the selected tab");
    1.24 +  }
    1.25 +
    1.26 +  { // test for bug 445369
    1.27 +    let tabs = gBrowser.tabs.length;
    1.28 +    pressCtrlTab();
    1.29 +    EventUtils.synthesizeKey("w", { ctrlKey: true });
    1.30 +    is(gBrowser.tabs.length, tabs - 1, "Ctrl+Tab -> Ctrl+W removes one tab");
    1.31 +    releaseCtrl();
    1.32 +  }
    1.33 +
    1.34 +  { // test for bug 667314
    1.35 +    let tabs = gBrowser.tabs.length;
    1.36 +    pressCtrlTab();
    1.37 +    pressCtrlTab(true);
    1.38 +    EventUtils.synthesizeKey("w", { ctrlKey: true });
    1.39 +    is(gBrowser.tabs.length, tabs - 1, "Ctrl+Tab -> Ctrl+W removes the selected tab");
    1.40 +    releaseCtrl();
    1.41 +  }
    1.42 +
    1.43 +  gBrowser.addTab();
    1.44 +  checkTabs(3);
    1.45 +  ctrlTabTest([2, 1, 0], 7, 1);
    1.46 +
    1.47 +  gBrowser.addTab();
    1.48 +  checkTabs(4);
    1.49 +
    1.50 +  { // test for bug 445369
    1.51 +    selectTabs([1, 2, 0]);
    1.52 +
    1.53 +    let selectedTab = gBrowser.selectedTab;
    1.54 +    let tabToRemove = gBrowser.tabs[1];
    1.55 +
    1.56 +    pressCtrlTab();
    1.57 +    pressCtrlTab();
    1.58 +    EventUtils.synthesizeKey("w", { ctrlKey: true });
    1.59 +    ok(!tabToRemove.parentNode,
    1.60 +       "Ctrl+Tab*2 -> Ctrl+W removes the second most recently selected tab");
    1.61 +
    1.62 +    pressCtrlTab(true);
    1.63 +    pressCtrlTab(true);
    1.64 +    releaseCtrl();
    1.65 +    ok(selectedTab.selected,
    1.66 +       "Ctrl+Tab*2 -> Ctrl+W -> Ctrl+Shift+Tab*2 keeps the selected tab");
    1.67 +  }
    1.68 +  gBrowser.removeTab(gBrowser.tabContainer.lastChild);
    1.69 +  checkTabs(2);
    1.70 +
    1.71 +  ctrlTabTest([1], 1, 0);
    1.72 +
    1.73 +  gBrowser.removeTab(gBrowser.tabContainer.lastChild);
    1.74 +  checkTabs(1);
    1.75 +
    1.76 +  { // test for bug 445768
    1.77 +    let focusedWindow = document.commandDispatcher.focusedWindow;
    1.78 +    let eventConsumed = true;
    1.79 +    let detectKeyEvent = function (event) {
    1.80 +      eventConsumed = event.defaultPrevented;
    1.81 +    };
    1.82 +    document.addEventListener("keypress", detectKeyEvent, false);
    1.83 +    pressCtrlTab();
    1.84 +    document.removeEventListener("keypress", detectKeyEvent, false);
    1.85 +    ok(eventConsumed, "Ctrl+Tab consumed by the tabbed browser if one tab is open");
    1.86 +    is(focusedWindow, document.commandDispatcher.focusedWindow,
    1.87 +       "Ctrl+Tab doesn't change focus if one tab is open");
    1.88 +  }
    1.89 +
    1.90 +  // cleanup
    1.91 +  if (gPrefService.prefHasUserValue("browser.ctrlTab.previews"))
    1.92 +    gPrefService.clearUserPref("browser.ctrlTab.previews");
    1.93 +
    1.94 +  /* private utility functions */
    1.95 +
    1.96 +  function pressCtrlTab(aShiftKey)
    1.97 +    EventUtils.synthesizeKey("VK_TAB", { ctrlKey: true, shiftKey: !!aShiftKey });
    1.98 +
    1.99 +  function releaseCtrl()
   1.100 +    EventUtils.synthesizeKey("VK_CONTROL", { type: "keyup" });
   1.101 +
   1.102 +  function isOpen()
   1.103 +    ctrlTab.isOpen;
   1.104 +
   1.105 +  function checkTabs(aTabs) {
   1.106 +    var tabs = gBrowser.tabs.length;
   1.107 +    if (tabs != aTabs) {
   1.108 +      while (gBrowser.tabs.length > 1)
   1.109 +        gBrowser.removeCurrentTab();
   1.110 +      throw "expected " + aTabs + " open tabs, got " + tabs;
   1.111 +    }
   1.112 +  }
   1.113 +
   1.114 +  function selectTabs(tabs) {
   1.115 +    tabs.forEach(function (index) {
   1.116 +      gBrowser.selectedTab = gBrowser.tabs[index];
   1.117 +    });
   1.118 +  }
   1.119 +
   1.120 +  function ctrlTabTest(tabsToSelect, tabTimes, expectedIndex) {
   1.121 +    selectTabs(tabsToSelect);
   1.122 +
   1.123 +    var indexStart = gBrowser.tabContainer.selectedIndex;
   1.124 +    var tabCount = gBrowser.tabs.length;
   1.125 +    var normalized = tabTimes % tabCount;
   1.126 +    var where = normalized == 1 ? "back to the previously selected tab" :
   1.127 +                normalized + " tabs back in most-recently-selected order";
   1.128 +
   1.129 +    for (let i = 0; i < tabTimes; i++) {
   1.130 +      pressCtrlTab();
   1.131 +
   1.132 +      if (tabCount > 2)
   1.133 +       is(gBrowser.tabContainer.selectedIndex, indexStart,
   1.134 +         "Selected tab doesn't change while tabbing");
   1.135 +    }
   1.136 +
   1.137 +    if (tabCount > 2) {
   1.138 +      ok(isOpen(),
   1.139 +         "With " + tabCount + " tabs open, Ctrl+Tab opens the preview panel");
   1.140 +
   1.141 +      releaseCtrl();
   1.142 +
   1.143 +      ok(!isOpen(),
   1.144 +         "Releasing Ctrl closes the preview panel");
   1.145 +    } else {
   1.146 +      ok(!isOpen(),
   1.147 +         "With " + tabCount + " tabs open, Ctrl+Tab doesn't open the preview panel");
   1.148 +    }
   1.149 +
   1.150 +    is(gBrowser.tabContainer.selectedIndex, expectedIndex,
   1.151 +       "With "+ tabCount +" tabs open and tab " + indexStart
   1.152 +       + " selected, Ctrl+Tab*" + tabTimes + " goes " + where);
   1.153 +  }
   1.154 +}

mercurial