diff --git a/lib/ex_unit/lib/ex_unit/diff.ex b/lib/ex_unit/lib/ex_unit/diff.ex index c5ffcd8b301..b562b646815 100644 --- a/lib/ex_unit/lib/ex_unit/diff.ex +++ b/lib/ex_unit/lib/ex_unit/diff.ex @@ -1162,6 +1162,7 @@ defmodule ExUnit.Diff do else other |> Map.to_list() + |> Enum.map(&escape_pair/1) |> build_map_or_struct(struct) end end diff --git a/lib/ex_unit/test/ex_unit/diff_test.exs b/lib/ex_unit/test/ex_unit/diff_test.exs index 39e69c143e7..2d7c9ab80df 100644 --- a/lib/ex_unit/test/ex_unit/diff_test.exs +++ b/lib/ex_unit/test/ex_unit/diff_test.exs @@ -335,6 +335,8 @@ defmodule ExUnit.DiffTest do "[[[[], \"Hello-,- \"] | \"world\"] | \"!\"]", "[[[[], \"Hello \"] | \"world\"] | \"!\"]" ) + + refute_diff(:foo = %{bar: [:a | :b]}, "", "") end test "proper lists" do diff --git a/lib/ex_unit/test/ex_unit/formatter_test.exs b/lib/ex_unit/test/ex_unit/formatter_test.exs index 3e02fd13af7..62ecfc0d2a4 100644 --- a/lib/ex_unit/test/ex_unit/formatter_test.exs +++ b/lib/ex_unit/test/ex_unit/formatter_test.exs @@ -510,6 +510,17 @@ defmodule ExUnit.FormatterTest do """ end + test "formats assertions with nested improper list diffing" do + failure = [{:error, catch_assertion(assert :foo = %{bar: [1 | 2]}), []}] + + assert format_test_all_failure(test_module(), failure, 1, :infinity, &diff_formatter/2) =~ """ + match (=) failed + code: assert :foo = %{bar: [1 | 2]} + left: :foo + right: %{bar: [1 | 2]} + """ + end + defmodule BadInspect do defstruct key: 0