summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/tabs/browser_multiselect_tabs_open_related.js
blob: 7751c9c420c068c82ab804a2a624e5482b265d58 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
add_task(async function test() {
  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
  let tab1 = await addTab("http://example.com/1");
  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
  let tab2 = await addTab("http://example.com/2");
  // eslint-disable-next-line @microsoft/sdl/no-insecure-url
  let tab3 = await addTab("http://example.com/3");

  await BrowserTestUtils.switchTab(gBrowser, tab1);
  await triggerClickOn(tab2, { ctrlKey: true });

  ok(tab1.multiselected, "Tab1 is multi-selected");
  ok(tab2.multiselected, "Tab2 is multi-selected");
  ok(!tab3.multiselected, "Tab3 is not multi-selected");

  let metaKeyEvent =
    AppConstants.platform == "macosx" ? { metaKey: true } : { ctrlKey: true };

  let newTabButton = gBrowser.tabContainer.newTabButton;
  let promiseTabOpened = BrowserTestUtils.waitForEvent(
    gBrowser.tabContainer,
    "TabOpen"
  );
  EventUtils.synthesizeMouseAtCenter(newTabButton, metaKeyEvent);
  let openEvent = await promiseTabOpened;
  let newTab = openEvent.target;

  is(
    newTab.previousElementSibling,
    tab1,
    "New tab should be opened after the selected tab (tab1)"
  );
  is(
    newTab.nextElementSibling,
    tab2,
    "New tab should be opened after the selected tab (tab1) and before tab2"
  );
  BrowserTestUtils.removeTab(newTab);

  await BrowserTestUtils.switchTab(gBrowser, tab1);
  ok(!tab1.multiselected, "Tab1 is not multi-selected");
  ok(!tab2.multiselected, "Tab2 is not multi-selected");
  ok(!tab3.multiselected, "Tab3 is not multi-selected");

  promiseTabOpened = BrowserTestUtils.waitForEvent(
    gBrowser.tabContainer,
    "TabOpen"
  );
  EventUtils.synthesizeMouseAtCenter(newTabButton, metaKeyEvent);
  openEvent = await promiseTabOpened;
  newTab = openEvent.target;
  is(
    newTab.previousElementSibling,
    tab1,
    "New tab should be opened after tab1 when only tab1 is selected"
  );
  is(
    newTab.nextElementSibling,
    tab2,
    "New tab should be opened before tab2 when only tab1 is selected"
  );
  BrowserTestUtils.removeTab(newTab);

  await BrowserTestUtils.switchTab(gBrowser, tab1);
  await triggerClickOn(tab3, { ctrlKey: true });
  ok(tab1.multiselected, "Tab1 is multi-selected");
  ok(!tab2.multiselected, "Tab2 is not multi-selected");
  ok(tab3.multiselected, "Tab3 is multi-selected");

  promiseTabOpened = BrowserTestUtils.waitForEvent(
    gBrowser.tabContainer,
    "TabOpen"
  );
  EventUtils.synthesizeMouseAtCenter(newTabButton, metaKeyEvent);
  openEvent = await promiseTabOpened;
  newTab = openEvent.target;
  let previous = gBrowser.tabContainer.findNextTab(newTab, { direction: -1 });
  is(previous, tab1, "New tab should be opened after the selected tab (tab1)");
  let next = gBrowser.tabContainer.findNextTab(newTab, { direction: 1 });
  is(
    next,
    tab2,
    "New tab should be opened after the selected tab (tab1) and before tab2"
  );
  BrowserTestUtils.removeTab(newTab);

  await BrowserTestUtils.switchTab(gBrowser, tab1);
  ok(!tab1.multiselected, "Tab1 is not multi-selected");
  ok(!tab2.multiselected, "Tab2 is not multi-selected");
  ok(!tab3.multiselected, "Tab3 is not multi-selected");

  promiseTabOpened = BrowserTestUtils.waitForEvent(
    gBrowser.tabContainer,
    "TabOpen"
  );
  EventUtils.synthesizeMouseAtCenter(newTabButton, {});
  openEvent = await promiseTabOpened;
  newTab = openEvent.target;
  previous = gBrowser.tabContainer.findNextTab(newTab, { direction: -1 });
  is(
    previous,
    tab3,
    "New tab should be opened after tab3 when ctrlKey is not used without multiselection"
  );
  next = gBrowser.tabContainer.findNextTab(newTab, { direction: 1 });
  is(
    next,
    null,
    "New tab should be opened at the end of the tabstrip when ctrlKey is not used without multiselection"
  );
  BrowserTestUtils.removeTab(newTab);

  await BrowserTestUtils.switchTab(gBrowser, tab1);
  await triggerClickOn(tab2, { ctrlKey: true });
  ok(tab1.multiselected, "Tab1 is multi-selected");
  ok(tab2.multiselected, "Tab2 is multi-selected");
  ok(!tab3.multiselected, "Tab3 is not multi-selected");

  promiseTabOpened = BrowserTestUtils.waitForEvent(
    gBrowser.tabContainer,
    "TabOpen"
  );
  EventUtils.synthesizeMouseAtCenter(newTabButton, {});
  openEvent = await promiseTabOpened;
  newTab = openEvent.target;
  previous = gBrowser.tabContainer.findNextTab(newTab, { direction: -1 });
  is(
    previous,
    tab3,
    "New tab should be opened after tab3 when ctrlKey is not used with multiselection"
  );
  next = gBrowser.tabContainer.findNextTab(newTab, { direction: 1 });
  is(
    next,
    null,
    "New tab should be opened at the end of the tabstrip when ctrlKey is not used with multiselection"
  );
  BrowserTestUtils.removeTab(newTab);

  BrowserTestUtils.removeTab(tab1);
  BrowserTestUtils.removeTab(tab2);
  BrowserTestUtils.removeTab(tab3);
});