-
Notifications
You must be signed in to change notification settings - Fork 134
/
map_ast_with_fnchange_test.exs
53 lines (44 loc) · 1.51 KB
/
map_ast_with_fnchange_test.exs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
defmodule Test.Acceptance.Transform.MapAstWithFnchangeTest do
use ExUnit.Case
import Earmark.Transform
import EarmarkAstDsl
describe "change #elixir" do
@elixir_home {"a", [{"href", "https://elixir-lang.org"}], ["Elixir"], %{}}
@original [
{"p", [], ["#elixir"], %{}},
{"bold", [], ["#elixir"], %{}},
{"ol", [],
[{"li", [], ["#elixir"], %{}}, {"p", [], ["elixir"], %{}}, {"p", [], ["#elixir"], %{}}],
%{}}
]
@expected [
{"p", [], [{"a", [{"href", "https://elixir-lang.org"}], ["Elixir"], %{}}], %{}},
{"bold", [], ["#elixir"], %{}},
{"ol", [],
[
{"li", [], ["#elixir"], %{}},
{"p", [], ["elixir"], %{}},
{"p", [], [{"a", [{"href", "https://elixir-lang.org"}], ["Elixir"], %{}}], %{}}
], %{}}
]
test "transform with function change" do
result = map_ast(@original, &main_traverser/1)
assert result == @expected
end
test "small" do
ast = [p("#elixir"), p("hello")]
expected = [p(@elixir_home), p("hello")]
assert map_ast(ast, &main_traverser/1) == expected
end
defp main_traverser(element)
defp main_traverser({"p", _, _, _} = para) do
{&replacer/1, para}
end
defp main_traverser(element), do: element
defp replacer(element)
defp replacer("#elixir"), do: @elixir_home
defp replacer(element) when is_binary(element), do: element
defp replacer(element), do: {&main_traverser/1, element}
end
end
# SPDX-License-Identifier: Apache-2.0