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.

114 lines
3.2 KiB

11 years ago
var os = require('os');
var path = require('path');
var fs = require('fs');
var builder = require('xmlbuilder');
var JUnitReporter = function(baseReporterDecorator, config, logger, helper, formatError) {
var log = logger.create('reporter.junit');
var reporterConfig = config.junitReporter || {};
var pkgName = reporterConfig.suite || '';
var outputFile = helper.normalizeWinPath(path.resolve(config.basePath, reporterConfig.outputFile
|| 'test-results.xml'));
var xml;
var suites;
var pendingFileWritings = 0;
var fileWritingFinished = function() {};
var allMessages = [];
baseReporterDecorator(this);
this.adapters = [function(msg) {
allMessages.push(msg);
}];
var initliazeXmlForBrowser = function(browser) {
var timestamp = (new Date()).toISOString().substr(0, 19);
var suite = suites[browser.id] = xml.ele('testsuite', {
name: browser.name, 'package': pkgName, timestamp: timestamp, id: 0, hostname: os.hostname()
});
suite.ele('properties').ele('property', {name: 'browser.fullName', value: browser.fullName});
};
this.onRunStart = function(browsers) {
suites = Object.create(null);
xml = builder.create('testsuites');
// TODO(vojta): remove once we don't care about Karma 0.10
browsers.forEach(initliazeXmlForBrowser);
};
this.onBrowserStart = function(browser) {
initliazeXmlForBrowser(browser);
};
this.onBrowserComplete = function(browser) {
var suite = suites[browser.id];
var result = browser.lastResult;
suite.att('tests', result.total);
suite.att('errors', result.disconnected || result.error ? 1 : 0);
suite.att('failures', result.failed);
suite.att('time', (result.netTime || 0) / 1000);
suite.ele('system-out').dat(allMessages.join() + '\n');
suite.ele('system-err');
};
this.onRunComplete = function() {
var xmlToOutput = xml;
pendingFileWritings++;
helper.mkdirIfNotExists(path.dirname(outputFile), function() {
fs.writeFile(outputFile, xmlToOutput.end({pretty: true}), function(err) {
if (err) {
log.warn('Cannot write JUnit xml\n\t' + err.message);
} else {
log.debug('JUnit results written to "%s".', outputFile);
}
if (!--pendingFileWritings) {
fileWritingFinished();
}
});
});
suites = xml = null;
allMessages.length = 0;
};
this.specSuccess = this.specSkipped = this.specFailure = function(browser, result) {
var spec = suites[browser.id].ele('testcase', {
name: result.description, time: ((result.time || 0) / 1000),
classname: (pkgName ? pkgName + ' ' : '') + browser.name + '.' + result.suite.join(' ').replace(/\./g, '_')
});
if (result.skipped) {
spec.ele('skipped');
}
if (!result.success) {
result.log.forEach(function(err) {
spec.ele('failure', {type: ''}, formatError(err));
});
}
};
// wait for writing all the xml files, before exiting
this.onExit = function(done) {
if (pendingFileWritings) {
fileWritingFinished = done;
} else {
done();
}
};
};
JUnitReporter.$inject = ['baseReporterDecorator', 'config', 'logger', 'helper', 'formatError'];
// PUBLISH DI MODULE
module.exports = {
'reporter:junit': ['type', JUnitReporter]
};