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