@@ -65,9 +65,6 @@ create or replace package body ut_suite_builder is
6565
6666 type tt_executables is table of ut_executables index by t_annotation_position;
6767
68- type tt_tests is table of ut_test index by t_annotation_position;
69-
70-
7168 type t_annotation is record(
7269 name t_annotation_name,
7370 text t_annotation_text,
@@ -315,35 +312,46 @@ create or replace package body ut_suite_builder is
315312 end loop;
316313 end;
317314
318- function convert_list(
319- a_list tt_executables
315+ procedure set_seq_no(
316+ a_list in out nocopy ut_executables
317+ ) is
318+ begin
319+ if a_list is not null then
320+ for i in 1 .. a_list.count loop
321+ a_list(i).seq_no := i;
322+ end loop;
323+ end if;
324+ end;
325+
326+ function sort_by_seq_no(
327+ a_list ut_executables
320328 ) return ut_executables is
321- l_result ut_executables := ut_executables();
322- l_pos t_annotation_position := a_list.first;
323- begin
324- while l_pos is not null loop
325- for i in 1 .. a_list(l_pos).count loop
326- l_result.extend;
327- l_result(l_result.last) := a_list(l_pos)(i);
328- end loop;
329- l_pos := a_list.next(l_pos);
329+ l_results ut_executables := ut_executables();
330+ begin
331+ if a_list is not null then
332+ l_results.extend(a_list.count);
333+ for i in 1 .. a_list.count loop
334+ l_results(a_list(i).seq_no) := a_list(i);
330335 end loop;
331- return l_result;
332- end;
336+ end if;
337+ return l_results;
338+ end;
333339
334340 function convert_list(
335- a_list tt_tests
336- ) return ut_suite_items is
337- l_result ut_suite_items := ut_suite_items ();
341+ a_list tt_executables
342+ ) return ut_executables is
343+ l_result ut_executables := ut_executables ();
338344 l_pos t_annotation_position := a_list.first;
339- begin
340- while l_pos is not null loop
345+ begin
346+ while l_pos is not null loop
347+ for i in 1 .. a_list(l_pos).count loop
341348 l_result.extend;
342- l_result(l_result.last) := a_list(l_pos);
343- l_pos := a_list.next(l_pos);
349+ l_result(l_result.last) := a_list(l_pos)(i);
344350 end loop;
345- return l_result;
346- end;
351+ l_pos := a_list.next(l_pos);
352+ end loop;
353+ return l_result;
354+ end;
347355
348356 function add_executables(
349357 a_owner t_object_name,
@@ -492,11 +500,13 @@ create or replace package body ut_suite_builder is
492500 l_test.before_test_list := convert_list(
493501 add_executables( l_test.object_owner, l_test.object_name, l_proc_annotations( gc_beforetest ), gc_beforetest )
494502 );
503+ set_seq_no(l_test.before_test_list);
495504 end if;
496505 if l_proc_annotations.exists( gc_aftertest) then
497506 l_test.after_test_list := convert_list(
498507 add_executables( l_test.object_owner, l_test.object_name, l_proc_annotations( gc_aftertest ), gc_aftertest )
499508 );
509+ set_seq_no(l_test.after_test_list);
500510 end if;
501511 if l_proc_annotations.exists( gc_throws) then
502512 add_to_throws_numbers_list(a_suite, l_test.expected_error_codes, a_procedure_name, l_proc_annotations( gc_throws));
@@ -519,8 +529,10 @@ create or replace package body ut_suite_builder is
519529 for i in 1 .. a_suite.items.count loop
520530 if a_suite.items(i) is of (ut_test) then
521531 l_test := treat( a_suite.items(i) as ut_test);
522- l_test.before_each_list := coalesce(convert_list(a_before_each_list),ut_executables()) multiset union all l_test.before_each_list;
523- l_test.after_each_list := l_test.after_each_list multiset union all coalesce(convert_list(a_after_each_list),ut_executables());
532+ l_test.before_each_list := convert_list(a_before_each_list) multiset union all l_test.before_each_list;
533+ set_seq_no(l_test.before_each_list);
534+ l_test.after_each_list := l_test.after_each_list multiset union all convert_list(a_after_each_list);
535+ set_seq_no(l_test.after_each_list);
524536 a_suite.items(i) := l_test;
525537 elsif a_suite.items(i) is of (ut_logical_suite) then
526538 l_context := treat(a_suite.items(i) as ut_logical_suite);
@@ -543,8 +555,10 @@ create or replace package body ut_suite_builder is
543555 for i in 1 .. a_suite_items.count loop
544556 if a_suite_items(i) is of (ut_test) then
545557 l_test := treat( a_suite_items(i) as ut_test);
546- l_test.before_each_list := coalesce(convert_list(a_before_each_list),ut_executables()) multiset union all l_test.before_each_list;
547- l_test.after_each_list := l_test.after_each_list multiset union all coalesce(convert_list(a_after_each_list),ut_executables());
558+ l_test.before_each_list := convert_list(a_before_each_list) multiset union all l_test.before_each_list;
559+ set_seq_no(l_test.before_each_list);
560+ l_test.after_each_list := l_test.after_each_list multiset union all convert_list(a_after_each_list);
561+ set_seq_no(l_test.after_each_list);
548562 a_suite_items(i) := l_test;
549563 elsif a_suite_items(i) is of (ut_logical_suite) then
550564 l_context := treat(a_suite_items(i) as ut_logical_suite);
@@ -580,8 +594,6 @@ create or replace package body ut_suite_builder is
580594 a_after_all_list in out nocopy tt_executables
581595 ) is
582596 l_procedure_name t_object_name;
583- l_tests tt_tests;
584-
585597 begin
586598 l_procedure_name := a_proc_annotations.by_proc.first;
587599 while l_procedure_name is not null loop
@@ -679,7 +691,9 @@ create or replace package body ut_suite_builder is
679691 a_suite.set_rollback_type(l_rollback_type);
680692 propagate_before_after_each( a_suite_items, l_before_each_list, l_after_each_list);
681693 a_suite.before_all_list := convert_list(l_before_all_list);
694+ set_seq_no(a_suite.before_all_list);
682695 a_suite.after_all_list := convert_list(l_after_all_list);
696+ set_seq_no(a_suite.after_all_list);
683697 end;
684698
685699 function get_endcontext_position(
@@ -943,9 +957,9 @@ create or replace package body ut_suite_builder is
943957 line_no => l_rows(i).line_no, parse_time => l_rows(i).parse_time,
944958 start_time => null, end_time => null, result => null, warnings => l_rows(i).warnings,
945959 results_count => ut_results_counter(), transaction_invalidators => ut_varchar2_list(),
946- before_each_list => l_rows(i).before_each_list, before_test_list => l_rows(i).before_test_list,
960+ before_each_list => sort_by_seq_no( l_rows(i).before_each_list) , before_test_list => sort_by_seq_no( l_rows(i).before_test_list) ,
947961 item => l_rows(i).item,
948- after_test_list => l_rows(i).after_test_list, after_each_list => l_rows(i).after_each_list,
962+ after_test_list => sort_by_seq_no( l_rows(i).after_test_list) , after_each_list => sort_by_seq_no( l_rows(i).after_each_list) ,
949963 all_expectations => ut_expectation_results(), failed_expectations => ut_expectation_results(),
950964 parent_error_stack_trace => null, expected_error_codes => l_rows(i).expected_error_codes
951965 );
@@ -960,7 +974,7 @@ create or replace package body ut_suite_builder is
960974 start_time => null, end_time => null, result => null, warnings => l_rows(i).warnings,
961975 results_count => ut_results_counter(), transaction_invalidators => ut_varchar2_list(),
962976 items => ut_suite_items(),
963- before_all_list => l_rows(i).before_all_list, after_all_list => l_rows(i).after_all_list
977+ before_all_list => sort_by_seq_no( l_rows(i).before_all_list) , after_all_list => sort_by_seq_no( l_rows(i).after_all_list)
964978 );
965979 when 'UT_SUITE_CONTEXT' then
966980 l_logical_suites(i) :=
@@ -973,7 +987,7 @@ create or replace package body ut_suite_builder is
973987 start_time => null, end_time => null, result => null, warnings => l_rows(i).warnings,
974988 results_count => ut_results_counter(), transaction_invalidators => ut_varchar2_list(),
975989 items => ut_suite_items(),
976- before_all_list => l_rows(i).before_all_list, after_all_list => l_rows(i).after_all_list
990+ before_all_list => sort_by_seq_no( l_rows(i).before_all_list) , after_all_list => sort_by_seq_no( l_rows(i).after_all_list)
977991 );
978992 when 'UT_LOGICAL_SUITE' then
979993 l_logical_suites(i) :=
@@ -1054,7 +1068,7 @@ create or replace package body ut_suite_builder is
10541068 suite_items as (
10551069 select c.*
10561070 from ]'||l_ut_owner||q'[.ut_suite_cache c
1057- where 1 = 1 ]'||case when not a_skip_all_objects /*1 = 0*/ then q'[
1071+ where 1 = 1 ]'||case when not a_skip_all_objects then q'[
10581072 and exists
10591073 ( select 1
10601074 from all_objects a
@@ -1226,11 +1240,11 @@ create or replace package body ut_suite_builder is
12261240 from '||l_ut_owner||q'[.ut_suite_cache_package c
12271241 join table ( :a_schema_names ) s
12281242 on c.object_owner = upper(s.column_value)
1229- -- where exists
1230- -- (select 1 from all_objects a
1231- -- where a.owner = c.object_owner
1232- -- and a.object_name = c.object_name
1233- -- and a.object_type = 'PACKAGE')
1243+ where exists
1244+ (select 1 from all_objects a
1245+ where a.owner = c.object_owner
1246+ and a.object_name = c.object_name
1247+ and a.object_type = 'PACKAGE')
12341248 ]'
12351249 bulk collect into l_schema_names, l_object_names using a_schema_names;
12361250 l_results.extend( l_schema_names.count );
0 commit comments