94 lines
2.2 KiB
OCaml
94 lines
2.2 KiB
OCaml
open Rechiko.Frontmatter
|
|
|
|
let simple_markdown =
|
|
{|
|
|
---
|
|
Title: "Test Document"
|
|
Draft: true
|
|
Date: "2023-10-01"
|
|
---
|
|
|
|
# Test Document
|
|
|
|
This is a test document with frontmatter.
|
|
|}
|
|
|
|
let simple_markdown_yaml_section =
|
|
{|
|
|
Title: "Test Document"
|
|
Draft: true
|
|
Date: "2023-10-01"
|
|
|}
|
|
|
|
let simple_markdown_content =
|
|
{|
|
|
# Test Document
|
|
|
|
This is a test document with frontmatter.
|
|
|}
|
|
|
|
let markdown_with_empty_frontmatter =
|
|
{|
|
|
---
|
|
---
|
|
|
|
# Empty Frontmatter Document
|
|
|}
|
|
|
|
let markdown_when_frontmatter_is_invalid_yaml =
|
|
{|
|
|
---
|
|
John: "Doe
|
|
---
|
|
|
|
" # bad yaml
|
|
|}
|
|
|
|
let invalid_yaml_frontmatter = {|John: "Doe|}
|
|
|
|
let%test "extract yaml from simplie markdown 1" =
|
|
let yaml_section, _ = extract_frontmatter simple_markdown in
|
|
String.trim yaml_section = String.trim simple_markdown_yaml_section
|
|
|
|
let%test "extract content from simple markdown" =
|
|
let _, content = extract_frontmatter simple_markdown in
|
|
String.trim content = String.trim simple_markdown_content
|
|
|
|
let%test "extract yaml from md with empty frontmatter" =
|
|
let yaml_section, _ = extract_frontmatter markdown_with_empty_frontmatter in
|
|
String.trim yaml_section = ""
|
|
|
|
let%test "extract content from md with empty frontmatter" =
|
|
let _, content = extract_frontmatter markdown_with_empty_frontmatter in
|
|
String.trim content = "# Empty Frontmatter Document"
|
|
|
|
let%test "extract yaml from md with invalid frontmatter" =
|
|
let yaml_section, _ =
|
|
extract_frontmatter markdown_when_frontmatter_is_invalid_yaml
|
|
in
|
|
String.trim yaml_section = invalid_yaml_frontmatter
|
|
|
|
let%test "extract content from md with invalid frontmatter" =
|
|
let _, content =
|
|
extract_frontmatter markdown_when_frontmatter_is_invalid_yaml
|
|
in
|
|
String.trim content = {|" # bad yaml|}
|
|
|
|
let%test "parse valid yaml" =
|
|
let fm = parse_frontmatter simple_markdown_yaml_section in
|
|
let expected =
|
|
StringMap.of_list
|
|
[
|
|
("Title", `String "Test Document");
|
|
("Draft", `Bool true);
|
|
("Date", `String "2023-10-01");
|
|
]
|
|
in
|
|
StringMap.equal Yojson.Safe.equal fm expected
|
|
|
|
let%test "parse invalid yaml raises Frontmatter_parse_error" =
|
|
try
|
|
ignore (parse_frontmatter invalid_yaml_frontmatter);
|
|
false
|
|
with Frontmatter_parse_error _ -> true
|