mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 05:52:46 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			67 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
	
		
			1.2 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| test("property initialization", () => {
 | |
|     class A {
 | |
|         constructor() {
 | |
|             this.x = 3;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     expect(new A().x).toBe(3);
 | |
| });
 | |
| 
 | |
| test("method initialization", () => {
 | |
|     class A {
 | |
|         constructor() {
 | |
|             this.x = () => 10;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     expect(new A().x()).toBe(10);
 | |
| });
 | |
| 
 | |
| test("initialize to class method", () => {
 | |
|     class A {
 | |
|         constructor() {
 | |
|             this.x = this.method;
 | |
|         }
 | |
| 
 | |
|         method() {
 | |
|             return 10;
 | |
|         }
 | |
|     }
 | |
| 
 | |
|     expect(new A().x()).toBe(10);
 | |
| });
 | |
| 
 | |
| test("constructor length affects class length", () => {
 | |
|     class A {
 | |
|         constructor() {}
 | |
|     }
 | |
| 
 | |
|     expect(A).toHaveLength(0);
 | |
| 
 | |
|     class B {
 | |
|         constructor(a, b, c = 2) {}
 | |
|     }
 | |
| 
 | |
|     expect(B).toHaveLength(2);
 | |
| });
 | |
| 
 | |
| test("must be invoked with 'new'", () => {
 | |
|     class A {
 | |
|         constructor() {}
 | |
|     }
 | |
| 
 | |
|     expect(() => {
 | |
|         A();
 | |
|     }).toThrowWithMessage(TypeError, "Class constructor A must be called with 'new'");
 | |
| 
 | |
|     expect(() => {
 | |
|         A.prototype.constructor();
 | |
|     }).toThrowWithMessage(TypeError, "Class constructor A must be called with 'new'");
 | |
| });
 | |
| 
 | |
| test("implicit constructor", () => {
 | |
|     class A {}
 | |
| 
 | |
|     expect(new A()).toBeInstanceOf(A);
 | |
| });
 | 
