let markdown_to_html = Builder_web__Utils.md_to_html let test_simple () = let markdown = {|# Hello world|} in let html = markdown_to_html markdown in Alcotest.(check string "simple html" "

Hello world

\n" html) let test_html_script () = let markdown = {|# |} in let html = markdown_to_html markdown in Alcotest.(check string "html script header" "

Hello world

\n" html) let test_preserve_span_content () = let markdown = {|* My ref * [See my ref](#myref) for more information|} in let html = markdown_to_html markdown in Alcotest.(check string "html span content preserved" {| |} html) let test_remove_script () = let markdown = {||} in let html = markdown_to_html markdown in Alcotest.(check string "html script removed" "\n" html) let test_list_with_html_block_and_markdown () = let markdown = "*
Hello, World!
*this is not html*" in let html = markdown_to_html markdown in Alcotest.(check string "list with html block and markdown" (*"\n"*) "\n" html) let test_list_with_inline_html_and_markdown () = let markdown = "* Hello, World! *this is not html*" in let html = markdown_to_html markdown in Alcotest.(check string "list with html block and markdown" "\n" html) let test_absolute_link () = let markdown = "[foo](https://foo.com)" in let html = markdown_to_html markdown in Alcotest.(check string "absolute link" "

foo

\n" html) let test_relative_link () = let markdown = "[foo](../foo.jpg)" in let html = markdown_to_html markdown in Alcotest.(check string "relative link" "

foo

\n" html) let test_absolute_image () = let markdown = "![alttext](https://foo.com/bar.jpg)" in let html = markdown_to_html markdown in Alcotest.(check string "absolute image" "

\"alttext\"

\n" html) let test_absolute_image_no_alt () = let markdown = "![](https://foo.com/bar.jpg)" in let html = markdown_to_html markdown in Alcotest.(check string "absolute image" "

\"\"

\n" html) let test_relative_image () = let markdown = "![](/bar.jpg)" in let html = markdown_to_html markdown in Alcotest.(check string "relative image" "

\"\"

\n" html) let test_absolute_image_script_alt () = let markdown = "![](https://foo.com/bar.jpg)" in let html = markdown_to_html markdown in Alcotest.(check string "absolute image with script alt text" "

\"\"

\n" html) let test_fragment_link () = let markdown = "[fragment](#fragment)" in let html = markdown_to_html markdown in Alcotest.(check string "fragment link" "

fragment

\n" html) let test_heading_adjustment () = let markdown = {|# foo ## bar # baz ## bazbar ### bazbarbar #### bazbarbarbar ##### bazbarbarbarbar ###### bazbarbarbarbarbar |} in let html = markdown_to_html ~adjust_heading:2 markdown in (* NB: the maximum heading is 6 in cmarkit, thus we reduce the structure *) let exp = {|

foo

bar

baz

bazbar

bazbarbar
bazbarbarbar
bazbarbarbarbar
bazbarbarbarbarbar
|} in Alcotest.(check string "header adjustment works fine" exp html) let test_table () = let markdown = {__|| a | | b | c | d | e | | --------------------- |-| -------------- | -------------- | --------------- | ------ | | entry | | **bla.file** | **other.file** | | | | _another entry_ | | **another.file** | **another.other** | | | |__} in let html = markdown_to_html ~adjust_heading:2 markdown in let exp = {|
a b c d e
entry bla.file other.file
another entry another.file another.other
|} in Alcotest.(check string "table is rendered as html" exp html) let test_table2 () = let markdown = {__|| a | | b | c | d | e | | --------------------- |-| -------------- | -------------- | --------------- | ------ | | entry | | | | **bla.file** | **other.file** | | _another entry_ | | | **another.file** | **another.other** | | |__} in let html = markdown_to_html ~adjust_heading:2 markdown in let exp = {|
a b c d e
entry bla.file other.file
another entry another.file another.other
|} in Alcotest.(check string "table is rendered as html" exp html) let markdown_tests = [ Alcotest.test_case "Simple" `Quick test_simple; Alcotest.test_case "script header" `Quick test_html_script; Alcotest.test_case "preserve span content" `Quick test_preserve_span_content; Alcotest.test_case "Remove script" `Quick test_remove_script; Alcotest.test_case "List with html block and markdown" `Quick test_list_with_html_block_and_markdown; Alcotest.test_case "List with inline html and markdown" `Quick test_list_with_inline_html_and_markdown; Alcotest.test_case "absolute link" `Quick test_absolute_link; Alcotest.test_case "relative link" `Quick test_relative_link; Alcotest.test_case "absolute image" `Quick test_absolute_image; Alcotest.test_case "absolute image no alt" `Quick test_absolute_image_no_alt; Alcotest.test_case "relative image" `Quick test_relative_image; Alcotest.test_case "absolute image with script alt" `Quick test_absolute_image_script_alt; Alcotest.test_case "fragment link" `Quick test_fragment_link; Alcotest.test_case "heading adjustment" `Quick test_heading_adjustment; Alcotest.test_case "table" `Quick test_table; Alcotest.test_case "table2" `Quick test_table2; ] let () = Alcotest.run "Markdown to HTML" [ "markdown", markdown_tests ]