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

Skip to content

Commit 4b1b0d9

Browse files
committed
Moved the functionality to build the assert result text from documentation_reporter to ut_assert_result.
Added more comments in code. Renamed some attributes to better indicate the actual meaning. Added constants for event names.
1 parent 21b0fb0 commit 4b1b0d9

11 files changed

Lines changed: 186 additions & 87 deletions
Lines changed: 71 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,19 @@
11
create or replace type body ut_assert_result is
22

3-
constructor function ut_assert_result(self in out nocopy ut_assert_result, a_result integer, a_error_message varchar2, a_name varchar2 default null)
3+
constructor function ut_assert_result(self in out nocopy ut_assert_result, a_result integer, a_error_message varchar2)
44
return self as result is
55
begin
6-
self.name := a_name;
76
self.result := a_result;
87
self.error_message := a_error_message;
98
self.caller_info := ut_assert_processor.who_called_expectation();
109
return;
11-
end ut_assert_result;
10+
end;
1211

1312
constructor function ut_assert_result(self in out nocopy ut_assert_result, a_name varchar2, a_additional_info varchar2, a_error_message varchar2, a_result integer, a_expected_type varchar2, a_actual_type varchar2,
1413
a_expected_value_string varchar2, a_actual_value_string varchar2, a_message varchar2 default null)
1514
return self as result is
1615
begin
17-
self.name := a_name;
16+
self.matcher_name := a_name;
1817
self.additional_info := a_additional_info;
1918
self.result := a_result;
2019
self.message := a_message;
@@ -27,7 +26,74 @@ create or replace type body ut_assert_result is
2726
self.caller_info := ut_assert_processor.who_called_expectation();
2827
end if;
2928
return;
30-
end ut_assert_result;
29+
end;
3130

31+
member function get_result_clob(self in ut_assert_result) return clob is
32+
l_result clob;
33+
l_actual_val_msg varchar2(1000);
34+
l_actual_val varchar2(32767);
35+
l_expected_msg varchar2(1000);
36+
l_expected_val varchar2(32767);
37+
38+
procedure add_text_line(a_clob in out nocopy clob, a_prefix varchar2, a_text varchar2 := null) is
39+
l_text varchar2(32767);
40+
begin
41+
if a_text is not null then
42+
l_text := a_prefix || ut_utils.indent_lines( a_text, length(a_prefix) );
43+
else
44+
l_text := a_prefix;
45+
end if;
46+
if a_clob is not null and l_text is not null then
47+
l_text := chr(10) || l_text;
48+
end if;
49+
if l_text is not null then
50+
dbms_lob.writeappend(a_clob, length(l_text), l_text);
51+
end if;
52+
end;
53+
begin
54+
dbms_lob.createtemporary(l_result, true);
55+
if self.result != ut_utils.tr_success or self.error_message is not null then
56+
if self.message is not null then
57+
add_text_line(l_result, ' expectation description: ', self.message);
58+
end if;
59+
60+
if self.result != ut_utils.tr_success then
61+
if self.actual_value_string is not null or self.actual_type is not null then
62+
l_actual_val_msg := ' expected (actual value): ';
63+
l_actual_val := self.actual_value_string || '(' || self.actual_type || ')';
64+
end if;
65+
66+
l_expected_msg := ' '||self.matcher_name || self.additional_info;
67+
if self.expected_value_string is not null or self.expected_type is not null then
68+
l_expected_msg := l_expected_msg || ' (expected value): ';
69+
l_expected_val := self.expected_value_string||'('||self.expected_type||')';
70+
if length(l_expected_msg) > length(l_actual_val_msg) then
71+
l_actual_val_msg := rpad(l_actual_val_msg , length(l_expected_msg));
72+
else
73+
l_expected_msg := rpad(l_expected_msg , length(l_actual_val_msg));
74+
end if;
75+
end if;
76+
add_text_line(l_result, l_actual_val_msg, l_actual_val);
77+
add_text_line(l_result, l_expected_msg, l_expected_val);
78+
end if;
79+
80+
end if;
81+
if self.error_message is not null then
82+
add_text_line(l_result, ' error: '||ut_utils.indent_lines( self.error_message, length(' error: ') ) );
83+
end if;
84+
85+
if l_result is not null and self.caller_info is not null then
86+
add_text_line(l_result, self.caller_info);
87+
end if;
88+
if length(l_result) > 0 then
89+
add_text_line(l_result,' '||chr(10));
90+
end if;
91+
return l_result;
92+
end;
93+
94+
member function get_result_lines(self in ut_assert_result) return ut_varchar2_list is
95+
begin
96+
return ut_utils.clob_to_table(get_result_clob(), 4000 );
97+
end;
3298
end;
3399
/
Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,54 @@
11
create or replace type ut_assert_result as object
22
(
3-
name varchar2(250 char),
3+
/*
4+
* name of the matcher that was used to check the expectation
5+
*/
6+
matcher_name varchar2(250 char),
7+
/*
8+
* The expectation result
9+
*/
410
result integer(1),
11+
/*
12+
* Additional information about the expression used by matcher
13+
* Used for complex matcher: like, between, match etc.
14+
*/
515
additional_info varchar2(4000 char),
16+
/*
17+
* Data type name for the expected value
18+
*/
619
expected_type varchar2(250 char),
20+
/*
21+
* Data type name for the actual value
22+
*/
723
actual_type varchar2(250 char),
24+
/*
25+
* String representation of expected value
26+
*/
827
expected_value_string varchar2(4000 char),
28+
/*
29+
* String representation of actual value
30+
*/
931
actual_value_string varchar2(4000 char),
32+
/*
33+
* User message (description) provided with the expectation
34+
*/
1035
message varchar2(4000 char),
36+
/*
37+
* Error message that was captured.
38+
*/
1139
error_message varchar2(4000 char),
40+
/*
41+
* The information about the line of code that invoked the expectation
42+
*/
1243
caller_info varchar2(4000 char),
13-
constructor function ut_assert_result(self in out nocopy ut_assert_result, a_result integer, a_error_message varchar2, a_name varchar2 default null)
44+
constructor function ut_assert_result(self in out nocopy ut_assert_result, a_result integer, a_error_message varchar2)
1445
return self as result,
1546
constructor function ut_assert_result(self in out nocopy ut_assert_result, a_name varchar2, a_additional_info varchar2, a_error_message varchar2,
1647
a_result integer, a_expected_type varchar2, a_actual_type varchar2,
1748
a_expected_value_string varchar2, a_actual_value_string varchar2, a_message varchar2 default null)
18-
return self as result
49+
return self as result,
50+
member function get_result_clob(self in ut_assert_result) return clob,
51+
member function get_result_lines(self in ut_assert_result) return ut_varchar2_list
1952
)
2053
not final
2154
/

