This commit is contained in:
Davis W. Frank
2013-08-27 22:43:06 -07:00
8 changed files with 60 additions and 44 deletions

View File

@@ -9,7 +9,7 @@ Documentation & guides live here: [http://pivotal.github.com/jasmine/](http://pi
## Contributing ## Contributing
Please read the [contributors' guide](https://github.com/pivotal/jasmine/blob/master/Contribute.markdown) Please read the [contributors' guide](https://github.com/pivotal/jasmine/blob/master/CONTRIBUTING.md)
## Support ## Support

View File

@@ -3,7 +3,7 @@
## Development ## Development
___Jasmine Core Maintainers Only___ ___Jasmine Core Maintainers Only___
Follow the instructions in `Contribute.markdown` during development. Follow the instructions in `CONTRIBUTING.md` during development.
### Git Rules ### Git Rules

View File

@@ -1323,7 +1323,7 @@ getJasmineRequireObj().pp = function(j$) {
this.emitScalar('Date(' + value + ')'); this.emitScalar('Date(' + value + ')');
} else if (value.__Jasmine_been_here_before__) { } else if (value.__Jasmine_been_here_before__) {
this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>'); this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');
} else if (j$.isArray_(value) || typeof value == 'object') { } else if (j$.isArray_(value) || j$.isA_('Object', value)) {
value.__Jasmine_been_here_before__ = true; value.__Jasmine_been_here_before__ = true;
if (j$.isArray_(value)) { if (j$.isArray_(value)) {
this.emitArray(value); this.emitArray(value);
@@ -2114,21 +2114,26 @@ getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
compare: function() { compare: function() {
var args = Array.prototype.slice.call(arguments, 0), var args = Array.prototype.slice.call(arguments, 0),
actual = args[0], actual = args[0],
expectedArgs = args.slice(1); expectedArgs = args.slice(1),
result = { pass: false };
if (!j$.isSpy(actual)) { if (!j$.isSpy(actual)) {
throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');
} }
return { if (!actual.calls.any()) {
pass: util.contains(actual.calls.allArgs(), expectedArgs) result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but it was never called.";
}; return result;
}, }
message: function(actual) {
return { if (util.contains(actual.calls.allArgs(), expectedArgs)) {
affirmative: "Expected spy " + actual.and.identity() + " to have been called.", result.pass = true;
negative: "Expected spy " + actual.and.identity() + " not to have been called." result.message = "Expected spy " + actual.and.identity() + " not to have been called with " + j$.pp(expectedArgs) + " but it was.";
}; } else {
result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but actual calls were " + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + ".";
}
return result;
} }
}; };
} }

View File

