diff --git a/lib/ex_unit/lib/ex_unit/diff.ex b/lib/ex_unit/lib/ex_unit/diff.ex index 2052226119..0b75ad7f1f 100644 --- a/lib/ex_unit/lib/ex_unit/diff.ex +++ b/lib/ex_unit/lib/ex_unit/diff.ex @@ -70,8 +70,14 @@ defmodule ExUnit.Diff do diff_quoted(number, right, env) end - defp diff_quoted({:++, _, _} = left, right, env) when is_list(right) do - diff_maybe_improper_list(left, right, env) + defp diff_quoted({:++, meta, [prefix, suffix]}, right, env) when is_list(right) do + case prefix do + {_, [expanded: expanded] ++ _, _} -> + diff_maybe_improper_list({:++, meta, [expanded, suffix]}, right, env) + + _ -> + diff_maybe_improper_list({:++, meta, [prefix, suffix]}, right, env) + end end defp diff_quoted({:{}, _, left}, right, env) when is_tuple(right) do diff --git a/lib/ex_unit/test/ex_unit/diff_test.exs b/lib/ex_unit/test/ex_unit/diff_test.exs index b6b9d39d96..6da1a8b05a 100644 --- a/lib/ex_unit/test/ex_unit/diff_test.exs +++ b/lib/ex_unit/test/ex_unit/diff_test.exs @@ -345,7 +345,6 @@ defmodule ExUnit.DiffTest do refute_diff([:a, :b] ++ [:c] = [:a, :b], "[:a, :b] ++ [-:c-]", "[:a, :b]") refute_diff([:a, :c] ++ [:b] = [:a, :b], "[:a, -:c-] ++ [:b]", "[:a, :b]") - refute_diff([:a] ++ [:b] ++ [:c] = [:a, :b], "[:a] ++ [:b] ++ [-:c-]", "[:a, :b]") assert_diff([:a] ++ :b = [:a | :b], []) @@ -353,10 +352,16 @@ defmodule ExUnit.DiffTest do refute_diff([:a, :b] ++ :c = [:a, :b, :c], "[:a, :b] ++ -:c-", "[:a, :b, +:c+]") refute_diff([:a] ++ [:b] ++ :c = [:a, :b, :c], "[:a] ++ [:b] ++ -:c-", "[:a, :b, +:c+]") - refute_diff([:a] ++ [:b] = :a, "-[:a] ++ [:b]-", "+:a+") end + @a [:a] + test "concat lists with module attributes" do + assert_diff(@a ++ [:b] = [:a, :b], []) + refute_diff(@a ++ [:b] = [:a], "[:a] ++ [-:b-]", "[:a]") + refute_diff(@a ++ [:b] = [:b], "[-:a-] ++ [:b]", "[:b]") + end + test "mixed lists" do refute_diff([:a | :b] = [:a, :b], "[:a | -:b-]", "[:a, +:b+]") refute_diff([:a, :b] = [:a | :b], "[:a, -:b-]", "[:a | +:b+]")