import { describe, expect, it } from "bun:test";
import { topLevelChunks } from "./chunk";
describe("top-level MDX chunks", () => {
it("reassembles canonical blocks byte for byte", () => {
let source = [
"# Heading\n\n",
"Paragraph with café and 計画.\n\n",
"```ts\nconst value = 1;\n```\n\n",
"| A | B |\n| - | - |\n| 1 | 2 |\n\n",
'\n\nNested text.\n\n\n',
].join("");
let chunks = topLevelChunks(source, 50);
expect(chunks.map(chunk => chunk.source).join("")).toBe(source);
expect(chunks.every(chunk => chunk.bytes === Buffer.byteLength(chunk.source))).toBe(true);
expect(
chunks.flatMap(chunk =>
Array.from(
{ length: chunk.lastBlock - chunk.firstBlock + 1 },
(_, index) => chunk.firstBlock + index,
)
),
).toEqual([0, 1, 2, 3, 4]);
expect(chunks.some(chunk => chunk.source.includes("```ts\nconst value = 1;\n```"))).toBe(true);
expect(chunks.some(chunk => chunk.source.includes(" {
let source = `# Heading\n\n${"long ".repeat(40)}\n`;
let chunks = topLevelChunks(source, 20);
expect(chunks).toHaveLength(2);
expect(chunks[1]!.source).toBe(`${"long ".repeat(40)}\n`);
expect(chunks[1]!.bytes).toBeGreaterThan(20);
});
it("handles empty source and rejects invalid targets", () => {
expect(topLevelChunks("", 100)).toEqual([]);
expect(topLevelChunks(" \n", 100)).toEqual([{
source: " \n",
firstBlock: 0,
lastBlock: 0,
bytes: 3,
}]);
expect(() => topLevelChunks("# Plan\n", 0)).toThrow("positive integer");
});
});