Handle assertion errors in doctests (#1752)

This commit is contained in:
Jonatan Kłosko 2023-03-06 19:36:54 +01:00 committed by GitHub
parent 503f8df76a
commit 429a89b1aa
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 24 additions and 10 deletions

View file

@ -163,7 +163,13 @@ defmodule Livebook.Runtime.Evaluator.Doctests do
expected = diff[:right] expected = diff[:right]
got = diff[:left] got = diff[:left]
source = String.trim(reason.doctest)
{expected_label, got_label, source} =
if reason.doctest == ExUnit.AssertionError.no_value() do
{"right", "left", nil}
else
{"expected", "got", String.trim(reason.doctest)}
end
message_io = message_io =
if_io(reason.message != "Doctest failed", fn -> if_io(reason.message != "Doctest failed", fn ->
@ -175,19 +181,22 @@ defmodule Livebook.Runtime.Evaluator.Doctests do
[colorize(:red, message), "\n"] [colorize(:red, message), "\n"]
end) end)
source_io = [ source_io =
String.duplicate(" ", @pad_size), if_io(source, fn ->
format_label("doctest"), [
"\n", String.duplicate(" ", @pad_size),
pad(source, @pad_size + 2) format_label("doctest"),
] "\n",
pad(source, @pad_size + 2)
]
end)
expected_io = expected_io =
if_io(expected, fn -> if_io(expected, fn ->
[ [
"\n", "\n",
String.duplicate(" ", @pad_size), String.duplicate(" ", @pad_size),
format_label("expected"), format_label(expected_label),
"\n", "\n",
String.duplicate(" ", @pad_size + 2), String.duplicate(" ", @pad_size + 2),
expected expected
@ -199,7 +208,7 @@ defmodule Livebook.Runtime.Evaluator.Doctests do
[ [
"\n", "\n",
String.duplicate(" ", @pad_size), String.duplicate(" ", @pad_size),
format_label("got"), format_label(got_label),
"\n", "\n",
String.duplicate(" ", @pad_size + 2), String.duplicate(" ", @pad_size + 2),
got got

View file

@ -401,6 +401,11 @@ defmodule Livebook.Runtime.EvaluatorTest do
iex> 1 + iex> 1 +
:who_knows :who_knows
iex> 1 = 2
iex> require ExUnit.Assertions
...> ExUnit.Assertions.assert false
""" """
@doc """ @doc """
@ -444,7 +449,7 @@ defmodule Livebook.Runtime.EvaluatorTest do
assert_receive {:runtime_evaluation_output, :code_1, {:text, doctest_result}} assert_receive {:runtime_evaluation_output, :code_1, {:text, doctest_result}}
assert doctest_result =~ "6 doctests, 5 failures" assert doctest_result =~ "8 doctests, 7 failures"
assert doctest_result =~ "Doctest did not compile, got: (TokenMissingError)" assert doctest_result =~ "Doctest did not compile, got: (TokenMissingError)"
assert doctest_result =~ assert doctest_result =~