From d4e6704842160e2bc644dc3ec024876a3c4a1dfb Mon Sep 17 00:00:00 2001 From: Marcus Kruse Date: Sat, 18 Jan 2025 11:28:05 +0100 Subject: [PATCH] Show hints for mix test --no-color --- lib/ex_unit/lib/ex_unit/formatter.ex | 43 ++++++++++++--------- lib/ex_unit/test/ex_unit/formatter_test.exs | 3 ++ 2 files changed, 27 insertions(+), 19 deletions(-) diff --git a/lib/ex_unit/lib/ex_unit/formatter.ex b/lib/ex_unit/lib/ex_unit/formatter.ex index 8a35f38c68f..e55a132b61f 100644 --- a/lib/ex_unit/lib/ex_unit/formatter.ex +++ b/lib/ex_unit/lib/ex_unit/formatter.ex @@ -477,7 +477,19 @@ defmodule ExUnit.Formatter do content_width = if width == :infinity, do: width, else: width - padding_size case format_diff(left, right, context, formatter) do - {result, env} -> + {nil, hints} when is_atom(context) -> + {if_value(left, inspect), if_value(right, inspect), hints} + + {nil, hints} -> + left = + Macro.prewalk(left, fn + {_, [original: original], _} -> original + other -> other + end) + + {if_value(left, &code_multiline(&1, padding_size)), if_value(right, inspect), hints} + + {result, hints} -> left = result.left |> Diff.to_algebra(&colorize_diff_delete(&1, formatter)) @@ -490,19 +502,18 @@ defmodule ExUnit.Formatter do |> Algebra.nest(padding_size) |> Algebra.format(content_width) - {left, right, Enum.map(env.hints, &{:hint, format_hint(&1)})} - - nil when is_atom(context) -> - {if_value(left, inspect), if_value(right, inspect), []} - - nil -> - left = - Macro.prewalk(left, fn - {_, [original: original], _} -> original - other -> other - end) + {left, right, hints} + end + end - {if_value(left, &code_multiline(&1, padding_size)), if_value(right, inspect), []} + defp format_diff(left, right, context, formatter) do + if has_value?(left) and has_value?(right) do + {result, env} = find_diff(left, right, context) + result = if formatter.(:diff_enabled?, false), do: result + hints = Enum.map(env.hints, &{:hint, format_hint(&1)}) + {result, hints} + else + {nil, []} end end @@ -510,12 +521,6 @@ defmodule ExUnit.Formatter do "you are comparing strings that have the same visual representation but are made of different Unicode codepoints" end - defp format_diff(left, right, context, formatter) do - if has_value?(left) and has_value?(right) and formatter.(:diff_enabled?, false) do - find_diff(left, right, context) - end - end - defp colorize_diff_delete(doc, formatter) do format = colorize_format(doc, :diff_delete, :diff_delete_whitespace) formatter.(format, doc) diff --git a/lib/ex_unit/test/ex_unit/formatter_test.exs b/lib/ex_unit/test/ex_unit/formatter_test.exs index b49fd0cc883..a417b0a28ec 100644 --- a/lib/ex_unit/test/ex_unit/formatter_test.exs +++ b/lib/ex_unit/test/ex_unit/formatter_test.exs @@ -332,6 +332,9 @@ defmodule ExUnit.FormatterTest do hint: you are comparing strings that have the same visual representation but are made of different Unicode codepoints """ + assert format_test_failure(test(), failure, 1, 80, &diff_formatter/2) == + format_test_failure(test(), failure, 1, 80, &formatter/2) + assert format_assertion_diff(assertion_error, 0, :infinity, &diff_formatter/2) |> kw_to_string() == [