1defmodule CodeTest do
2  use ExUnit.Case
3
4  import Support.Helpers
5
6  ##########
7  # Inline #
8  ##########
9
10  test "backticks mean code" do
11    result = convert_pedantic("the `printf` function")
12    assert result == ~s[the <code class="inline">printf</code> function]
13  end
14
15  test "literal backticks can be included within doubled backticks" do
16    result = convert_pedantic("``the ` character``")
17    assert result == ~s[<code class="inline">the ` character</code>]
18  end
19
20  test "a space after the opening and before the closing doubled backticks are ignored" do
21    result = convert_pedantic("`` the ` character``")
22    assert result == ~s[<code class="inline">the ` character</code>]
23  end
24
25  test "single backtick with spaces inside doubled backticks" do
26    result = convert_pedantic("`` ` ``")
27    assert result == ~s[<code class="inline">`</code>]
28  end
29
30  test "ampersands and angle brackets are escaped in code" do
31    result = convert_pedantic("the `<a> &123;` function")
32    expect =
33      ~s[the <code class="inline">&lt;a&gt; &amp;123;</code> function]
34    assert result == expect
35  end
36  test "" do
37    result = convert_pedantic("a 'single' quote")
38    assert result == "a ‘single’ quote"
39  end
40
41  test "apostrophe" do
42    result = convert_pedantic("a single's quote")
43    assert result == "a single’s quote"
44  end
45
46  test "paired single before puncuation" do
47    Enum.each '.]})?!', fn (punct) ->
48      result = convert_pedantic("a 'single'" <> <<punct>>)
49      assert result == "a ‘single’"  <> <<punct>>
50    end
51  end
52
53  test "paired double" do
54    result = convert_pedantic("a \"double\" quote")
55    assert result == "a “double” quote"
56  end
57
58  test "paired double before puncuation" do
59    Enum.each '.]})?!', fn (punct) ->
60      result = convert_pedantic("a \"double\"" <> <<punct>>)
61      assert result == "a “double”"  <> <<punct>>
62    end
63  end
64
65  test "closing quotes after tag" do
66    result = convert_pedantic ~s(a "**test**")
67    assert result == "a “<strong>test</strong>”"
68  end
69
70  test "closing single quotes after tag" do
71    result = convert_pedantic ~s(a '**test**')
72    assert result == "a ‘<strong>test</strong>’"
73  end
74
75  test "another closing single quotes after tag" do
76    result = convert_pedantic "for `key` in `app`'s environment"
77    assert result == ~s(for <code class="inline">key</code> in <code class="inline">app</code>’s environment)
78  end
79
80  ##########
81  # Blocks #
82  ##########
83
84  test "simple code block" do
85    result = Earmark.as_html! "```\ndefmodule\n```"
86    assert result == ~s(<pre><code class="">defmodule</code></pre>\n)
87  end
88  test "indented code block" do
89    result = Earmark.as_html! "    defmodule\n    end"
90    assert result == ~s(<pre><code>defmodule\nend</code></pre>\n)
91  end
92  test "indented code block (increasing indent)" do
93    result = Earmark.as_html! "    defmodule\n      defstruct"
94    assert result == ~s(<pre><code>defmodule\n  defstruct</code></pre>\n)
95  end
96  test "indented code block (decreasing indent)" do
97    result = Earmark.as_html! "      # Hello\n    end"
98    assert result == ~s(<pre><code>  # Hello\nend</code></pre>\n)
99  end
100  test "code block (decreasing indent)" do
101    result = Earmark.as_html! "```elixir\n  # Hello\nend\n```"
102    assert result == ~s(<pre><code class="elixir">  # Hello\nend</code></pre>\n)
103  end
104end
105
106# SPDX-License-Identifier: Apache-2.0
107