jasmine-headless-webkit/jasmine/jasmine.headless-reporter.js

164 lines
5.5 KiB
JavaScript
Raw Normal View History

2011-05-12 21:02:11 +00:00
(function() {
2011-09-06 15:37:29 +00:00
var getSplitName, pauseAndRun;
2011-05-12 21:02:11 +00:00
if (!(typeof jasmine !== "undefined" && jasmine !== null)) {
2011-06-13 12:14:24 +00:00
throw new Error("jasmine not laoded!");
2011-05-12 21:02:11 +00:00
}
2011-09-06 15:37:29 +00:00
getSplitName = function(parts) {
parts.push(String(this.description).replace(/[\n\r]/g, ' '));
return parts;
};
jasmine.Suite.prototype.getSuiteSplitName = function() {
return this.getSplitName(this.parentSuite ? this.parentSuite.getSuiteSplitName() : []);
};
jasmine.Spec.prototype.getSpecSplitName = function() {
return this.getSplitName(this.suite.getSuiteSplitName());
};
jasmine.Suite.prototype.getSplitName = getSplitName;
jasmine.Spec.prototype.getSplitName = getSplitName;
jasmine.Spec.prototype.getJHWSpecInformation = function() {
var parts, specLineInfo;
parts = this.getSpecSplitName();
specLineInfo = HeadlessReporterResult.findSpecLine(parts);
parts.push("" + specLineInfo.file + ":" + specLineInfo.lineNumber);
return parts.join("||");
};
if (!jasmine.WaitsBlock.prototype._execute) {
jasmine.WaitsBlock.prototype._execute = jasmine.WaitsBlock.prototype.execute;
jasmine.WaitsForBlock.prototype._execute = jasmine.WaitsForBlock.prototype.execute;
pauseAndRun = function(onComplete) {
JHW.timerPause();
return this._execute(function() {
JHW.timerDone();
return onComplete();
});
};
jasmine.WaitsBlock.prototype.execute = pauseAndRun;
jasmine.WaitsForBlock.prototype.execute = pauseAndRun;
}
2011-07-14 14:54:44 +00:00
window.HeadlessReporterResult = (function() {
function HeadlessReporterResult(name, splitName) {
2011-05-12 21:02:11 +00:00
this.name = name;
this.splitName = splitName;
2011-05-12 21:02:11 +00:00
this.results = [];
}
2011-05-12 22:47:56 +00:00
HeadlessReporterResult.prototype.addResult = function(message) {
return this.results.push(message);
};
2011-05-12 21:02:11 +00:00
HeadlessReporterResult.prototype.print = function() {
var bestChoice, output, result, _i, _len, _ref, _results;
output = this.name;
bestChoice = HeadlessReporterResult.findSpecLine(this.splitName);
if (bestChoice.file) {
output += " (" + bestChoice.file + ":" + bestChoice.lineNumber + ")";
}
JHW.printName(output);
2011-05-12 21:02:11 +00:00
_ref = this.results;
_results = [];
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
result = _ref[_i];
_results.push(JHW.printResult(result));
2011-05-12 21:02:11 +00:00
}
return _results;
};
HeadlessReporterResult.findSpecLine = function(splitName) {
2011-07-14 14:54:44 +00:00
var bestChoice, file, index, lastLine, line, lineNumber, lines, newLineNumberInfo, _i, _len, _ref;
bestChoice = {
accuracy: 0,
file: null,
lineNumber: null
};
2011-07-14 14:54:44 +00:00
_ref = HeadlessReporterResult.specLineNumbers;
for (file in _ref) {
lines = _ref[file];
index = 0;
2011-07-14 14:54:44 +00:00
lineNumber = 0;
while (newLineNumberInfo = lines[splitName[index]]) {
2011-07-14 14:54:44 +00:00
if (newLineNumberInfo.length === 0) {
lineNumber = newLineNumberInfo[0];
} else {
lastLine = null;
for (_i = 0, _len = newLineNumberInfo.length; _i < _len; _i++) {
line = newLineNumberInfo[_i];
lastLine = line;
if (line > lineNumber) {
break;
}
}
lineNumber = lastLine;
}
index++;
}
if (index > bestChoice.accuracy) {
bestChoice = {
accuracy: index,
file: file,
lineNumber: lineNumber
};
}
}
return bestChoice;
};
2011-05-12 21:02:11 +00:00
return HeadlessReporterResult;
})();
jasmine.HeadlessReporter = (function() {
function HeadlessReporter(callback) {
this.callback = callback != null ? callback : null;
2011-05-12 21:02:11 +00:00
this.results = [];
this.failedCount = 0;
this.length = 0;
}
HeadlessReporter.prototype.reportRunnerResults = function(runner) {
var result, _i, _len, _ref;
if (this.hasError()) {
return;
}
2011-05-12 21:02:11 +00:00
_ref = this.results;
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
result = _ref[_i];
result.print();
2011-05-12 21:02:11 +00:00
}
if (this.callback) {
this.callback();
}
2011-05-12 22:47:56 +00:00
return JHW.finishSuite((new Date() - this.startTime) / 1000.0, this.length, this.failedCount);
};
HeadlessReporter.prototype.reportRunnerStarting = function(runner) {
return this.startTime = new Date();
2011-05-12 21:02:11 +00:00
};
HeadlessReporter.prototype.reportSpecResults = function(spec) {
var failureResult, result, results, _i, _len, _ref;
if (this.hasError()) {
return;
}
2011-05-16 02:42:02 +00:00
results = spec.results();
2011-06-08 17:47:51 +00:00
this.length++;
2011-05-16 02:42:02 +00:00
if (results.passed()) {
return JHW.specPassed(spec.getJHWSpecInformation());
2011-05-12 21:02:11 +00:00
} else {
JHW.specFailed(spec.getJHWSpecInformation());
2011-06-08 17:47:51 +00:00
this.failedCount++;
failureResult = new HeadlessReporterResult(spec.getFullName(), spec.getSpecSplitName());
2011-05-16 02:42:02 +00:00
_ref = results.getItems();
2011-05-12 21:02:11 +00:00
for (_i = 0, _len = _ref.length; _i < _len; _i++) {
result = _ref[_i];
if (result.type === 'expect' && !result.passed_) {
failureResult.addResult(result.message);
}
2011-05-12 21:02:11 +00:00
}
return this.results.push(failureResult);
}
};
HeadlessReporter.prototype.reportSpecStarting = function(spec) {
if (this.hasError()) {
spec.finish();
return spec.suite.finish();
}
};
HeadlessReporter.prototype.reportSuiteResults = function(suite) {};
HeadlessReporter.prototype.hasError = function() {
return JHW.hasError();
};
2011-05-12 21:02:11 +00:00
return HeadlessReporter;
})();
}).call(this);