Skip to content

Commit ff30974

Browse files
Munksgaardjosevalim
authored andcommitted
Escape pinned values when computing diff (#13354)
Take these two tests: ```elixir test "correctly colored" do assert [{:foo}] = [{:bar}] end test "incorrectly colored" do val = [{:foo}] assert ^val = [{:bar}] end ``` That's because when diffing a pin, we were not converting the underlying diff context from match to ===. This fixes #13348
1 parent e5ec5ce commit ff30974

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed

lib/ex_unit/lib/ex_unit/diff.ex

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -286,10 +286,10 @@ defmodule ExUnit.Diff do
286286
defp diff_pin({:^, _, [var]} = pin, right, %{pins: pins} = env) do
287287
identifier = var_context(var)
288288
%{^identifier => pin_value} = pins
289-
{diff, post_env} = diff_value(pin_value, right, env)
289+
{diff, post_env} = diff_value(pin_value, right, %{env | context: :===})
290290

291291
diff_left = update_diff_meta(pin, not diff.equivalent?)
292-
{%{diff | left: diff_left}, post_env}
292+
{%{diff | left: diff_left}, %{post_env | context: :match}}
293293
end
294294

295295
# Vars

lib/ex_unit/test/ex_unit/diff_test.exs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,12 @@ defmodule ExUnit.DiffTest do
251251
refute_diff([:a, [:c, :b]] = [:a, [:b, :c]], "[:a, [-:c-, :b]]", "[:a, [:b, +:c+]]")
252252
refute_diff(:a = [:a, [:b, :c]], "-:a-", "+[:a, [:b, :c]]+")
253253

254-
pins = %{{:a, nil} => :a, {:b, nil} => :b, {:list_ab, nil} => [:a, :b]}
254+
pins = %{
255+
{:a, nil} => :a,
256+
{:b, nil} => :b,
257+
{:list_ab, nil} => [:a, :b],
258+
{:list_tuple, nil} => [{:foo}]
259+
}
255260

256261
assert_diff(x = [], [x: []], pins)
257262
assert_diff(x = [:a, :b], [x: [:a, :b]], pins)
@@ -282,6 +287,9 @@ defmodule ExUnit.DiffTest do
282287

283288
refute_diff([:a, :b] = :a, "-[:a, :b]-", "+:a+")
284289
refute_diff([:foo] = [:foo, {:a, :b, :c}], "[:foo]", "[:foo, +{:a, :b, :c}+]")
290+
291+
refute_diff([{:foo}] = [{:bar}], "[{-:foo-}]", "[{+:bar+}]")
292+
refute_diff(^list_tuple = [{:bar}], "-^list_tuple-", "[{+:bar+}]", pins)
285293
end
286294

287295
test "improper lists" do

0 commit comments

Comments
 (0)