test: Added tests for folder collapse bug fix, b=closes #9981, c=folders, tests

This commit is contained in:
Mr. M
2025-08-24 12:06:46 +02:00
parent a65bac9b8a
commit 06090d7236
5 changed files with 87 additions and 3 deletions

View File

@@ -1219,7 +1219,11 @@
let itemHeight = 0;
for (const item of group.allItems) {
itemHeight += item.getBoundingClientRect().height;
if (item.hasAttribute('folder-active') && (!item.selected || !onlyIfActive)) {
if (
item.hasAttribute('folder-active') &&
(!item.selected || !onlyIfActive) &&
(selectedTab ? item === selectedTab : true)
) {
item.removeAttribute('folder-active');
if (!onlyIfActive) {
item.setAttribute('was-folder-active', 'true');

View File

@@ -17,5 +17,7 @@ support-files = [
["browser_folder_multiselected.js"]
["browser_folder_visible_tabs.js"]
["browser_folder_level_checks.js"]
["browser_folder_reset_button.js"]
["browser_folder_issue_9885.js"]
["browser_folder_issue_9981.js"]

View File

@@ -0,0 +1,40 @@
/* Any copyright is dedicated to the Public Domain.
https://creativecommons.org/publicdomain/zero/1.0/ */
'use strict';
add_task(async function test_Issue_9981() {
const selectedTab = gBrowser.selectedTab;
const tab1 = BrowserTestUtils.addTab(gBrowser, 'about:blank');
const tab2 = BrowserTestUtils.addTab(gBrowser, 'about:blank');
const folder = await gZenFolders.createFolder([tab1, tab2], {});
gBrowser.selectedTab = tab2;
gBrowser.addRangeToMultiSelectedTabs(tab1, tab2);
ok(tab1.multiselected, 'Tab 1 should be multiselected');
ok(tab2.multiselected, 'Tab 2 should be multiselected');
Assert.equal(gBrowser.multiSelectedTabsCount, 2, 'There should be 2 multiselected tabs');
await new Promise((resolve) => setTimeout(resolve, 0));
const collapseEvent = BrowserTestUtils.waitForEvent(window, 'TabGroupCollapse');
EventUtils.synthesizeMouseAtCenter(folder.labelElement, {});
await collapseEvent;
gBrowser.clearMultiSelectedTabs();
gBrowser.selectedTab = selectedTab;
Assert.equal(folder.activeTabs.length, 2, 'Folder should have 2 active tabs');
ok(tab1.hasAttribute('folder-active'), 'Tab 1 should be in the active folder');
ok(tab2.hasAttribute('folder-active'), 'Tab 2 should be in the active folder');
const tab2ResetButton = tab2.querySelector('.tab-reset-button');
tab2ResetButton.style.display = 'flex';
EventUtils.synthesizeMouseAtCenter(tab2ResetButton, {});
ok(tab1.hasAttribute('folder-active'), 'Tab 1 should be in the active folder');
ok(!tab2.hasAttribute('folder-active'), 'Tab 2 should not be in the active folder');
await removeFolder(folder);
});

View File

@@ -18,8 +18,8 @@ add_task(async function test_Folder_Multiselected_Tabs() {
folder.collapsed = true;
await collapseEvent;
ok(!tab2.multiselected, 'Tab 2 should not be multiselected');
Assert.equal(gBrowser.multiSelectedTabsCount, 0, 'There should be 1 multiselected tab');
ok(tab2.multiselected, 'Tab 2 should not be multiselected');
Assert.equal(gBrowser.multiSelectedTabsCount, 3, 'There should be 3 multiselected tabs');
for (const t of [tab1, tab2]) {
BrowserTestUtils.removeTab(t);

View File

@@ -0,0 +1,38 @@
/* Any copyright is dedicated to the Public Domain.
https://creativecommons.org/publicdomain/zero/1.0/ */
'use strict';
add_task(async function test_Issue_() {
const selectedTab = gBrowser.selectedTab;
const tab1 = BrowserTestUtils.addTab(gBrowser, 'about:blank');
const tab2 = BrowserTestUtils.addTab(gBrowser, 'about:blank');
const folder = await gZenFolders.createFolder([tab1, tab2], {});
gBrowser.selectedTab = tab2;
gBrowser.addRangeToMultiSelectedTabs(tab1, tab2);
ok(tab1.multiselected, 'Tab 1 should be multiselected');
ok(tab2.multiselected, 'Tab 2 should be multiselected');
Assert.equal(gBrowser.multiSelectedTabsCount, 2, 'There should be 2 multiselected tabs');
await new Promise((resolve) => setTimeout(resolve, 0));
const collapseEvent = BrowserTestUtils.waitForEvent(window, 'TabGroupCollapse');
EventUtils.synthesizeMouseAtCenter(folder.labelElement, {});
await collapseEvent;
gBrowser.clearMultiSelectedTabs();
gBrowser.selectedTab = selectedTab;
Assert.equal(folder.activeTabs.length, 2, 'Folder should have 2 active tabs');
ok(tab1.hasAttribute('folder-active'), 'Tab 1 should be in the active folder');
ok(tab2.hasAttribute('folder-active'), 'Tab 2 should be in the active folder');
EventUtils.synthesizeMouseAtCenter(folder.resetButton, {});
ok(!tab1.hasAttribute('folder-active'), 'Tab 1 should not be in the active folder');
ok(!tab2.hasAttribute('folder-active'), 'Tab 2 should not be in the active folder');
await removeFolder(folder);
});