browser_ctrlTab.js
Go to the documentation of this file.
1 function test() {
2  gPrefService.setBoolPref("browser.ctrlTab.previews", true);
3 
4  gBrowser.addTab();
5  gBrowser.addTab();
6  gBrowser.addTab();
7 
8  assertTabs(4);
9 
10  ctrlTabTest([2] , 1, 0);
11  ctrlTabTest([2, 3, 1], 2, 2);
12  ctrlTabTest([] , 5, 2);
13 
14  {
15  let selectedIndex = gBrowser.tabContainer.selectedIndex;
16  pressCtrlTab();
17  pressCtrlTab(true);
18  releaseCtrl();
19  is(gBrowser.tabContainer.selectedIndex, selectedIndex,
20  "Ctrl+Tab -> Ctrl+Shift+Tab keeps the selected tab");
21  }
22 
23  { // test for bug 445369
24  let tabs = gBrowser.mTabs.length;
25  pressCtrlTab();
26  EventUtils.synthesizeKey("w", { ctrlKey: true });
27  is(gBrowser.mTabs.length, tabs - 1, "Ctrl+Tab -> Ctrl+W removes one tab");
28  releaseCtrl();
29  }
30 
31  assertTabs(3);
32  ctrlTabTest([2, 1, 0], 9, 1);
33 
34  gBrowser.addTab();
35  assertTabs(4);
36 
37  { // test for bug 445369
38  selectTabs([1, 2, 0]);
39 
40  let selectedTab = gBrowser.selectedTab;
41  let tabToRemove = gBrowser.mTabs[1];
42 
43  pressCtrlTab();
44  pressCtrlTab();
45  EventUtils.synthesizeKey("w", { ctrlKey: true });
46  ok(!tabToRemove.parentNode,
47  "Ctrl+Tab*2 -> Ctrl+W removes the second most recently selected tab");
48 
49  pressCtrlTab(true);
50  pressCtrlTab(true);
51  releaseCtrl();
52  ok(gBrowser.selectedTab == selectedTab,
53  "Ctrl+Tab*2 -> Ctrl+W -> Ctrl+Shift+Tab*2 keeps the selected tab");
54  }
55  gBrowser.removeTab(gBrowser.tabContainer.lastChild);
56  assertTabs(2);
57 
58  ctrlTabTest([1], 1, 0);
59 
60  gBrowser.removeTab(gBrowser.tabContainer.lastChild);
61  assertTabs(1);
62 
63  { // test for bug 445768
64  let focusedWindow = document.commandDispatcher.focusedWindow;
65  let eventConsumed = true;
66  let detectKeyEvent = function (event) {
67  eventConsumed = event.getPreventDefault();
68  };
69  document.addEventListener("keypress", detectKeyEvent, false);
70  pressCtrlTab();
71  document.removeEventListener("keypress", detectKeyEvent, false);
72  ok(eventConsumed, "Ctrl+Tab consumed by the tabbed browser if one tab is open");
73  is(focusedWindow, document.commandDispatcher.focusedWindow,
74  "Ctrl+Tab doesn't change focus if one tab is open");
75  }
76 
77  // cleanup
78  if (gPrefService.prefHasUserValue("browser.ctrlTab.previews"))
79  gPrefService.clearUserPref("browser.ctrlTab.previews");
80 
81  /* private utility functions */
82 
83  function pressCtrlTab(aShiftKey)
84  EventUtils.synthesizeKey("VK_TAB", { ctrlKey: true, shiftKey: !!aShiftKey });
85 
86  function releaseCtrl()
87  EventUtils.synthesizeKey("VK_CONTROL", { type: "keyup" });
88 
89  function isOpen()
90  ctrlTab.isOpen;
91 
92  function assertTabs(aTabs) {
93  var tabs = gBrowser.mTabs.length;
94  if (tabs != aTabs) {
95  while (gBrowser.mTabs.length > 1)
96  gBrowser.removeCurrentTab();
97  throw "expected " + aTabs + " open tabs, got " + tabs;
98  }
99  }
100 
101  function selectTabs(tabs) {
102  tabs.forEach(function (index) {
103  gBrowser.selectedTab = gBrowser.mTabs[index];
104  });
105  }
106 
107  function ctrlTabTest(tabsToSelect, tabTimes, expectedIndex) {
108  selectTabs(tabsToSelect);
109 
110  var indexStart = gBrowser.tabContainer.selectedIndex;
111  var tabCount = gBrowser.mTabs.length;
112  var normalized = tabTimes % tabCount;
113  var where = normalized == 1 ? "back to the previously selected tab" :
114  normalized + " tabs back in most-recently-selected order";
115 
116  for (let i = 0; i < tabTimes; i++) {
117  pressCtrlTab();
118 
119  if (tabCount > 2)
120  is(gBrowser.tabContainer.selectedIndex, indexStart,
121  "Selected tab doesn't change while tabbing");
122  }
123 
124  if (tabCount > 2) {
125  ok(isOpen(),
126  "With " + tabCount + " tabs open, Ctrl+Tab opens the preview panel");
127 
128  releaseCtrl();
129 
130  ok(!isOpen(),
131  "Releasing Ctrl closes the preview panel");
132  } else {
133  ok(!isOpen(),
134  "With " + tabCount + " tabs open, Ctrl+Tab doesn't open the preview panel");
135  }
136 
137  is(gBrowser.tabContainer.selectedIndex, expectedIndex,
138  "With "+ tabCount +" tabs open and tab " + indexStart
139  + " selected, Ctrl+Tab*" + tabTimes + " goes " + where);
140  }
141 }
var event
var ctrlTab
return e ctrlKey(chr<' '||!chars||chars.indexOf(chr)>-1)
var tabs
function test()
var gPrefService
Definition: overlay.js:34
_getSelectedPageStyle s i
restoreHistoryPrecursor aTabs