@@ -1103,26 +1103,42 @@ defmodule Mimic.Test do
11031103 }
11041104 end
11051105
1106- if @ elixir_version >= 1.18 do
1107- test "copies struct fields" do
1108- StructNoEnforceKeys
1109- |> stub ( :bar , fn -> @ stubbed end )
1110-
1111- assert StructNoEnforceKeys . __info__ ( :struct ) == [
1112- % { field: :foo , default: nil } ,
1113- % { field: :bar , default: nil }
1114- ]
1115- end
1116- else
1117- test "copies struct fields" do
1118- StructNoEnforceKeys
1119- |> stub ( :bar , fn -> @ stubbed end )
1120-
1121- assert StructNoEnforceKeys . __info__ ( :struct ) == [
1122- % { field: :foo , required: false } ,
1123- % { field: :bar , required: false }
1124- ]
1125- end
1106+ cond do
1107+ @ elixir_version >= 1.19 ->
1108+ test "copies struct fields" do
1109+ StructNoEnforceKeys
1110+ |> stub ( :bar , fn -> @ stubbed end )
1111+
1112+ # Why pattern matching:
1113+ # Direct comparison causes the compiler to emit a warning.
1114+ # The `default` key may or may not exist in the struct info.
1115+ assert [
1116+ % { field: :foo , default: nil , required: false } ,
1117+ % { field: :bar , default: nil , required: false }
1118+ ] = StructNoEnforceKeys . __info__ ( :struct )
1119+ end
1120+
1121+ @ elixir_version >= 1.18 ->
1122+ test "copies struct fields" do
1123+ StructNoEnforceKeys
1124+ |> stub ( :bar , fn -> @ stubbed end )
1125+
1126+ assert StructNoEnforceKeys . __info__ ( :struct ) == [
1127+ % { field: :foo , default: nil } ,
1128+ % { field: :bar , default: nil }
1129+ ]
1130+ end
1131+
1132+ true ->
1133+ test "copies struct fields" do
1134+ StructNoEnforceKeys
1135+ |> stub ( :bar , fn -> @ stubbed end )
1136+
1137+ assert StructNoEnforceKeys . __info__ ( :struct ) == [
1138+ % { field: :foo , required: false } ,
1139+ % { field: :bar , required: false }
1140+ ]
1141+ end
11261142 end
11271143
11281144 test "protocol still works" do
0 commit comments