File 0746-Update-test-suite.patch of Package erlang

From 19697637a41f7e5199f017abae44bac5e7367c57 Mon Sep 17 00:00:00 2001
From: zadean <contact@zadean.com>
Date: Mon, 19 Aug 2019 14:47:32 +0200
Subject: [PATCH 3/3] Update test suite

Add record with exact and associated map types to type_specs.erl. The
record forces the erl_parse format for map types to be retained.

Add test wrapped_subtrees to the test suite. It ensures that each
erl_parse node it encounters can be wrapped and accessed with
erl_syntax:subtrees/1 without error.
---
 lib/syntax_tools/test/syntax_tools_SUITE.erl       | 36 ++++++++++++++++++++++
 .../test/syntax_tools_SUITE_data/type_specs.erl    |  3 ++
 2 files changed, 39 insertions(+)

diff --git a/lib/syntax_tools/test/syntax_tools_SUITE.erl b/lib/syntax_tools/test/syntax_tools_SUITE.erl
index 43c17e9f1f..cabd29cb56 100644
--- a/lib/syntax_tools/test/syntax_tools_SUITE.erl
+++ b/lib/syntax_tools/test/syntax_tools_SUITE.erl
@@ -24,7 +24,7 @@
 
 %% Test cases
 -export([app_test/1,appup_test/1,smoke_test/1,revert/1,revert_map/1,
-         revert_map_type/1,
+         revert_map_type/1,wrapped_subtrees/1,
 	t_abstract_type/1,t_erl_parse_type/1,t_type/1, t_epp_dodger/1,
 	t_comment_scan/1,t_igor/1,t_erl_tidy/1,t_prettypr/1]).
 
@@ -32,6 +32,7 @@ suite() -> [{ct_hooks,[ts_install_cth]}].
 
 all() -> 
     [app_test,appup_test,smoke_test,revert,revert_map,revert_map_type,
+     wrapped_subtrees,
     t_abstract_type,t_erl_parse_type,t_type,t_epp_dodger,
     t_comment_scan,t_igor,t_erl_tidy,t_prettypr].
 
@@ -142,6 +143,41 @@ revert_map(Config) when is_list(Config) ->
     Mapped2 = erl_syntax_lib:map(fun(X) -> X end, Form2),
     Form2 = erl_syntax:revert(Mapped2),
     ?t:timetrap_cancel(Dog).
+
+%% Read with erl_parse, wrap each tree node with erl_syntax and check that
+%% erl_syntax:subtrees can access the wrapped node.
+wrapped_subtrees(Config) when is_list(Config) ->
+    Dog = ?t:timetrap(?t:minutes(2)),
+    Wc = filename:join([code:lib_dir(stdlib),"src","*.erl"]),
+    Fs = filelib:wildcard(Wc) ++ test_files(Config),
+    Path = [filename:join(code:lib_dir(stdlib), "include"),
+            filename:join(code:lib_dir(kernel), "include")],
+    io:format("~p files\n", [length(Fs)]),
+    Map = fun (File) -> wrapped_subtrees_file(File, Path) end,
+    case p_run(Map, Fs) of
+        0 -> ok;
+        N -> ?t:fail({N,errors})
+    end,
+    ?t:timetrap_cancel(Dog).
+
+wrapped_subtrees_file(File, Path) ->
+    case epp:parse_file(File, Path, []) of
+        {ok,Fs0} ->
+            lists:foreach(fun wrap_each/1, Fs0)
+    end.
+
+wrap_each(Tree) ->
+    % only `wrap` top-level erl_parse node
+    Tree1 = erl_syntax:set_pos(Tree, erl_syntax:get_pos(Tree)),
+    % assert ability to access subtrees of wrapped node with erl_syntax:subtrees/1
+    case erl_syntax:subtrees(Tree1) of
+        [] -> ok;
+        List ->
+            GrpsF = fun(Group) ->
+                          lists:foreach(fun wrap_each/1, Group)
+                    end,
+            lists:foreach(GrpsF, List)
+    end.
 
 %% api tests
 
diff --git a/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl b/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl
index e4f8a1c3de..b23acdb39e 100644
--- a/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl
+++ b/lib/syntax_tools/test/syntax_tools_SUITE_data/type_specs.erl
@@ -37,6 +37,9 @@
 
 -record(par, {a :: undefined | ?MODULE}).
 
+-record(mt, {e :: #{any() := any()},
+             a :: #{any() => any()}}).
+
 -record(r0, {}).
 
 -record(r,
-- 
2.16.4

openSUSE Build Service is sponsored by