aboutsummaryrefslogblamecommitdiffstats
path: root/lib/common_test/test/ct_repeat_1_SUITE.erl
blob: 090002d0c27aabcf5b41b94853328094a3cef5e3 (plain) (tree)
1
2
3
4
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534


                   
                                                        


























                                                                         
                                           

























                                                                      
                                         
 
         






                                                        









                                     


















































































                                                                                 

                                                         




























                                                                    
                         















                                                                                   

                                 

















































                                                                                        
 



















                                                                         
 

































































                                                                                  

                                      

































































































































                                                                       

                                        














































































                                                                         
                                  
















































































































































































































































































































                                                                            

                                      























































































































































                                                                                   

                                        





























































































































































































































































































































































































































































































































                                                                                   
%%
%% %CopyrightBegin%
%%
%% Copyright Ericsson AB 2009-2011. All Rights Reserved.
%%
%% The contents of this file are subject to the Erlang Public License,
%% Version 1.1, (the "License"); you may not use this file except in
%% compliance with the License. You should have received a copy of the
%% Erlang Public License along with this software. If not, it can be
%% retrieved online at http://www.erlang.org/.
%%
%% Software distributed under the License is distributed on an "AS IS"
%% basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
%% the License for the specific language governing rights and limitations
%% under the License.
%%
%% %CopyrightEnd%
%%

%%%-------------------------------------------------------------------
%%% File: ct_repeat_1_SUITE.erl
%%%
%%% Description:
%%% Test some simple test case group scenarios with repeat.
%%%
%%% The suites used for the test are located in the data directory.
%%%-------------------------------------------------------------------
-module(ct_repeat_1_SUITE).

-compile(export_all).

-include_lib("common_test/include/ct.hrl").
-include_lib("common_test/include/ct_event.hrl").

-define(eh, ct_test_support_eh).

%%--------------------------------------------------------------------
%% TEST SERVER CALLBACK FUNCTIONS
%%--------------------------------------------------------------------

%%--------------------------------------------------------------------
%% Description: Since Common Test starts another Test Server
%% instance, the tests need to be performed on a separate node (or
%% there will be clashes with logging processes etc).
%%--------------------------------------------------------------------
init_per_suite(Config) ->
    Config1 = ct_test_support:init_per_suite(Config),
    Config1.

end_per_suite(Config) ->
    ct_test_support:end_per_suite(Config).

init_per_testcase(TestCase, Config) ->
    ct_test_support:init_per_testcase(TestCase, Config).

end_per_testcase(TestCase, Config) ->
    ct_test_support:end_per_testcase(TestCase, Config).

suite() -> [{ct_hooks,[ts_install_cth]}].

all() -> 
    [repeat_cs, repeat_cs_and_grs, repeat_seq,
     repeat_cs_until_any_ok, repeat_gr_until_any_ok,
     repeat_cs_until_any_fail, repeat_gr_until_any_fail,
     repeat_cs_until_all_ok, repeat_gr_until_all_ok,
     repeat_cs_until_all_fail, repeat_gr_until_all_fail,
     repeat_seq_until_any_fail,
     repeat_shuffled_seq_until_any_fail].

groups() -> 
    [].

init_per_group(_GroupName, Config) ->
	Config.

end_per_group(_GroupName, Config) ->
	Config.


%%--------------------------------------------------------------------
%% TEST CASES
%%--------------------------------------------------------------------

