Source code
Revision control
Copy as Markdown
Other Tools
// Test the Error.prototype.stack getter/setter with various "fun" edge cases.
load(libdir + "asserts.js");
// Stack should be accessible in subclasses. The accessor should walk up the
// prototype chain.
assertEq(typeof Object.create(Error()).stack, "string");
assertEq(Object.create(Error.prototype).stack, "");
// Stack should be overridable in subclasses.
{
let myError = Object.create(Error());
myError.stack = 5;
assertEq(myError.stack, 5);
let myOtherError = Object.create(Error.prototype);
myOtherError.stack = 2;
assertEq(myOtherError.stack, 2);
}
// Should throw when there is no Error in the `this` object's prototype chain.
var obj = Object.create(null);
var desc = Object.getOwnPropertyDescriptor(Error.prototype, "stack");
Object.defineProperty(obj, "stack", desc);
assertThrowsInstanceOf(() => obj.stack, TypeError);
// Should throw with non-object `this` values.
assertThrowsInstanceOf(desc.set, TypeError);
assertThrowsInstanceOf(desc.set.bind("string"), TypeError);
assertThrowsInstanceOf(desc.get, TypeError);
assertThrowsInstanceOf(desc.get.bind("string"), TypeError);