Telegram Web, preconfigured for usage in I2P. http://web.telegram.i2p/
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

93 lines
2.6 KiB

11 years ago
/**
* Runner middleware is reponsible for communication with `karma run`.
*
* It basically triggers a test run and streams stdout back.
*/
var path = require('path');
var helper = require('../helper');
var log = require('../logger').create();
var constant = require('../constants');
var json = require('connect').json();
// TODO(vojta): disable when single-run mode
var createRunnerMiddleware = function(emitter, fileList, capturedBrowsers, reporter, executor,
/* config.hostname */ hostname, /* config.port */ port, /* config.urlRoot */ urlRoot, config) {
return function(request, response, next) {
if (request.url !== '/__run__' && request.url !== urlRoot + 'run') {
return next();
}
log.debug('Execution (fired by runner)');
response.writeHead(200);
if (!capturedBrowsers.length) {
var url = 'http://' + hostname + ':' + port + urlRoot;
return response.end('No captured browser, open ' + url + '\n');
}
json(request, response, function() {
if (!capturedBrowsers.areAllReady([])) {
response.write('Waiting for previous execution...\n');
}
emitter.once('run_start', function() {
var responseWrite = response.write.bind(response);
reporter.addAdapter(responseWrite);
// clean up, close runner response
emitter.once('run_complete', function(browsers, results) {
reporter.removeAdapter(responseWrite);
response.end(constant.EXIT_CODE + results.exitCode);
});
});
var data = request.body;
log.debug('Setting client.args to ', data.args);
config.client.args = data.args;
var fullRefresh = true;
if (helper.isArray(data.changedFiles)) {
data.changedFiles.forEach(function(filepath) {
fileList.changeFile(path.resolve(config.basePath, filepath));
fullRefresh = false;
});
}
if (helper.isArray(data.addedFiles)) {
data.addedFiles.forEach(function(filepath) {
fileList.addFile(path.resolve(config.basePath, filepath));
fullRefresh = false;
});
}
if (helper.isArray(data.removedFiles)) {
data.removedFiles.forEach(function(filepath) {
fileList.removeFile(path.resolve(config.basePath, filepath));
fullRefresh = false;
});
}
if (fullRefresh && data.refresh !== false) {
log.debug('Refreshing all the files / patterns');
fileList.refresh();
if (!config.autoWatch) {
executor.schedule();
}
} else {
executor.schedule();
}
});
};
};
// PUBLIC API
exports.create = createRunnerMiddleware;