92ec2550d2
- Moved test files from src/core to test/core directory. - Moved test files from src/core/tools to test/tools directory. - Moved test files from src/discovery to test/discovery directory. - Updated import paths to reflect new test file locations.
132 lines
2.9 KiB
TypeScript
132 lines
2.9 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
import { parseFrontmatter } from "../../src/core/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");
|
|
});
|
|
});
|