mirror of
				https://github.com/LadybirdBrowser/ladybird.git
				synced 2025-10-31 13:20:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			133 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			133 lines
		
	
	
	
		
			2.3 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| test("method inheritance", () => {
 | |
|   class Parent {
 | |
|     method() {
 | |
|       return 3;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   class Child extends Parent {}
 | |
| 
 | |
|   const p = new Parent();
 | |
|   const c = new Child();
 | |
|   expect(p.method()).toBe(3);
 | |
|   expect(c.method()).toBe(3);
 | |
| });
 | |
| 
 | |
| test("method overriding", () => {
 | |
|   class Parent {
 | |
|     method() {
 | |
|       return 3;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   class Child extends Parent {
 | |
|     method() {
 | |
|       return 10;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   const p = new Parent();
 | |
|   const c = new Child();
 | |
|   expect(p.method()).toBe(3);
 | |
|   expect(c.method()).toBe(10);
 | |
| });
 | |
| 
 | |
| test("parent method reference with super", () => {
 | |
|   class Parent {
 | |
|     method() {
 | |
|       return 3;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   class Child extends Parent {
 | |
|     method() {
 | |
|       return super.method() * 2;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   const p = new Parent();
 | |
|   const c = new Child();
 | |
|   expect(p.method()).toBe(3);
 | |
|   expect(c.method()).toBe(6);
 | |
| });
 | |
| 
 | |
| test("child class access to parent class initialized properties", () => {
 | |
|   class Parent {
 | |
|     constructor() {
 | |
|       this.x = 3;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   class Child extends Parent {}
 | |
| 
 | |
|   const p = new Parent();
 | |
|   const c = new Child();
 | |
|   expect(p.x).toBe(3);
 | |
|   expect(c.x).toBe(3);
 | |
| });
 | |
| 
 | |
| test("child class modification of parent class properties", () => {
 | |
|   class Parent {
 | |
|     constructor() {
 | |
|       this.x = 3;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   class Child extends Parent {
 | |
|     change() {
 | |
|       this.x = 10;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   const p = new Parent();
 | |
|   const c = new Child();
 | |
|   expect(p.x).toBe(3);
 | |
|   expect(c.x).toBe(3);
 | |
| 
 | |
|   c.change();
 | |
|   expect(c.x).toBe(10);
 | |
| });
 | |
| 
 | |
| test("inheritance and hasOwnProperty", () => {
 | |
|   class Parent {
 | |
|     constructor() {
 | |
|       this.x = 3;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   class Child extends Parent {
 | |
|     method() {
 | |
|       this.y = 10;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   const p = new Parent();
 | |
|   const c = new Child();
 | |
|   expect(p.hasOwnProperty("x")).toBeTrue();
 | |
|   expect(p.hasOwnProperty("y")).toBeFalse();
 | |
|   expect(c.hasOwnProperty("x")).toBeTrue();
 | |
|   expect(c.hasOwnProperty("y")).toBeFalse();
 | |
| 
 | |
|   c.method();
 | |
|   expect(c.hasOwnProperty("x")).toBeTrue();
 | |
|   expect(c.hasOwnProperty("y")).toBeTrue();
 | |
| });
 | |
| 
 | |
| test("super constructor call from child class with argument", () => {
 | |
|   class Parent {
 | |
|     constructor(x) {
 | |
|       this.x = x;
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   class Child extends Parent {
 | |
|     constructor() {
 | |
|       super(10);
 | |
|     }
 | |
|   }
 | |
| 
 | |
|   const p = new Parent(3);
 | |
|   const c = new Child(3);
 | |
|   expect(p.x).toBe(3);
 | |
|   expect(c.x).toBe(10);
 | |
| });
 | 
