defmodule Microwaveprop.MarkdownTest do use ExUnit.Case, async: true alias Microwaveprop.Markdown describe "headings" do test "renders h1" do assert Markdown.to_html!("# Hello") =~ "

Hello

" end test "renders h2 through h6" do for level <- 2..6 do hashes = String.duplicate("#", level) assert Markdown.to_html!("#{hashes} Title") =~ "Title" end end test "caps at h6 for excessive hashes" do assert Markdown.to_html!("####### Too many") =~ "
" end end describe "paragraphs" do test "renders simple paragraph" do assert Markdown.to_html!("Hello world") =~ "

Hello world

" end test "joins multi-line paragraphs" do result = Markdown.to_html!("Line one\nLine two") assert result =~ "

Line one Line two

" end test "separates paragraphs by blank lines" do result = Markdown.to_html!("Para one\n\nPara two") assert result =~ "

Para one

" assert result =~ "

Para two

" end end describe "fenced code blocks" do test "renders code block" do md = "```\nfoo\nbar\n```" result = Markdown.to_html!(md) assert result =~ "
foo\nbar
" end test "renders code block with language" do md = "```elixir\nIO.puts(\"hi\")\n```" result = Markdown.to_html!(md) assert result =~ ~s() end test "escapes HTML in code blocks" do md = "```\n\n```" result = Markdown.to_html!(md) assert result =~ "<script>" refute result =~ "