File 0670-Update-the-CT-test_spec-grammar-to-accept-group-path.patch of Package erlang

From abe4546661ab940a6046994305b02c080690ad79 Mon Sep 17 00:00:00 2001
From: acw224 <thomasdcuvillier@gmail.com>
Date: Tue, 3 Aug 2021 08:40:00 -0700
Subject: [PATCH 2/2] Update the CT test_spec grammar to accept group-path of
 group_spec

Before there was a mismatch in the grammar.
Groups = [[GroupNames]] | GroupSpec | [GroupSpec] | all
where the [[GroupNames]] is a GroupPath

This change makes the grammar more coherent with
Groups = [[GroupSpec]] | GroupSpec | [GroupSpec] | all
That is the groups in a group-path can now be GroupSpec
---
 lib/common_test/doc/src/run_test_chapter.xml |  2 +-
 lib/common_test/src/ct_groups.erl            |  9 ++--
 lib/common_test/src/ct_run.erl               | 19 +++++++-
 lib/common_test/test/ct_testspec_1_SUITE.erl | 49 ++++++++++++++++++++
 4 files changed, 72 insertions(+), 7 deletions(-)

diff --git a/lib/common_test/doc/src/run_test_chapter.xml b/lib/common_test/doc/src/run_test_chapter.xml
index 1d88abc27e..731e550364 100644
--- a/lib/common_test/doc/src/run_test_chapter.xml
+++ b/lib/common_test/doc/src/run_test_chapter.xml
@@ -956,7 +956,7 @@
  Suites          = atom() | [atom()] | all
  Suite           = atom()
  Groups          = GroupPath | GroupSpec | [GroupSpec] | all
- GroupPath       = [[GroupName]]
+ GroupPath       = [[GroupSpec]]
  GroupSpec       = GroupName | {GroupName,Properties} | {GroupName,Properties,[GroupSpec]}
  GroupName       = atom()
  GroupNames      = GroupName | [GroupName]
diff --git a/lib/common_test/src/ct_groups.erl b/lib/common_test/src/ct_groups.erl
index b296939bd6..273a1acb12 100644
--- a/lib/common_test/src/ct_groups.erl
+++ b/lib/common_test/src/ct_groups.erl
@@ -550,11 +550,11 @@ search_and_override([Conf = {conf,Props,Init,Tests,End}], ORSpec, Mod) ->
     Suite = ?val(suite, Props),
     case lists:keysearch(Name, 1, ORSpec) of
 	{value,{Name,default}} ->
-	    [Conf];
+	    [{conf, Props, Init,  search_and_override(Tests, ORSpec, Mod),End}];
 	{value,{Name,ORProps}} ->
-	    [{conf,InsProps(Name,Suite,ORProps),Init,Tests,End}];
+	    [{conf,InsProps(Name,Suite,ORProps),Init, search_and_override(Tests, ORSpec, Mod),End}];
 	{value,{Name,default,[]}} ->
-	    [Conf];
+	    [{conf, Props, Init,  search_and_override(Tests, ORSpec, Mod),End}];
 	{value,{Name,default,SubORSpec}} ->
 	    override_props([Conf], SubORSpec, Name,Mod);
 	{value,{Name,ORProps,SubORSpec}} ->
@@ -562,7 +562,8 @@ search_and_override([Conf = {conf,Props,Init,Tests,End}], ORSpec, Mod) ->
 			    Init,Tests,End}], SubORSpec, Name,Mod);
 	_ ->
 	    [{conf,Props,Init,search_and_override(Tests,ORSpec,Mod),End}]
-    end.
+    end;
+search_and_override(Tests, _, _) -> Tests.
 
 %% Modify the Tests element according to the override specification
 override_props([{conf,Props,Init,Tests,End} | Confs], SubORSpec, Name,Mod) ->
diff --git a/lib/common_test/src/ct_run.erl b/lib/common_test/src/ct_run.erl
index a69267f5ea..27d0418029 100644
--- a/lib/common_test/src/ct_run.erl
+++ b/lib/common_test/src/ct_run.erl
@@ -2050,8 +2050,23 @@ final_tests1([{TestDir,Suite,GrsOrCs}|Tests], Final, Skip, Bad) when
 			  [ct_groups:make_conf(TestDir, Suite,
 					       GroupName, Props, TCs)];
 		     ({GroupOrGroups,TCs}) ->
-			  [ct_groups:make_conf(TestDir, Suite,
-					       GroupOrGroups, [], TCs)];
+			  case GroupOrGroups of
+			   [GroupList] when is_list(GroupList) ->
+				   {GrpNames, Props} = lists:foldl(
+				   fun({GrpName,_} = GrSpec, {GrpNames, Props}) -> 
+				      {lists:append(GrpNames, [GrpName]), [GrSpec | Props]};
+				   ({GrpName,_,_} = GrSpec, {GrpNames, Props}) -> 
+				      {lists:append(GrpNames, [GrpName]), [GrSpec | Props]};
+				   (GrpName, {GrpNames, Props}) -> 
+				      {lists:append(GrpNames, [GrpName]), Props} 
+					end,
+					{[], []}, GroupList),
+				   [ct_groups:make_conf(TestDir, Suite,
+				    [GrpNames], [{override, Props}], TCs)];
+			    _ -> 
+				   [ct_groups:make_conf(TestDir, Suite,
+				    GroupOrGroups, [], TCs)]
+			end;
 		     (TC) ->
 			  [TC]
 		  end, GrsOrCs),
