buildExpectationResult now returns a data object.

- Meant for passing to reporters.
This commit is contained in:
Davis W. Frank & Rajan Agaskar
2012-11-29 15:29:45 -08:00
parent f9cbad1512
commit cd3a0c854b
20 changed files with 112 additions and 132 deletions

View File

@@ -1,9 +1,10 @@
# Jasmine 2.0 Goals # (Vague) Jasmine 2.0 Goals/(Guidelines)
1. No globals! 1. No globals!
* jasmine library is entirely inside `jasmine` namespace * jasmine library is entirely inside `jasmine` namespace
* globals required for backwards compatibility should be added in `boot.js` (EG, var describe = jasmine.getCurrentEnv().describe lives in boot.js) * globals required for backwards compatibility should be added in `boot.js` (EG, var describe = jasmine.getCurrentEnv().describe lives in boot.js)
1. Don't use properties as getters. Use methods. 1. Don't use properties as getters. Use methods.
* Properties aren't encapsulated -- can be mutated, unsafe. * Properties aren't encapsulated -- can be mutated, unsafe.
1. Reporters get data objects (no methods).
* easier to refactor as needed * easier to refactor as needed

View File

@@ -450,7 +450,7 @@ jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
if (result.type == 'log') { if (result.type == 'log') {
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString())); messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
} else if (result.type == 'expect' && result.passed && !result.passed()) { } else if (result.type == 'expect' && !result.passed) {
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message)); messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
if (result.trace.stack) { if (result.trace.stack) {
@@ -465,7 +465,8 @@ jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
} }
}; };
jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);jasmine.HtmlReporter.SuiteView = function(suite, dom, views) { jasmine.HtmlReporterHelpers.addHelpers(jasmine.HtmlReporter.SpecView);
jasmine.HtmlReporter.SuiteView = function(suite, dom, views) {
this.suite = suite; this.suite = suite;
this.dom = dom; this.dom = dom;
this.views = views; this.views = views;
@@ -615,7 +616,7 @@ jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) { jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
var results = spec.results(); var results = spec.results();
var status = results.passed() ? 'passed' : 'failed'; var status = results.passed ? 'passed' : 'failed';
if (results.skipped) { if (results.skipped) {
status = 'skipped'; status = 'skipped';
} }
@@ -635,7 +636,7 @@ jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
if (result.type == 'log') { if (result.type == 'log') {
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString())); messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
} else if (result.type == 'expect' && result.passed && !result.passed()) { } else if (result.type == 'expect' && !result.passed) {
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message)); messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
if (result.trace.stack) { if (result.trace.stack) {

View File

@@ -509,24 +509,18 @@ jasmine.util.extend = function(destination, source) {
}; };
//TODO: expectation result may make more sense as a presentation of an expectation. //TODO: expectation result may make more sense as a presentation of an expectation.
jasmine.ExpectationResult = function(params) { jasmine.buildExpectationResult = function(params) {
var self = this;
var trace = (params.trace || new Error(this.message)); var trace = (params.trace || new Error(this.message));
var message = params.passed ? 'Passed.' : params.message; var message = params.passed ? 'Passed.' : params.message;
return jasmine.util.extend(self, { return {
type: 'expect', type: 'expect',
matcherName: params.matcherName, matcherName: params.matcherName,
expected: params.expected, expected: params.expected,
actual: params.actual, actual: params.actual,
message: message, message: message,
trace: params.passed ? '' : trace, trace: params.passed ? '' : trace,
toString: function() { passed: params.passed
return message; };
},
passed: function() {
return params.passed;
}
});
}; };
/** /**
* Environment for Jasmine * Environment for Jasmine
@@ -973,11 +967,12 @@ jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){
var resultMessage = result.messages[messageIndex]; var resultMessage = result.messages[messageIndex];
summaryMessages.push({ summaryMessages.push({
text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined, text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined,
passed: resultMessage.passed ? resultMessage.passed() : true, //TODO: wat? in theory this is saying non-expect results should always be considered passed, but that's weird.
passed: resultMessage.passed || true,
type: resultMessage.type, type: resultMessage.type,
message: resultMessage.message, message: resultMessage.message,
trace: { trace: {
stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined stack: !resultMessage.passed ? resultMessage.trace.stack : jasmine.undefined
} }
}); });
} }
@@ -1050,7 +1045,7 @@ jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
message += "."; message += ".";
} }
} }
var expectationResult = new jasmine.ExpectationResult({ var expectationResult = jasmine.buildExpectationResult({
matcherName: matcherName, matcherName: matcherName,
passed: result, passed: result,
expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0], expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0],
@@ -1668,13 +1663,14 @@ jasmine.NestedResults.prototype.getItems = function() {
* Adds a result, tracking counts (total, passed, & failed) * Adds a result, tracking counts (total, passed, & failed)
* @param {jasmine.ExpectationResult|jasmine.NestedResults} result * @param {jasmine.ExpectationResult|jasmine.NestedResults} result
*/ */
//TODO: Results are meant for consumption by reporters, not internally.
jasmine.NestedResults.prototype.addResult = function(result) { jasmine.NestedResults.prototype.addResult = function(result) {
if (result.type != 'log') { if (result.type != 'log') {
if (result.items_) { if (result.items_) {
this.rollupCounts(result); this.rollupCounts(result);
} else { } else {
this.totalCount++; this.totalCount++;
if (result.passed()) { if (result.passed) {
this.passedCount++; this.passedCount++;
} else { } else {
this.failedCount++; this.failedCount++;
@@ -2135,7 +2131,7 @@ jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessag
}; };
jasmine.Spec.prototype.fail = function (e) { jasmine.Spec.prototype.fail = function (e) {
var expectationResult = new jasmine.ExpectationResult({ var expectationResult = jasmine.buildExpectationResult({
passed: false, passed: false,
message: e ? jasmine.util.formatException(e) : 'Exception', message: e ? jasmine.util.formatException(e) : 'Exception',
trace: { stack: e.stack } trace: { stack: e.stack }

View File

@@ -111,14 +111,14 @@ describe('Exceptions:', function() {
expect(specResults.length).toEqual(5); expect(specResults.length).toEqual(5);
expect(specResults[0].passed()).toMatch(false); expect(specResults[0].passed()).toMatch(false);
var blockResults = specResults[0].getItems(); var blockResults = specResults[0].getItems();
expect(blockResults[0].passed()).toEqual(false); expect(blockResults[0].passed).toEqual(false);
expect(blockResults[0].message).toMatch(/fake error 1/); expect(blockResults[0].message).toMatch(/fake error 1/);
expect(specResults[1].passed()).toEqual(false); expect(specResults[1].passed()).toEqual(false);
blockResults = specResults[1].getItems(); blockResults = specResults[1].getItems();
expect(blockResults[0].passed()).toEqual(false); expect(blockResults[0].passed).toEqual(false);
expect(blockResults[0].message).toMatch(/fake error 2/); expect(blockResults[0].message).toMatch(/fake error 2/);
expect(blockResults[1].passed()).toEqual(true); expect(blockResults[1].passed).toEqual(true);
expect(specResults[2].passed()).toEqual(true); expect(specResults[2].passed()).toEqual(true);

View File

@@ -1,57 +1,47 @@
describe("ExpectationResult", function() { describe("buildExpectationResult", function() {
it("defaults to passed", function() { it("defaults to passed", function() {
var result = new jasmine.ExpectationResult({passed: 'some-value'}); var result = jasmine.buildExpectationResult({passed: 'some-value'});
expect(result.passed()).toBe('some-value'); expect(result.passed).toBe('some-value');
});
it("#toString returns message when failing", function() {
var result = new jasmine.ExpectationResult({passed: false, message: 'some-value'});
expect(result.toString()).toBe('some-value');
});
it("#toString returns Passed when passing", function() {
var result = new jasmine.ExpectationResult({passed: true, message: 'some-value'});
expect(result.toString()).toBe('Passed.');
}); });
it("has a type of expect", function() { it("has a type of expect", function() {
var result = new jasmine.ExpectationResult({}); var result = jasmine.buildExpectationResult({});
expect(result.type).toBe('expect'); expect(result.type).toBe('expect');
}); });
it("message defaults to Passed for passing specs", function() { it("message defaults to Passed for passing specs", function() {
var result = new jasmine.ExpectationResult({passed: true, message: 'some-value'}); var result = jasmine.buildExpectationResult({passed: true, message: 'some-value'});
expect(result.message).toBe('Passed.'); expect(result.message).toBe('Passed.');
}); });
it("message returns the message for failing specs", function() { it("message returns the message for failing specs", function() {
var result = new jasmine.ExpectationResult({passed: false, message: 'some-value'}); var result = jasmine.buildExpectationResult({passed: false, message: 'some-value'});
expect(result.message).toBe('some-value'); expect(result.message).toBe('some-value');
}); });
it("trace passes trace if exists", function() { it("trace passes trace if exists", function() {
var result = new jasmine.ExpectationResult({trace: 'some-value'}); var result = jasmine.buildExpectationResult({trace: 'some-value'});
expect(result.trace).toBe('some-value'); expect(result.trace).toBe('some-value');
}); });
it("trace returns a new error if trace is falsy", function() { it("trace returns a new error if trace is falsy", function() {
var result = new jasmine.ExpectationResult({trace: false}); var result = jasmine.buildExpectationResult({trace: false});
expect(result.trace).toEqual(jasmine.any(Error)); expect(result.trace).toEqual(jasmine.any(Error));
}); });
it("matcherName returns passed matcherName", function() { it("matcherName returns passed matcherName", function() {
var result = new jasmine.ExpectationResult({matcherName: 'some-value'}); var result = jasmine.buildExpectationResult({matcherName: 'some-value'});
expect(result.matcherName).toBe('some-value'); expect(result.matcherName).toBe('some-value');
}); });
it("expected returns passed expected", function() { it("expected returns passed expected", function() {
var result = new jasmine.ExpectationResult({expected: 'some-value'}); var result = jasmine.buildExpectationResult({expected: 'some-value'});
expect(result.expected).toBe('some-value'); expect(result.expected).toBe('some-value');
}); });
it("actual returns passed actual", function() { it("actual returns passed actual", function() {
var result = new jasmine.ExpectationResult({actual: 'some-value'}); var result = jasmine.buildExpectationResult({actual: 'some-value'});
expect(result.actual).toBe('some-value'); expect(result.actual).toBe('some-value');
}); });

View File

@@ -13,10 +13,10 @@ describe("jasmine.Matchers", function() {
this.addMatchers({ this.addMatchers({
toPass: function() { toPass: function() {
return lastResult().passed(); return lastResult().passed;
}, },
toFail: function() { toFail: function() {
return !lastResult().passed(); return !lastResult().passed;
} }
}); });
}); });
@@ -98,7 +98,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toEqual"); expect(result.matcherName).toEqual("toEqual");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual)); expect(result.message).toMatch(jasmine.pp(actual));
expect(result.message).toMatch(jasmine.pp(expected)); expect(result.message).toMatch(jasmine.pp(expected));
expect(result.expected).toEqual(expected); expect(result.expected).toEqual(expected);
@@ -113,7 +113,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toNotEqual"); expect(result.matcherName).toEqual("toNotEqual");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(str)); expect(result.message).toMatch(jasmine.pp(str));
expect(result.message).toMatch('not'); expect(result.message).toMatch('not');
expect(result.expected).toEqual(str); expect(result.expected).toEqual(str);
@@ -142,7 +142,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toBe"); expect(result.matcherName).toEqual("toBe");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual)); expect(result.message).toMatch(jasmine.pp(actual));
expect(result.message).toMatch(jasmine.pp(expected)); expect(result.message).toMatch(jasmine.pp(expected));
expect(result.expected).toEqual(expected); expect(result.expected).toEqual(expected);
@@ -157,7 +157,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toNotBe"); expect(result.matcherName).toEqual("toNotBe");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(str); expect(result.message).toMatch(str);
expect(result.expected).toEqual(str); expect(result.expected).toEqual(str);
expect(result.actual).toEqual(str); expect(result.actual).toEqual(str);
@@ -186,7 +186,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toMatch"); expect(result.matcherName).toEqual("toMatch");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual)); expect(result.message).toMatch(jasmine.pp(actual));
expect(result.message).toMatch(expected.toString()); expect(result.message).toMatch(expected.toString());
expect(result.expected).toEqual(expected); expect(result.expected).toEqual(expected);
@@ -202,7 +202,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toMatch"); expect(result.matcherName).toEqual("toMatch");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toEqual("Expected 'a' to match 'b'."); expect(result.message).toEqual("Expected 'a' to match 'b'.");
expect(result.expected).toEqual(expected); expect(result.expected).toEqual(expected);
expect(result.actual).toEqual(actual); expect(result.actual).toEqual(actual);
@@ -217,7 +217,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toNotMatch"); expect(result.matcherName).toEqual("toNotMatch");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toEqual("Expected 'a' to not match /a/."); expect(result.message).toEqual("Expected 'a' to not match /a/.");
expect(result.expected).toEqual(expected); expect(result.expected).toEqual(expected);
expect(result.actual).toEqual(actual); expect(result.actual).toEqual(actual);
@@ -231,7 +231,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toNotMatch"); expect(result.matcherName).toEqual("toNotMatch");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toEqual("Expected 'a' to not match 'a'."); expect(result.message).toEqual("Expected 'a' to not match 'a'.");
expect(result.expected).toEqual(str); expect(result.expected).toEqual(str);
expect(result.actual).toEqual(str); expect(result.actual).toEqual(str);
@@ -249,7 +249,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toBeDefined"); expect(result.matcherName).toEqual("toBeDefined");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toEqual('Expected undefined to be defined.'); expect(result.message).toEqual('Expected undefined to be defined.');
expect(result.actual).toEqual(jasmine.undefined); expect(result.actual).toEqual(jasmine.undefined);
}); });
@@ -273,7 +273,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toBeNull"); expect(result.matcherName).toEqual("toBeNull");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual)); expect(result.message).toMatch(jasmine.pp(actual));
expect(result.message).toMatch('null'); expect(result.message).toMatch('null');
expect(result.actual).toEqual(actual); expect(result.actual).toEqual(actual);
@@ -287,7 +287,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toBeNull"); expect(result.matcherName).toEqual("toBeNull");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual)); expect(result.message).toMatch(jasmine.pp(actual));
expect(result.message).toMatch('null'); expect(result.message).toMatch('null');
expect(result.actual).toEqual(actual); expect(result.actual).toEqual(actual);
@@ -311,7 +311,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toBeNaN"); expect(result.matcherName).toEqual("toBeNaN");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch("Expected 'a' to be NaN."); expect(result.message).toMatch("Expected 'a' to be NaN.");
expect(result.actual).toMatch(actual); expect(result.actual).toMatch(actual);
}); });
@@ -332,7 +332,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toBeFalsy"); expect(result.matcherName).toEqual("toBeFalsy");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual)); expect(result.message).toMatch(jasmine.pp(actual));
expect(result.message).toMatch('falsy'); expect(result.message).toMatch('falsy');
expect(result.actual).toEqual(actual); expect(result.actual).toEqual(actual);
@@ -356,7 +356,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toBeTruthy"); expect(result.matcherName).toEqual("toBeTruthy");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toEqual("Expected false to be truthy."); expect(result.message).toEqual("Expected false to be truthy.");
expect(result.actual).toFail(); expect(result.actual).toFail();
}); });
@@ -459,7 +459,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toContain"); expect(result.matcherName).toEqual("toContain");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual)); expect(result.message).toMatch(jasmine.pp(actual));
expect(result.message).toMatch('contain'); expect(result.message).toMatch('contain');
expect(result.message).toMatch(jasmine.pp(expected)); expect(result.message).toMatch(jasmine.pp(expected));
@@ -476,7 +476,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toNotContain"); expect(result.matcherName).toEqual("toNotContain");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual)); expect(result.message).toMatch(jasmine.pp(actual));
expect(result.message).toMatch('not contain'); expect(result.message).toMatch('not contain');
expect(result.message).toMatch(jasmine.pp(expected)); expect(result.message).toMatch(jasmine.pp(expected));
@@ -499,7 +499,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toBeLessThan"); expect(result.matcherName).toEqual("toBeLessThan");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual) + ' to be less than'); expect(result.message).toMatch(jasmine.pp(actual) + ' to be less than');
expect(result.message).toMatch(jasmine.pp(expected)); expect(result.message).toMatch(jasmine.pp(expected));
expect(result.actual).toEqual(actual); expect(result.actual).toEqual(actual);
@@ -521,7 +521,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toBeGreaterThan"); expect(result.matcherName).toEqual("toBeGreaterThan");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toMatch(jasmine.pp(actual) + ' to be greater than'); expect(result.message).toMatch(jasmine.pp(actual) + ' to be greater than');
expect(result.message).toMatch(jasmine.pp(expected)); expect(result.message).toMatch(jasmine.pp(expected));
expect(result.actual).toEqual(actual); expect(result.actual).toEqual(actual);
@@ -780,7 +780,7 @@ describe("jasmine.Matchers", function() {
var expected = match(TestClass.spyFunction); var expected = match(TestClass.spyFunction);
expect(expected.toHaveBeenCalledWith('c', 'b', 'a')).toFail(); expect(expected.toHaveBeenCalledWith('c', 'b', 'a')).toFail();
var result = lastResult(); var result = lastResult();
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.expected).toEqual(['c', 'b', 'a']); expect(result.expected).toEqual(['c', 'b', 'a']);
expect(result.actual.mostRecentCall.args).toEqual(['a', 'b', 'c']); expect(result.actual.mostRecentCall.args).toEqual(['a', 'b', 'c']);
expect(result.message).toContain(jasmine.pp(result.expected)); expect(result.message).toContain(jasmine.pp(result.expected));
@@ -791,7 +791,7 @@ describe("jasmine.Matchers", function() {
var expected = match(TestClass.spyFunction); var expected = match(TestClass.spyFunction);
expect(expected.toHaveBeenCalledWith('c', 'b', 'a')).toFail(); expect(expected.toHaveBeenCalledWith('c', 'b', 'a')).toFail();
var result = lastResult(); var result = lastResult();
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.expected).toEqual(['c', 'b', 'a']); expect(result.expected).toEqual(['c', 'b', 'a']);
expect(result.actual.argsForCall).toEqual([]); expect(result.actual.argsForCall).toEqual([]);
expect(result.message).toContain(jasmine.pp(result.expected)); expect(result.message).toContain(jasmine.pp(result.expected));
@@ -849,7 +849,7 @@ describe("jasmine.Matchers", function() {
var result = lastResult(); var result = lastResult();
expect(result.matcherName).toEqual("toHaveBeenCalledWith"); expect(result.matcherName).toEqual("toHaveBeenCalledWith");
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.message).toContain(jasmine.pp(['a', 'b'])); expect(result.message).toContain(jasmine.pp(['a', 'b']));
expect(result.message).toContain(jasmine.pp(['a', 'c'])); expect(result.message).toContain(jasmine.pp(['a', 'c']));
expect(result.actual).toEqual(TestClass.someFunction); expect(result.actual).toEqual(TestClass.someFunction);
@@ -879,7 +879,7 @@ describe("jasmine.Matchers", function() {
var expected = match(TestClass.spyFunction); var expected = match(TestClass.spyFunction);
expect(expected.wasNotCalledWith('a', 'b', 'c')).toFail(); expect(expected.wasNotCalledWith('a', 'b', 'c')).toFail();
var result = lastResult(); var result = lastResult();
expect(result.passed()).toBe(false); expect(result.passed).toBe(false);
expect(result.expected).toEqual(['a', 'b', 'c']); expect(result.expected).toEqual(['a', 'b', 'c']);
expect(result.actual.mostRecentCall.args).toEqual(['a', 'b', 'c']); expect(result.actual.mostRecentCall.args).toEqual(['a', 'b', 'c']);
expect(result.message).toContain(jasmine.pp(result.expected)); expect(result.message).toContain(jasmine.pp(result.expected));

View File

@@ -3,7 +3,7 @@ describe('jasmine.NestedResults', function() {
// Leaf case // Leaf case
var results = new jasmine.NestedResults(); var results = new jasmine.NestedResults();
results.addResult(new jasmine.ExpectationResult({ results.addResult(jasmine.buildExpectationResult({
matcherName: "foo", passed: true, message: 'Passed.', actual: 'bar', expected: 'bar'} matcherName: "foo", passed: true, message: 'Passed.', actual: 'bar', expected: 'bar'}
)); ));
@@ -12,7 +12,7 @@ describe('jasmine.NestedResults', function() {
expect(results.passedCount).toEqual(1); expect(results.passedCount).toEqual(1);
expect(results.failedCount).toEqual(0); expect(results.failedCount).toEqual(0);
results.addResult(new jasmine.ExpectationResult({ results.addResult(jasmine.buildExpectationResult({
matcherName: "baz", passed: false, message: 'FAIL.', actual: "corge", expected: "quux" matcherName: "baz", passed: false, message: 'FAIL.', actual: "corge", expected: "quux"
})); }));
@@ -25,19 +25,19 @@ describe('jasmine.NestedResults', function() {
it('should roll up counts for nested results', function() { it('should roll up counts for nested results', function() {
// Branch case // Branch case
var leafResultsOne = new jasmine.NestedResults(); var leafResultsOne = new jasmine.NestedResults();
leafResultsOne.addResult(new jasmine.ExpectationResult({ leafResultsOne.addResult(jasmine.buildExpectationResult({
matcherName: "toSomething", passed: true, message: 'message', actual: '', expected:'' matcherName: "toSomething", passed: true, message: 'message', actual: '', expected:''
})); }));
leafResultsOne.addResult(new jasmine.ExpectationResult({ leafResultsOne.addResult(jasmine.buildExpectationResult({
matcherName: "toSomethingElse", passed: false, message: 'message', actual: 'a', expected: 'b' matcherName: "toSomethingElse", passed: false, message: 'message', actual: 'a', expected: 'b'
})); }));
var leafResultsTwo = new jasmine.NestedResults(); var leafResultsTwo = new jasmine.NestedResults();
leafResultsTwo.addResult(new jasmine.ExpectationResult({ leafResultsTwo.addResult(jasmine.buildExpectationResult({
matcherName: "toSomething", passed: true, message: 'message', actual: '', expected: '' matcherName: "toSomething", passed: true, message: 'message', actual: '', expected: ''
})); }));
leafResultsTwo.addResult(new jasmine.ExpectationResult({ leafResultsTwo.addResult(jasmine.buildExpectationResult({
matcherName: "toSomethineElse", passed: false, message: 'message', actual: 'c', expected: 'd' matcherName: "toSomethineElse", passed: false, message: 'message', actual: 'c', expected: 'd'
})); }));

View File

@@ -68,10 +68,10 @@ describe("jasmine spec running", function () {
expect(specWithNoBody.description).toEqual('new spec'); expect(specWithNoBody.description).toEqual('new spec');
expect(specWithExpectation.results().getItems().length).toEqual(1); // "Results aren't there after a spec was executed" expect(specWithExpectation.results().getItems().length).toEqual(1); // "Results aren't there after a spec was executed"
expect(specWithExpectation.results().getItems()[0].passed()).toEqual(true); // "Results has a result, but it's true" expect(specWithExpectation.results().getItems()[0].passed).toEqual(true); // "Results has a result, but it's true"
expect(specWithExpectation.results().description).toEqual('spec with an expectation'); // "Spec's results did not get the spec's description" expect(specWithExpectation.results().description).toEqual('spec with an expectation'); // "Spec's results did not get the spec's description"
expect(specWithFailingExpectations.results().getItems()[0].passed()).toEqual(false); // "Expectation that failed, passed" expect(specWithFailingExpectations.results().getItems()[0].passed).toEqual(false); // "Expectation that failed, passed"
expect(specWithMultipleExpectations.results().getItems().length).toEqual(2); // "Spec doesn't support multiple expectations" expect(specWithMultipleExpectations.results().getItems().length).toEqual(2); // "Spec doesn't support multiple expectations"
}); });
@@ -90,8 +90,8 @@ describe("jasmine spec running", function () {
another_spec.done = true; another_spec.done = true;
expect(another_spec.results().getItems().length).toEqual(2); expect(another_spec.results().getItems().length).toEqual(2);
expect(another_spec.results().getItems()[0].passed()).toEqual(true); // "In a spec without a run block, expected first expectation result to be true but was false" expect(another_spec.results().getItems()[0].passed).toEqual(true); // "In a spec without a run block, expected first expectation result to be true but was false"
expect(another_spec.results().getItems()[1].passed()).toEqual(false); // "In a spec without a run block, expected second expectation result to be false but was true"; expect(another_spec.results().getItems()[1].passed).toEqual(false); // "In a spec without a run block, expected second expectation result to be false but was true";
expect(another_spec.results().description).toEqual('spec with an expectation'); // "In a spec without a run block, results did not include the spec's description"; expect(another_spec.results().description).toEqual('spec with an expectation'); // "In a spec without a run block, results did not include the spec's description";
}); });
@@ -142,7 +142,7 @@ describe("jasmine spec running", function () {
a_spec.execute(); a_spec.execute();
expect(a_spec.results().getItems().length).toEqual(1); // 'No call to waits(): Spec queue did not run all functions'; expect(a_spec.results().getItems().length).toEqual(1); // 'No call to waits(): Spec queue did not run all functions';
expect(a_spec.results().getItems()[0].passed()).toEqual(true); // 'No call to waits(): Queued expectation failed'; expect(a_spec.results().getItems()[0].passed).toEqual(true); // 'No call to waits(): Queued expectation failed';
foo = 0; foo = 0;
env.describe('test async spec', function() { env.describe('test async spec', function() {
@@ -169,7 +169,7 @@ describe("jasmine spec running", function () {
fakeTimer.tick(500); fakeTimer.tick(500);
expect(a_spec.results().getItems().length).toEqual(1); // 'Calling waits(): Spec queue did not run all functions'; expect(a_spec.results().getItems().length).toEqual(1); // 'Calling waits(): Spec queue did not run all functions';
expect(a_spec.results().getItems()[0].passed()).toEqual(true); // 'Calling waits(): Queued expectation failed'; expect(a_spec.results().getItems()[0].passed).toEqual(true); // 'Calling waits(): Queued expectation failed';
var bar = 0; var bar = 0;
var another_spec; var another_spec;
@@ -200,7 +200,7 @@ describe("jasmine spec running", function () {
fakeTimer.tick(1000); fakeTimer.tick(1000);
expect(another_spec.results().getItems().length).toEqual(1); expect(another_spec.results().getItems().length).toEqual(1);
expect(another_spec.results().getItems()[0].passed()).toEqual(true); expect(another_spec.results().getItems()[0].passed).toEqual(true);
var baz = 0; var baz = 0;
var yet_another_spec; var yet_another_spec;
@@ -226,7 +226,7 @@ describe("jasmine spec running", function () {
expect(yet_another_spec.results().getItems().length).toEqual(1); expect(yet_another_spec.results().getItems().length).toEqual(1);
expect(yet_another_spec.results().getItems()[0].passed()).toEqual(false); expect(yet_another_spec.results().getItems()[0].passed).toEqual(false);
}); });
it("testAsyncSpecsWithMockSuite", function () { it("testAsyncSpecsWithMockSuite", function () {
@@ -255,7 +255,7 @@ describe("jasmine spec running", function () {
another_spec.execute(); another_spec.execute();
fakeTimer.tick(2000); fakeTimer.tick(2000);
expect(another_spec.results().getItems().length).toEqual(1); expect(another_spec.results().getItems().length).toEqual(1);
expect(another_spec.results().getItems()[0].passed()).toEqual(true); expect(another_spec.results().getItems()[0].passed).toEqual(true);
}); });
describe("waitsFor", function() { describe("waitsFor", function() {
@@ -901,8 +901,8 @@ describe("jasmine spec running", function () {
expect(report).toEqual("firstsecond"); expect(report).toEqual("firstsecond");
var suiteResults = suite.results(); var suiteResults = suite.results();
expect(suiteResults.getItems()[0].getItems()[0].passed()).toEqual(false); expect(suiteResults.getItems()[0].getItems()[0].passed).toEqual(false);
expect(suiteResults.getItems()[1].getItems()[0].passed()).toEqual(true); expect(suiteResults.getItems()[1].getItems()[0].passed).toEqual(true);
}); });
it("testAfterExecutesSafely", function() { it("testAfterExecutesSafely", function() {
@@ -942,14 +942,14 @@ describe("jasmine spec running", function () {
var suiteResults = suite.results(); var suiteResults = suite.results();
expect(suiteResults.getItems().length).toEqual(3, 'testAfterExecutesSafely should have results for three specs'); expect(suiteResults.getItems().length).toEqual(3, 'testAfterExecutesSafely should have results for three specs');
expect(suiteResults.getItems()[0].getItems()[0].passed()).toEqual(true, "testAfterExecutesSafely 1st spec should pass"); expect(suiteResults.getItems()[0].getItems()[0].passed).toEqual(true, "testAfterExecutesSafely 1st spec should pass");
expect(suiteResults.getItems()[1].getItems()[0].passed()).toEqual(true, "testAfterExecutesSafely 2nd spec should pass"); expect(suiteResults.getItems()[1].getItems()[0].passed).toEqual(true, "testAfterExecutesSafely 2nd spec should pass");
expect(suiteResults.getItems()[2].getItems()[0].passed()).toEqual(true, "testAfterExecutesSafely 3rd spec should pass"); expect(suiteResults.getItems()[2].getItems()[0].passed).toEqual(true, "testAfterExecutesSafely 3rd spec should pass");
expect(suiteResults.getItems()[0].getItems()[0].passed()).toEqual(true, "testAfterExecutesSafely 1st result for 1st suite spec should pass"); expect(suiteResults.getItems()[0].getItems()[0].passed).toEqual(true, "testAfterExecutesSafely 1st result for 1st suite spec should pass");
expect(suiteResults.getItems()[0].getItems()[1].passed()).toEqual(false, "testAfterExecutesSafely 2nd result for 1st suite spec should fail because afterEach failed"); expect(suiteResults.getItems()[0].getItems()[1].passed).toEqual(false, "testAfterExecutesSafely 2nd result for 1st suite spec should fail because afterEach failed");
expect(suiteResults.getItems()[1].getItems()[0].passed()).toEqual(true, "testAfterExecutesSafely 2nd suite spec should pass"); expect(suiteResults.getItems()[1].getItems()[0].passed).toEqual(true, "testAfterExecutesSafely 2nd suite spec should pass");
expect(suiteResults.getItems()[2].getItems()[0].passed()).toEqual(true, "testAfterExecutesSafely 3rd suite spec should pass"); expect(suiteResults.getItems()[2].getItems()[0].passed).toEqual(true, "testAfterExecutesSafely 3rd suite spec should pass");
}); });
it("should permit nested describes", function() { it("should permit nested describes", function() {
@@ -1178,8 +1178,8 @@ describe("jasmine spec running", function () {
expect(spec.foo).toEqual(2); expect(spec.foo).toEqual(2);
var suiteResults = suite.results(); var suiteResults = suite.results();
expect(suiteResults.getItems()[0].getItems().length).toEqual(2); expect(suiteResults.getItems()[0].getItems().length).toEqual(2);
expect(suiteResults.getItems()[0].getItems()[0].passed()).toEqual(false); expect(suiteResults.getItems()[0].getItems()[0].passed).toEqual(false);
expect(suiteResults.getItems()[0].getItems()[1].passed()).toEqual(true); expect(suiteResults.getItems()[0].getItems()[1].passed).toEqual(true);
}); });
it("shouldn't run disabled tests", function() { it("shouldn't run disabled tests", function() {
@@ -1239,7 +1239,7 @@ describe("jasmine spec running", function () {
var results = spec.results().getItems(); var results = spec.results().getItems();
for (var i = 0; i < results.length; i++) { for (var i = 0; i < results.length; i++) {
var result = results[i]; var result = results[i];
specs.push("Result: " + result); specs.push("Result: " + result.message);
} }
}; };

View File

@@ -112,11 +112,9 @@ describe('Spec', function () {
}); });
spec.execute(); spec.execute();
var items = results.getItems(); var items = results.getItems();
expect(items).toEqual([ expect(items[0].type).toBe('expect');
originalJasmine.any(jasmine.ExpectationResult), expect(items[1].type).toBe('expect');
originalJasmine.any(jasmine.ExpectationResult), expect(items[2].type).toBe('log');
originalJasmine.any(jasmine.MessageResult)
]);
var logResult = items[2]; var logResult = items[2];
expect(logResult.values).toEqual(["here's some log message", {key: 'value'}, 123]); expect(logResult.values).toEqual(["here's some log message", {key: 'value'}, 123]);
}); });

View File

@@ -13,10 +13,10 @@ describe("MatchersSpec - HTML Dependent", function () {
this.addMatchers({ this.addMatchers({
toPass: function() { toPass: function() {
return lastResult().passed(); return lastResult().passed;
}, },
toFail: function() { toFail: function() {
return !lastResult().passed(); return !lastResult().passed;
} }
}); });
}); });

View File

@@ -130,7 +130,7 @@ describe("TrivialReporter", function() {
}); });
it("should add the failure message to the DOM (non-toEquals matchers)", function() { it("should add the failure message to the DOM (non-toEquals matchers)", function() {
expectationResult = new jasmine.ExpectationResult({ expectationResult = jasmine.buildExpectationResult({
matcherName: "toBeNull", passed: false, message: "Expected 'a' to be null, but it was not" matcherName: "toBeNull", passed: false, message: "Expected 'a' to be null, but it was not"
}); });
@@ -144,7 +144,7 @@ describe("TrivialReporter", function() {
}); });
it("should add the failure message to the DOM (non-toEquals matchers) html escaping", function() { it("should add the failure message to the DOM (non-toEquals matchers) html escaping", function() {
expectationResult = new jasmine.ExpectationResult({ expectationResult = jasmine.buildExpectationResult({
matcherName: "toBeNull", passed: false, message: "Expected '1 < 2' to <b>e null, & it was not" matcherName: "toBeNull", passed: false, message: "Expected '1 < 2' to <b>e null, & it was not"
}); });

View File

@@ -1,20 +1,12 @@
//TODO: expectation result may make more sense as a presentation of an expectation. //TODO: expectation result may make more sense as a presentation of an expectation.
jasmine.ExpectationResult = function(params) { jasmine.buildExpectationResult = function(params) {
var self = this; return {
var trace = (params.trace || new Error(this.message));
var message = params.passed ? 'Passed.' : params.message;
return jasmine.util.extend(self, {
type: 'expect', type: 'expect',
matcherName: params.matcherName, matcherName: params.matcherName,
expected: params.expected, expected: params.expected,
actual: params.actual, actual: params.actual,
message: message, message: params.passed ? 'Passed.' : params.message,
trace: params.passed ? '' : trace, trace: params.passed ? '' : (params.trace || new Error(this.message)),
toString: function() { passed: params.passed
return message; };
},
passed: function() {
return params.passed;
}
});
}; };

View File

@@ -85,11 +85,12 @@ jasmine.JsApiReporter.prototype.summarizeResult_ = function(result){
var resultMessage = result.messages[messageIndex]; var resultMessage = result.messages[messageIndex];
summaryMessages.push({ summaryMessages.push({
text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined, text: resultMessage.type == 'log' ? resultMessage.toString() : jasmine.undefined,
passed: resultMessage.passed ? resultMessage.passed() : true, //TODO: wat? in theory this is saying non-expect results should always be considered passed, but that's weird.
passed: resultMessage.passed || true,
type: resultMessage.type, type: resultMessage.type,
message: resultMessage.message, message: resultMessage.message,
trace: { trace: {
stack: resultMessage.passed && !resultMessage.passed() ? resultMessage.trace.stack : jasmine.undefined stack: !resultMessage.passed ? resultMessage.trace.stack : jasmine.undefined
} }
}); });
} }

View File

@@ -60,7 +60,7 @@ jasmine.Matchers.matcherFn_ = function(matcherName, matcherFunction) {
message += "."; message += ".";
} }
} }
var expectationResult = new jasmine.ExpectationResult({ var expectationResult = jasmine.buildExpectationResult({
matcherName: matcherName, matcherName: matcherName,
passed: result, passed: result,
expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0], expected: matcherArgs.length > 1 ? matcherArgs : matcherArgs[0],

View File

@@ -56,13 +56,14 @@ jasmine.NestedResults.prototype.getItems = function() {
* Adds a result, tracking counts (total, passed, & failed) * Adds a result, tracking counts (total, passed, & failed)
* @param {jasmine.ExpectationResult|jasmine.NestedResults} result * @param {jasmine.ExpectationResult|jasmine.NestedResults} result
*/ */
//TODO: Results are meant for consumption by reporters, not internally.
jasmine.NestedResults.prototype.addResult = function(result) { jasmine.NestedResults.prototype.addResult = function(result) {
if (result.type != 'log') { if (result.type != 'log') {
if (result.items_) { if (result.items_) {
this.rollupCounts(result); this.rollupCounts(result);
} else { } else {
this.totalCount++; this.totalCount++;
if (result.passed()) { if (result.passed) {
this.passedCount++; this.passedCount++;
} else { } else {
this.failedCount++; this.failedCount++;

View File

@@ -118,7 +118,7 @@ jasmine.Spec.prototype.waitsFor = function(latchFunction, optional_timeoutMessag
}; };
jasmine.Spec.prototype.fail = function (e) { jasmine.Spec.prototype.fail = function (e) {
var expectationResult = new jasmine.ExpectationResult({ var expectationResult = jasmine.buildExpectationResult({
passed: false, passed: false,
message: e ? jasmine.util.formatException(e) : 'Exception', message: e ? jasmine.util.formatException(e) : 'Exception',
trace: { stack: e.stack } trace: { stack: e.stack }

View File

@@ -61,7 +61,7 @@ jasmine.HtmlReporter.SpecView.prototype.appendFailureDetail = function() {
if (result.type == 'log') { if (result.type == 'log') {
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString())); messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
} else if (result.type == 'expect' && result.passed && !result.passed()) { } else if (result.type == 'expect' && !result.passed) {
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message)); messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
if (result.trace.stack) { if (result.trace.stack) {

View File

@@ -126,7 +126,7 @@ jasmine.TrivialReporter.prototype.reportSpecStarting = function(spec) {
jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) { jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
var results = spec.results(); var results = spec.results();
var status = results.passed() ? 'passed' : 'failed'; var status = results.passed ? 'passed' : 'failed';
if (results.skipped) { if (results.skipped) {
status = 'skipped'; status = 'skipped';
} }
@@ -146,7 +146,7 @@ jasmine.TrivialReporter.prototype.reportSpecResults = function(spec) {
if (result.type == 'log') { if (result.type == 'log') {
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString())); messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage log'}, result.toString()));
} else if (result.type == 'expect' && result.passed && !result.passed()) { } else if (result.type == 'expect' && !result.passed) {
messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message)); messagesDiv.appendChild(this.createDom('div', {className: 'resultMessage fail'}, result.message));
if (result.trace.stack) { if (result.trace.stack) {