/* 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 . */
/**
* Testing the script overrides feature
*/
"use strict";
const httpServer = createTestHTTPServer();
const BASE_URL = `http://localhost:${httpServer.identity.primaryPort}/`;
httpServer.registerContentType("html", "text/html");
httpServer.registerContentType("js", "application/javascript");
const testSourceContent = `function foo() {
console.log("original test script");
}`;
const testOverrideSourceContent = `function foo() {
console.log("overriden test script");
}
foo();
`;
httpServer.registerPathHandler("/index.html", (request, response) => {
response.setStatusLine(request.httpVersion, 200, "OK");
response.write(`
`);
});
httpServer.registerPathHandler("/test.js", (request, response) => {
response.setHeader("Content-Type", "application/javascript");
response.write(testSourceContent);
});
add_task(async function () {
const dbg = await initDebuggerWithAbsoluteURL(
BASE_URL + "index.html",
"test.js"
);
await waitForSourcesInSourceTree(dbg, ["test.js"], {
noExpand: false,
});
info("Load and assert the content of the test.js script");
await selectSourceFromSourceTree(
dbg,
"test.js",
3,
"Select the `test.js` script for the tree"
);
is(
getCM(dbg).getValue(),
testSourceContent,
"The test.js is the original source content"
);
info("Add a breakpoint");
await addBreakpoint(dbg, "test.js", 2);
info("Select test.js tree node, and add override");
const MockFilePicker = SpecialPowers.MockFilePicker;
MockFilePicker.init(window.browsingContext);
const nsiFile = new FileUtils.File(
PathUtils.join(PathUtils.tempDir, "test.js")
);
MockFilePicker.setFiles([nsiFile]);
const path = nsiFile.path;
await triggerSourceTreeContextMenu(
dbg,
findSourceNodeWithText(dbg, "test.js"),
"#node-menu-overrides"
);
info("Wait for `test.js` to be saved to disk and re-write it");
await BrowserTestUtils.waitForCondition(() => IOUtils.exists(path));
await BrowserTestUtils.waitForCondition(async () => {
const { size } = await IOUtils.stat(path);
return size > 0;
});
await IOUtils.write(
path,
new TextEncoder().encode(testOverrideSourceContent)
);
info("Reload and assert `test.js` pause and it overriden source content");
const onReloaded = reload(dbg, "test.js");
await waitForPaused(dbg);
assertPausedAtSourceAndLine(dbg, findSource(dbg, "test.js").id, 2);
is(
getCM(dbg).getValue(),
testOverrideSourceContent,
"The test.js is the overridden source content"
);
await resume(dbg);
await onReloaded;
info("Remove override and test");
const removed = waitForDispatch(dbg.store, "REMOVE_OVERRIDE");
await triggerSourceTreeContextMenu(
dbg,
findSourceNodeWithText(dbg, "test.js"),
"#node-menu-overrides"
);
await removed;
info("Reload and assert `test.js`'s original source content");
await reload(dbg, "test.js");
await waitForSelectedSource(dbg, "test.js");
is(
getCM(dbg).getValue(),
testSourceContent,
"The test.js is the original source content"
);
});