Serenity Operating System
at master 121 lines 4.5 kB view raw
1describe("HTMLTableElement", () => { 2 loadLocalPage("Table.html"); 3 4 afterInitialPageLoad(page => { 5 test("empty table attributes", () => { 6 let table = page.document.getElementById("empty-table"); 7 expect(table).not.toBeNull(); 8 9 expect(table.caption).toBe(null); 10 expect(table.tHead).toBe(null); 11 expect(table.tFoot).toBe(null); 12 13 expect(table.tBodies).toHaveLength(0); 14 expect(table.rows).toHaveLength(0); 15 }); 16 17 test("full table attributes", () => { 18 let table = page.document.getElementById("full-table"); 19 expect(table).not.toBeNull(); 20 21 expect(table.caption.nodeName).toBe("CAPTION"); 22 expect(table.tHead.nodeName).toBe("THEAD"); 23 expect(table.tFoot.nodeName).toBe("TFOOT"); 24 25 expect(table.tBodies.length).toBe(1); 26 expect(table.rows.length).toBe(3); 27 }); 28 29 test("create/delete caption", () => { 30 let table = page.document.createElement("table"); 31 expect(table).not.toBeNull(); 32 33 expect(table.caption).toBeNull(); 34 table.createCaption(); 35 expect(table.caption).not.toBeNull(); 36 table.deleteCaption(); 37 expect(table.caption).toBeNull(); 38 }); 39 40 test("create/delete thead", () => { 41 let table = page.document.createElement("table"); 42 expect(table).not.toBeNull(); 43 44 expect(table.tHead).toBeNull(); 45 table.createTHead(); 46 expect(table.tHead).not.toBeNull(); 47 table.deleteTHead(); 48 expect(table.tHead).toBeNull(); 49 }); 50 51 test("create/delete tfoot", () => { 52 let table = page.document.createElement("table"); 53 expect(table).not.toBeNull(); 54 55 expect(table.tFoot).toBeNull(); 56 table.createTFoot(); 57 expect(table.tFoot).not.toBeNull(); 58 table.deleteTFoot(); 59 expect(table.tFoot).toBeNull(); 60 }); 61 62 test("insert rows", () => { 63 let table = page.document.createElement("table"); 64 expect(table).not.toBeNull(); 65 66 // We hardcode the default value in a few places, due to the BindingsGenerator's bug with default values 67 const defaultValue = -1; 68 69 expect(table.rows.length).toBe(0); 70 71 // insertRow with an index > number of rows will throw 72 expect(() => { 73 table.insertRow(1); 74 }).toThrow(); 75 76 // Inserting a row into an empty table will create a <tbody> and <tr> 77 let rowFirst = table.insertRow(defaultValue); 78 rowFirst.innerText = "row_first"; 79 expect(table.firstElementChild.nodeName).toBe("TBODY"); 80 expect(table.firstElementChild.firstElementChild.nodeName).toBe("TR"); 81 expect(table.firstElementChild.firstElementChild.innerText).toBe("row_first"); 82 83 for (let i = 0; i < 10; i++) { 84 let row = table.insertRow(defaultValue); 85 row.innerText = "row" + i; 86 } 87 expect(table.rows.length).toBe(11); 88 89 // insertRow with the default value 90 let rowDefault = table.insertRow(defaultValue); 91 rowDefault.innerText = "row_default"; 92 expect(table.rows[table.rows.length - 1].innerText).toBe("row_default"); 93 }); 94 95 test("delete rows", () => { 96 let table = page.document.createElement("table"); 97 expect(table).not.toBeNull(); 98 99 // We hardcode the default value in a few places, due to the BindingsGenerator's bug with default values 100 const defaultValue = -1; 101 102 // deleteRow with an index > number of rows will throw 103 expect(table.deleteRow).toThrow(); 104 105 for (let i = 0; i < 10; i++) { 106 let row = table.insertRow(defaultValue); 107 row.innerText = "row" + i; 108 } 109 // deleteRow with with no argument will delete the last row 110 expect(table.rows[table.rows.length - 1].innerText).toBe("row9"); 111 table.deleteRow(defaultValue); 112 expect(table.rows[table.rows.length - 1].innerText).toBe("row8"); 113 114 // We can delete a row with a specific index 115 expect(table.rows[5].innerText).toBe("row5"); 116 table.deleteRow(5); 117 expect(table.rows[5].innerText).toBe("row6"); 118 }); 119 }); 120 waitForPageToLoad(); 121});