/* 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 . */
// Tests basic pretty-printing functionality.
"use strict";
requestLongerTimeout(2);
add_task(async function () {
const dbg = await initDebugger("doc-minified.html", "math.min.js");
await selectSource(dbg, "math.min.js", 2);
clickElement(dbg, "prettyPrintButton");
await waitForSelectedSource(dbg, "math.min.js:formatted");
ok(
!findElement(dbg, "mappedSourceLink"),
"When we are on the pretty printed source, we don't show the link to the minified source"
);
const ppSrc = findSource(dbg, "math.min.js:formatted");
ok(ppSrc, "Pretty-printed source exists");
// this is not implemented yet
// assertHighlightLocation(dbg, "math.min.js:formatted", 18);
// await selectSource(dbg, "math.min.js")
await addBreakpoint(dbg, ppSrc, 18);
invokeInTab("arithmetic");
await waitForPaused(dbg);
assertPausedAtSourceAndLine(dbg, ppSrc.id, 18);
await stepOver(dbg);
assertPausedAtSourceAndLine(dbg, ppSrc.id, 39);
await resume(dbg);
// The pretty-print button should be disabled in the pretty-printed source.
ok(
findElement(dbg, "prettyPrintButton").disabled,
"Pretty Print Button should be disabled"
);
await selectSource(dbg, "math.min.js");
await waitForSelectedSource(dbg, "math.min.js");
ok(
!findElement(dbg, "mappedSourceLink"),
"When we are on the minified source, we don't show the link to the pretty printed source"
);
ok(
!findElement(dbg, "prettyPrintButton").disabled,
"Pretty Print Button should be enabled"
);
});
add_task(async function testPrivateFields() {
// Create a source containing a class with private fields
const httpServer = createTestHTTPServer();
httpServer.registerContentType("html", "text/html");
httpServer.registerContentType("js", "application/javascript");
httpServer.registerPathHandler(`/`, function (request, response) {
response.setStatusLine(request.httpVersion, 200, "OK");
response.write(`
Test pretty-printing class with private fields
`);
});
httpServer.registerPathHandler(
"/class-with-private-fields.js",
function (request, response) {
response.setHeader("Content-Type", "application/javascript");
response.write(`
class MyClass {
constructor(a) {
this.#a = a;this.#b = Math.random();this.ab = this.#getAB();
}
#a
#b = "default value"
static #someStaticPrivate
#getA() {
return this.#a;
}
#getAB() {
return this.#getA()+this.
#b
}
}
`);
}
);
const port = httpServer.identity.primaryPort;
const TEST_URL = `http://localhost:${port}/`;
info("Open toolbox");
const dbg = await initDebuggerWithAbsoluteURL(TEST_URL);
info("Select script with private fields");
await selectSource(dbg, "class-with-private-fields.js", 2);
info("Pretty print the script");
clickElement(dbg, "prettyPrintButton");
info("Wait until the script is pretty-printed");
await waitForSelectedSource(dbg, "class-with-private-fields.js:formatted");
info("Check that the script was pretty-printed as expected");
const prettyPrintedSource = await findSourceContent(
dbg,
"class-with-private-fields.js:formatted"
);
is(
prettyPrintedSource.value.trim(),
`
class MyClass {
constructor(a) {
this.#a = a;
this.#b = Math.random();
this.ab = this.#getAB();
}
#a
#b = 'default value'
static #someStaticPrivate
#getA() {
return this.#a;
}
#getAB() {
return this.#getA() + this.#b
}
}
`.trim(),
"script was pretty printed as expected"
);
});