Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

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);
});