From 69990a5d1d3cd00ed0422a87b49841c27e16ff15 Mon Sep 17 00:00:00 2001 From: Jean Klingler Date: Fri, 21 Feb 2025 23:08:36 +0900 Subject: [PATCH] Fix regression when diffing nested improper lists (#14292) Close https://github.com/elixir-lang/elixir/issues/14291 --- lib/ex_unit/lib/ex_unit/diff.ex | 1 + lib/ex_unit/test/ex_unit/diff_test.exs | 2 ++ lib/ex_unit/test/ex_unit/formatter_test.exs | 11 +++++++++++ 3 files changed, 14 insertions(+) diff --git a/lib/ex_unit/lib/ex_unit/diff.ex b/lib/ex_unit/lib/ex_unit/diff.ex index 170e988c35a..93fe0113727 100644 --- a/lib/ex_unit/lib/ex_unit/diff.ex +++ b/lib/ex_unit/lib/ex_unit/diff.ex @@ -1156,6 +1156,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 a2317cf73e2..87474a2324c 100644 --- a/lib/ex_unit/test/ex_unit/diff_test.exs +++ b/lib/ex_unit/test/ex_unit/diff_test.exs @@ -330,6 +330,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 a1e5506c1f6..6d115da9bc0 100644 --- a/lib/ex_unit/test/ex_unit/formatter_test.exs +++ b/lib/ex_unit/test/ex_unit/formatter_test.exs @@ -503,6 +503,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