/* Any copyright is dedicated to the Public Domain. * http://creativecommons.org/publicdomain/zero/1.0/ */ "use strict"; const TEST_URI = `data:text/html,`; add_task(async function () { const hud = await openNewTabAndConsole(TEST_URI); await waitFor(() => findConsoleAPIMessage(hud, "trace")); ok(true, "console.trace() message is displayed in the console"); const messages = findConsoleAPIMessages(hud, "console.trace()"); is(messages.length, 4, "There are 4 console.trace() messages"); info("Wait until the stacktraces are displayed"); await waitFor(() => getFrames(hud).length === messages.length); const [traceBar1, traceBar2, traceRab1, traceRab2] = getFrames(hud); const framesBar1 = getFramesTitleFromTrace(traceBar1); is( framesBar1.join(" - "), "myFunc - bar - ", "First bar trace has the expected frames" ); const framesBar2 = getFramesTitleFromTrace(traceBar2); is( framesBar2.join(" - "), "myFunc - bar - ", "Second bar trace has the expected frames" ); const framesRab1 = getFramesTitleFromTrace(traceRab1); is( framesRab1.join(" - "), "myFunc - rab - ", "First rab trace has the expected frames" ); const framesRab2 = getFramesTitleFromTrace(traceRab2); is( framesRab2.join(" - "), "myFunc - rab - ", "Second rab trace has the expected frames" ); }); /** * Get all the stacktrace `.frames` elements displayed in the console output. * @returns {Array} */ function getFrames(hud) { return Array.from(hud.ui.outputNode.querySelectorAll(".stacktrace .frames")); } /** * Given a stacktrace element, return an array of the frame names displayed in it. * @param {HTMLElement} traceEl * @returns {Array} */ function getFramesTitleFromTrace(traceEl) { return Array.from(traceEl.querySelectorAll(".frame .title")).map( t => t.textContent ); }