source/core/types/ut_executable.tpb

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@ create or replace type body ut_executable is
22

33
constructor function ut_executable(
44
self in out nocopy ut_executable, a_context ut_suite_item,
5-
a_procedure_name varchar2, a_executable_type varchar2
5+
a_procedure_name varchar2, a_associated_event_name varchar2
66
) return self as result is
77
begin
8-
self.executable_type := a_executable_type;
8+
self.associated_event_name := a_associated_event_name;
99
self.owner_name := a_context.object_owner;
1010
self.object_name := a_context.object_name;
1111
self.procedure_name := a_procedure_name;
@@ -23,24 +23,24 @@ create or replace type body ut_executable is
2323

2424
if self.object_name is null then
2525
l_result := false;
26-
ut_assert_processor.report_error('Call params for ' || self.executable_type || ' are not valid: package is not defined');
26+
ut_assert_processor.report_error('Call params for ' || self.associated_event_name || ' are not valid: package is not defined');
2727
end if;
2828

2929
if self.procedure_name is null then
3030
l_result := false;
31-
ut_assert_processor.report_error('Call params for ' || self.executable_type || ' are not valid: procedure is not defined');
31+
ut_assert_processor.report_error('Call params for ' || self.associated_event_name || ' are not valid: procedure is not defined');
3232
end if;
3333

