147 lines
4.4 KiB
JavaScript
147 lines
4.4 KiB
JavaScript
|
(function (root, factory) {
|
||
|
define([], factory);
|
||
|
} (this, function () {
|
||
|
"use strict";
|
||
|
|
||
|
var noopTimer = {
|
||
|
start: function () {},
|
||
|
elapsed: function () { return 0; }
|
||
|
};
|
||
|
|
||
|
function ConsoleReporter (options) {
|
||
|
var timer = noopTimer,
|
||
|
specCount,
|
||
|
failureCount,
|
||
|
failedSpecs = [],
|
||
|
pendingCount,
|
||
|
ansi = {
|
||
|
green: '\x1B[32m',
|
||
|
red: '\x1B[31m',
|
||
|
yellow: '\x1B[33m',
|
||
|
none: '\x1B[0m'
|
||
|
},
|
||
|
failedSuites = [];
|
||
|
|
||
|
var print = function print (message) {
|
||
|
console.log(message + '\x03\b');
|
||
|
}
|
||
|
|
||
|
this.jasmineStarted = function () {
|
||
|
specCount = 0;
|
||
|
failureCount = 0;
|
||
|
pendingCount = 0;
|
||
|
print('Started');
|
||
|
printNewline();
|
||
|
timer.start();
|
||
|
};
|
||
|
|
||
|
this.jasmineDone = function () {
|
||
|
print("jasmineDone");
|
||
|
printNewline();
|
||
|
for (var i = 0; i < failedSpecs.length; i++) {
|
||
|
specFailureDetails(failedSpecs[i]);
|
||
|
}
|
||
|
|
||
|
if(specCount > 0) {
|
||
|
printNewline();
|
||
|
var specCounts = specCount + ' ' + plural('spec', specCount) + ', ' +
|
||
|
failureCount + ' ' + plural('failure', failureCount);
|
||
|
if (pendingCount) {
|
||
|
specCounts += ', ' + pendingCount + ' pending ' + plural('spec', pendingCount);
|
||
|
}
|
||
|
print(specCounts);
|
||
|
} else {
|
||
|
print('No specs found');
|
||
|
}
|
||
|
|
||
|
printNewline();
|
||
|
var seconds = timer.elapsed() / 1000;
|
||
|
print('Finished in ' + seconds + ' ' + plural('second', seconds));
|
||
|
printNewline();
|
||
|
for (i = 0; i < failedSuites.length; i++) {
|
||
|
suiteFailureDetails(failedSuites[i]);
|
||
|
}
|
||
|
var exitCode = failureCount === 0 ? 0 : 1;
|
||
|
console.info('All tests completed!' + exitCode);
|
||
|
};
|
||
|
|
||
|
this.specDone = function (result) {
|
||
|
specCount++;
|
||
|
if (result.status == 'pending') {
|
||
|
pendingCount++;
|
||
|
print(colored('yellow', '*'));
|
||
|
return;
|
||
|
}
|
||
|
if (result.status == 'passed') {
|
||
|
print(colored('green', '.'));
|
||
|
return;
|
||
|
}
|
||
|
if (result.status == 'failed') {
|
||
|
failureCount++;
|
||
|
failedSpecs.push(result);
|
||
|
print(colored('red', 'F'));
|
||
|
}
|
||
|
};
|
||
|
|
||
|
this.suiteDone = function (result) {
|
||
|
if (result.failedExpectations && result.failedExpectations.length > 0) {
|
||
|
failureCount++;
|
||
|
failedSuites.push(result);
|
||
|
}
|
||
|
};
|
||
|
return this;
|
||
|
|
||
|
function printNewline() {
|
||
|
print('\n');
|
||
|
}
|
||
|
|
||
|
function colored (color, str) {
|
||
|
return ansi[color] + str + ansi.none;
|
||
|
}
|
||
|
|
||
|
function plural (str, count) {
|
||
|
return count == 1 ? str : str + 's';
|
||
|
}
|
||
|
|
||
|
function repeat (thing, times) {
|
||
|
var arr = [];
|
||
|
for (var i = 0; i < times; i++) {
|
||
|
arr.push(thing);
|
||
|
}
|
||
|
return arr;
|
||
|
}
|
||
|
|
||
|
function indent (str, spaces) {
|
||
|
var lines = (str || '').split('\n');
|
||
|
var newArr = [];
|
||
|
for (var i = 0; i < lines.length; i++) {
|
||
|
newArr.push(repeat(' ', spaces).join('') + lines[i]);
|
||
|
}
|
||
|
return newArr.join('\n');
|
||
|
}
|
||
|
|
||
|
function specFailureDetails (result) {
|
||
|
printNewline();
|
||
|
print(result.fullName);
|
||
|
for (var i = 0; i < result.failedExpectations.length; i++) {
|
||
|
var failedExpectation = result.failedExpectations[i];
|
||
|
printNewline();
|
||
|
print(indent(failedExpectation.message, 2));
|
||
|
print(indent(failedExpectation.stack, 2));
|
||
|
}
|
||
|
printNewline();
|
||
|
}
|
||
|
|
||
|
function suiteFailureDetails (result) {
|
||
|
for (var i = 0; i < result.failedExpectations.length; i++) {
|
||
|
printNewline();
|
||
|
print(colored('red', 'An error was thrown in an afterAll'));
|
||
|
printNewline();
|
||
|
print(colored('red', 'AfterAll ' + result.failedExpectations[i].message));
|
||
|
}
|
||
|
printNewline();
|
||
|
}
|
||
|
}
|
||
|
return ConsoleReporter;
|
||
|
}));
|