refactor: extraction des modules xlsx, lien dashboard-grille et inspecteur redimensionnable #154
This commit is contained in:
@@ -907,6 +907,52 @@ await test("the grid exposes ARIA grid semantics", () => {
|
||||
assert.equal(area.querySelector("th.xlsx-rownum").getAttribute("role"), "rowheader");
|
||||
});
|
||||
|
||||
// ── #154-A5 — extracted refs module & dashboard → grid link ────────────────
|
||||
|
||||
const { parseRef, columnName, firstCellOfRange, sheetOfRef } = await import(
|
||||
pathToFileURL(path.join(REPO_ROOT, "frontend", "js", "xlsx", "refs.js")).href
|
||||
);
|
||||
|
||||
await test("parseRef / columnName round-trip A1 references", () => {
|
||||
assert.deepEqual(parseRef("A1"), { row: 1, col: 1 });
|
||||
assert.deepEqual(parseRef("B12"), { row: 12, col: 2 });
|
||||
assert.deepEqual(parseRef("AA3"), { row: 3, col: 27 });
|
||||
assert.equal(parseRef("A"), null);
|
||||
assert.equal(columnName(1), "A");
|
||||
assert.equal(columnName(26), "Z");
|
||||
assert.equal(columnName(27), "AA");
|
||||
assert.equal(columnName(parseRef("AB9").col), "AB");
|
||||
});
|
||||
|
||||
await test("range helpers extract the sheet and the first cell", () => {
|
||||
assert.equal(firstCellOfRange("Data!$A$1:$B$5"), "A1");
|
||||
assert.equal(firstCellOfRange("'Mon onglet'!$C$3"), "C3");
|
||||
assert.equal(firstCellOfRange("A1:B2"), "A1");
|
||||
assert.equal(sheetOfRef("Data!$A$1:$B$5"), "Data");
|
||||
assert.equal(sheetOfRef("'Mon onglet'!$C$3"), "Mon onglet");
|
||||
assert.equal(sheetOfRef("A1:B2"), null);
|
||||
});
|
||||
|
||||
await test("clicking a named range reveals its first cell in the grid", async () => {
|
||||
const area = mount();
|
||||
apiQueue.push({
|
||||
ok: true, status: 200,
|
||||
body: { vault: "V", path: "data.xlsx", named_ranges: [{ name: "MaPlage", scope: "", ref: "Feuille1!$A$1:$B$2" }], objects: { charts: 0, pivots: 0 }, sheets: [] },
|
||||
});
|
||||
area.querySelector("#xlsx-dashboard-btn").click();
|
||||
await new Promise((r) => setTimeout(r, 5));
|
||||
const row = area.querySelector(".xlsx-range-row[data-ref]");
|
||||
assert.ok(row, "the named range row is rendered");
|
||||
row.click();
|
||||
assert.equal(area.querySelector("#xlsx-active-cell").textContent, "A1", "the anchor cell becomes active");
|
||||
assert.ok(area.querySelector('td[data-cell="A1"]').classList.contains("xlsx-active"));
|
||||
});
|
||||
|
||||
await test("the inspector exposes a resize handle", () => {
|
||||
const area = mount();
|
||||
assert.ok(area.querySelector("#xlsx-inspector-resize"), "resize handle present");
|
||||
});
|
||||
|
||||
// ── Report ──────────────────────────────────────────────────────────────────
|
||||
console.log(`\n${passCount}/${testCount} tests passed\n`);
|
||||
process.exit(passCount === testCount ? 0 : 1);
|
||||
|
||||
Reference in New Issue
Block a user