UNPKG

karma

Version:

Spectacular Test Runner for JavaScript.

69 lines (57 loc) 1.69 kB
var http = require('http') var constant = require('./constants') var helper = require('./helper') var cfg = require('./config') var parseExitCode = function (buffer, defaultCode) { var tailPos = buffer.length - Buffer.byteLength(constant.EXIT_CODE) - 1 if (tailPos < 0) { return defaultCode } // tail buffer which might contain the message var tail = buffer.slice(tailPos) var tailStr = tail.toString() if (tailStr.substr(0, tailStr.length - 1) === constant.EXIT_CODE) { tail.fill('\x00') return parseInt(tailStr.substr(-1), 10) } return defaultCode } // TODO(vojta): read config file (port, host, urlRoot) exports.run = function (config, done) { done = helper.isFunction(done) ? done : process.exit config = cfg.parseConfig(config.configFile, config) var exitCode = 1 var options = { hostname: config.hostname, path: config.urlRoot + 'run', port: config.port, method: 'POST', headers: { 'Content-Type': 'application/json' } } var request = http.request(options, function (response) { response.on('data', function (buffer) { exitCode = parseExitCode(buffer, exitCode) process.stdout.write(buffer) }) response.on('end', function () { done(exitCode) }) }) request.on('error', function (e) { if (e.code === 'ECONNREFUSED') { console.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 })) }