Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 15163a8

Browse files
committed
Resolved issue with sorting of nested-tables.
Added `seq_no`, numbering before storage and sorting after retrieval.
1 parent 1611e09 commit 15163a8

3 files changed

Lines changed: 59 additions & 43 deletions

File tree

source/core/types/ut_executable.tps

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,10 @@ create or replace type ut_executable under ut_event_item(
2525
error_backtrace varchar2(4000),
2626
error_stack varchar2(4000),
2727
serveroutput clob,
28+
/**
29+
* Used for ordering of executables, as Oracle doesn not guarantee ordering of items in a nested table.
30+
*/
31+
seq_no integer,
2832
constructor function ut_executable( self in out nocopy ut_executable, a_owner varchar2, a_package varchar2, a_procedure_name varchar2, a_executable_type varchar2) return self as result,
2933
member function form_name return varchar2,
3034
member procedure do_execute(self in out nocopy ut_executable, a_item in out nocopy ut_suite_item),

source/core/ut_suite_builder.pkb

Lines changed: 55 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -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 );

test/api/test_ut_run.pks

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@ create or replace package test_ut_run is
2424
--%test(Runs all tests in current schema with coverage file list)
2525
procedure run_proc_cov_file_list;
2626

27-
--%disabled(TODO - currently it executes the package and all child packages)
2827
--%test(Runs given package only with package name given as path)
2928
procedure run_proc_pkg_name;
3029
--%test(Runs all from given package with package name given as path and coverage file list)
@@ -57,7 +56,6 @@ create or replace package test_ut_run is
5756
--%test(Runs all tests in current schema with coverage file list)
5857
procedure run_func_cov_file_list;
5958

60-
--%disabled(TODO - currently it executes the package and all child packages)
6159
--%test(Runs given package only with package name given as path)
6260
procedure run_func_pkg_name;
6361
--%test(Runs all from given package with package name given as path and coverage file list)

0 commit comments

Comments
 (0)