repeat_cs(Config) when is_list(Config) ->
    execute(repeat_cs,
	    "repeat_1_SUITE", repeat_cs,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_and_grs(Config) when is_list(Config) ->
    execute(repeat_cs_and_grs,
	    "repeat_1_SUITE", repeat_cs_and_grs,
	    Config).
%%%-------------------------------------------------------------------
repeat_seq(Config) when is_list(Config) ->
    execute(repeat_seq,
	    "repeat_1_SUITE", repeat_seq,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_until_any_ok(Config) when is_list(Config) ->
    execute(repeat_cs_until_any_ok,
	    "repeat_1_SUITE", repeat_cs_until_any_ok,
	    Config).
%%%-------------------------------------------------------------------
repeat_gr_until_any_ok(Config) when is_list(Config) ->
    execute(repeat_gr_until_any_ok,
	    "repeat_1_SUITE", repeat_gr_until_any_ok,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_until_any_fail(Config) when is_list(Config) ->
    execute(repeat_cs_until_any_fail,
	    "repeat_1_SUITE", repeat_cs_until_any_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_gr_until_any_fail(Config) when is_list(Config) ->
    execute(repeat_gr_until_any_fail,
	    "repeat_1_SUITE", repeat_gr_until_any_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_until_all_ok(Config) when is_list(Config) ->
    execute(repeat_cs_until_all_ok,
	    "repeat_1_SUITE", repeat_cs_until_all_ok,
	    Config).
%%%-------------------------------------------------------------------
repeat_gr_until_all_ok(Config) when is_list(Config) ->
    execute(repeat_gr_until_all_ok,
	    "repeat_1_SUITE", repeat_gr_until_all_ok,
	    Config).
%%%-------------------------------------------------------------------
repeat_cs_until_all_fail(Config) when is_list(Config) ->
    execute(repeat_cs_until_all_fail,
	    "repeat_1_SUITE", repeat_cs_until_all_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_gr_until_all_fail(Config) when is_list(Config) ->
    execute(repeat_gr_until_all_fail,
	    "repeat_1_SUITE", repeat_gr_until_all_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_seq_until_any_fail(Config) when is_list(Config) ->
    execute(repeat_seq_until_any_fail,
	    "repeat_1_SUITE", repeat_seq_until_any_fail,
	    Config).
%%%-------------------------------------------------------------------
repeat_shuffled_seq_until_any_fail(Config) when is_list(Config) ->
    execute(repeat_shuffled_seq_until_any_fail,
	    "repeat_1_SUITE", repeat_shuffled_seq_until_any_fail,
	    Config).

%%%-----------------------------------------------------------------
%%% HELP FUNCTIONS
%%%-----------------------------------------------------------------
execute(TestCase, SuiteName, Group, Config) ->
    DataDir = ?config(data_dir, Config),
    Suite = filename:join(DataDir, SuiteName),

    {Opts,ERPid} = setup([{suite,Suite},{group,Group},{label,TestCase}], Config),
    ok = ct_test_support:run(Opts, Config),
    Events = ct_test_support:get_events(ERPid, Config),

    ct_test_support:log_events(TestCase,
			       reformat(Events, ?eh),
			       ?config(priv_dir, Config),
			       Opts),

    TestEvents = events_to_check(TestCase),
    ok = ct_test_support:verify_events(TestEvents, Events, Config).

setup(Test, Config) ->
    Opts0 = ct_test_support:get_opts(Config),
    Level = ?config(trace_level, Config),
    EvHArgs = [{cbm,ct_test_support},{trace_level,Level}],
    Opts = Opts0 ++ [{event_handler,{?eh,EvHArgs}} | Test],
    ERPid = ct_test_support:start_event_receiver(Config),
    {Opts,ERPid}.

reformat(Events, EH) ->
    ct_test_support:reformat(Events, EH).
%reformat(Events, _EH) ->
%    Events.

%%%-----------------------------------------------------------------
%%% TEST EVENTS
%%%-----------------------------------------------------------------
events_to_check(Test) ->
    %% 2 tests (ct:run_test + script_start) is default
    events_to_check(Test, 2).

events_to_check(_, 0) ->
    [];
events_to_check(Test, N) ->
    test_events(Test) ++ events_to_check(Test, N-1).

test_events(repeat_cs) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_1,[]},ok}},
       {?eh,test_stats,{2,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_1,[]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_2,[{repeat,2}]},ok}},
       {?eh,test_stats,{4,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_2,[{repeat,2}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_2,[]},ok}},
       {?eh,test_stats,{6,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_2,[]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_and_grs) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_and_grs,[{repeat,2}]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,tc_fail_1,{failed,{error,{{badmatch,2},'_'}}}}},
      {?eh,test_stats,{1,1,{0,0}}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_fail_result,[]},ok}},
       {?eh,test_stats,{2,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_fail_result,[]},
		     {return_group_result,failed}}}],
      {?eh,test_stats,{3,1,{0,0}}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_fail_init,[]},
		     {failed,{error,fails_on_purpose}}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {failed,{repeat_1_SUITE,init_per_group,
				   {'EXIT',fails_on_purpose}}}}},
       {?eh,test_stats,{3,1,{0,1}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			  {failed,{repeat_1_SUITE,init_per_group,
				   {'EXIT',fails_on_purpose}}}}}],
      {?eh,test_stats,{4,1,{0,1}}},
      {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_and_grs,[{repeat,2}]},ok}}],
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_and_grs,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,test_stats,{5,1,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,tc_fail_1,{failed,{error,{{badmatch,2},'_'}}}}},
      {?eh,test_stats,{5,2,{0,1}}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_fail_result,[]},ok}},
       {?eh,test_stats,{6,2,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_fail_result,[]},
		     {return_group_result,failed}}}],
      {?eh,test_stats,{7,2,{0,1}}},
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_fail_init,[]},
		     {failed,{error,fails_on_purpose}}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {failed,{repeat_1_SUITE,init_per_group,
				   {'EXIT',fails_on_purpose}}}}},
       {?eh,test_stats,{7,2,{0,2}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			  {failed,{repeat_1_SUITE,init_per_group,
				   {'EXIT',fails_on_purpose}}}}}],
      {?eh,test_stats,{8,2,{0,2}}},
      {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_cs_and_grs,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}
    ];

