UNPKG

tabulator-tables

Version:

Interactive table generation JavaScript library

201 lines (164 loc) 6.95 kB
import TabulatorFull from "../../../src/js/core/TabulatorFull"; import Spreadsheet from "../../../src/js/modules/Spreadsheet/Spreadsheet"; import SheetComponent from "../../../src/js/modules/Spreadsheet/SheetComponent"; describe("Spreadsheet module", () => { /** @type {TabulatorFull} */ let tabulator; /** @type {Spreadsheet} */ let spreadsheetMod; beforeEach(async () => { const el = document.createElement("div"); el.id = "tabulator"; document.body.appendChild(el); }); afterEach(() => { if (tabulator) { tabulator.destroy(); } document.getElementById("tabulator")?.remove(); }); describe("basic functionality", () => { beforeEach(async () => { tabulator = new TabulatorFull("#tabulator", { spreadsheet: true, spreadsheetRows: 10, spreadsheetColumns: 10 }); spreadsheetMod = tabulator.module("spreadsheet"); return new Promise((resolve) => { tabulator.on("tableBuilt", () => { resolve(); }); }); }); it("should initialize properly", () => { expect(spreadsheetMod).toBeDefined(); expect(Array.isArray(spreadsheetMod.sheets)).toBe(true); // In test environment, sheets might not be auto-created // until data is explicitly loaded }); it("should add new sheets", () => { const initialSheetCount = spreadsheetMod.sheets.length; // Add a new sheet const sheetComponent = spreadsheetMod.addSheet({ title: "Test Sheet", rows: 5, columns: 5 }); // Check sheet was added expect(spreadsheetMod.sheets.length).toBe(initialSheetCount + 1); expect(sheetComponent instanceof SheetComponent).toBe(true); expect(spreadsheetMod.sheets[spreadsheetMod.sheets.length - 1].title).toBe("Test Sheet"); }); it("should get sheet definitions", () => { // Add a sheet with some data spreadsheetMod.addSheet({ title: "Data Sheet", rows: 3, columns: 3, data: [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ] }); const definitions = spreadsheetMod.getSheetDefinitions(); // Check definitions format expect(Array.isArray(definitions)).toBe(true); expect(definitions.length).toBe(spreadsheetMod.sheets.length); // Check data sheet definition const dataSheetDef = definitions.find(def => def.title === "Data Sheet"); expect(dataSheetDef).toBeDefined(); expect(dataSheetDef.data).toEqual([ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]); expect(dataSheetDef.rows).toBe(3); expect(dataSheetDef.columns).toBe(3); }); it("should switch active sheet", () => { // Add second sheet const sheetComponent = spreadsheetMod.addSheet({ title: "Active Test" }); // Get initial active sheet const initialActiveSheet = spreadsheetMod.activeSheet; // Activate the new sheet spreadsheetMod.activeSheetFunc(sheetComponent); // Check that active sheet changed expect(spreadsheetMod.activeSheet).not.toBe(initialActiveSheet); expect(spreadsheetMod.activeSheet.title).toBe("Active Test"); }); it("should manage sheets", () => { // Create new sheet with data const testData = [ ["A", "B", "C"], [1, 2, 3], [4, 5, 6] ]; // First create a sheet const sheet = spreadsheetMod.addSheet({ title: "Test Sheet", data: testData }); expect(sheet).toBeDefined(); expect(typeof sheet.getData).toBe('function'); expect(typeof sheet.setData).toBe('function'); }); it("should remove sheets", () => { // Add several sheets const sheet1 = spreadsheetMod.addSheet({ title: "Sheet 1" }); const sheet2 = spreadsheetMod.addSheet({ title: "Sheet 2" }); const sheet3 = spreadsheetMod.addSheet({ title: "Sheet 3" }); const initialCount = spreadsheetMod.sheets.length; // Remove a sheet spreadsheetMod.removeSheetFunc(sheet2); // Check sheet was removed expect(spreadsheetMod.sheets.length).toBe(initialCount - 1); expect(spreadsheetMod.sheets.some(s => s.title === "Sheet 2")).toBe(false); // Check we can't remove last sheet const spy = jest.spyOn(console, 'warn').mockImplementation(() => {}); while (spreadsheetMod.sheets.length > 1) { spreadsheetMod.removeSheetFunc(spreadsheetMod.sheets[0]); } // Try to remove last sheet spreadsheetMod.removeSheetFunc(spreadsheetMod.sheets[0]); // Should still have one sheet and warning should be logged expect(spreadsheetMod.sheets.length).toBe(1); expect(spy).toHaveBeenCalled(); spy.mockRestore(); }); }); describe("with initial data", () => { const initialData = [ ["Name", "Age", "City"], ["John", 30, "New York"], ["Jane", 25, "Boston"], ["Bob", 40, "Chicago"] ]; beforeEach(async () => { tabulator = new TabulatorFull("#tabulator", { spreadsheet: true, spreadsheetData: initialData }); spreadsheetMod = tabulator.module("spreadsheet"); return new Promise((resolve) => { tabulator.on("tableBuilt", () => { resolve(); }); }); }); it("should load initial data", () => { const data = spreadsheetMod.getSheetData(); expect(data).toEqual(initialData); }); it("should clear sheet data", () => { // Clear the sheet spreadsheetMod.clearSheet(); // Get data and verify it's empty const data = spreadsheetMod.getSheetData(); expect(data).toEqual([]); }); }); });