forked from elixirkoans/elixir-koans
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathblanks_test.exs
89 lines (67 loc) · 1.9 KB
/
blanks_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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
defmodule BlanksTest do
use ExUnit.Case, async: true
test "simple replacement" do
ast = quote do: 1 + ___
assert Blanks.replace(ast, 37) == quote(do: 1 + 37)
end
test "Work with multiple different replacements" do
[koan | _] = SampleKoan.all_koans()
assert :ok == apply(SampleKoan, koan, [{:multiple, [3, 4]}])
end
test "complex example" do
ast = quote do: assert(true == ___)
assert Blanks.replace(ast, true) == quote(do: assert(true == true))
end
test "multiple arguments" do
ast = quote do: assert(___ == ___)
assert Blanks.replace(ast, [true, false]) == quote(do: assert(true == false))
end
test "pins variables in assert_receive replacement" do
ast = quote do: assert_receive(___)
assert Blanks.replace(ast, Macro.var(:answer, __MODULE__)) ==
quote(do: assert_receive(^answer))
end
test "does not pin values in assert_receive replacement" do
ast = quote do: assert_receive(___)
assert Blanks.replace(ast, :lolwat) == quote(do: assert_receive(:lolwat))
end
test "counts simple blanks" do
ast = quote do: 1 + ___
assert Blanks.count(ast) == 1
end
test "counts multiple blanks" do
ast = quote do: assert(___ == ___)
assert Blanks.count(ast) == 2
end
test "replaces whole line containing blank" do
ast =
quote do
1 + 2
2 + ___
end
expected_result =
quote do
1 + 2
true
end
actual_result = Blanks.replace_line(ast, fn _ -> true end)
assert actual_result == expected_result
end
test "replacement fn can access line" do
ast =
quote do
1 + 2
2 + ___
end
expected_result =
quote do
1 + 2
some_fun(2 + ___)
end
actual_result =
Blanks.replace_line(ast, fn line ->
quote do: some_fun(unquote(line))
end)
assert actual_result == expected_result
end
end