test_events(repeat_seq) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_seq,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_1,[sequence,{repeat,2}]},
		     ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       {?eh,test_stats,{1,1,{0,0}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_2,
			  {failed,{repeat_1_SUITE,tc_fail_1}}}},
       {?eh,test_stats,{1,1,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_1,[sequence,{repeat,2}]},
		     ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_seq_1,
				     [sequence]},ok}},
       {?eh,test_stats,{2,2,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_seq_1,
				     [sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_2,[sequence,{repeat,2}]},
		     ok}},
       {?eh,test_stats,{3,2,{0,2}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result,[]},ok}},
	{?eh,test_stats,{4,2,{0,2}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_2,
			  {group_result,gr_fail_result,failed}}},
       {?eh,test_stats,{4,2,{0,3}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_2,[sequence,{repeat,2}]},
		     ok}}],
      [{?eh,tc_done,
        {repeat_1_SUITE,{init_per_group,repeat_seq_2,[sequence]},ok}},
       {?eh,test_stats,{6,2,{0,4}}},
       {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_seq_2,
				     [sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_3,[sequence,{repeat,2}]},
		     ok}},
       {?eh,test_stats,{7,2,{0,4}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
	{?eh,test_stats,{7,2,{0,5}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,
			    {repeat_1_SUITE,init_per_group,
			     {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_2,
			  {group_result,gr_fail_init,failed}}},
       {?eh,test_stats,{7,2,{0,6}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_3,[sequence,{repeat,2}]},
		     ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_3,[sequence]},ok}},
       {?eh,test_stats,{8,2,{0,8}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_3,[sequence]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_4,[sequence,{repeat,2}]},
		     ok}},
       {?eh,test_stats,{8,3,{0,8}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,
			  tc_ok_1,{failed,{repeat_1_SUITE,tc_fail_1}}}},
       {?eh,test_stats,{8,3,{0,9}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,
			  tc_ok_1,{failed,{repeat_1_SUITE,tc_fail_1}}}},
       {?eh,test_stats,{8,3,{0,10}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_4,[sequence,{repeat,2}]},
		     ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_seq_4,[sequence]},ok}},
       {?eh,test_stats,{8,4,{0,12}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_4,[sequence]},ok}}],

      {?eh,tc_done,{repeat_1_SUITE,{end_per_group,repeat_seq,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_until_any_ok) ->
    [
     {?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_cs_until_any_ok,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_any_ok_1,
		      [{repeat_until_any_ok,3}]},ok}},
       {?eh,test_stats,{0,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{0,3,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_any_ok_1,
		      [{repeat_until_any_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_any_ok_1,
		      [{repeat_until_any_ok,2}]},ok}},
       {?eh,test_stats,{0,5,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
       {?eh,test_stats,{1,5,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_any_ok_1,
		      [{repeat_until_any_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_any_ok_2,
		      [{repeat_until_any_ok,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{2,5,{0,0}}},
       {?eh,test_stats,{2,6,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_any_ok_2,
		      [{repeat_until_any_ok,3}]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_cs_until_any_ok,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_gr_until_any_ok) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,
       {repeat_1_SUITE,{init_per_group,repeat_gr_until_any_ok,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_any_ok_1,
		      [{repeat_until_any_ok,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result,[]},ok}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_1,
		     {failed,{error,{{badmatch,2},'_'}}}}},
       {?eh,test_stats,{1,1,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
	{?eh,test_stats,{1,1,{0,1}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',fails_on_purpose}}}}}],
       {?eh,test_stats,{1,2,{0,1}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result_then_ok,[]},ok}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result_then_ok,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_any_ok_1,
		      [{repeat_until_any_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_any_ok_1,
		      [{repeat_until_any_ok,2}]},ok}},
       %% ...
       {?eh,test_stats,{3,4,{0,2}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result_then_ok,[]},ok}},
         {?eh,test_stats,{4,4,{0,2}}},
        {?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result_then_ok,[]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_gr_until_any_ok_1,
		     [{repeat_until_any_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_any_ok_2,
		      [{repeat_until_any_ok,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_1,
		     {failed,{error,{{badmatch,2},'_'}}}}},
       {?eh,test_stats,{5,5,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{5,6,{0,2}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
         {?eh,test_stats,{5,6,{0,3}}},
         {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			    {failed,{repeat_1_SUITE,init_per_group,
				     {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_any_ok_2,
		      [{repeat_until_any_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_any_ok_2,
		      [{repeat_until_any_ok,2}]},ok}},
        {?eh,test_stats,{6,7,{0,3}}},
        {?eh,tc_start,{repeat_1_SUITE,tc_fail_then_ok_1}},
        {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
        {?eh,test_stats,{7,7,{0,3}}},
        [{?eh,tc_done,{repeat_1_SUITE,
		       {init_per_group,gr_fail_init,[]},
		       {failed,{error,fails_on_purpose}}}},
	 {?eh,test_stats,{7,7,{0,4}}},
	 {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			    {failed,{repeat_1_SUITE,init_per_group,
				     {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_any_ok_2,
		      [{repeat_until_any_ok,2}]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_gr_until_any_ok,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_until_any_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     {?eh,tc_start,{repeat_1_SUITE,init_per_suite}},
     {?eh,tc_done,{repeat_1_SUITE,init_per_suite,ok}},
     [{?eh,tc_start,
       {repeat_1_SUITE,{init_per_group,repeat_cs_until_any_fail,[]}}},
      {?eh,tc_done,
       {repeat_1_SUITE,{init_per_group,repeat_cs_until_any_fail,[]},ok}},
      [{?eh,tc_start,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,3}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,3}]},
	 ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{2,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{3,0,{0,0}}},
       {?eh,tc_start,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,3}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,3}]},
	 ok}}],
      [{?eh,tc_start,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,2}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,2}]},
	 ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{4,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{5,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
       {?eh,tc_done,
	{repeat_1_SUITE,tc_ok_then_fail_1,
	 {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{5,1,{0,0}}},
       {?eh,tc_start,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,2}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_1,
	  [{repeat_until_any_fail,2}]},
	 ok}}],
      [{?eh,tc_start,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_2,
	  [{repeat_until_any_fail,3}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {init_per_group,repeat_cs_until_any_fail_2,
	  [{repeat_until_any_fail,3}]},
	 ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,tc_done,
	{repeat_1_SUITE,tc_fail_1,
	 {failed,
	  {error,
	   {{badmatch,2},'_'}}}}},
       {?eh,test_stats,{5,2,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_2}},
       {?eh,tc_done,
	{repeat_1_SUITE,tc_fail_2,{failed,{error,exit_on_purpose}}}},
       {?eh,test_stats,{5,3,{0,0}}},
       {?eh,tc_start,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_2,
	  [{repeat_until_any_fail,3}]}}},
       {?eh,tc_done,
        {repeat_1_SUITE,
	 {end_per_group,repeat_cs_until_any_fail_2,
	  [{repeat_until_any_fail,3}]},
	 ok}}],
      {?eh,tc_start,
       {repeat_1_SUITE,{end_per_group,repeat_cs_until_any_fail,[]}}},
      {?eh,tc_done,
       {repeat_1_SUITE,{end_per_group,repeat_cs_until_any_fail,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,end_per_suite}},
     {?eh,tc_done,{repeat_1_SUITE,end_per_suite,ok}},
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_gr_until_any_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
 {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
 {?eh,start_info,{1,1,unknown}},
 {?eh,tc_start,{repeat_1_SUITE,init_per_suite}},
 {?eh,tc_done,{repeat_1_SUITE,init_per_suite,ok}},
 [{?eh,tc_start,
      {repeat_1_SUITE,{init_per_group,repeat_gr_until_any_fail,[]}}},
  {?eh,tc_done,
      {repeat_1_SUITE,{init_per_group,repeat_gr_until_any_fail,[]},ok}},
   [{?eh,tc_start,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,3}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,3}]},
            ok}},
     [{?eh,tc_start,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{1,0,{0,0}}},
      {?eh,tc_start,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
     {?eh,test_stats,{2,0,{0,0}}},
     [{?eh,tc_start,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_result,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_result,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{3,0,{0,0}}},
      {?eh,tc_start,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_result,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_result,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
     {?eh,test_stats,{4,0,{0,0}}},
    {?eh,tc_start,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,3}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,3}]},
            ok}}],
   [{?eh,tc_start,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,2}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,2}]},
            ok}},
     [{?eh,tc_start,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{5,0,{0,0}}},
      {?eh,tc_start,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
     {?eh,test_stats,{6,0,{0,0}}},
     [{?eh,tc_start,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_result,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_result,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{7,0,{0,0}}},
      {?eh,tc_start,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_result,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,
              {end_per_group,gr_ok_then_fail_result,[]},
              {return_group_result,failed}}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
     {?eh,test_stats,{8,0,{0,0}}},
    {?eh,tc_start,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,2}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_1,
                [{repeat_until_any_fail,2}]},
            ok}}],
   [{?eh,tc_start,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,3}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,3}]},
            ok}},
     [{?eh,tc_start,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{9,0,{0,0}}},
      {?eh,tc_start,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
     {?eh,test_stats,{10,0,{0,0}}},
     [{?eh,tc_start,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_init,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_init,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{11,0,{0,0}}},
      {?eh,tc_start,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_init,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,{end_per_group,gr_ok_then_fail_init,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
     {?eh,test_stats,{12,0,{0,0}}},
    {?eh,tc_start,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,3}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {end_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,3}]},
            ok}}],
   [{?eh,tc_start,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,2}]}}},
    {?eh,tc_done,
        {repeat_1_SUITE,
            {init_per_group,repeat_gr_until_any_fail_2,
                [{repeat_until_any_fail,2}]},
            ok}},
     [{?eh,tc_start,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{13,0,{0,0}}},
      {?eh,tc_start,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
      {?eh,tc_done,
                          {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
     {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
     {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
     {?eh,test_stats,{14,0,{0,0}}},
     [{?eh,tc_start,
          {repeat_1_SUITE,{init_per_group,gr_ok_then_fail_init,[]}}},
      {?eh,tc_done,
          {repeat_1_SUITE,
              {init_per_group,gr_ok_then_fail_init,[]},
              {failed,{error,failing_this_time}}}},
       {?eh,tc_auto_skip,
           {repeat_1_SUITE,tc_ok_1,
               {failed,
                   {repeat_1_SUITE,init_per_group,
                       {'EXIT',failing_this_time}}}}},
       {?eh,test_stats,{14,0,{0,1}}},
       {?eh,tc_auto_skip,
           {repeat_1_SUITE,end_per_group,
               {failed,
                   {repeat_1_SUITE,init_per_group,
                       {'EXIT',failing_this_time}}}}}],
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
      {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
      {?eh,test_stats,{15,0,{0,1}}},
     {?eh,tc_start,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_2,
                 [{repeat_until_any_fail,2}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_2,
                 [{repeat_until_any_fail,2}]},
             ok}}],
    [{?eh,tc_start,
         {repeat_1_SUITE,
             {init_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,3}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {init_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,3}]},
             ok}},
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
      {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
      {?eh,test_stats,{16,0,{0,1}}},
      [{?eh,tc_start,
                           {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
       {?eh,tc_done,
                           {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
        {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{17,0,{0,1}}},
       {?eh,tc_start,
                           {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
       {?eh,tc_done,
                           {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
      {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
      {?eh,test_stats,{18,0,{0,1}}},
     {?eh,tc_start,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,3}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,3}]},
             ok}}],
    [{?eh,tc_start,
         {repeat_1_SUITE,
             {init_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,2}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {init_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,2}]},
             ok}},
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
      {?eh,tc_done,
          {repeat_1_SUITE,tc_ok_then_fail_1,
              {failed,{error,failing_this_time}}}},
      {?eh,test_stats,{18,1,{0,1}}},
      [{?eh,tc_start,
                           {repeat_1_SUITE,{init_per_group,gr_ok_1,[]}}},
       {?eh,tc_done,
                           {repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
        {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{19,1,{0,1}}},
       {?eh,tc_start,
                           {repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
       {?eh,tc_done,
                           {repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
      {?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
      {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
      {?eh,test_stats,{20,1,{0,1}}},
     {?eh,tc_start,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,2}]}}},
     {?eh,tc_done,
         {repeat_1_SUITE,
             {end_per_group,repeat_gr_until_any_fail_3,
                 [{repeat_until_any_fail,2}]},
             ok}}],
   {?eh,tc_start,
       {repeat_1_SUITE,{end_per_group,repeat_gr_until_any_fail,[]}}},
   {?eh,tc_done,
       {repeat_1_SUITE,{end_per_group,repeat_gr_until_any_fail,[]},ok}}],
  {?eh,tc_start,{repeat_1_SUITE,end_per_suite}},
  {?eh,tc_done,{repeat_1_SUITE,end_per_suite,ok}},
  {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_until_all_ok) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,repeat_cs_until_all_ok,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_ok_1,
		      [{repeat_until_all_ok,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{0,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{1,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_2,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{1,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_ok_1,
		      [{repeat_until_all_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_ok_1,
		      [{repeat_until_all_ok,2}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
       {?eh,test_stats,{2,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{3,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_2,ok}},
       {?eh,test_stats,{4,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_ok_1,
		      [{repeat_until_all_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_ok_2,
		      [{repeat_until_all_ok,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{6,2,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_ok_2,
		      [{repeat_until_all_ok,3}]},ok}}],

      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_cs_until_all_ok,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_gr_until_all_ok) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_gr_until_all_ok,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_1,
		      [{repeat_until_all_ok,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,test_stats,{2,0,{0,0}}},
	{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{2,1,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result_then_ok,[]},ok}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,test_stats,{3,1,{0,0}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result_then_ok,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_1,
		      [{repeat_until_all_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_1,
		      [{repeat_until_all_ok,2}]},ok}},
       {?eh,test_stats,{5,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
       {?eh,test_stats,{6,1,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_result_then_ok,[]},ok}},
	{?eh,test_stats,{7,1,{0,0}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result_then_ok,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_1,
		      [{repeat_until_all_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_2,
		      [{repeat_until_all_ok,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init_then_ok,[]},
		      {failed,{error,failing_this_time}}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',failing_this_time}}}}},
	{?eh,test_stats,{7,1,{0,1}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',failing_this_time}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{8,1,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_2,
		      [{repeat_until_all_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_2,
		      [{repeat_until_all_ok,2}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init_then_ok,[]},ok}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{9,1,{0,1}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_init_then_ok,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{10,1,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_2,
		      [{repeat_until_all_ok,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_3,
		      [{repeat_until_all_ok,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{11,1,{0,1}}},
	{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{11,2,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_3,
		      [{repeat_until_all_ok,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_ok_3,
		      [{repeat_until_all_ok,2}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,gr_ok_1,[]},ok}},
        {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
        {?eh,test_stats,{12,2,{0,1}}},
	{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_fail_then_ok_1,ok}},
       {?eh,test_stats,{13,2,{0,1}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_ok_3,
		      [{repeat_until_all_ok,2}]},ok}}],

      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_gr_until_all_ok,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_cs_until_all_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_cs_until_all_fail,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_fail_1,
		      [{repeat_until_all_fail,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{1,0,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{1,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_2,ok}},
       {?eh,test_stats,{2,1,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_fail_1,
		      [{repeat_until_all_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_fail_1,
		      [{repeat_until_all_fail,2}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{2,2,{0,0}}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{2,3,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_2,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{2,4,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_fail_1,
		      [{repeat_until_all_fail,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_cs_until_all_fail_2,
		      [{repeat_until_all_fail,3}]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{2,5,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_cs_until_all_fail_2,
		      [{repeat_until_all_fail,3}]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_cs_until_all_fail,[]},ok}}],

     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_gr_until_all_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},
     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_gr_until_all_fail,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_1,
		      [{repeat_until_all_fail,3}]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{0,1,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
	{?eh,test_stats,{0,1,{0,1}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{1,1,{0,1}}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,
				      gr_ok_then_fail_result,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_1,
		      [{repeat_until_all_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_1,
		      [{repeat_until_all_fail,2}]},ok}},
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{2,2,{0,1}}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_fail_init,[]},
		      {failed,{error,fails_on_purpose}}}},
        {?eh,test_stats,{2,2,{0,2}}},
        {?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',fails_on_purpose}}}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{2,3,{0,2}}},
       [{?eh,tc_done,{repeat_1_SUITE,{init_per_group,
				      gr_ok_then_fail_result,[]},ok}},
	{?eh,test_stats,{3,3,{0,2}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_ok_then_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_1,
		      [{repeat_until_all_fail,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_2,
		      [{repeat_until_all_fail,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_then_fail_init,[]},ok}}],
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{4,4,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_2,
		      [{repeat_until_all_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_2,
		      [{repeat_until_all_fail,2}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_ok_then_fail_init,[]},
		      {failed,{error,failing_this_time}}}},
	{?eh,test_stats,{4,4,{0,3}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',failing_this_time}}}}}],
       {?eh,tc_start,{repeat_1_SUITE,tc_fail_1}},
       {?eh,test_stats,{4,5,{0,3}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_2,
		      [{repeat_until_all_fail,2}]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_3,
		      [{repeat_until_all_fail,3}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{6,5,{0,3}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_3,
		      [{repeat_until_all_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_gr_until_all_fail_3,
		      [{repeat_until_all_fail,2}]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{7,6,{0,3}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_gr_until_all_fail_3,
		      [{repeat_until_all_fail,2}]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_gr_until_all_fail,[]},ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

test_events(repeat_seq_until_any_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},

     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_seq_until_any_fail,[]},ok}},
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_1,
		      [sequence,{repeat_until_any_fail,2}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{2,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_1,
		      [sequence,{repeat_until_any_fail,2}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,
		      repeat_seq_until_any_fail_1,[sequence]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{4,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,
		      repeat_seq_until_any_fail_1,[sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_2,
		      [{repeat_until_any_fail,2},sequence]},ok}},
       {?eh,test_stats,{5,0,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,test_stats,{7,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_2,
		      [{repeat_until_any_fail,2},sequence]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_2,[sequence]},
		     ok}},
       {?eh,test_stats,{8,0,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,test_stats,{10,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_2,[sequence]},
		     ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_3,
		      [sequence,{repeat_until_any_fail,3}]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{11,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
       {?eh,test_stats,{12,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
       {?eh,test_stats,{13,0,{0,0}}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_3,
		      [sequence,{repeat_until_any_fail,3}]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_3,
		      [{repeat_until_any_fail,2},sequence]},ok}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{15,0,{0,0}}},
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		     {failed,{error,failing_this_time}}}},
       {?eh,test_stats,{15,1,{0,0}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_2,
			  {failed,{repeat_1_SUITE,tc_ok_then_fail_1}}}},
       {?eh,test_stats,{15,1,{0,1}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {failed,{repeat_1_SUITE,tc_ok_then_fail_1}}}},
       {?eh,test_stats,{15,1,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_3,
		      [{repeat_until_any_fail,2},sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_4,
		      [{repeat_until_any_fail,3},sequence]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,
				      gr_ok_then_fail_result,[]},ok}}],
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{18,1,{0,2}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_4,
		      [{repeat_until_any_fail,3},sequence]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_4,
		      [{repeat_until_any_fail,2},sequence]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,gr_ok_then_fail_result,[]},
		      {return_group_result,failed}}}],
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {group_result,gr_ok_then_fail_result,failed}}},
       {?eh,test_stats,{19,1,{0,3}}},
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {group_result,gr_ok_then_fail_result,failed}}},
       {?eh,test_stats,{19,1,{0,4}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_4,
		      [{repeat_until_any_fail,2},sequence]},ok}}],

      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_5,
		      [{repeat_until_any_fail,3},sequence]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_then_fail_init,[]},ok}}],
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_2,[]},ok}}],
       {?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
       {?eh,test_stats,{23,1,{0,4}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_5,
		      [{repeat_until_any_fail,3},sequence]},ok}}],
      [{?eh,tc_done,{repeat_1_SUITE,
		     {init_per_group,repeat_seq_until_any_fail_5,
		      [{repeat_until_any_fail,2},sequence]},ok}},
       [{?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
       [{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,gr_ok_then_fail_init,[]},
		      {failed,{error,failing_this_time}}}},
	{?eh,test_stats,{24,1,{0,5}}},
	{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			   {failed,{repeat_1_SUITE,init_per_group,
				    {'EXIT',failing_this_time}}}}}],
       {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			  {group_result,gr_ok_then_fail_init,failed}}},
       {?eh,test_stats,{24,1,{0,6}}},
      {?eh,tc_auto_skip,{repeat_1_SUITE,tc_ok_1,
			 {group_result,gr_ok_then_fail_init,failed}}},
       {?eh,test_stats,{24,1,{0,7}}},
       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_seq_until_any_fail_5,
		      [{repeat_until_any_fail,2},sequence]},ok}}],
      {?eh,tc_done,{repeat_1_SUITE,
		    {end_per_group,repeat_seq_until_any_fail,[]},ok}}],

     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}];

%%! Note that when testing shuffled groups, ct_test_support expects
%%! both the start and done event for cases and init/end_per_group
test_events(repeat_shuffled_seq_until_any_fail) ->
    [{?eh,start_logging,{'DEF','RUNDIR'}},
     {?eh,test_start,{'DEF',{'START_TIME','LOGDIR'}}},
     {?eh,start_info,{1,1,unknown}},

     [{?eh,tc_done,{repeat_1_SUITE,
		    {init_per_group,repeat_shuffled_seq_until_any_fail,[]},
		    ok}},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_1,
			[{shuffle,'_'},sequence,
			 {repeat_until_any_fail,2}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [{shuffle,'_'},sequence,
			{repeat_until_any_fail,2}]},ok}},
	{?eh,test_stats,{2,0,{0,0}}},
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_1,
			[sequence,shuffle,{repeat_until_any_fail,2}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [sequence,shuffle,{repeat_until_any_fail,2}]},ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_1,
			[{shuffle,'_'},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [{shuffle,'_'},sequence]},ok}},
	{?eh,test_stats,{4,0,{0,0}}},
	{?eh,tc_start,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [{shuffle,repeated},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_1,
		       [{shuffle,repeated},sequence]},ok}}]},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,2},sequence]},
		      ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	{?eh,test_stats,{7,0,{0,0}}},
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_2,
			[{repeat_until_any_fail,2},{shuffle,{1,2,3}},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{repeat_until_any_fail,2},{shuffle,{1,2,3}},sequence]},
		      ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_2,
			[{shuffle,'_'},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{shuffle,'_'},sequence]},ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_2,
			[{shuffle,repeated},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_2,
		       [{shuffle,repeated},sequence]},ok}}]},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,'_'},sequence,
			{repeat_until_any_fail,3}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,'_'},sequence,
			{repeat_until_any_fail,3}]},ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_2}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_2,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	{?eh,test_stats,{14,0,{0,0}}},
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_3,
			[shuffle,sequence,{repeat_until_any_fail,3}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [shuffle,sequence,{repeat_until_any_fail,3}]},ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,'_'},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,'_'},{repeat_until_any_fail,2},sequence]},
		      ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_then_fail_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_then_fail_1,
		      {failed,{error,failing_this_time}}}},
	{?eh,tc_start,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,repeated},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_3,
		       [{shuffle,repeated},{repeat_until_any_fail,2},sequence]},
		      ok}}]},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,3},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,3},sequence]},
		      ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,
					gr_ok_then_fail_result,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,
				       gr_ok_then_fail_result,[]},ok}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_4,
			[{repeat_until_any_fail,3},sequence,{shuffle,{1,2,3}}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{repeat_until_any_fail,3},sequence,{shuffle,{1,2,3}}]},
		      ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_4,
			[{shuffle,'_'},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{shuffle,'_'},{repeat_until_any_fail,2},sequence]},
		      ok}},
	[{?eh,tc_start,{repeat_1_SUITE,
			{end_per_group,gr_ok_then_fail_result,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,
		       {end_per_group,gr_ok_then_fail_result,[]},
		       {return_group_result,failed}}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_4,
			[{shuffle,repeated},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_4,
		       [{shuffle,repeated},{repeat_until_any_fail,2},sequence]},
		      ok}}]},

      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		       {init_per_group,repeat_shuffled_seq_until_any_fail_5,
			[{shuffle,{1,2,3}},{repeat_until_any_fail,3},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{shuffle,{1,2,3}},{repeat_until_any_fail,3},sequence]},
		      ok}},
	{?eh,tc_start,{repeat_1_SUITE,tc_ok_1}},
	{?eh,tc_done,{repeat_1_SUITE,tc_ok_1,ok}},
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_1,[]},ok}}],
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,gr_ok_2,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,gr_ok_2,[]},ok}}],
	[{?eh,tc_start,{repeat_1_SUITE,{end_per_group,
					gr_ok_then_fail_init,[]}}},
	 {?eh,tc_done,{repeat_1_SUITE,{end_per_group,
				       gr_ok_then_fail_init,[]},ok}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_5,
			[{repeat_until_any_fail,3},sequence,{shuffle,{1,2,3}}]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{repeat_until_any_fail,3},sequence,{shuffle,{1,2,3}}]},
		      ok}}]},
      {shuffle,
       [{?eh,tc_start,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{shuffle,'_'},{repeat_until_any_fail,2},
			sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {init_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{shuffle,'_'},{repeat_until_any_fail,2},
			sequence]},ok}},
	[{?eh,tc_auto_skip,{repeat_1_SUITE,end_per_group,
			    {failed,{repeat_1_SUITE,init_per_group,
				     {'EXIT',failing_this_time}}}}}],
	{?eh,tc_start,{repeat_1_SUITE,
		       {end_per_group,repeat_shuffled_seq_until_any_fail_5,
			[{shuffle,repeated},{repeat_until_any_fail,2},sequence]}}},
	{?eh,tc_done,{repeat_1_SUITE,
		      {end_per_group,repeat_shuffled_seq_until_any_fail_5,
		       [{shuffle,repeated},{repeat_until_any_fail,2},sequence]},
		      ok}}]},

       {?eh,tc_done,{repeat_1_SUITE,
		     {end_per_group,repeat_shuffled_seq_until_any_fail,[]},
		     ok}}],
     {?eh,test_done,{'DEF','STOP_TIME'}},
     {?eh,stop_logging,[]}].