3434
if l_result and not ut_metadata.package_valid(self.owner_name, self.object_name) then
3535
l_result := false;
36-
ut_assert_processor.report_error('Call params for ' || self.executable_type ||
36+
ut_assert_processor.report_error('Call params for ' || self.associated_event_name ||
3737
' are not valid: package does not exist or is invalid: ' ||
3838
nvl(self.object_name, '<missing package name>'));
3939
end if;
4040

4141
if l_result and not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.procedure_name) then
4242
l_result := false;
43-
ut_assert_processor.report_error('Call params for ' || self.executable_type || ' are not valid: package missing ' ||
43+
ut_assert_processor.report_error('Call params for ' || self.associated_event_name || ' are not valid: package missing ' ||
4444
' procedure ' || self.object_name || '.' ||
4545
nvl(self.procedure_name, '<missing procedure name>'));
4646
end if;
@@ -85,7 +85,7 @@ create or replace type body ut_executable is
8585
begin
8686
if self.is_defined() then
8787
--listener - before call to executable
88-
a_listener.fire_before_event(executable_type, a_item);
88+
a_listener.fire_before_event(self.associated_event_name, a_item);
8989

9090
ut_metadata.do_resolve(a_owner => l_owner, a_object => l_object_name, a_procedure_name => l_procedure_name);
9191

@@ -123,7 +123,7 @@ create or replace type body ut_executable is
123123

124124
l_completed_without_errors := process_errors_from_call(l_error_stack, l_error_backtrace);
125125

126-
a_listener.fire_after_event(executable_type, a_item);
126+
a_listener.fire_after_event(self.associated_event_name, a_item);
127127
--listener - after call to executable
128128
end if;
129129
return l_completed_without_errors;

source/core/types/ut_executable.tps

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
create or replace type ut_executable force as object
22
(
3-
executable_type varchar2(250 char),
4-
owner_name varchar2(250 char),
5-
object_name varchar2(250 char),
6-
procedure_name varchar2(250 char),
7-
constructor function ut_executable( self in out nocopy ut_executable, a_context ut_suite_item, a_procedure_name varchar2, a_executable_type varchar2) return self as result,
3+
/**
4+
* The name of the event to be executed before and after the executable is invoked
5+
*/
6+
associated_event_name varchar2(250 char),
7+
owner_name varchar2(250 char),
8+
object_name varchar2(250 char),
9+
procedure_name varchar2(250 char),
10+
constructor function ut_executable( self in out nocopy ut_executable, a_context ut_suite_item, a_procedure_name varchar2, a_associated_event_name varchar2) return self as result,
811
member function is_valid return boolean,
912
member function is_defined return boolean,
1013
member function form_name return varchar2,

source/core/types/ut_run.tpb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ create or replace type body ut_run as
1818
begin
1919
ut_utils.debug_log('ut_run.execute');
2020

21-
a_listener.fire_before_event('run', self);
21+
a_listener.fire_before_event(ut_utils.gc_run, self);
2222

2323
self.start_time := current_timestamp;
2424

@@ -32,7 +32,7 @@ create or replace type body ut_run as
3232

3333
self.end_time := current_timestamp;
3434

35-
a_listener.fire_after_event('run', self);
35+
a_listener.fire_after_event(ut_utils.gc_run, self);
3636

3737
return l_completed_without_errors;
3838
end;
@@ -54,4 +54,4 @@ create or replace type body ut_run as
5454
end;
5555

5656
end;
57-
/
57+
/

source/core/types/ut_suite.tpb

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@ create or replace type body ut_suite as
77
) return self as result is
88
begin
99
self.init(a_object_owner, a_object_name, a_name, a_description, a_path, a_rollback_type, a_ignore_flag);
10-
self.before_all := ut_executable(self, a_before_all_proc_name, 'before_all');
11-
self.before_each := ut_executable(self, a_before_each_proc_name, 'before_each');
10+
self.before_all := ut_executable(self, a_before_all_proc_name, ut_utils.gc_before_all);
11+
self.before_each := ut_executable(self, a_before_each_proc_name, ut_utils.gc_before_each);
1212
self.items := ut_suite_items();
13-
self.after_each := ut_executable(self, a_after_each_proc_name, 'after_each');
14-
self.after_all := ut_executable(self, a_after_all_proc_name, 'after_all');
13+
self.after_each := ut_executable(self, a_after_each_proc_name, ut_utils.gc_after_each);
14+
self.after_all := ut_executable(self, a_after_all_proc_name, ut_utils.gc_after_all);
1515
return;
1616
end;
1717

@@ -66,7 +66,7 @@ create or replace type body ut_suite as
6666
self.result := ut_utils.tr_ignore;
6767
ut_utils.debug_log('ut_suite.execute - ignored');
6868
else
69-
a_listener.fire_before_event('suite',self);
69+
a_listener.fire_before_event(ut_utils.gc_suite,self);
7070

7171
self.start_time := current_timestamp;
7272

@@ -121,7 +121,7 @@ create or replace type body ut_suite as
121121

122122
self.end_time := current_timestamp;
123123

124-
a_listener.fire_after_event('suite',self);
124+
a_listener.fire_after_event(ut_utils.gc_suite,self);
125125
end if;
126126

127127
return l_completed_without_errors;
@@ -144,4 +144,4 @@ create or replace type body ut_suite as
144144
end;
145145

146146
end;
147-
/
147+
/

source/core/types/ut_test.tpb

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -6,9 +6,9 @@ create or replace type body ut_test as
66
) return self as result is
77
begin
88
self.init(a_object_owner, a_object_name, a_name, a_description, a_path, a_rollback_type, a_ignore_flag);
9-
self.before_test := ut_executable(self, a_before_test_proc_name, 'before_test');
10-
self.item := ut_executable(self, a_name, 'test_execute');
11-
self.after_test := ut_executable(self, a_after_test_proc_name, 'after_test');
9+
self.before_test := ut_executable(self, a_before_test_proc_name, ut_utils.gc_before_test);
10+
self.item := ut_executable(self, a_name, ut_utils.gc_test_execute);
11+
self.after_test := ut_executable(self, a_after_test_proc_name, ut_utils.gc_after_test);
1212
return;
1313
end;
1414

