| 
									
										
										
										
											2021-10-20 21:29:47 +02:00
										 |  |  | test("basic functionality", () => { | 
					
						
							|  |  |  |     var called = false; | 
					
						
							|  |  |  |     class A { | 
					
						
							|  |  |  |         static { | 
					
						
							|  |  |  |             expect(called).toBeFalse(); | 
					
						
							|  |  |  |             expect(this.name).toBe("A"); | 
					
						
							|  |  |  |             called = true; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(called).toBeTrue(); | 
					
						
							|  |  |  |     new A(); | 
					
						
							|  |  |  |     expect(called).toBeTrue(); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test("called in order", () => { | 
					
						
							|  |  |  |     var i = 0; | 
					
						
							|  |  |  |     class A { | 
					
						
							|  |  |  |         static { | 
					
						
							|  |  |  |             expect(i).toBe(0); | 
					
						
							|  |  |  |             i++; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         static method() { | 
					
						
							|  |  |  |             return 2; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         static { | 
					
						
							|  |  |  |             expect(i).toBe(1); | 
					
						
							|  |  |  |             i++; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(i).toBe(2); | 
					
						
							|  |  |  |     new A(); | 
					
						
							|  |  |  |     expect(i).toBe(2); | 
					
						
							|  |  |  | }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test("correct this", () => { | 
					
						
							|  |  |  |     var thisValue = null; | 
					
						
							|  |  |  |     class A { | 
					
						
							|  |  |  |         static { | 
					
						
							|  |  |  |             thisValue = this; | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     expect(thisValue).toBe(A); | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2021-12-19 02:06:22 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | describe("class like constructs can be used inside", () => { | 
					
						
							|  |  |  |     test("can use new.target", () => { | 
					
						
							|  |  |  |         let value = 1; | 
					
						
							|  |  |  |         class C { | 
					
						
							|  |  |  |             static { | 
					
						
							|  |  |  |                 value = new.target; | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         expect(value).toBeUndefined(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     test("can use super property lookup", () => { | 
					
						
							|  |  |  |         function parent() {} | 
					
						
							|  |  |  |         parent.val = 3; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         let hit = false; | 
					
						
							|  |  |  |         class C extends parent { | 
					
						
							|  |  |  |             static { | 
					
						
							|  |  |  |                 hit = true; | 
					
						
							|  |  |  |                 expect(super.val).toBe(3); | 
					
						
							|  |  |  |             } | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |         expect(hit).toBeTrue(); | 
					
						
							|  |  |  |     }); | 
					
						
							|  |  |  | }); | 
					
						
							| 
									
										
										
										
											2025-03-11 11:15:07 +01:00
										 |  |  | 
 | 
					
						
							|  |  |  | // https://github.com/LadybirdBrowser/ladybird/pull/4226
 | 
					
						
							|  |  |  | test("declaring variables", () => { | 
					
						
							|  |  |  |     class A { | 
					
						
							|  |  |  |         static { | 
					
						
							|  |  |  |             const a = 1; | 
					
						
							|  |  |  |             let b = 2; | 
					
						
							|  |  |  |             var c = 3; | 
					
						
							|  |  |  |             function d() {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             expect(a).toBe(1); | 
					
						
							|  |  |  |             expect(b).toBe(2); | 
					
						
							|  |  |  |             expect(c).toBe(3); | 
					
						
							|  |  |  |             expect(typeof d).toBe("function"); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | }); |