Skip to content

Commit 1fb172e

Browse files
committed
Test quoted to string
1 parent af5f172 commit 1fb172e

File tree

2 files changed

+20
-14
lines changed

2 files changed

+20
-14
lines changed

lib/elixir/lib/module/types/descr.ex

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3494,8 +3494,7 @@ defmodule Module.Types.Descr do
34943494
def map_literal_to_quoted({domains = %{}, fields}, opts) do
34953495
domain_fields =
34963496
for {domain_key(domain_type), value_type} <- domains do
3497-
key = {:string, [], ["#{domain_type}() => "]}
3498-
{key, to_quoted(value_type, opts)}
3497+
{{domain_type, [], []}, map_value_to_quoted(value_type, opts)}
34993498
end
35003499

35013500
regular_fields_quoted = map_fields_to_quoted(:closed, Enum.sort(fields), opts)
@@ -3555,13 +3554,17 @@ defmodule Module.Types.Descr do
35553554
literal_to_quoted(key)
35563555
end
35573556

3558-
{optional?, type} = pop_optional_static(type)
3557+
{key, map_value_to_quoted(type, opts)}
3558+
end
3559+
end
35593560

3560-
cond do
3561-
not optional? -> {key, to_quoted(type, opts)}
3562-
empty?(type) -> {key, {:not_set, [], []}}
3563-
true -> {key, {:if_set, [], [to_quoted(type, opts)]}}
3564-
end
3561+
defp map_value_to_quoted(type, opts) do
3562+
{optional?, type} = pop_optional_static(type)
3563+
3564+
cond do
3565+
not optional? -> to_quoted(type, opts)
3566+
empty?(type) -> {:not_set, [], []}
3567+
true -> {:if_set, [], [to_quoted(type, opts)]}
35653568
end
35663569
end
35673570

lib/elixir/test/elixir/module/types/descr_test.exs

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2083,11 +2083,6 @@ defmodule Module.Types.DescrTest do
20832083
assert tuple([closed_map(a: integer()), open_map()]) |> to_quoted_string() ==
20842084
"{%{a: integer()}, map()}"
20852085

2086-
# TODO: eliminate tuple differences
2087-
# assert difference(tuple([number(), term()]), tuple([integer(), atom()]))
2088-
# |> to_quoted_string() ==
2089-
# "{float(), term()} or {number(), term() and not atom()}"
2090-
20912086
assert union(tuple([integer(), atom()]), tuple([integer(), atom()])) |> to_quoted_string() ==
20922087
"{integer(), atom()}"
20932088

@@ -2249,7 +2244,7 @@ defmodule Module.Types.DescrTest do
22492244
"""
22502245
end
22512246

2252-
test "map" do
2247+
test "map as records" do
22532248
assert empty_map() |> to_quoted_string() == "empty_map()"
22542249
assert open_map() |> to_quoted_string() == "map()"
22552250

@@ -2367,6 +2362,14 @@ defmodule Module.Types.DescrTest do
23672362
|> to_quoted_string() == "%{..., a: float(), b: atom(), c: port()}"
23682363
end
23692364

2365+
test "maps as dictionaries" do
2366+
assert closed_map([{domain_key(:integer), integer()}])
2367+
|> to_quoted_string() == "%{integer() => if_set(integer())}"
2368+
2369+
assert closed_map([{domain_key(:integer), integer()}, {:float, float()}])
2370+
|> to_quoted_string() == "%{integer() => if_set(integer()), float: float()}"
2371+
end
2372+
23702373
test "structs" do
23712374
assert open_map(__struct__: atom([URI])) |> to_quoted_string() ==
23722375
"%{..., __struct__: URI}"

0 commit comments

Comments
 (0)