Source code

Revision control

Copy as Markdown

Other Tools

Test Info:

/* Any copyright is dedicated to the Public Domain.
*/
add_task(async function () {
function testSelectedTabs(tabs) {
is(
gBrowser.tabContainer.getAttribute("aria-multiselectable"),
"true",
"tabbrowser should be marked as aria-multiselectable"
);
gBrowser.selectedTabs = tabs;
let { selectedTab, selectedTabs, _multiSelectedTabsSet } = gBrowser;
is(selectedTab, tabs[0], "The selected tab should be the expected one");
if (tabs.length == 1) {
ok(
!selectedTab.multiselected,
"Selected tab shouldn't be multi-selected because we are not in multi-select context yet"
);
ok(
!_multiSelectedTabsSet.has(selectedTab),
"Selected tab shouldn't be in _multiSelectedTabsSet"
);
is(selectedTabs.length, 1, "selectedTabs should contain a single tab");
is(
selectedTabs[0],
selectedTab,
"selectedTabs should contain the selected tab"
);
ok(
!selectedTab.hasAttribute("aria-selected"),
"Selected tab shouldn't be marked as aria-selected when only one tab is selected"
);
} else {
const uniqueTabs = [...new Set(tabs)];
is(
selectedTabs.length,
uniqueTabs.length,
"Check number of selected tabs"
);
for (let tab of uniqueTabs) {
ok(tab.multiselected, "Tab should be multi-selected");
ok(
_multiSelectedTabsSet.has(tab),
"Tab should be in _multiSelectedTabsSet"
);
ok(selectedTabs.includes(tab), "Tab should be in selectedTabs");
is(
tab.getAttribute("aria-selected"),
"true",
"Selected tab should be marked as aria-selected"
);
}
}
}
const tab1 = await addTab();
const tab2 = await addTab();
const tab3 = await addTab();
testSelectedTabs([tab1]);
testSelectedTabs([tab2]);
testSelectedTabs([tab2, tab1]);
testSelectedTabs([tab1, tab2]);
testSelectedTabs([tab3, tab2]);
testSelectedTabs([tab3, tab1]);
testSelectedTabs([tab1, tab2, tab1]);
BrowserTestUtils.removeTab(tab1);
BrowserTestUtils.removeTab(tab2);
BrowserTestUtils.removeTab(tab3);
});