diff --git a/lib/common_test/test/ct_testspec_1_SUITE.erl b/lib/common_test/test/ct_testspec_1_SUITE.erl
index 31ae19a033..41027dff36 100644
--- a/lib/common_test/test/ct_testspec_1_SUITE.erl
+++ b/lib/common_test/test/ct_testspec_1_SUITE.erl
@@ -65,6 +65,7 @@ all() ->
      skip_testcase, all_groups, skip_all_groups, group,
      group_path, group_config,
      group_spec, multi_group, multi_group_config,
+     groupspec_path, groupspec_path_2,
      skip_group, group_all_testcases,
      skip_group_all_testcases, group_testcase,
      skip_group_testcase, topgroup, subgroup, skip_subgroup,
@@ -244,6 +245,18 @@ multi_group_config(Config) when is_list(Config) ->
      {test_group_9, [sequence], [{test_group_8, [parallel]}]}]}],
     setup_and_execute(multi_group_config, TestSpec, Config).
 
+groupspec_path(Config) when is_list(Config) ->
+    DataDir = ?config(data_dir, Config),
+    TestDir = filename:join(DataDir, "groups_1"),
+    TestSpec = [{groups,TestDir,groups_11_SUITE,[[{test_group_2, []}, {test_group_3,[]}]]}],
+    setup_and_execute(groupspec_path, TestSpec, Config).
+
+groupspec_path_2(Config) when is_list(Config) ->
+    DataDir = ?config(data_dir, Config),
+    TestDir = filename:join(DataDir, "groups_1"),
+    TestSpec = [{groups,TestDir,groups_11_SUITE,[[{test_group_2, [parallel]}, {test_group_3,[sequence]}]]}],
+    setup_and_execute(groupspec_path_2, TestSpec, Config).
+
 skip_group(Config) when is_list(Config) ->
     DataDir = ?config(data_dir, Config),
 
@@ -878,6 +891,42 @@ test_events(group_config) ->
     ];
 
 
+test_events(groupspec_path) ->
+    [
+     {?eh,start_logging,'_'},
+     {?eh,tc_start,{groups_11_SUITE,init_per_suite}},
+     {?eh,tc_start,{groups_11_SUITE,{init_per_group,test_group_2,[]}}},
+     {?eh,tc_start,{groups_11_SUITE,{init_per_group,test_group_3,[]}}},
+     {?eh,tc_start,{groups_11_SUITE,testcase_3a}},
+     {?eh,tc_start,{groups_11_SUITE,testcase_3b}},
+     {?eh,test_stats,{2,0,{0,0}}},
+     {?eh,tc_done,{groups_11_SUITE,{end_per_group,test_group_3,[]},'_'}},
+     {?eh,tc_done,{groups_11_SUITE,{end_per_group,test_group_2,[]},'_'}},
+     {?eh,tc_done,{groups_11_SUITE,end_per_suite,'_'}},
+     {negative,{?eh,tc_start,'_'},{?eh,stop_logging,'_'}}
+    ];
+
+test_events(groupspec_path_2) ->
+    [
+     {?eh,start_logging,'_'},
+     {?eh,tc_start,{groups_11_SUITE,init_per_suite}},
+     {parallel, [
+     {?eh,tc_start,{groups_11_SUITE,{init_per_group,test_group_2,[parallel]}}},
+     {?eh,tc_done,{groups_11_SUITE,{init_per_group,test_group_2,[parallel]},ok}},
+     [
+     {?eh,tc_start,{groups_11_SUITE,{init_per_group,test_group_3,[sequence]}}},
+     {?eh,tc_start,{groups_11_SUITE,testcase_3a}},
+     {?eh,tc_start,{groups_11_SUITE,testcase_3b}},
+     {?eh,test_stats,{2,0,{0,0}}},
+     {?eh,tc_done,{groups_11_SUITE,{end_per_group,test_group_3,[sequence]},'_'}}
+     ],
+     {?eh,tc_start,{groups_11_SUITE,{end_per_group,test_group_2,[parallel]}}},
+     {?eh,tc_done,{groups_11_SUITE,{end_per_group,test_group_2,[parallel]},ok}}
+     ]},
+     {?eh,tc_done,{groups_11_SUITE,end_per_suite,'_'}},
+     {negative,{?eh,tc_start,'_'},{?eh,stop_logging,'_'}}
+    ];
+
 test_events(skip_group) ->
     [
       {?eh,start_logging,'_'},
-- 
2.31.1

openSUSE Build Service is sponsored by