@@ -11,6 +11,7 @@ describe("toHaveBeenCalledWith", function() {
result = matcher.compare(calledSpy, 'a', 'b'); result = matcher.compare(calledSpy, 'a', 'b');
expect(result.pass).toBe(true); expect(result.pass).toBe(true);
expect(result.message).toEqual("Expected spy called-spy not to have been called with [ 'a', 'b' ] but it was.");
}); });
it("fails when the actual was not called", function() { it("fails when the actual was not called", function() {
@@ -23,6 +24,7 @@ describe("toHaveBeenCalledWith", function() {
result = matcher.compare(uncalledSpy); result = matcher.compare(uncalledSpy);
expect(result.pass).toBe(false); expect(result.pass).toBe(false);
expect(result.message).toEqual("Expected spy uncalled spy to have been called with [ ] but it was never called.");
}); });
it("fails when the actual was called with different parameters", function() { it("fails when the actual was called with different parameters", function() {
@@ -34,9 +36,11 @@ describe("toHaveBeenCalledWith", function() {
result; result;
calledSpy('a'); calledSpy('a');
calledSpy('c', 'd');
result = matcher.compare(calledSpy, 'a', 'b'); result = matcher.compare(calledSpy, 'a', 'b');
expect(result.pass).toBe(false); expect(result.pass).toBe(false);
expect(result.message).toEqual("Expected spy called spy to have been called with [ 'a', 'b' ] but actual calls were [ 'a' ], [ 'c', 'd' ].");
}); });
it("throws an exception when the actual is not a spy", function() { it("throws an exception when the actual is not a spy", function() {
@@ -45,13 +49,4 @@ describe("toHaveBeenCalledWith", function() {
expect(function() { matcher.compare(fn) }).toThrow(new Error("Expected a spy, but got Function.")); expect(function() { matcher.compare(fn) }).toThrow(new Error("Expected a spy, but got Function."));
}); });
it("has a custom message on failure", function() {
var matcher = j$.matchers.toHaveBeenCalledWith(),
spy = j$.createSpy('sample-spy'),
messages = matcher.message(spy);
expect(messages.affirmative).toEqual("Expected spy sample-spy to have been called.")
expect(messages.negative).toEqual("Expected spy sample-spy not to have been called.")
});
}); });

View File

@@ -1,19 +1,23 @@
(function(env) { (function(env) {
env.ieVersion = (function() { function browserVersion(matchFn) {
var userAgent = jasmine.getGlobal().navigator.userAgent; var userAgent = jasmine.getGlobal().navigator.userAgent;
if (!userAgent) { return Number.MAX_VALUE; } if (!userAgent) { return void 0; }
var match = /MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(userAgent); var match = matchFn(userAgent);
return match ? parseFloat(match[1]) : Number.MAX_VALUE; return match ? parseFloat(match[1]) : void 0;
})(); }
env.safariVersion = (function() { env.ieVersion = browserVersion(function(userAgent) {
var userAgent = jasmine.getGlobal().navigator.userAgent; return /MSIE ([0-9]{1,}[\.0-9]{0,})/.exec(userAgent);
if (!userAgent) { return Number.MAX_VALUE; } });
var match = /Safari/.exec(userAgent) && /Version\/([0-9]{0,})/.exec(userAgent); env.safariVersion = browserVersion(function(userAgent) {
return /Safari/.exec(userAgent) && /Version\/([0-9]{0,})/.exec(userAgent);
});
env.firefoxVersion = browserVersion(function(userAgent) {
return /Firefox\/([0-9]{0,})/.exec(userAgent);
});
return match ? parseFloat(match[1]) : Number.MAX_VALUE;
})();
})(jasmine.getEnv()); })(jasmine.getEnv());

View File

@@ -5,4 +5,11 @@ describe("j$.pp (HTML Dependent)", function () {
expect(j$.pp(sampleNode)).toEqual("HTMLNode"); expect(j$.pp(sampleNode)).toEqual("HTMLNode");
expect(j$.pp({foo: sampleNode})).toEqual("{ foo : HTMLNode }"); expect(j$.pp({foo: sampleNode})).toEqual("{ foo : HTMLNode }");
}); });
it("should print Firefox's wrapped native objects correctly", function() {
if(jasmine.getEnv().firefoxVersion) {
try { new CustomEvent(); } catch(e) { var err = e; };
expect(j$.pp(err)).toMatch(/Exception.*Not enough arguments/);
}
});
}); });

View File

@@ -29,7 +29,7 @@ getJasmineRequireObj().pp = function(j$) {
this.emitScalar('Date(' + value + ')'); this.emitScalar('Date(' + value + ')');
} else if (value.__Jasmine_been_here_before__) { } else if (value.__Jasmine_been_here_before__) {
this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>'); this.emitScalar('<circular reference: ' + (j$.isArray_(value) ? 'Array' : 'Object') + '>');
} else if (j$.isArray_(value) || typeof value == 'object') { } else if (j$.isArray_(value) || j$.isA_('Object', value)) {
value.__Jasmine_been_here_before__ = true; value.__Jasmine_been_here_before__ = true;
if (j$.isArray_(value)) { if (j$.isArray_(value)) {
this.emitArray(value); this.emitArray(value);

View File

@@ -5,21 +5,26 @@ getJasmineRequireObj().toHaveBeenCalledWith = function(j$) {
compare: function() { compare: function() {
var args = Array.prototype.slice.call(arguments, 0), var args = Array.prototype.slice.call(arguments, 0),
actual = args[0], actual = args[0],
expectedArgs = args.slice(1); expectedArgs = args.slice(1),
result = { pass: false };
if (!j$.isSpy(actual)) { if (!j$.isSpy(actual)) {
throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.'); throw new Error('Expected a spy, but got ' + j$.pp(actual) + '.');
} }
return { if (!actual.calls.any()) {
pass: util.contains(actual.calls.allArgs(), expectedArgs) result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but it was never called.";
}; return result;
}, }
message: function(actual) {
return { if (util.contains(actual.calls.allArgs(), expectedArgs)) {
affirmative: "Expected spy " + actual.and.identity() + " to have been called.", result.pass = true;
negative: "Expected spy " + actual.and.identity() + " not to have been called." result.message = "Expected spy " + actual.and.identity() + " not to have been called with " + j$.pp(expectedArgs) + " but it was.";
}; } else {
result.message = "Expected spy " + actual.and.identity() + " to have been called with " + j$.pp(expectedArgs) + " but actual calls were " + j$.pp(actual.calls.allArgs()).replace(/^\[ | \]$/g, '') + ".";
}
return result;
} }
}; };
} }