import assert from "node:assert/strict"; import { test } from "node:test"; import { memoryFiles } from "../src/files.ts"; import { fileDocs } from "../src/collab/file-docs.ts"; test("two opens of the same path share one doc", () => { const files = memoryFiles({ "a.ts": "one" }); const docs = fileDocs(files); assert.equal(docs.open("a.ts"), docs.open("a.ts")); }); test("a second fileDocs(files) call shares the same doc as the first", () => { const files = memoryFiles({ "a.ts": "one" }); assert.equal(fileDocs(files).open("a.ts"), fileDocs(files).open("a.ts")); }); test("editing the doc writes files", () => { const files = memoryFiles({ "a.ts": "one" }); const doc = fileDocs(files).open("a.ts"); doc.write("two"); assert.equal(files.read("a.ts"), "two"); }); test("an external files.write updates the doc", () => { const files = memoryFiles({ "a.ts": "one" }); const doc = fileDocs(files).open("a.ts"); files.write("a.ts", "three"); assert.equal(doc.text, "three"); }); test("an external write does not bounce back into files, and a local edit writes files exactly once", () => { const files = memoryFiles({ "a.ts": "one" }); const writes: string[] = []; files.watch((path) => writes.push(path)); const doc = fileDocs(files).open("a.ts"); files.write("a.ts", "three"); assert.deepEqual(writes, ["a.ts"]); assert.equal(doc.text, "three"); doc.write("four"); assert.deepEqual(writes, ["a.ts", "a.ts"]); assert.equal(files.read("a.ts"), "four"); }); test("opening a path seeds the doc from files, including an unknown path as empty text", () => { const files = memoryFiles({ "a.ts": "seeded" }); const docs = fileDocs(files); assert.equal(docs.open("a.ts").text, "seeded"); assert.equal(docs.open("missing.ts").text, ""); }); test("two Files instances never share a doc", () => { const a = memoryFiles({ "a.ts": "a" }); const b = memoryFiles({ "a.ts": "a" }); assert.notEqual(fileDocs(a).open("a.ts"), fileDocs(b).open("a.ts")); });