Skip to content

Commit 5e73914

Browse files
committed
Stop wrapping ExUnit
1 parent 55cc11c commit 5e73914

File tree

7 files changed

+70
-71
lines changed

7 files changed

+70
-71
lines changed

config/config.exs

+3
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
use Mix.Config
2+
3+
config :ex_unit, assert_receive_timeout: 100

lib/blank_assertions.ex

-63
This file was deleted.

lib/blanks.ex

+16
Original file line numberDiff line numberDiff line change
@@ -20,4 +20,20 @@ defmodule Blanks do
2020
defp count(:___, acc), do: {node, acc+1}
2121
defp count({:___, _, _}, acc), do: {node, acc+1}
2222
defp count(node, acc), do: {node, acc}
23+
24+
def replace_line([do: ast], replacement_fn), do: [do: replace_line(ast, replacement_fn)]
25+
def replace_line({:__block__, meta, lines}, replacement_fn) do
26+
replaced_lines = Enum.map(lines, fn(line) ->
27+
replace_line(line, replacement_fn)
28+
end)
29+
30+
{:__block__, meta, replaced_lines}
31+
end
32+
def replace_line(line, replacement_fn) do
33+
if Blanks.count(line) > 0 do
34+
replacement_fn.(line)
35+
else
36+
line
37+
end
38+
end
2339
end

lib/display.ex

+1-5
Original file line numberDiff line numberDiff line change
@@ -52,13 +52,9 @@ defmodule Display do
5252
end
5353

5454
defp format_failure(%{error: %ExUnit.AssertionError{expr: expr}, file: file, line: line}) do
55-
format_assertion_error(expr, file, line)
56-
end
57-
58-
defp format_assertion_error(error, file, line) do
5955
"""
6056
#{format_cyan("Assertion failed in #{file}:#{line}")}
61-
#{format_red(Macro.to_string(error))}
57+
#{format_red(Macro.to_string(expr))}
6258
"""
6359
end
6460

lib/koans.ex

+15-2
Original file line numberDiff line numberDiff line change
@@ -7,16 +7,19 @@ defmodule Koans do
77
if not valid_name(name) do
88
raise "Name does not start with a capital ltter: #{name}"
99
end
10+
1011
compiled_name = String.to_atom(name)
1112
number_of_args = Blanks.count(body)
13+
compiled_body = Blanks.replace_line(body, &blank_line_replacement/1)
14+
1215
quote do
1316
@koans unquote(compiled_name)
1417

1518
generate_test_method(unquote(compiled_name), unquote(number_of_args), unquote(body))
1619

1720
def unquote(compiled_name)() do
1821
try do
19-
unquote(body)
22+
unquote(compiled_body)
2023
:ok
2124
rescue
2225
e in _ -> e
@@ -47,6 +50,16 @@ defmodule Koans do
4750
end
4851
end
4952

53+
defp blank_line_replacement({:assert, _meta, [expr]}) do
54+
code = Macro.escape(expr)
55+
quote do: raise ExUnit.AssertionError, expr: unquote(code)
56+
end
57+
58+
defp blank_line_replacement(line) do
59+
code = Macro.escape(line)
60+
quote do: raise ExUnit.AssertionError, expr: unquote(code)
61+
end
62+
5063
defp create_vars(amount) do
5164
for id <- 0..amount, do: quote do: elem(converted, unquote(id))
5265
end
@@ -57,8 +70,8 @@ defmodule Koans do
5770
Module.register_attribute(__MODULE__, :koans, accumulate: true)
5871

5972
require ExUnit.Assertions
73+
import ExUnit.Assertions
6074
import Koans
61-
import BlankAssertions
6275

6376
@before_compile Koans
6477
end

test/blanks_test.exs

+34
Original file line numberDiff line numberDiff line change
@@ -51,4 +51,38 @@ defmodule BlanksTest do
5151

5252
assert Blanks.count(ast) == 2
5353
end
54+
55+
test "replaces whole line containing blank" do
56+
ast = quote do
57+
1 + 2
58+
2 + ___
59+
end
60+
61+
expected_result = quote do
62+
1 + 2
63+
true
64+
end
65+
66+
actual_result = Blanks.replace_line(ast, fn(_) -> true end)
67+
68+
assert actual_result == expected_result
69+
end
70+
71+
test "replacement fn can access line" do
72+
ast = quote do
73+
1 + 2
74+
2 + ___
75+
end
76+
77+
expected_result = quote do
78+
1 + 2
79+
some_fun(2 + ___)
80+
end
81+
82+
actual_result = Blanks.replace_line(ast, fn(line) ->
83+
quote do: some_fun(unquote(line))
84+
end)
85+
86+
assert actual_result == expected_result
87+
end
5488
end

test/executor_test.exs

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ defmodule ExecuteTest do
88
test "stops at the first failing koan" do
99
{:failed, %{error: _, file: file, line: line}, SampleKoan, _name} = Execute.run_module(SampleKoan)
1010
assert file == 'test/support/sample_koan.ex'
11-
assert line == 5
11+
assert line == 4
1212
end
1313
end

0 commit comments

Comments
 (0)