diff --git a/lib/jasmine-core/jasmine.js b/lib/jasmine-core/jasmine.js index 10bf8a12..d3e6872a 100644 --- a/lib/jasmine-core/jasmine.js +++ b/lib/jasmine-core/jasmine.js @@ -1618,6 +1618,8 @@ getJasmineRequireObj().pp = function(j$) { this.emitScalar('HTMLNode'); } else if (value instanceof Date) { this.emitScalar('Date(' + value + ')'); + } else if (value.toString && typeof value === 'object' && !(value instanceof Array) && value.toString !== Object.prototype.toString) { + this.emitScalar(value.toString()); } else if (j$.util.arrayContains(this.seen, value)) { this.emitScalar(''); } else if (j$.isArray_(value) || j$.isA_('Object', value)) { diff --git a/spec/core/PrettyPrintSpec.js b/spec/core/PrettyPrintSpec.js index 2686c154..6d818a8f 100644 --- a/spec/core/PrettyPrintSpec.js +++ b/spec/core/PrettyPrintSpec.js @@ -181,6 +181,14 @@ describe("j$.pp", function () { expect(j$.pp(obj)).toEqual("strung"); }); + it("should stringify objects that implement custom toString", function () { + var obj = { + toString: function () { return "my toString"; } + }; + + expect(j$.pp(obj)).toEqual("my toString"); + }); + it("should handle objects with null prototype", function() { if (jasmine.getEnv().ieVersion < 9) { return; } diff --git a/src/core/PrettyPrinter.js b/src/core/PrettyPrinter.js index 8f86b5d8..e9452961 100644 --- a/src/core/PrettyPrinter.js +++ b/src/core/PrettyPrinter.js @@ -30,6 +30,8 @@ getJasmineRequireObj().pp = function(j$) { this.emitScalar('HTMLNode'); } else if (value instanceof Date) { this.emitScalar('Date(' + value + ')'); + } else if (value.toString && typeof value === 'object' && !(value instanceof Array) && value.toString !== Object.prototype.toString) { + this.emitScalar(value.toString()); } else if (j$.util.arrayContains(this.seen, value)) { this.emitScalar(''); } else if (j$.isArray_(value) || j$.isA_('Object', value)) {