From 6bf0a5cb5034a7e684dcc3500e841785237ce2dd Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sun, 7 Apr 2024 19:32:43 +0200 Subject: Adding upstream version 1:115.7.0. Signed-off-by: Daniel Baumann --- .../test/tabs/browser_multiselect_tabs_event.js | 220 +++++++++++++++++++++ 1 file changed, 220 insertions(+) create mode 100644 browser/base/content/test/tabs/browser_multiselect_tabs_event.js (limited to 'browser/base/content/test/tabs/browser_multiselect_tabs_event.js') diff --git a/browser/base/content/test/tabs/browser_multiselect_tabs_event.js b/browser/base/content/test/tabs/browser_multiselect_tabs_event.js new file mode 100644 index 0000000000..992cf75e5e --- /dev/null +++ b/browser/base/content/test/tabs/browser_multiselect_tabs_event.js @@ -0,0 +1,220 @@ +/* eslint-disable mozilla/no-arbitrary-setTimeout */ + +add_task(async function clickWithPrefSet() { + let detectUnexpected = true; + window.addEventListener("TabMultiSelect", () => { + if (detectUnexpected) { + ok(false, "Shouldn't get unexpected event"); + } + }); + async function expectEvent(callback, expectedTabs) { + let event = new Promise(resolve => { + detectUnexpected = false; + window.addEventListener( + "TabMultiSelect", + () => { + detectUnexpected = true; + resolve(); + }, + { once: true } + ); + }); + await callback(); + await event; + ok(true, "Got TabMultiSelect event"); + expectSelected(expectedTabs); + // Await some time to ensure no additional event is triggered + await new Promise(resolve => setTimeout(resolve, 100)); + } + async function expectNoEvent(callback, expectedTabs) { + await callback(); + expectSelected(expectedTabs); + // Await some time to ensure no event is triggered + await new Promise(resolve => setTimeout(resolve, 100)); + } + function expectSelected(expected) { + let { selectedTabs } = gBrowser; + is(selectedTabs.length, expected.length, "Check number of selected tabs"); + for ( + let i = 0, n = Math.min(expected.length, selectedTabs.length); + i < n; + ++i + ) { + is(selectedTabs[i], expected[i], `Check the selected tab #${i + 1}`); + } + } + + let initialTab = gBrowser.selectedTab; + let tab1, tab2, tab3; + + info("Expect no event when opening tabs"); + await expectNoEvent(async () => { + tab1 = await addTab(); + tab2 = await addTab(); + tab3 = await addTab(); + }, [initialTab]); + + info("Switching tab should trigger event"); + await expectEvent(async () => { + await BrowserTestUtils.switchTab(gBrowser, tab1); + }, [tab1]); + + info("Multiselecting tab with Ctrl+click should trigger event"); + await expectEvent(async () => { + await triggerClickOn(tab2, { ctrlKey: true }); + }, [tab1, tab2]); + + info("Unselecting tab with Ctrl+click should trigger event"); + await expectEvent(async () => { + await triggerClickOn(tab2, { ctrlKey: true }); + }, [tab1]); + + info("Multiselecting tabs with Shift+click should trigger event"); + await expectEvent(async () => { + await triggerClickOn(tab3, { shiftKey: true }); + }, [tab1, tab2, tab3]); + + info("Expect no event if multiselection doesn't change with Shift+click"); + await expectNoEvent(async () => { + await triggerClickOn(tab3, { shiftKey: true }); + }, [tab1, tab2, tab3]); + + info( + "Expect no event if multiselection doesn't change with Ctrl+Shift+click" + ); + await expectNoEvent(async () => { + await triggerClickOn(tab2, { ctrlKey: true, shiftKey: true }); + }, [tab1, tab2, tab3]); + + info( + "Expect no event if selected tab doesn't change with gBrowser.selectedTab" + ); + await expectNoEvent(async () => { + gBrowser.selectedTab = tab1; + }, [tab1, tab2, tab3]); + + info( + "Clearing multiselection by switching tab with gBrowser.selectedTab should trigger event" + ); + await expectEvent(async () => { + await BrowserTestUtils.switchTab(gBrowser, () => { + gBrowser.selectedTab = tab3; + }); + }, [tab3]); + + info( + "Click on the active and the only mutliselected tab should not trigger event" + ); + await expectNoEvent(async () => { + await triggerClickOn(tab3, {}); + }, [tab3]); + + info( + "Expect no event if selected tab doesn't change with gBrowser.selectedTabs" + ); + gBrowser.selectedTabs = [tab3]; + expectSelected([tab3]); + + info("Multiselecting tabs with gBrowser.selectedTabs should trigger event"); + await expectEvent(async () => { + gBrowser.selectedTabs = [tab3, tab2, tab1]; + }, [tab1, tab2, tab3]); + + info( + "Expect no event if multiselection doesn't change with gBrowser.selectedTabs" + ); + await expectNoEvent(async () => { + gBrowser.selectedTabs = [tab3, tab1, tab2]; + }, [tab1, tab2, tab3]); + + info("Switching tab with gBrowser.selectedTabs should trigger event"); + await expectEvent(async () => { + gBrowser.selectedTabs = [tab1, tab2, tab3]; + }, [tab1, tab2, tab3]); + + info( + "Unmultiselection tab with removeFromMultiSelectedTabs should trigger event" + ); + await expectEvent(async () => { + gBrowser.removeFromMultiSelectedTabs(tab3); + }, [tab1, tab2]); + + info("Expect no event if the tab is not multiselected"); + await expectNoEvent(async () => { + gBrowser.removeFromMultiSelectedTabs(tab3); + }, [tab1, tab2]); + + info( + "Clearing multiselection with clearMultiSelectedTabs should trigger event" + ); + await expectEvent(async () => { + gBrowser.clearMultiSelectedTabs(); + }, [tab1]); + + info("Expect no event if there is no multiselection to clear"); + await expectNoEvent(async () => { + gBrowser.clearMultiSelectedTabs(); + }, [tab1]); + + info( + "Expect no event if clearMultiSelectedTabs counteracts addToMultiSelectedTabs" + ); + await expectNoEvent(async () => { + gBrowser.addToMultiSelectedTabs(tab3); + gBrowser.clearMultiSelectedTabs(); + }, [tab1]); + + info( + "Multiselecting tab with gBrowser.addToMultiSelectedTabs should trigger event" + ); + await expectEvent(async () => { + gBrowser.addToMultiSelectedTabs(tab2); + }, [tab1, tab2]); + + info( + "Expect no event if addToMultiSelectedTabs counteracts clearMultiSelectedTabs" + ); + await expectNoEvent(async () => { + gBrowser.clearMultiSelectedTabs(); + gBrowser.addToMultiSelectedTabs(tab1); + gBrowser.addToMultiSelectedTabs(tab2); + }, [tab1, tab2]); + + info( + "Expect no event if removeFromMultiSelectedTabs counteracts addToMultiSelectedTabs" + ); + await expectNoEvent(async () => { + gBrowser.addToMultiSelectedTabs(tab3); + gBrowser.removeFromMultiSelectedTabs(tab3); + }, [tab1, tab2]); + + info( + "Expect no event if addToMultiSelectedTabs counteracts removeFromMultiSelectedTabs" + ); + await expectNoEvent(async () => { + gBrowser.removeFromMultiSelectedTabs(tab2); + gBrowser.addToMultiSelectedTabs(tab2); + }, [tab1, tab2]); + + info("Multiselection with addRangeToMultiSelectedTabs should trigger event"); + await expectEvent(async () => { + gBrowser.addRangeToMultiSelectedTabs(tab1, tab3); + }, [tab1, tab2, tab3]); + + info("Switching to a just multiselected tab should multiselect the old one"); + await expectEvent(async () => { + gBrowser.clearMultiSelectedTabs(); + }, [tab1]); + await expectEvent(async () => { + is(tab1.multiselected, false, "tab1 is not multiselected"); + gBrowser.addToMultiSelectedTabs(tab2); + gBrowser.lockClearMultiSelectionOnce(); + gBrowser.selectedTab = tab2; + }, [tab1, tab2]); + is(tab1.multiselected, true, "tab1 becomes multiselected"); + + detectUnexpected = false; + BrowserTestUtils.removeTab(tab1); + BrowserTestUtils.removeTab(tab2); + BrowserTestUtils.removeTab(tab3); +}); -- cgit v1.2.3