diff options
Diffstat (limited to 'devtools/client/debugger/bin/try-runner.js')
-rw-r--r-- | devtools/client/debugger/bin/try-runner.js | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/devtools/client/debugger/bin/try-runner.js b/devtools/client/debugger/bin/try-runner.js new file mode 100644 index 0000000000..1bab722ad1 --- /dev/null +++ b/devtools/client/debugger/bin/try-runner.js @@ -0,0 +1,98 @@ +/* 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/>. */ + +/* + * A small test runner/reporter for node-based tests, + * which are run via taskcluster node(debugger). + */ + +const { execFileSync } = require("child_process"); +const { chdir } = require("process"); +const path = require("path"); + +const dbgPath = path.join(__dirname, ".."); + +function execOut(...args) { + let out; + let err; + try { + out = execFileSync(...args, { silent: true }); + } catch (e) { + out = e.stdout; + err = e.stderr; + } + return { out: out.toString(), err: err && err.toString() }; +} + +function logErrors(tool, errors) { + for (const error of errors) { + console.log(`TEST-UNEXPECTED-FAIL ${tool} | ${error}`); + } + return errors; +} + +function logStart(name) { + console.log(`TEST START | ${name}`); +} + +function jest() { + logStart("Jest"); + const { out } = execOut("yarn", ["test-ci"]); + // Remove the non-JSON logs mixed with the JSON output by yarn. + const jsonOut = out.substring(out.indexOf("{"), out.lastIndexOf("}") + 1); + const results = JSON.parse(jsonOut); + + // The individual failing tests are in jammed into the same message string :/ + const errors = [].concat( + ...results.testResults.map(r => + r.message.split("\n").filter(l => l.includes("●")) + ) + ); + + logErrors("jest", errors); + return errors.length == 0; +} + +function stylelint() { + logStart("Stylelint"); + const { out } = execOut("yarn", ["lint:css"]); + console.log(out); + const errors = logErrors("stylelint", out.match(/ {2}✖(.*)/g) || []); + + return errors.length == 0; +} + +function lintMd() { + logStart("Remark"); + + const { err } = execOut("yarn", ["lint:md"]); + const errors = logErrors("remark", (err || "").match(/warning(.+)/g) || []); + return errors.length == 0; +} + +chdir(dbgPath); +const jestPassed = jest(); +const styleLintPassed = stylelint(); +const remarkPassed = lintMd(); + +const success = + jestPassed && + styleLintPassed && + remarkPassed; + +console.log({ + jestPassed, + styleLintPassed, + remarkPassed, +}); + +if (!success) { + console.log( + "[debugger-node-test-runner] You can find documentation about the " + + "debugger node tests at https://firefox-source-docs.mozilla.org/devtools/tests/node-tests.html" + ); +} + +process.exitCode = success ? 0 : 1; +console.log("CODE", process.exitCode); |