191 lines
4.7 KiB
JavaScript
191 lines
4.7 KiB
JavaScript
/*
|
|
Copyright (c) 2008-2015 Pivotal Labs
|
|
|
|
Permission is hereby granted, free of charge, to any person obtaining
|
|
a copy of this software and associated documentation files (the
|
|
"Software"), to deal in the Software without restriction, including
|
|
without limitation the rights to use, copy, modify, merge, publish,
|
|
distribute, sublicense, and/or sell copies of the Software, and to
|
|
permit persons to whom the Software is furnished to do so, subject to
|
|
the following conditions:
|
|
|
|
The above copyright notice and this permission notice shall be
|
|
included in all copies or substantial portions of the Software.
|
|
|
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
|
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
|
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
|
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
|
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
|
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
|
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
function getJasmineRequireObj() {
|
|
if (typeof module !== 'undefined' && module.exports) {
|
|
return exports;
|
|
} else {
|
|
window.jasmineRequire = window.jasmineRequire || {};
|
|
return window.jasmineRequire;
|
|
}
|
|
}
|
|
|
|
getJasmineRequireObj().console = function(jRequire, j$) {
|
|
j$.ConsoleReporter = jRequire.ConsoleReporter();
|
|
};
|
|
|
|
getJasmineRequireObj().ConsoleReporter = function() {
|
|
|
|
var noopTimer = {
|
|
start: function(){},
|
|
elapsed: function(){ return 0; }
|
|
};
|
|
|
|
function ConsoleReporter(options) {
|
|
var print = options.print,
|
|
showColors = options.showColors || false,
|
|
onComplete = options.onComplete || function() {},
|
|
timer = options.timer || noopTimer,
|
|
specCount,
|
|
failureCount,
|
|
failedSpecs = [],
|
|
pendingCount,
|
|
ansi = {
|
|
green: '\x1B[32m',
|
|
red: '\x1B[31m',
|
|
yellow: '\x1B[33m',
|
|
none: '\x1B[0m'
|
|
},
|
|
failedSuites = [];
|
|
|
|
print('ConsoleReporter is deprecated and will be removed in a future version.');
|
|
|
|
this.jasmineStarted = function() {
|
|
specCount = 0;
|
|
failureCount = 0;
|
|
pendingCount = 0;
|
|
print('Started');
|
|
printNewline();
|
|
timer.start();
|
|
};
|
|
|
|
this.jasmineDone = function() {
|
|
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]);
|
|
}
|
|
|
|
onComplete(failureCount === 0);
|
|
};
|
|
|
|
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 showColors ? (ansi[color] + str + ansi.none) : str;
|
|
}
|
|
|
|
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;
|
|
};
|