Merge branch 'elliot-nelson-enelson/pp'

This commit is contained in:
Gregg Van Hove
2019-05-20 17:18:04 -07:00
3 changed files with 39 additions and 0 deletions

View File

@@ -5519,6 +5519,12 @@ getJasmineRequireObj().pp = function(j$) {
};
PrettyPrinter.prototype.append = function(value) {
// This check protects us from the rare case where an object has overriden
// `toString()` with an invalid implementation (returning a non-string).
if (typeof value !== 'string') {
value = Object.prototype.toString.call(value);
}
var result = truncate(value, j$.MAX_PRETTY_PRINT_CHARS - this.length);
this.length += result.value.length;
this.stringParts.push(result.value);

View File

@@ -333,4 +333,31 @@ describe("jasmineUnderTest.pp", function () {
expect(jasmineUnderTest.pp(obj)).toEqual("null({ foo: 'bar' })");
});
it("should gracefully handle objects with invalid toString implementations", function () {
var obj = {
foo: {
toString: function() {
// Invalid: toString returning a number
return 3;
}
},
bar: {
toString: function() {
// Really invalid: a nested bad toString().
return {
toString: function() {
return new Date();
}
};
}
},
// Valid: an actual number
baz: 3,
// Valid: an actual Error object
qux: new Error("bar")
};
expect(jasmineUnderTest.pp(obj)).toEqual("Object({ foo: [object Number], bar: [object Object], baz: 3, qux: Error: bar })");
});
});

View File

@@ -266,6 +266,12 @@ getJasmineRequireObj().pp = function(j$) {
};
PrettyPrinter.prototype.append = function(value) {
// This check protects us from the rare case where an object has overriden
// `toString()` with an invalid implementation (returning a non-string).
if (typeof value !== 'string') {
value = Object.prototype.toString.call(value);
}
var result = truncate(value, j$.MAX_PRETTY_PRINT_CHARS - this.length);
this.length += result.value.length;
this.stringParts.push(result.value);