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

Skip to content

Commit 39882f1

Browse files
authored
Merge pull request #677 from AlexisGaldamez/allow_multi_before_after_procedures
Allow before/after annotations to accept list of [[owner.]package.]procedure
2 parents 2d80c80 + b64449b commit 39882f1

9 files changed

Lines changed: 417 additions & 41 deletions

source/core/types/ut_executable.tpb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,11 @@ create or replace type body ut_executable is
1818

1919
constructor function ut_executable(
2020
self in out nocopy ut_executable, a_owner varchar2, a_package varchar2,
21-
a_procedure_name varchar2, a_associated_event_name varchar2
21+
a_procedure_name varchar2, a_executable_type varchar2
2222
) return self as result is
2323
begin
2424
self.self_type := $$plsql_unit;
25-
self.associated_event_name := a_associated_event_name;
25+
self.executable_type := a_executable_type;
2626
self.owner_name := a_owner;
2727
self.object_name := a_package;
2828
self.procedure_name := a_procedure_name;
@@ -31,7 +31,7 @@ create or replace type body ut_executable is
3131

3232
member function is_defined(self in out nocopy ut_executable) return boolean is
3333
l_result boolean := false;
34-
l_message_part varchar2(4000) := 'Call params for ' || self.associated_event_name || ' are not valid: ';
34+
l_message_part varchar2(4000) := 'Call params for ' || self.executable_type || ' are not valid: ';
3535
begin
3636

3737
if self.object_name is null then
@@ -50,7 +50,7 @@ create or replace type body ut_executable is
5050
**/
5151
member function is_invalid(self in out nocopy ut_executable) return boolean is
5252
l_result boolean := true;
53-
l_message_part varchar2(4000) := 'Call params for ' || self.associated_event_name || ' are not valid: ';
53+
l_message_part varchar2(4000) := 'Call params for ' || self.executable_type || ' are not valid: ';
5454
begin
5555

5656
if not ut_metadata.package_valid(self.owner_name, self.object_name) then
@@ -109,7 +109,7 @@ create or replace type body ut_executable is
109109
ut_utils.set_client_info(self.procedure_name);
110110

111111
--listener - before call to executable
112-
ut_event_manager.trigger_event('before_'||self.associated_event_name, self);
112+
ut_event_manager.trigger_event('before_'||self.executable_type, self);
113113

114114
l_completed_without_errors := self.is_defined();
115115
if l_completed_without_errors then
@@ -168,7 +168,7 @@ create or replace type body ut_executable is
168168
end if;
169169

170170
--listener - after call to executable
171-
ut_event_manager.trigger_event('after_'||self.associated_event_name, self);
171+
ut_event_manager.trigger_event('after_'||self.executable_type, self);
172172

173173
l_end_transaction_id := dbms_transaction.local_transaction_id();
174174
if l_start_transaction_id != l_end_transaction_id or l_end_transaction_id is null then

