summaryrefslogtreecommitdiffstats
path: root/browser/base/content/test/tabs/browser_multiselect_tabs_using_selectedTabs.js
blob: 0db980bf6b82675064241ea5f45c27bba56763f2 (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
/* Any copyright is dedicated to the Public Domain.
 * http://creativecommons.org/publicdomain/zero/1.0/
 */

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