(function (global) { /* jshint browser:true */ /* global alert, BROWSER_NAME */ /** * Save timer references to avoid Sinon interfering (see GH-237). */ var Date = global.Date; var setTimeout = global.setTimeout; var setInterval = global.setInterval; var clearTimeout = global.clearTimeout; var clearInterval = global.clearInterval; var mocha = global.mocha; var Base = mocha.reporter('base')._reporter; var $ = global.jQuery; /** * Expose `HTML`. */ global.EsjsReporter = EsjsReporter; /** * Initialize a new `HTML` reporter. * * @param {Runner} runner * @api public */ function EsjsReporter(runner, root) { Base.call(this, runner); var stats = this.stats; var rootSuite = { $el: $('
').text(errMsg));
}
if (!test.pending) {
if (stack[0]) {
stack[0].results.push({
name: test.title,
time: test.duration,
pass: test.state === 'passed',
errMsg: errMsg
});
$test.appendTo(stack[0].$results);
}
}
});
runner.on('end', function () {
var testResults = {
stats: stats,
suites: $.map([rootSuite], function removeElements(suite) {
var s = {
name: suite.name,
start: suite.start,
time: suite.time,
results: suite.results,
stdout: suite.stdout,
stderr: suite.stderr
};
if (suite.suites) {
s.suites = $.map(suite.suites, removeElements);
}
return s;
})
};
$.post('/tests-complete?browser=' + BROWSER_NAME, JSON.stringify(testResults), function () {
window.close();
});
});
/** override console to force all output to go to log and err, then we have all the output **/
global.console = (function () {
function flattenArgs(_arguments) {
var args = [];
for (var i = 0; i < _arguments.length; i++) {
args.push(_arguments[i]);
}
return args;
}
function argsToString(args) {
return $.map(flattenArgs(args), function (arg) {
return String(arg);
}).join('\n');
}
var origLog = $.noop;
var origErr = $.noop;
if (global.console) {
if (global.console.log) {
origLog = $.proxy(global.console, 'log');
}
if (global.console.error) {
origErr = $.proxy(global.console, 'error');
} else {
origErr = origLog;
}
}
return {
log: function () {
if (stack[0]) {
stack[0].stdout += argsToString(arguments) + '\n\n';
} else {
origLog(argsToString(arguments));
}
},
error: function () {
if (stack[0]) {
stack[0].stderr += argsToString(arguments) + '\n\n';
} else {
origErr(argsToString(arguments));
}
}
};
}());
}
mocha.reporter(EsjsReporter);
}(this));