source/core/types/ut_executable.tps

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,14 @@ create or replace type ut_executable under ut_event_item(
1818
/**
1919
* The name of the event to be executed before and after the executable is invoked
2020
*/
21-
associated_event_name varchar2(250 char),
21+
executable_type varchar2(250 char),
2222
owner_name varchar2(250 char),
2323
object_name varchar2(250 char),
2424
procedure_name varchar2(250 char),
2525
error_backtrace varchar2(4000),
2626
error_stack varchar2(4000),
2727
serveroutput clob,
28-
constructor function ut_executable( self in out nocopy ut_executable, a_owner varchar2, a_package varchar2, a_procedure_name varchar2, a_associated_event_name varchar2) return self as result,
28+
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,
2929
member function is_invalid(self in out nocopy ut_executable) return boolean,
3030
member function is_defined(self in out nocopy ut_executable) return boolean,
3131
member function form_name return varchar2,

source/core/types/ut_executable_test.tpb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,11 @@
11
create or replace type body ut_executable_test as
22
constructor function ut_executable_test(
33
self in out nocopy ut_executable_test, a_owner varchar2, a_package varchar2,
4-
a_procedure_name varchar2, a_associated_event_name varchar2
4+
a_procedure_name varchar2, a_executable_type varchar2
55
) return self as result is
66
begin
77
self.self_type := $$plsql_unit;
8-
self.associated_event_name := a_associated_event_name;
8+
self.executable_type := a_executable_type;
99
self.owner_name := a_owner;
1010
self.object_name := a_package;
1111
self.procedure_name := a_procedure_name;

source/core/types/ut_executable_test.tps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ create or replace type ut_executable_test authid current_user under ut_executabl
1717
*/
1818
constructor function ut_executable_test(
1919
self in out nocopy ut_executable_test, a_owner varchar2, a_package varchar2,
20-
a_procedure_name varchar2, a_associated_event_name varchar2
20+
a_procedure_name varchar2, a_executable_type varchar2
2121
) return self as result,
2222

2323
member procedure do_execute(

source/core/ut_suite_builder.pkb

Lines changed: 34 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,7 @@ create or replace package body ut_suite_builder is
6565
);
6666

6767
--holds a list of package and procedure level annotations indexed (order) by position.
68-
--procedure level annotations are grouped under procedure name
68+
--procedure level annotations are grouped under procedure name
6969
type tt_package_annotations is table of t_package_annotation index by t_annotation_position;
7070

7171
--holds all annotations for object
@@ -358,14 +358,39 @@ create or replace package body ut_suite_builder is
358358
a_annotation_texts tt_annotation_texts,
359359
a_event_name ut_utils.t_event_name
360360
) is
361+
l_string_buffer varchar2(32767);
361362
l_annotation_pos binary_integer;
362-
begin
363-
l_annotation_pos := a_annotation_texts.first;
364-
while l_annotation_pos is not null loop
365-
add_to_list(a_executables, a_owner, a_package_name, a_annotation_texts(l_annotation_pos), a_event_name );
366-
l_annotation_pos := a_annotation_texts.next( l_annotation_pos);
367-
end loop;
368-
end;
363+
l_procedures_list ut_varchar2_list;
364+
l_procedures_pos binary_integer;
365+
l_components_list ut_varchar2_list;
366+
begin
367+
l_annotation_pos := a_annotation_texts.first;
368+
while l_annotation_pos is not null loop
369+
l_string_buffer := l_string_buffer||','||a_annotation_texts(l_annotation_pos);
370+
l_annotation_pos := a_annotation_texts.next(l_annotation_pos);
371+
end loop;
372+
373+
l_procedures_list := ut_utils.trim_list_elements(ut_utils.string_to_table(l_string_buffer, ','));
374+
l_procedures_list := ut_utils.filter_list(l_procedures_list, '[[:alpha:]]+');
375+
376+
l_procedures_pos := l_procedures_list.first;
377+
while l_procedures_pos is not null loop
378+
l_components_list := ut_utils.string_to_table(l_procedures_list(l_procedures_pos), '.');
379+
380+
case(l_components_list.count())
381+
when 1 then
382+
add_to_list(a_executables, a_owner, a_package_name, l_components_list(1), a_event_name );
383+
when 2 then
384+
add_to_list(a_executables, a_owner, l_components_list(1), l_components_list(2), a_event_name );
385+
when 3 then
386+
add_to_list(a_executables, l_components_list(1), l_components_list(2), l_components_list(3), a_event_name );
387+
else
388+
null;
389+
end case;
390+
391+
l_procedures_pos := l_procedures_list.next(l_procedures_pos);
392+
end loop;
393+
end;
369394

