Skip to content

Commit c65f955

Browse files
authored
Fix ExUnit list diff bug (#14275)
1 parent 5505de8 commit c65f955

File tree

2 files changed

+6
-3
lines changed

2 files changed

+6
-3
lines changed

lib/ex_unit/lib/ex_unit/diff.ex

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -377,7 +377,9 @@ defmodule ExUnit.Diff do
377377
{parsed_left, improper_left, operators_left, length_left} =
378378
split_left_list(left, 0, env.context)
379379

380-
{parsed_right, improper_right} = split_right_list(right, length_left, [])
380+
element_limit = if improper_left == [], do: -1, else: length_left
381+
{parsed_right, improper_right} = split_right_list(right, element_limit, [])
382+
381383
{parsed_diff, parsed_post_env} = myers_difference_list(parsed_left, parsed_right, env)
382384

383385
{improper_diff, improper_post_env} =
@@ -410,7 +412,7 @@ defmodule ExUnit.Diff do
410412
diff(left, right, env)
411413
end
412414

413-
defp split_right_list([head | tail], length, acc) when length > 0,
415+
defp split_right_list([head | tail], length, acc) when length != 0,
414416
do: split_right_list(tail, length - 1, [head | acc])
415417

416418
defp split_right_list(rest, _length, acc),

lib/ex_unit/test/ex_unit/diff_test.exs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ defmodule ExUnit.DiffTest do
237237
refute_diff([:a, :b, :c] = [:a, :b, :x], "[:a, :b, -:c-]", "[:a, :b, +:x+]")
238238
refute_diff([:a, :x, :c] = [:a, :b, :c], "[:a, -:x-, :c]", "[:a, +:b+, :c]")
239239
refute_diff([:a, :d, :b, :c] = [:a, :b, :c, :d], "[:a, -:d-, :b, :c]", "[:a, :b, :c, +:d+]")
240+
refute_diff([:b, :c] = [:a, :b, :c], "[:b, :c]", "[+:a+, :b, :c]")
240241

241242
refute_diff([:a, :b, :c] = [:a, :b, []], "[:a, :b, -:c-]", "[:a, :b, +[]+]")
242243
refute_diff([:a, :b, []] = [:a, :b, :c], "[:a, :b, -[]-]", "[:a, :b, +:c+]")
@@ -354,7 +355,7 @@ defmodule ExUnit.DiffTest do
354355
)
355356

356357
refute_diff([:a, :b | [:c]] = [:a, :b], "[:a, :b | [-:c-]]", "[:a, :b]")
357-
refute_diff([:a, :b | []] = [:a, :b, :c], "[:a, :b | -[]-]", "[:a, :b, +:c+]")
358+
refute_diff([:a, :b | []] = [:a, :b, :c], "[:a, :b | []]", "[:a, :b, +:c+]")
358359
refute_diff([:a, :b | [:c, :d]] = [:a, :b, :c], "[:a, :b | [:c, -:d-]]", "[:a, :b, :c]")
359360
refute_diff([:a, :b | [:c, :d]] = [:a], "[:a, -:b- | [-:c-, -:d-]]", "[:a]")
360361

0 commit comments

Comments
 (0)