Source code

Revision control

Copy as Markdown

Other Tools

// |jit-test| skip-if: !getBuildConfiguration("explicit-resource-management"); --enable-explicit-resource-management
load(libdir + "asserts.js");
{
const disposed = [];
const errorsToThrow = [undefined, null, 2];
function testThrowsWithUndefinedAndNullValues() {
using a = {
[Symbol.dispose]() {
disposed.push(1);
throw errorsToThrow[0];
}
}
using b = {
[Symbol.dispose]() {
disposed.push(2);
throw errorsToThrow[1];
}
}
using c = {
[Symbol.dispose]() {
disposed.push(3);
throw errorsToThrow[2];
}
}
}
assertSuppressionChain(testThrowsWithUndefinedAndNullValues, errorsToThrow);
assertArrayEq(disposed, [3, 2, 1]);
}
{
const disposed = [];
const errorsToThrow = [2, undefined];
function testThrowsWithUndefinedAndRealValue() {
using a = {
[Symbol.dispose]() {
disposed.push(1);
throw errorsToThrow[0];
}
}
throw errorsToThrow[1];
}
assertSuppressionChain(testThrowsWithUndefinedAndRealValue, errorsToThrow);
assertArrayEq(disposed, [1]);
}
{
const disposed = [];
const errorsToThrow = [2, null];
function testThrowsWithNullAndRealValue() {
using a = {
[Symbol.dispose]() {
disposed.push(1);
throw errorsToThrow[0];
}
}
throw errorsToThrow[1];
}
assertSuppressionChain(testThrowsWithNullAndRealValue, errorsToThrow);
assertArrayEq(disposed, [1]);
}