Skip to content

Commit 3d66ab3

Browse files
author
José Valim
committed
Improve doctest expectation messages
1 parent be5e20f commit 3d66ab3

File tree

3 files changed

+49
-40
lines changed

3 files changed

+49
-40
lines changed

lib/ex_unit/lib/ex_unit/assertions.ex

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,18 @@
11
defexception ExUnit.AssertionError, message: "assertion failed"
22

3-
defexception ExUnit.ExpectationError, expected: nil, actual: nil, reason: "", negation: false, prelude: "Expected", instead: nil, instead_prelude: "instead got" do
3+
defexception ExUnit.ExpectationError, expected: nil, actual: nil, reason: "", negation: false, prelude: "Expected", description: nil do
44
def message(exception) do
5-
"#{exception.prelude} #{exception.expected} to " <>
6-
if(exception.negation, do: "not ", else: "") <>
7-
"#{exception.reason} #{exception.actual}" <>
8-
if(exception.instead, do: ". #{exception.instead_prelude} #{exception.instead}", else: "")
5+
if desc = exception.description do
6+
"#{exception.prelude} #{desc} #{exception.full_reason} " <>
7+
"#{exception.expected}. Insted got #{exception.actual}"
8+
else
9+
"#{exception.prelude} #{exception.expected} " <>
10+
"#{exception.full_reason} #{exception.actual}"
11+
end
12+
end
13+
14+
def full_reason(exception) do
15+
"to" <> if(exception.negation, do: " not ", else: " ") <> exception.reason
916
end
1017
end
1118

lib/ex_unit/lib/ex_unit/cli_formatter.ex

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -89,18 +89,20 @@ defmodule ExUnit.CLIFormatter do
8989
acc + 1
9090
end
9191

92-
defp print_kind_reason(:error, record) when is_record(record, ExUnit.ExpectationError) do
93-
left = String.downcase record.prelude
94-
right = "to " <> if(record.negation, do: "not ", else: "") <> record.reason
95-
instead_prelude = record.instead_prelude
96-
max = max(size(left), size(right))
92+
defp print_kind_reason(:error, ExUnit.ExpectationError[] = record) do
93+
prelude = String.downcase record.prelude
94+
reason = record.full_reason
95+
max = max(size(prelude), size(reason))
9796

9897
IO.puts error_info "** (ExUnit.ExpectationError)"
99-
IO.puts error_info " #{pad(left, max)}: #{maybe_multiline(record.expected, max)}"
100-
IO.puts error_info " #{pad(right, max)}: #{maybe_multiline(record.actual, max)}"
10198

102-
unless nil?(record.instead) do
103-
IO.puts error_info " #{pad(instead_prelude, max)}: #{maybe_multiline(inspect(record.instead), max)}"
99+
if desc = record.description do
100+
IO.puts error_info " #{pad(prelude, max)}: #{maybe_multiline(desc, max)}"
101+
IO.puts error_info " #{pad(reason, max)}: #{maybe_multiline(record.expected, max)}"
102+
IO.puts error_info " #{pad("instead got", max)}: #{maybe_multiline(record.actual, max)}"
103+
else
104+
IO.puts error_info " #{pad(prelude, max)}: #{maybe_multiline(record.expected, max)}"
105+
IO.puts error_info " #{pad(reason, max)}: #{maybe_multiline(record.actual, max)}"
104106
end
105107
end
106108

lib/ex_unit/lib/ex_unit/doc_test.ex

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -167,25 +167,25 @@ defmodule ExUnit.DocTest do
167167
v = unquote(expected_ast)
168168
case unquote(expr_ast) do
169169
^v -> :ok
170-
instead ->
170+
actual ->
171171
raise ExUnit.ExpectationError,
172172
[ prelude: "Expected doctest",
173-
expected: unquote(test.expr),
174-
actual: inspect(v),
173+
description: unquote(test.expr),
174+
expected: inspect(v),
175175
reason: "evaluate to",
176-
instead: instead ],
176+
actual: inspect(actual) ],
177177
unquote(stack)
178178
end
179179
rescue
180180
e in [ExUnit.ExpectationError] ->
181181
raise e, [], unquote(stack)
182-
e ->
182+
actual ->
183183
raise ExUnit.ExpectationError,
184184
[ prelude: "Expected doctest",
185-
expected: unquote(test.expr),
186-
actual: "without an exception",
185+
description: unquote(test.expr),
186+
expected: "without an exception",
187187
reason: "complete",
188-
instead: e ],
188+
actual: inspect(actual) ],
189189
unquote(stack)
190190
end
191191
end
@@ -206,30 +206,30 @@ defmodule ExUnit.DocTest do
206206
v = unquote(expr_ast)
207207
raise ExUnit.ExpectationError,
208208
[ prelude: "Expected doctest",
209-
expected: unquote(test.expr),
210-
actual: "by raising #{inspect unquote(exception)} exception",
211-
reason: "terminate",
212-
instead: v ],
209+
description: unquote(test.expr),
210+
expected: "#{inspect unquote(exception)}[]",
211+
reason: "raise",
212+
actual: inspect(v) ],
213213
unquote(stack)
214214
rescue
215215
e in [ExUnit.ExpectationError] -> raise(e)
216216
error in [unquote(exception)] ->
217217
unless error.message == unquote(message) do
218218
raise ExUnit.ExpectationError,
219219
[ prelude: "Expected doctest",
220-
expected: unquote(test.expr),
221-
actual: "by raising #{inspect unquote(exception)} exception with a #{inspect unquote(message)} message",
222-
reason: "terminate",
223-
instead: error ],
220+
description: unquote(test.expr),
221+
expected: "#{inspect unquote(exception)} with message #{inspect unquote(message)}",
222+
reason: "raise",
223+
actual: inspect(error) ],
224224
unquote(stack)
225225
end
226226
error ->
227227
raise ExUnit.ExpectationError,
228228
[ prelude: "Expected doctest",
229-
expected: unquote(test.expr),
230-
actual: "by raising #{inspect unquote(exception)}",
231-
reason: "terminate",
232-
instead: error ],
229+
description: unquote(test.expr),
230+
expected: "#{inspect unquote(exception)}",
231+
reason: "raise",
232+
actual: inspect(error) ],
233233
unquote(stack)
234234
end
235235
end
@@ -248,12 +248,12 @@ defmodule ExUnit.DocTest do
248248
rescue e ->
249249
quote do
250250
raise ExUnit.ExpectationError,
251-
[ prelude: "Expected doctest's expression",
252-
expected: unquote(expr),
253-
actual: "successfully",
254-
reason: "compile",
255-
instead: unquote(Macro.escape e) ],
256-
unquote(stack)
251+
[ prelude: "Expected doctest",
252+
description: unquote(expr),
253+
expected: "successfully",
254+
reason: "compile",
255+
actual: unquote("** #{inspect e.__record__(:name)} #{e.message}") ],
256+
unquote(stack)
257257
end
258258
end
259259
end

0 commit comments

Comments
 (0)