370395
procedure warning_on_duplicate_annot(
371396
a_suite in out nocopy ut_suite_item,
@@ -520,7 +545,7 @@ create or replace package body ut_suite_builder is
520545
warning_on_duplicate_annot(a_suite, a_procedure_name, a_proc_annotations, gc_beforeeach);
521546
warning_on_duplicate_annot(a_suite, a_procedure_name, a_proc_annotations, gc_afterall);
522547
warning_on_duplicate_annot(a_suite, a_procedure_name, a_proc_annotations, gc_aftereach);
523-
548+
524549
if a_proc_annotations.exists(gc_test) then
525550
add_test( a_suite, a_procedure_name, a_proc_annotations);
526551

source/core/ut_utils.pks

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,32 +27,32 @@ create or replace package ut_utils authid definer is
2727
subtype t_event_name is varchar2(30);
2828
gc_before_run constant t_event_name := 'before_run';
2929
gc_before_suite constant t_event_name := 'before_suite';
30-
gc_before_before_all constant t_event_name := 'before_before_all';
31-
gc_before_before_each constant t_event_name := 'before_before_each';
32-
gc_before_before_test constant t_event_name := 'before_before_test';
33-
gc_before_test_execute constant t_event_name := 'before_test_execute';
34-
gc_before_after_test constant t_event_name := 'before_after_test';
35-
gc_before_after_each constant t_event_name := 'before_after_each';
36-
gc_before_after_all constant t_event_name := 'before_after_all';
30+
gc_before_before_all constant t_event_name := 'before_beforeall';
31+
gc_before_before_each constant t_event_name := 'before_beforeeach';
32+
gc_before_before_test constant t_event_name := 'before_beforetest';
33+
gc_before_test_execute constant t_event_name := 'before_test';
34+
gc_before_after_test constant t_event_name := 'before_aftertest';
35+
gc_before_after_each constant t_event_name := 'before_aftereach';
36+
gc_before_after_all constant t_event_name := 'before_afterall';
3737
gc_after_run constant t_event_name := 'after_run';
3838
gc_after_suite constant t_event_name := 'after_suite';
39-
gc_after_before_all constant t_event_name := 'after_before_all';
40-
gc_after_before_each constant t_event_name := 'after_before_each';
41-
gc_after_before_test constant t_event_name := 'after_before_test';
42-
gc_after_test_execute constant t_event_name := 'after_test_execute';
43-
gc_after_after_test constant t_event_name := 'after_after_test';
44-
gc_after_after_each constant t_event_name := 'after_after_each';
45-
gc_after_after_all constant t_event_name := 'after_after_all';
39+
gc_after_before_all constant t_event_name := 'after_beforeall';
40+
gc_after_before_each constant t_event_name := 'after_beforeeach';
41+
gc_after_before_test constant t_event_name := 'after_beforetest';
42+
gc_after_test_execute constant t_event_name := 'after_test';
43+
gc_after_after_test constant t_event_name := 'after_aftertest';
44+
gc_after_after_each constant t_event_name := 'after_aftereach';
45+
gc_after_after_all constant t_event_name := 'after_afterall';
4646
gc_finalize constant t_event_name := 'finalize';
4747

4848
subtype t_executable_type is varchar2(30);
49-
gc_before_all constant t_executable_type := 'before_all';
50-
gc_before_each constant t_executable_type := 'before_each';
51-
gc_before_test constant t_executable_type := 'before_test';
52-
gc_test_execute constant t_executable_type := 'test_execute';
53-
gc_after_test constant t_executable_type := 'after_test';
54-
gc_after_each constant t_executable_type := 'after_each';
55-
gc_after_all constant t_executable_type := 'after_all';
49+
gc_before_all constant t_executable_type := 'beforeall';
50+
gc_before_each constant t_executable_type := 'beforeeach';
51+
gc_before_test constant t_executable_type := 'beforetest';
52+
gc_test_execute constant t_executable_type := 'test';
53+
gc_after_test constant t_executable_type := 'aftertest';
54+
gc_after_each constant t_executable_type := 'aftereach';
55+
gc_after_all constant t_executable_type := 'afterall';
5656

5757
/* Constants: Test Results */
5858
subtype t_test_result is binary_integer range 0 .. 3;

0 commit comments

Comments
 (0)