mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 08:12:43 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			55 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			55 lines
		
	
	
	
		
			2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 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();
 | |
| });
 | 
