diff --git a/src/static/js/pad_utils.js b/src/static/js/pad_utils.js index 9d5367023..828e62567 100644 --- a/src/static/js/pad_utils.js +++ b/src/static/js/pad_utils.js @@ -98,7 +98,8 @@ const padutils = { * - This makes it possible to see the stack if the code runs in Node.js. * - Users are more likely to paste the stack in bug reports they might file. * - * @param {...*} args - Passed to `console.warn`, with a stack trace appended. + * @param {...*} args - Passed to `padutils.warnDeprecated.logger.warn` (or `console.warn` if no + * logger is set), with a stack trace appended if available. */ warnDeprecated: (...args) => { if (padutils.warnDeprecated.disabledForTestingOnly) return; @@ -106,7 +107,7 @@ const padutils = { if (Error.captureStackTrace) Error.captureStackTrace(err, padutils.warnDeprecated); err.name = ''; if (err.stack) args.push(err.stack); - console.warn(...args); + (padutils.warnDeprecated.logger || console).warn(...args); }, escapeHtml: (x) => Security.escapeHTML(String(x)), diff --git a/src/tests/backend/specs/pad_utils.js b/src/tests/backend/specs/pad_utils.js new file mode 100644 index 000000000..51cc85f1e --- /dev/null +++ b/src/tests/backend/specs/pad_utils.js @@ -0,0 +1,26 @@ +'use strict'; + +const assert = require('assert').strict; +const {padutils} = require('../../../static/js/pad_utils'); + +describe(__filename, function () { + describe('warnDeprecated', function () { + const {warnDeprecated} = padutils; + const backups = {}; + + before(async function () { + backups.logger = warnDeprecated.logger; + }); + + afterEach(async function () { + warnDeprecated.logger = backups.logger; + }); + + it('includes the stack', async function () { + let got; + warnDeprecated.logger = {warn: (stack) => got = stack}; + warnDeprecated(); + assert(got.includes(__filename)); + }); + }); +});