Files
react-native-devtools-frontend/node_modules/karma/lib/runner.js
T
Tim van der Lippe 0a9b84dbd8 Update NPM dependencies
Major updates to Puppeteer (Chromium roll and updates to types:
https://github.com/puppeteer/puppeteer/blob/0b5969dea9048dc34a4d2e109e96c42e8928182c/CHANGELOG.md#800-2021-02-26) and Sinon (unaffected by browser support changes).

DISABLE_THIRD_PARTY_CHECK=NPM updates
R=jacktfranklin@chromium.org

Fixed: 1176642
Change-Id: I419300fc573e8086b4a7b3b6281c81602890f8d0
Reviewed-on: https://chromium-review.googlesource.com/c/devtools/devtools-frontend/+/2782553
Commit-Queue: Tim van der Lippe <tvanderlippe@chromium.org>
Auto-Submit: Tim van der Lippe <tvanderlippe@chromium.org>
Reviewed-by: Jack Franklin <jacktfranklin@chromium.org>
2021-03-24 13:47:34 +00:00

112 lines
3.2 KiB
JavaScript

'use strict'
const http = require('http')
const constant = require('./constants')
const EventEmitter = require('events').EventEmitter
const helper = require('./helper')
const cfg = require('./config')
const logger = require('./logger')
const log = logger.create('runner')
function parseExitCode (buffer, defaultExitCode, failOnEmptyTestSuite) {
const tailPos = buffer.length - Buffer.byteLength(constant.EXIT_CODE) - 2
if (tailPos < 0) {
return { exitCode: defaultExitCode, buffer }
}
const tail = buffer.slice(tailPos)
const tailStr = tail.toString()
if (tailStr.substr(0, tailStr.length - 2) === constant.EXIT_CODE) {
const emptyInt = parseInt(tailStr.substr(-2, 1), 10)
let exitCode = parseInt(tailStr.substr(-1), 10)
if (failOnEmptyTestSuite === false && emptyInt === 0) {
log.warn('Test suite was empty.')
exitCode = 0
}
return { exitCode, buffer: buffer.slice(0, tailPos) }
}
return { exitCode: defaultExitCode, buffer }
}
// TODO(vojta): read config file (port, host, urlRoot)
function run (cliOptionsOrConfig, done) {
cliOptionsOrConfig = cliOptionsOrConfig || {}
done = helper.isFunction(done) ? done : process.exit
let config
if (cliOptionsOrConfig instanceof cfg.Config) {
config = cliOptionsOrConfig
} else {
logger.setupFromConfig({
colors: cliOptionsOrConfig.colors,
logLevel: cliOptionsOrConfig.logLevel
})
const deprecatedCliOptionsMessage =
'Passing raw CLI options to `runner(config, done)` is deprecated. Use ' +
'`parseConfig(configFilePath, cliOptions, {promiseConfig: true, throwErrors: true})` ' +
'to prepare a processed `Config` instance and pass that as the ' +
'`config` argument instead.'
log.warn(deprecatedCliOptionsMessage)
try {
config = cfg.parseConfig(
cliOptionsOrConfig.configFile,
cliOptionsOrConfig,
{
promiseConfig: false,
throwErrors: true
}
)
} catch (parseConfigError) {
// TODO: change how `done` falls back to exit in next major version
// SEE: https://github.com/karma-runner/karma/pull/3635#discussion_r565399378
done(1)
}
}
let exitCode = 1
const emitter = new EventEmitter()
const options = {
hostname: config.hostname,
path: config.urlRoot + 'run',
port: config.port,
method: 'POST',
headers: {
'Content-Type': 'application/json'
}
}
const request = http.request(options, function (response) {
response.on('data', function (buffer) {
const parsedResult = parseExitCode(buffer, exitCode, config.failOnEmptyTestSuite)
exitCode = parsedResult.exitCode
emitter.emit('progress', parsedResult.buffer)
})
response.on('end', () => done(exitCode))
})
request.on('error', function (e) {
if (e.code === 'ECONNREFUSED') {
log.error('There is no server listening on port %d', options.port)
done(1, e.code)
} else {
throw e
}
})
request.end(JSON.stringify({
args: config.clientArgs,
removedFiles: config.removedFiles,
changedFiles: config.changedFiles,
addedFiles: config.addedFiles,
refresh: config.refresh,
colors: config.colors
}))
return emitter
}
exports.run = run