cb5bbbf382
- Eliminated core/ directory (252 files, 23 subdirs → distributed)
- Reduced max nesting from 9 levels to 5 levels
- Promoted tool subdirs to top level: exa/, lsp/, patch/, task/, web/
- Merged web-scrapers/ + web-search/ into web/{scrapers,search}/
- Flattened modes/interactive/ to modes/
- Split execution/ into: ipy/ (python), exec/ (bash), ssh/
- Renamed ipy/python-*.ts to ipy/*.ts (executor, kernel, etc.)
- Flattened cursor/exec-bridge.ts to cursor.ts
- Created logical groupings: config/, session/, extensibility/, export/
- Updated all imports across 500+ files
132 lines
2.9 KiB
TypeScript
132 lines
2.9 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { parseFrontmatter } from "$c/utils/frontmatter";
|
|
|
|
describe("parseFrontmatter", () => {
|
|
const parse = (content: string) => parseFrontmatter(content, { source: "tests:frontmatter", level: "off" });
|
|
|
|
test("parses simple key-value pairs", () => {
|
|
const content = `---
|
|
name: test
|
|
enabled: true
|
|
---
|
|
Body content`;
|
|
|
|
const result = parse(content);
|
|
expect(result.frontmatter).toEqual({ name: "test", enabled: true });
|
|
expect(result.body).toBe("Body content");
|
|
});
|
|
|
|
test("parses YAML list syntax", () => {
|
|
const content = `---
|
|
tags:
|
|
- javascript
|
|
- typescript
|
|
- react
|
|
---
|
|
Body content`;
|
|
|
|
const result = parse(content);
|
|
expect(result.frontmatter).toEqual({
|
|
tags: ["javascript", "typescript", "react"],
|
|
});
|
|
expect(result.body).toBe("Body content");
|
|
});
|
|
|
|
test("parses multi-line string values", () => {
|
|
const content = `---
|
|
description: |
|
|
This is a multi-line
|
|
description block
|
|
with several lines
|
|
---
|
|
Body content`;
|
|
|
|
const result = parse(content);
|
|
expect(result.frontmatter).toEqual({
|
|
description: "This is a multi-line\ndescription block\nwith several lines\n",
|
|
});
|
|
expect(result.body).toBe("Body content");
|
|
});
|
|
|
|
test("parses nested objects", () => {
|
|
const content = `---
|
|
config:
|
|
server:
|
|
port: 3000
|
|
host: localhost
|
|
database:
|
|
name: mydb
|
|
---
|
|
Body content`;
|
|
|
|
const result = parse(content);
|
|
expect(result.frontmatter).toEqual({
|
|
config: {
|
|
server: { port: 3000, host: "localhost" },
|
|
database: { name: "mydb" },
|
|
},
|
|
});
|
|
expect(result.body).toBe("Body content");
|
|
});
|
|
|
|
test("parses mixed complex YAML", () => {
|
|
const content = `---
|
|
name: complex-test
|
|
version: 1.0.0
|
|
tags:
|
|
- prod
|
|
- critical
|
|
metadata:
|
|
author: tester
|
|
created: 2024-01-01
|
|
description: |
|
|
Multi-line description
|
|
with formatting
|
|
---
|
|
Body content`;
|
|
|
|
const result = parse(content);
|
|
expect(result.frontmatter).toEqual({
|
|
name: "complex-test",
|
|
version: "1.0.0",
|
|
tags: ["prod", "critical"],
|
|
metadata: {
|
|
author: "tester",
|
|
created: "2024-01-01",
|
|
},
|
|
description: "Multi-line description\nwith formatting\n",
|
|
});
|
|
expect(result.body).toBe("Body content");
|
|
});
|
|
|
|
test("handles missing frontmatter", () => {
|
|
const content = "Just body content";
|
|
const result = parse(content);
|
|
expect(result.frontmatter).toEqual({});
|
|
expect(result.body).toBe("Just body content");
|
|
});
|
|
|
|
test("handles invalid YAML in frontmatter", () => {
|
|
const content = `---
|
|
invalid: [unclosed array
|
|
---
|
|
Body content`;
|
|
|
|
const result = parse(content);
|
|
// Simple fallback parser extracts key:value pairs it can parse
|
|
expect(result.frontmatter).toEqual({ invalid: "[unclosed array" });
|
|
// Body is still extracted even with invalid YAML
|
|
expect(result.body).toBe("Body content");
|
|
});
|
|
|
|
test("handles empty frontmatter", () => {
|
|
const content = `---
|
|
---
|
|
Body content`;
|
|
|
|
const result = parse(content);
|
|
expect(result.frontmatter).toEqual({});
|
|
expect(result.body).toBe("Body content");
|
|
});
|
|
});
|