@@ -627,7 +627,7 @@ defmodule ExUnit.DiffTest do
627627 )
628628 end
629629
630- test "structs with inspect difference " do
630+ test "structs with same inspect but different " do
631631 refute_diff (
632632 % Opaque { data: 1 } = % Opaque { data: 2 } ,
633633 "%ExUnit.DiffTest.Opaque{data: -1-}" ,
@@ -641,7 +641,7 @@ defmodule ExUnit.DiffTest do
641641 )
642642 end
643643
644- test "structs without inspect difference outside match" do
644+ test "structs with same inspect but different outside match" do
645645 refute_diff (
646646 % Opaque { data: 1 } == % Opaque { data: 2 } ,
647647 "%ExUnit.DiffTest.Opaque{data: -1-}" ,
@@ -663,6 +663,66 @@ defmodule ExUnit.DiffTest do
663663 )
664664 end
665665
666+ test "structs with matched type" do
667+ pins = % { { :type , nil } => User , { :age , nil } => 33 }
668+
669+ # pin on __struct__
670+ assert_diff (
671+ % { __struct__: ^ type , age: ^ age , name: "john" } = % User { name: "john" , age: 33 } ,
672+ [ ] ,
673+ pins
674+ )
675+
676+ refute_diff (
677+ % { __struct__: ^ type , age: ^ age , name: "john" } = % User { name: "jane" , age: 33 } ,
678+ "%{__struct__: ^type, age: ^age, name: \" j-oh-n\" }" ,
679+ "%ExUnit.DiffTest.User{age: 33, name: \" j+a+n+e+\" }" ,
680+ pins
681+ )
682+
683+ refute_diff (
684+ % { __struct__: ^ type , age: ^ age , name: "john" } = % User { name: "john" , age: 35 } ,
685+ "%{__struct__: ^type, age: -^age-, name: \" john\" }" ,
686+ "%ExUnit.DiffTest.User{age: 3+5+, name: \" john\" }" ,
687+ pins
688+ )
689+
690+ refute_diff (
691+ % { __struct__: ^ type , age: ^ age , name: "john" } = ~D[ 2020-01-01] ,
692+ "%{__struct__: -^type-, -age: ^age-, -name: \" john\" -}" ,
693+ "%+Date+{calendar: Calendar.ISO, day: 1, month: 1, year: 2020}" ,
694+ pins
695+ )
696+
697+ # pin on %
698+ assert_diff (
699+ % ^ type { age: ^ age , name: "john" } = % User { name: "john" , age: 33 } ,
700+ [ ] ,
701+ pins
702+ )
703+
704+ refute_diff (
705+ % ^ type { age: ^ age , name: "john" } = % User { name: "jane" , age: 33 } ,
706+ "%{__struct__: ^type, age: ^age, name: \" j-oh-n\" }" ,
707+ "%ExUnit.DiffTest.User{age: 33, name: \" j+a+n+e+\" }" ,
708+ pins
709+ )
710+
711+ refute_diff (
712+ % ^ type { age: ^ age , name: "john" } = % User { name: "john" , age: 35 } ,
713+ "%{__struct__: ^type, age: -^age-, name: \" john\" }" ,
714+ "%ExUnit.DiffTest.User{age: 3+5+, name: \" john\" }" ,
715+ pins
716+ )
717+
718+ refute_diff (
719+ % ^ type { age: ^ age , name: "john" } = ~D[ 2020-01-01] ,
720+ "%{__struct__: -^type-, -age: ^age-, -name: \" john\" -}" ,
721+ "%+Date+{calendar: Calendar.ISO, day: 1, month: 1, year: 2020}" ,
722+ pins
723+ )
724+ end
725+
666726 test "invalid structs" do
667727 refute_diff (
668728 % { __struct__: Unknown } = % { } ,
0 commit comments