diff options
Diffstat (limited to 'devtools/client/debugger/test/mochitest/integration-tests/3-reload-changed-generated.js')
-rw-r--r-- | devtools/client/debugger/test/mochitest/integration-tests/3-reload-changed-generated.js | 179 |
1 files changed, 179 insertions, 0 deletions
diff --git a/devtools/client/debugger/test/mochitest/integration-tests/3-reload-changed-generated.js b/devtools/client/debugger/test/mochitest/integration-tests/3-reload-changed-generated.js new file mode 100644 index 0000000000..e5b493d008 --- /dev/null +++ b/devtools/client/debugger/test/mochitest/integration-tests/3-reload-changed-generated.js @@ -0,0 +1,179 @@ +/* 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/>. */ + +/* import-globals-from ../head.js */ + +/** + * This first test will focus on original-with-no-update.js file where the bundle-with-another-original.js file + * content changes because of another-original.js + */ + +"use strict"; + +addIntegrationTask(async function testReloadingChangedGeneratedSource( + testServer, + testUrl, + { isCompressed } +) { + info( + " # Test reload an original source whose generated source content changes" + ); + testServer.backToFirstVersion(); + const dbg = await initDebuggerWithAbsoluteURL( + testUrl, + "original-with-no-update.js" + ); + + info("Add initial breakpoint"); + await selectSource(dbg, "original-with-no-update.js"); + await addBreakpoint(dbg, "original-with-no-update.js", 6); + + info("Check that only one breakpoint is set"); + is(dbg.selectors.getBreakpointCount(), 1, "Only one breakpoint exists"); + + info("Check that the breakpoint location info is correct"); + let breakpoint = dbg.selectors.getBreakpointsList(dbg)[0]; + is(breakpoint.location.line, 6); + if (isCompressed) { + is(breakpoint.generatedLocation.line, 1); + is(breakpoint.generatedLocation.column, 1062); + } else { + is(breakpoint.generatedLocation.line, 82); + } + + const expectedOriginalFileContentOnBreakpointLine = "await baabar();"; + const expectedGeneratedFileContentOnBreakpointLine = "await baabar();"; + + info("Check that the breakpoint is displayed on the correct line in the ui"); + await assertBreakpoint(dbg, 6); + + info("Check that breakpoint is on the first line within the function `foo`"); + assertTextContentOnLine(dbg, 6, expectedOriginalFileContentOnBreakpointLine); + + info( + "Check that the breakpoint is displayed in correct location in bundle-with-another-original.js (generated source)" + ); + await selectSource(dbg, "bundle-with-another-original.js"); + if (isCompressed) { + await assertBreakpoint(dbg, 1); + } else { + await assertBreakpoint(dbg, 82); + assertTextContentOnLine( + dbg, + 82, + expectedGeneratedFileContentOnBreakpointLine + ); + } + + await closeTab(dbg, "bundle-with-another-original.js"); + + // This reload changes the content of the generated file + // which will cause the location of the breakpoint to change + info("Reload with a new version of the file"); + const waitUntilNewBreakpointIsSet = waitForDispatch( + dbg.store, + "SET_BREAKPOINT" + ); + testServer.switchToNextVersion(); + const onReloaded = reload( + dbg, + "bundle-with-another-original.js", + "original-with-no-update.js" + ); + await waitUntilNewBreakpointIsSet; + + if (!isCompressed) { + await waitForPaused(dbg); + + // This is a bug where the server does not recieve updates to breakpoints + // early, therefore is pauses at the old position, where no breakpoint is + // displayed in the UI + info("Assert that the breakpoint paused in the other original file"); + assertPausedAtSourceAndLine( + dbg, + findSource(dbg, "another-original.js").id, + 5 + ); + await assertNoBreakpoint(dbg, 5); + assertTextContentOnLine(dbg, 5, "funcC();"); + + info("Switch to generated source and assert that the location is correct"); + await dbg.actions.jumpToMappedSelectedLocation(getContext(dbg)); + assertPausedAtSourceAndLine( + dbg, + findSource(dbg, "bundle-with-another-original.js").id, + 82 + ); + await assertNoBreakpoint(dbg, 82); + assertTextContentOnLine(dbg, 82, "funcC();"); + + info("Switch back to original location before resuming"); + await dbg.actions.jumpToMappedSelectedLocation(getContext(dbg)); + await resume(dbg); + await waitForPaused(dbg); + + info( + "Check that the breakpoint is displayed and paused on the correct line" + ); + assertPausedAtSourceAndLine( + dbg, + findSource(dbg, "original-with-no-update.js").id, + 6 + ); + } else { + await onReloaded; + // Assert that it does not pause in commpressed files + assertNotPaused(dbg); + } + await assertBreakpoint(dbg, 6); + + info( + "Check that though the breakpoint has moved, it is still on the first line within the function `foo`" + ); + assertTextContentOnLine(dbg, 6, expectedOriginalFileContentOnBreakpointLine); + + info( + "Check that the breakpoint is displayed in correct location in bundle-with-another-original.js (generated source)" + ); + await selectSource(dbg, "bundle-with-another-original.js"); + // This scrolls the line into view so the content + // on the line is rendered and avaliable for dom querying. + getCM(dbg).scrollIntoView({ line: 103, ch: 0 }); + + if (isCompressed) { + await assertBreakpoint(dbg, 1); + } else { + assertPausedAtSourceAndLine( + dbg, + findSource(dbg, "bundle-with-another-original.js").id, + 103 + ); + await assertBreakpoint(dbg, 103); + assertTextContentOnLine( + dbg, + 103, + expectedGeneratedFileContentOnBreakpointLine + ); + } + + info("Check that only one breakpoint is still set"); + is(dbg.selectors.getBreakpointCount(), 1, "Only one breakpoint exists"); + + info("Check that the original location has changed"); + breakpoint = dbg.selectors.getBreakpointsList(dbg)[0]; + is(breakpoint.location.line, 6); + if (isCompressed) { + is(breakpoint.generatedLocation.line, 1); + is(breakpoint.generatedLocation.column, 1132); + } else { + is(breakpoint.generatedLocation.line, 103); + } + + if (!isCompressed) { + await resume(dbg); + info("Wait for reload to complete after resume"); + await onReloaded; + } + await closeTab(dbg, "bundle-with-another-original.js"); +}); |