From eb163dee888417f70422197a2a6310e0b7286ce2 Mon Sep 17 00:00:00 2001 From: "Mr. M" Date: Mon, 18 Aug 2025 20:59:35 +0200 Subject: [PATCH] test: Added tests for folder density and max subfolders, b=no-bug, c=folders, tests --- src/zen/folders/ZenFolder.mjs | 2 +- src/zen/folders/ZenFolders.mjs | 7 ++++ src/zen/tests/folders/browser.toml | 2 + .../tests/folders/browser_folder_density.js | 26 +++++++++++++ .../folders/browser_folder_max_subfolders.js | 39 +++++++++++++++++++ src/zen/tests/folders/head.js | 9 +++++ 6 files changed, 84 insertions(+), 1 deletion(-) create mode 100644 src/zen/tests/folders/browser_folder_density.js create mode 100644 src/zen/tests/folders/browser_folder_max_subfolders.js diff --git a/src/zen/folders/ZenFolder.mjs b/src/zen/folders/ZenFolder.mjs index 27cfa6aae..b9f6a2892 100644 --- a/src/zen/folders/ZenFolder.mjs +++ b/src/zen/folders/ZenFolder.mjs @@ -145,7 +145,7 @@ createSubfolder() { gZenFolders.createFolder([], { - renameFolder: true, + renameFolder: !gZenUIManager.testingEnabled, label: 'Subfolder', insertAfter: this.querySelector('.tab-group-container').lastElementChild, }); diff --git a/src/zen/folders/ZenFolders.mjs b/src/zen/folders/ZenFolders.mjs index e09a4bc48..ae290eaba 100644 --- a/src/zen/folders/ZenFolders.mjs +++ b/src/zen/folders/ZenFolders.mjs @@ -81,6 +81,13 @@ return; } this.#lastFolderContextMenu = folder; + + const newSubfolderItem = document.getElementById('context_zenFolderNewSubfolder'); + newSubfolderItem.setAttribute( + 'disabled', + folder.level >= ZEN_MAX_SUBFOLDERS - 1 ? 'true' : 'false' + ); + const changeFolderSpace = document .getElementById('context_zenChangeFolderSpace') .querySelector('menupopup'); diff --git a/src/zen/tests/folders/browser.toml b/src/zen/tests/folders/browser.toml index 2503e4b17..56a07fa1e 100644 --- a/src/zen/tests/folders/browser.toml +++ b/src/zen/tests/folders/browser.toml @@ -11,5 +11,7 @@ support-files = [ ["browser_folder_subfolder.js"] ["browser_folder_basic_toggle.js"] ["browser_folder_owner_tabs.js"] +["browser_folder_density.js"] +["browser_folder_max_subfolders.js"] ["browser_folder_issue_9885.js"] diff --git a/src/zen/tests/folders/browser_folder_density.js b/src/zen/tests/folders/browser_folder_density.js new file mode 100644 index 000000000..e3948fed1 --- /dev/null +++ b/src/zen/tests/folders/browser_folder_density.js @@ -0,0 +1,26 @@ +/* Any copyright is dedicated to the Public Domain. + https://creativecommons.org/publicdomain/zero/1.0/ */ + +'use strict'; + +add_task(async function test_Folder_Density() { + const tab = gBrowser.selectedTab; + const folder = await gZenFolders.createFolder([], { + renameFolder: false, + }); + + let tabRect = tab.getBoundingClientRect(); + let folderRect = folder.labelElement.parentElement.getBoundingClientRect(); + Assert.equal(tabRect.height, folderRect.height, 'Folder height matches tab height'); + Assert.equal(tabRect.width, folderRect.width, 'Folder width matches tab width'); + + gUIDensity.update(gUIDensity.MODE_TOUCH); + + tabRect = tab.getBoundingClientRect(); + folderRect = folder.getBoundingClientRect(); + Assert.equal(tabRect.height, folderRect.height, 'Folder height matches tab height'); + Assert.equal(tabRect.width, folderRect.width, 'Folder width matches tab width'); + + gUIDensity.update(); + await removeFolder(folder); +}); diff --git a/src/zen/tests/folders/browser_folder_max_subfolders.js b/src/zen/tests/folders/browser_folder_max_subfolders.js new file mode 100644 index 000000000..38b488dbb --- /dev/null +++ b/src/zen/tests/folders/browser_folder_max_subfolders.js @@ -0,0 +1,39 @@ +/* Any copyright is dedicated to the Public Domain. + https://creativecommons.org/publicdomain/zero/1.0/ */ + +'use strict'; + +// Keep in sync with the default value for `zen.folders.max-subfolders` +const TEST_MAX_FOLDERS = 5; + +add_task(async function test_Max_Subfolders() { + const folder = await gZenFolders.createFolder([], { + renameFolder: false, + }); + + const subfolderItem = document.getElementById('context_zenFolderNewSubfolder'); + debugger; + let currentFolder = folder; + for (let i = 1; i < TEST_MAX_FOLDERS; i++) { + await openFolderContextMenu(currentFolder); + ok(subfolderItem.getAttribute('disabled') !== 'true', `Subfolder item should be enabled`); + const folderCreateEvent = BrowserTestUtils.waitForEvent(window, 'TabGroupCreate'); + EventUtils.synthesizeMouseAtCenter(subfolderItem, {}); + await folderCreateEvent; + const items = currentFolder.allItems; + Assert.equal(items.length, 2, `Folder should have 2 items`); + ok(gBrowser.isTabGroup(items[1]), `Item should be a tab group`); + currentFolder = items[1]; + } + + await openFolderContextMenu(currentFolder); + Assert.equal( + subfolderItem.getAttribute('disabled'), + 'true', + `Subfolder item should be disabled after reaching max subfolders` + ); + + document.getElementById('zenFolderActions').hidePopup(); + + await removeFolder(folder); +}); diff --git a/src/zen/tests/folders/head.js b/src/zen/tests/folders/head.js index c5abc6200..c65ea72f5 100644 --- a/src/zen/tests/folders/head.js +++ b/src/zen/tests/folders/head.js @@ -9,3 +9,12 @@ async function removeFolder(folder) { folder.delete(); await removeEvent; } + +async function openFolderContextMenu(folder) { + const popup = document.getElementById('zenFolderActions'); + let menuEvent = BrowserTestUtils.waitForEvent(popup, 'popupshown'); + EventUtils.synthesizeMouseAtCenter(folder.labelElement, { + type: 'contextmenu', + }); + await menuEvent; +}