diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /devtools/client/debugger/test/mochitest/browser_dbg-fission-frame-breakpoint.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'devtools/client/debugger/test/mochitest/browser_dbg-fission-frame-breakpoint.js')
-rw-r--r-- | devtools/client/debugger/test/mochitest/browser_dbg-fission-frame-breakpoint.js | 101 |
1 files changed, 101 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/browser_dbg-fission-frame-breakpoint.js b/devtools/client/debugger/test/mochitest/browser_dbg-fission-frame-breakpoint.js new file mode 100644 index 0000000000..fa447fa832 --- /dev/null +++ b/devtools/client/debugger/test/mochitest/browser_dbg-fission-frame-breakpoint.js @@ -0,0 +1,101 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */ + +"use strict"; + +const TEST_COM_URI = `${URL_ROOT_COM_SSL}examples/doc_dbg-fission-frame-sources.html`; + +add_task(async function () { + // Load a test page with a remote frame: + // simple1.js is imported by the main page. simple2.js comes from the remote frame. + const dbg = await initDebuggerWithAbsoluteURL( + TEST_COM_URI, + "simple1.js", + "simple2.js" + ); + const { + selectors: { getSelectedSource }, + } = dbg; + + // Check threads + await waitForElement(dbg, "threadsPaneItems"); + let threadsEl = findAllElements(dbg, "threadsPaneItems"); + is(threadsEl.length, 2, "There are two threads in the thread panel"); + ok( + Array.from(threadsEl).every( + el => !isThreadElementPaused(el) && !getThreadElementPausedBadge(el) + ), + "No threads are paused" + ); + + // Add breakpoint within the iframe, which is hit early on load + await selectSource(dbg, "simple2.js"); + await addBreakpoint(dbg, "simple2.js", 7); + + const onBreakpoint = waitForDispatch(dbg.store, "SET_BREAKPOINT"); + info("Reload the page to hit the breakpoint on load"); + const onReloaded = reload(dbg); + await onBreakpoint; + await waitForSelectedSource(dbg, "simple2.js"); + + ok( + getSelectedSource().url.includes("simple2.js"), + "Selected source is simple2.js" + ); + await waitForPaused(dbg); + assertPausedAtSourceAndLine(dbg, findSource(dbg, "simple2.js").id, 7); + + await waitForElement(dbg, "threadsPaneItems"); + threadsEl = findAllElements(dbg, "threadsPaneItems"); + is(threadsEl.length, 2, "There are two threads in the thread panel"); + const [mainThreadEl, remoteThreadEl] = threadsEl; + is( + mainThreadEl.textContent, + "Main Thread", + "first thread displayed is the main thread" + ); + ok( + !isThreadElementPaused(mainThreadEl), + "Main Thread does not have the paused styling" + ); + ok( + !getThreadElementPausedBadge(mainThreadEl), + "Main Thread does not have a paused badge" + ); + + ok( + remoteThreadEl.textContent.startsWith(URL_ROOT_ORG_SSL), + "second thread displayed is the remote thread" + ); + ok( + isThreadElementPaused(remoteThreadEl), + "paused thread has the paused styling" + ); + is( + getThreadElementPausedBadge(remoteThreadEl).textContent, + "paused", + "paused badge is displayed in the remote thread item" + ); + + await stepIn(dbg); + assertPausedAtSourceAndLine(dbg, findSource(dbg, "simple2.js").id, 7); + + // We can't used `stepIn` helper as this last step will resume + // and the helper is expecting to pause again + await dbg.actions.stepIn(); + assertNotPaused(dbg, "Stepping in two times resumes"); + + info("Wait for reload to complete after resume"); + await onReloaded; + + await dbg.toolbox.closeToolbox(); +}); + +function isThreadElementPaused(el) { + return el.classList.contains("paused"); +} + +function getThreadElementPausedBadge(el) { + return el.querySelector(".pause-badge"); +} |