try-return-finally.js 904 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. test("return from try followed by finally with function call inside", () => {
  2. let value = (() => {
  3. try {
  4. return 1;
  5. } finally {
  6. (() => {})();
  7. }
  8. })();
  9. expect(value).toBe(1);
  10. });
  11. test("return from outer finally with nested unwind contexts", () => {
  12. let value = (() => {
  13. try {
  14. try {
  15. return 1;
  16. } finally {
  17. }
  18. } finally {
  19. return 2;
  20. }
  21. })();
  22. expect(value).toBe(2);
  23. });
  24. test("restore exception after generator yield in finally", () => {
  25. let generator = (function* () {
  26. try {
  27. throw new Error("foo");
  28. } finally {
  29. yield 42;
  30. }
  31. })();
  32. expect(generator.next().value).toBe(42);
  33. expect(() => generator.next()).toThrowWithMessage(Error, "foo");
  34. expect(generator.next().done).toBe(true);
  35. });