2 * Runner middleware is reponsible for communication with `karma run`.
4 * It basically triggers a test run and streams stdout back.
7 var path = require('path')
8 var helper = require('../helper')
9 var log = require('../logger').create()
10 var constant = require('../constants')
11 var json = require('connect').json()
13 // TODO(vojta): disable when single-run mode
14 var createRunnerMiddleware = function (emitter, fileList, capturedBrowsers, reporter, executor,
15 /* config.hostname */ hostname, /* config.port */ port, /* config.urlRoot */ urlRoot, config) {
16 return function (request, response, next) {
17 if (request.url !== '/__run__' && request.url !== urlRoot + 'run') {
21 log.debug('Execution (fired by runner)')
22 response.writeHead(200)
24 if (!capturedBrowsers.length) {
25 var url = 'http://' + hostname + ':' + port + urlRoot
27 return response.end('No captured browser, open ' + url + '\n')
30 json(request, response, function () {
31 if (!capturedBrowsers.areAllReady([])) {
32 response.write('Waiting for previous execution...\n')
35 emitter.once('run_start', function () {
36 var responseWrite = response.write.bind(response)
38 reporter.addAdapter(responseWrite)
40 // clean up, close runner response
41 emitter.once('run_complete', function (browsers, results) {
42 reporter.removeAdapter(responseWrite)
43 response.end(constant.EXIT_CODE + results.exitCode)
47 var data = request.body
48 log.debug('Setting client.args to ', data.args)
49 config.client.args = data.args
51 var fullRefresh = true
53 if (helper.isArray(data.changedFiles)) {
54 data.changedFiles.forEach(function (filepath) {
55 fileList.changeFile(path.resolve(config.basePath, filepath))
60 if (helper.isArray(data.addedFiles)) {
61 data.addedFiles.forEach(function (filepath) {
62 fileList.addFile(path.resolve(config.basePath, filepath))
67 if (helper.isArray(data.removedFiles)) {
68 data.removedFiles.forEach(function (filepath) {
69 fileList.removeFile(path.resolve(config.basePath, filepath))
74 if (fullRefresh && data.refresh !== false) {
75 log.debug('Refreshing all the files / patterns')
78 if (!config.autoWatch) {
88 createRunnerMiddleware.$inject = ['emitter', 'fileList', 'capturedBrowsers', 'reporter', 'executor',
89 'config.hostname', 'config.port', 'config.urlRoot', 'config']
92 exports.create = createRunnerMiddleware