summaryrefslogtreecommitdiffstats
path: root/devtools/client/debugger/test/mochitest/integration-tests/3-reload-changed-generated.js
diff options
context:
space:
mode:
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.js179
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");
+});