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/browser_pocket_button_icon_state.js | 131 +++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 browser/components/pocket/test/browser_pocket_button_icon_state.js (limited to 'browser/components/pocket/test/browser_pocket_button_icon_state.js') diff --git a/browser/components/pocket/test/browser_pocket_button_icon_state.js b/browser/components/pocket/test/browser_pocket_button_icon_state.js new file mode 100644 index 0000000000..a11e7c43e0 --- /dev/null +++ b/browser/components/pocket/test/browser_pocket_button_icon_state.js @@ -0,0 +1,131 @@ +/* Any copyright is dedicated to the Public Domain. + * http://creativecommons.org/publicdomain/zero/1.0/ */ +"use strict"; + +ChromeUtils.defineESModuleGetters(this, { + SaveToPocket: "chrome://pocket/content/SaveToPocket.sys.mjs", +}); + +function test_runner(test) { + let testTask = async () => { + // Before each + const sandbox = sinon.createSandbox(); + + // We're faking logged in tests, so initially we need to fake the logged in state. + sandbox.stub(pktApi, "isUserLoggedIn").callsFake(() => true); + + // Also we cannot actually make remote requests, so make sure we stub any functions + // we need that that make requests to api.getpocket.com. + sandbox.stub(pktApi, "addLink").callsFake(() => true); + + try { + await test({ sandbox }); + } finally { + // After each + sandbox.restore(); + } + }; + + // Copy the name of the test function to identify the test + Object.defineProperty(testTask, "name", { value: test.name }); + add_task(testTask); +} + +async function isPocketPanelShown() { + info("clicking on pocket button in toolbar"); + // The panel is created on the fly, so we can't simply wait for focus + // inside it. + let pocketPanelShowing = BrowserTestUtils.waitForEvent( + document, + "popupshown", + true + ); + return pocketPanelShowing; +} + +async function isPocketPanelHidden() { + let pocketPanelHidden = BrowserTestUtils.waitForEvent( + document, + "popuphidden" + ); + return pocketPanelHidden; +} + +function fakeSavingPage() { + // Because we're not actually logged into a remote Pocket account, + // and because we're not actually saving anything, + // we fake it, instead, by calling the function we care about. + SaveToPocket.itemSaved(); + // This fakes the button from just opened, to also pocketed, + // we currently expect both from a save. + SaveToPocket.updateToolbarNodeState(window); +} + +function checkPanelOpen() { + let pocketButton = document.getElementById("save-to-pocket-button"); + // The Pocket button should be set to open. + is(pocketButton.open, true, "Pocket button is open"); + is(pocketButton.getAttribute("pocketed"), "true", "Pocket item is pocketed"); +} + +function checkPanelClosed() { + let pocketButton = document.getElementById("save-to-pocket-button"); + // Something should have closed the Pocket panel, icon should no longer be red. + is(pocketButton.open, false, "Pocket button is closed"); + is(pocketButton.getAttribute("pocketed"), "", "Pocket item is not pocketed"); +} + +test_runner(async function test_pocketButtonState_changeTabs({ sandbox }) { + let tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "https://example.com/browser/browser/components/pocket/test/test.html" + ); + + let pocketPanelShown = isPocketPanelShown(); + let pocketButton = document.getElementById("save-to-pocket-button"); + pocketButton.click(); + await pocketPanelShown; + fakeSavingPage(); + + // Testing the panel states. + checkPanelOpen(); + + let pocketPanelHidden = isPocketPanelHidden(); + // Mochitests start with an open tab, so use that to trigger a tab change. + await BrowserTestUtils.switchTab(gBrowser, gBrowser.tabs[0]); + await pocketPanelHidden; + + // Testing the panel states. + checkPanelClosed(); + + BrowserTestUtils.removeTab(tab); +}); + +test_runner(async function test_pocketButtonState_changeLocation({ sandbox }) { + let tab = await BrowserTestUtils.openNewForegroundTab( + gBrowser, + "https://example.com/browser/browser/components/pocket/test/test.html" + ); + + let pocketPanelShown = isPocketPanelShown(); + let pocketButton = document.getElementById("save-to-pocket-button"); + pocketButton.click(); + await pocketPanelShown; + fakeSavingPage(); + + // Testing the panel states. + checkPanelOpen(); + + let pocketPanelHidden = isPocketPanelHidden(); + // Simulate a location change, and check the panel state. + let browser = gBrowser.selectedBrowser; + let loaded = BrowserTestUtils.browserLoaded(browser); + BrowserTestUtils.loadURIString(browser, "about:robots"); + await loaded; + await pocketPanelHidden; + + // Testing the panel states. + checkPanelClosed(); + + BrowserTestUtils.removeTab(tab); +}); -- cgit v1.2.3