@@ -42,7 +42,7 @@ create or replace type body ut_test as
4242
self.end_time := current_timestamp;
4343
else
4444

45-
a_listener.fire_before_event('test',self);
45+
a_listener.fire_before_event(ut_utils.gc_test,self);
4646

4747
if self.is_valid() then
4848

@@ -69,11 +69,11 @@ create or replace type body ut_test as
6969
self.result := ut_assert_processor.get_aggregate_asserts_result();
7070
--expectation results need to be part of test results
7171
self.results := ut_assert_processor.get_asserts_results();
72-
a_listener.fire_after_event('test',self);
72+
a_listener.fire_after_event(ut_utils.gc_test,self);
7373

7474
end if;
7575
return l_completed_without_errors;
7676
end;
7777

7878
end;
79-
/
79+
/

source/core/ut_utils.pks

Lines changed: 21 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,23 @@ create or replace package ut_utils authid definer is
33
/*
44
Package: ut_utils
55
a collection of tools used throught utplsql along with helper functions.
6-
6+
77
*/
88

9+
10+
/* Constants: Event names */
11+
gc_run constant varchar2(12) := 'run';
12+
gc_suite constant varchar2(12) := 'suite';
13+
gc_before_all constant varchar2(12) := 'before_all';
14+
gc_before_each constant varchar2(12) := 'before_each';
15+
gc_before_test constant varchar2(12) := 'before_test';
16+
gc_test constant varchar2(12) := 'test';
17+
gc_test_execute constant varchar2(12) := 'test_execute';
18+
gc_after_test constant varchar2(10) := 'after_test';
19+
gc_after_each constant varchar2(12) := 'after_each';
20+
gc_after_all constant varchar2(12) := 'after_all';
21+
gc_after_run constant varchar2(12) := 'after_run';
22+
923
/* Constants: Test Results */
1024
tr_ignore constant number(1) := 0; -- test/suite was ignored
1125
tr_success constant number(1) := 1; -- test passed
@@ -49,13 +63,13 @@ create or replace package ut_utils authid definer is
4963
/*
5064
Function: test_result_to_char
5165
returns a string representation of a test_result.
52-
66+
5367
Parameters:
5468
a_test_result - <test_result>.
55-
69+
5670
Returns:
5771
a_test_result as string.
58-
72+
5973
*/
6074
function test_result_to_char(a_test_result integer) return varchar2;
6175

@@ -143,6 +157,9 @@ create or replace package ut_utils authid definer is
143157

144158
function time_diff(a_start_time timestamp with time zone, a_end_time timestamp with time zone) return number;
145159

160+
/*
161+
* Returns a text indented with spaces except the first line.
162+
*/
146163
function indent_lines(a_text varchar2, a_indent_size integer) return varchar2;
147164

148165
end ut_utils;

0 commit comments

Comments
 (0)