12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- test("Nested try/catch/finally with exceptions", () => {
- // This test uses a combination of boolean "checkpoint" flags
- // and expect().fail() to ensure certain code paths have been
- // reached and others haven't.
- var level1TryHasBeenExecuted = false;
- var level1CatchHasBeenExecuted = false;
- var level1FinallyHasBeenExecuted = false;
- var level2TryHasBeenExecuted = false;
- var level2CatchHasBeenExecuted = false;
- var level3TryHasBeenExecuted = false;
- var level3CatchHasBeenExecuted = false;
- var level3FinallyHasBeenExecuted = false;
- expect(() => {
- try {
- level1TryHasBeenExecuted = true;
- foo();
- expect().fail();
- } catch (e) {
- level1CatchHasBeenExecuted = true;
- try {
- level2TryHasBeenExecuted = true;
- try {
- level3TryHasBeenExecuted = true;
- bar();
- expect().fail();
- } catch (e) {
- level3CatchHasBeenExecuted = true;
- } finally {
- level3FinallyHasBeenExecuted = true;
- baz();
- expect().fail();
- }
- expect().fail();
- } catch (e) {
- level2CatchHasBeenExecuted = true;
- qux();
- expect().fail();
- }
- expect().fail();
- } finally {
- level1FinallyHasBeenExecuted = true;
- throw Error("Error in final finally");
- expect().fail();
- }
- expect().fail();
- }).toThrow(Error, "Error in final finally");
- expect(level1TryHasBeenExecuted).toBeTrue();
- expect(level1CatchHasBeenExecuted).toBeTrue();
- expect(level1FinallyHasBeenExecuted).toBeTrue();
- expect(level2TryHasBeenExecuted).toBeTrue();
- expect(level2CatchHasBeenExecuted).toBeTrue();
- expect(level3TryHasBeenExecuted).toBeTrue();
- expect(level3CatchHasBeenExecuted).toBeTrue();
- expect(level3FinallyHasBeenExecuted).toBeTrue();
- });
|