mirror of
				https://github.com/RGBCube/serenity
				synced 2025-10-31 00:12:44 +00:00 
			
		
		
		
	 edfef8e2f5
			
		
	
	
		edfef8e2f5
		
	
	
	
	
		
			
			This code generator no longer creates JS wrappers for platform objects in the old sense, instead they're JS objects internally themselves. Most of what we generate now are prototypes - which can be seen as bindings for the internal C++ methods implementing getters, setters, and methods - as well as object constructors, i.e. bindings for the internal create_with_global_object() method. Also tweak the naming of various CMake glue code existing around this.
		
			
				
	
	
		
			121 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
	
		
			4.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| describe("HTMLTableElement", () => {
 | |
|     loadLocalPage("Table.html");
 | |
| 
 | |
|     afterInitialPageLoad(page => {
 | |
|         test("empty table attributes", () => {
 | |
|             let table = page.document.getElementById("empty-table");
 | |
|             expect(table).not.toBeNull();
 | |
| 
 | |
|             expect(table.caption).toBe(null);
 | |
|             expect(table.tHead).toBe(null);
 | |
|             expect(table.tFoot).toBe(null);
 | |
| 
 | |
|             expect(table.tBodies).toHaveLength(0);
 | |
|             expect(table.rows).toHaveLength(0);
 | |
|         });
 | |
| 
 | |
|         test("full table attributes", () => {
 | |
|             let table = page.document.getElementById("full-table");
 | |
|             expect(table).not.toBeNull();
 | |
| 
 | |
|             expect(table.caption.nodeName).toBe("CAPTION");
 | |
|             expect(table.tHead.nodeName).toBe("THEAD");
 | |
|             expect(table.tFoot.nodeName).toBe("TFOOT");
 | |
| 
 | |
|             expect(table.tBodies.length).toBe(1);
 | |
|             expect(table.rows.length).toBe(3);
 | |
|         });
 | |
| 
 | |
|         test("create/delete caption", () => {
 | |
|             let table = page.document.createElement("table");
 | |
|             expect(table).not.toBeNull();
 | |
| 
 | |
|             expect(table.caption).toBeNull();
 | |
|             table.createCaption();
 | |
|             expect(table.caption).not.toBeNull();
 | |
|             table.deleteCaption();
 | |
|             expect(table.caption).toBeNull();
 | |
|         });
 | |
| 
 | |
|         test("create/delete thead", () => {
 | |
|             let table = page.document.createElement("table");
 | |
|             expect(table).not.toBeNull();
 | |
| 
 | |
|             expect(table.tHead).toBeNull();
 | |
|             table.createTHead();
 | |
|             expect(table.tHead).not.toBeNull();
 | |
|             table.deleteTHead();
 | |
|             expect(table.tHead).toBeNull();
 | |
|         });
 | |
| 
 | |
|         test("create/delete tfoot", () => {
 | |
|             let table = page.document.createElement("table");
 | |
|             expect(table).not.toBeNull();
 | |
| 
 | |
|             expect(table.tFoot).toBeNull();
 | |
|             table.createTFoot();
 | |
|             expect(table.tFoot).not.toBeNull();
 | |
|             table.deleteTFoot();
 | |
|             expect(table.tFoot).toBeNull();
 | |
|         });
 | |
| 
 | |
|         test("insert rows", () => {
 | |
|             let table = page.document.createElement("table");
 | |
|             expect(table).not.toBeNull();
 | |
| 
 | |
|             // We hardcode the default value in a few places, due to the BindingsGenerator's bug with default values
 | |
|             const defaultValue = -1;
 | |
| 
 | |
|             expect(table.rows.length).toBe(0);
 | |
| 
 | |
|             // insertRow with an index > number of rows will throw
 | |
|             expect(() => {
 | |
|                 table.insertRow(1);
 | |
|             }).toThrow();
 | |
| 
 | |
|             // Inserting a row into an empty table will create a <tbody> and <tr>
 | |
|             let rowFirst = table.insertRow(defaultValue);
 | |
|             rowFirst.innerText = "row_first";
 | |
|             expect(table.firstElementChild.nodeName).toBe("TBODY");
 | |
|             expect(table.firstElementChild.firstElementChild.nodeName).toBe("TR");
 | |
|             expect(table.firstElementChild.firstElementChild.innerText).toBe("row_first");
 | |
| 
 | |
|             for (let i = 0; i < 10; i++) {
 | |
|                 let row = table.insertRow(defaultValue);
 | |
|                 row.innerText = "row" + i;
 | |
|             }
 | |
|             expect(table.rows.length).toBe(11);
 | |
| 
 | |
|             // insertRow with the default value
 | |
|             let rowDefault = table.insertRow(defaultValue);
 | |
|             rowDefault.innerText = "row_default";
 | |
|             expect(table.rows[table.rows.length - 1].innerText).toBe("row_default");
 | |
|         });
 | |
| 
 | |
|         test("delete rows", () => {
 | |
|             let table = page.document.createElement("table");
 | |
|             expect(table).not.toBeNull();
 | |
| 
 | |
|             // We hardcode the default value in a few places, due to the BindingsGenerator's bug with default values
 | |
|             const defaultValue = -1;
 | |
| 
 | |
|             // deleteRow with an index > number of rows will throw
 | |
|             expect(table.deleteRow).toThrow();
 | |
| 
 | |
|             for (let i = 0; i < 10; i++) {
 | |
|                 let row = table.insertRow(defaultValue);
 | |
|                 row.innerText = "row" + i;
 | |
|             }
 | |
|             // deleteRow with with no argument will delete the last row
 | |
|             expect(table.rows[table.rows.length - 1].innerText).toBe("row9");
 | |
|             table.deleteRow(defaultValue);
 | |
|             expect(table.rows[table.rows.length - 1].innerText).toBe("row8");
 | |
| 
 | |
|             // We can delete a row with a specific index
 | |
|             expect(table.rows[5].innerText).toBe("row5");
 | |
|             table.deleteRow(5);
 | |
|             expect(table.rows[5].innerText).toBe("row6");
 | |
|         });
 | |
|     });
 | |
|     waitForPageToLoad();
 | |
| });
 |