assert.sameValue(new Error("outer", { cause: "root" }).cause, "root", "string cause");
assert.sameValue(new Error("outer", { cause: new Error("inner") }).cause.message, "inner", "object cause");
var e = new Error("x", { cause: "c" });
assert.sameValue(Object.keys(e).length, 0, "cause not enumerable");
assert.sameValue(e.propertyIsEnumerable("cause"), false, "propertyIsEnumerable false");
assert.sameValue("cause" in new Error("x", { cause: undefined }), true, "explicit undefined cause exists");
assert.sameValue("cause" in new Error("x"), false, "no options -> no cause");
assert.sameValue("cause" in new Error("x", { other: 1 }), false, "options without cause -> no cause");
assert.sameValue(new TypeError("t", { cause: 42 }).cause, 42, "TypeError cause");
assert.sameValue(new RangeError("r", { cause: "rc" }).cause, "rc", "RangeError cause");
assert.sameValue(new AggregateError([], "m", { cause: "ac" }).cause, "ac", "AggregateError cause");
class MyErr extends Error {
constructor(m, o) { super(m, o); this.name = "MyErr"; }
}
var sub = new MyErr("x", { cause: "sc" });
assert.sameValue(sub.cause, "sc", "subclass cause via super");
assert.sameValue(sub.propertyIsEnumerable("cause"), false, "subclass cause non-enumerable");
var chain = new Error("a", { cause: new Error("b", { cause: new Error("c") }) });
assert.sameValue(chain.cause.cause.message, "c", "nested cause chain");