mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-31 13:20:59 +00:00 
			
		
		
		
	
		
			
	
	
		
			75 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
		
		
			
		
	
	
			75 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
|   | describe("parsing freestanding async functions", () => { | ||
|  |     test("simple", () => { | ||
|  |         expect(`async function foo() {}`).toEval(); | ||
|  |         expect(`async
 | ||
|  |         function foo() {}`).not.toEval();
 | ||
|  |     }); | ||
|  |     test("await expression", () => { | ||
|  |         expect(`async function foo() { await bar(); }`).toEval(); | ||
|  |         expect(`async function foo() { await; }`).not.toEval(); | ||
|  |         expect(`function foo() { await bar(); }`).not.toEval(); | ||
|  |         expect(`function foo() { await; }`).toEval(); | ||
|  |     }); | ||
|  | }); | ||
|  | 
 | ||
|  | describe("parsing object literal async functions", () => { | ||
|  |     test("simple", () => { | ||
|  |         expect(`x = { async foo() { } }`).toEval(); | ||
|  |         expect(`x = { async
 | ||
|  |                 foo() { } }`).toEval();
 | ||
|  |     }); | ||
|  |     test("await expression", () => { | ||
|  |         expect(`x = { foo() { await bar(); } }`).not.toEval(); | ||
|  |         expect(`x = { foo() { await; } }`).toEval(); | ||
|  |         expect(`x = { async foo() { await bar(); } }`).toEval(); | ||
|  |         expect(`x = { async foo() { await; } }`).not.toEval(); | ||
|  |     }); | ||
|  | }); | ||
|  | 
 | ||
|  | describe("parsing classes with async methods", () => { | ||
|  |     test("simple", () => { | ||
|  |         expect(`class Foo { async foo() {} }`).toEval(); | ||
|  |         expect(`class Foo { static async foo() {} }`).toEval(); | ||
|  |         expect(`class Foo { async foo() { await bar(); } }`).toEval(); | ||
|  |         expect(`class Foo { async foo() { await; } }`).not.toEval(); | ||
|  |         expect(`class Foo { async constructor() {} }`).not.toEval(); | ||
|  |     }); | ||
|  | }); | ||
|  | 
 | ||
|  | test("function expression names equal to 'await'", () => { | ||
|  |     expect(`async function foo() { (function await() {}); }`).toEval(); | ||
|  |     expect(`async function foo() { function await() {} }`).not.toEval(); | ||
|  | }); | ||
|  | 
 | ||
|  | test("basic functionality", () => { | ||
|  |     test("simple", () => { | ||
|  |         let executionValue = null; | ||
|  |         let resultValue = null; | ||
|  |         async function foo() { | ||
|  |             executionValue = "someValue"; | ||
|  |             return "otherValue"; | ||
|  |         } | ||
|  |         const returnValue = foo(); | ||
|  |         expect(returnValue).toBeInstanceOf(Promise); | ||
|  |         returnValue.then(result => { | ||
|  |             resultValue = result; | ||
|  |         }); | ||
|  |         runQueuedPromiseJobs(); | ||
|  |         expect(executionValue).toBe("someValue"); | ||
|  |         expect(resultValue).toBe("otherValue"); | ||
|  |     }); | ||
|  | 
 | ||
|  |     test("await", () => { | ||
|  |         let resultValue = null; | ||
|  |         async function foo() { | ||
|  |             return "someValue"; | ||
|  |         } | ||
|  |         async function bar() { | ||
|  |             resultValue = await foo(); | ||
|  |         } | ||
|  |         bar(); | ||
|  |         runQueuedPromiseJobs(); | ||
|  |         expect(resultValue).toBe("someValue"); | ||
|  |     }); | ||
|  | }); |