1
0
Fork 0
mirror of https://github.com/LadybirdBrowser/ladybird.git synced 2025-06-08 05:27:14 +09:00
ladybird/Libraries/LibJS/Tests/try-return-finally.js

80 lines
1.8 KiB
JavaScript

test("return from try followed by finally with function call inside", () => {
let value = (() => {
try {
return 1;
} finally {
(() => {})();
}
})();
expect(value).toBe(1);
});
test("return from outer finally with nested unwind contexts", () => {
let value = (() => {
try {
try {
return 1;
} finally {
}
} finally {
return 2;
}
})();
expect(value).toBe(2);
});
test("restore exception after generator yield in finally", () => {
let generator = (function* () {
try {
throw new Error("foo");
} finally {
yield 42;
}
})();
expect(generator.next().value).toBe(42);
expect(() => generator.next()).toThrowWithMessage(Error, "foo");
expect(generator.next().done).toBe(true);
});
test("yield, then return from finally", () => {
let test = [];
let generator = (function* () {
try {
yield 1;
test.push(1);
} finally {
test.push(2);
return 2;
}
expect.fail("unreachable");
})();
let result = generator.next();
expect(result.value).toBe(1);
expect(result.done).toBe(false);
result = generator.next();
expect(result.value).toBe(2);
expect(result.done).toBe(true);
expect(test).toEqual([1, 2]);
});
test("return from async through finally", () => {
let test = 0;
let result = (async function () {
try {
return { y: 5 };
} finally {
test = 42;
}
expect.fail("unreachable");
})();
expect(result).toBeInstanceOf(Promise);
expect(test).toBe(42);
result.then(value => {
expect(value).toEqual({ y: 5 });
});
});