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

Skip to content

Commit e430481

Browse files
committed
Moved to_clob for debugging into reporter.
Added ability to report on input parameters by using `ut_key_anyvalues` Added debugging of calls to expectations. Added debug calls in `coverage`.
1 parent 2ba0715 commit e430481

11 files changed

Lines changed: 195 additions & 84 deletions

source/core/coverage/ut_coverage.pkb

Lines changed: 40 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,8 @@ create or replace package body ut_coverage is
131131

132132
if not ut_coverage_helper.is_tmp_table_populated() or is_develop_mode() then
133133
ut_coverage_helper.cleanup_tmp_table();
134-
135-
l_cov_sources_crsr := get_cov_sources_cursor(a_coverage_options,a_sql);
134+
ut_event_manager.trigger_event(ut_event_manager.gc_debug, ut_key_anyvalues().put('a_sql',a_sql) );
135+
l_cov_sources_crsr := get_cov_sources_cursor(a_coverage_options, a_sql);
136136

137137
loop
138138
fetch l_cov_sources_crsr bulk collect into l_cov_sources_data limit 10000;
@@ -209,48 +209,50 @@ create or replace package body ut_coverage is
209209
l_line_no binary_integer;
210210
begin
211211
--prepare global temp table with sources
212+
ut_event_manager.trigger_event('about to populate coverage temp table');
212213
populate_tmp_table(a_coverage_options, get_cov_sources_sql(a_coverage_options));
214+
ut_event_manager.trigger_event('coverage temp table populated');
213215

214216
-- Get raw data for both reporters, order is important as tmp table will skip headers and dont populate
215217
-- tmp table for block again.
216218
l_result_profiler_enrich:= ut_coverage_profiler.get_coverage_data( a_coverage_options, get_coverage_id(gc_proftab_coverage) );
217-
218-
-- If block coverage available we will use it.
219-
$if dbms_db_version.version = 12 and dbms_db_version.release >= 2 or dbms_db_version.version > 12 $then
220-
l_result_block := ut_coverage_block.get_coverage_data( a_coverage_options, get_coverage_id(gc_block_coverage) );
221-
222-
-- Enrich profiler results with some of the block results
223-
l_object := l_result_profiler_enrich.objects.first;
224-
while (l_object is not null)
225-
loop
226-
227-
l_line_no := l_result_profiler_enrich.objects(l_object).lines.first;
228-
229-
-- to avoid no data found check if we got object in profiler
230-
if l_result_block.objects.exists(l_object) then
231-
while (l_line_no is not null)
232-
loop
233-
-- To avoid no data check for object line
234-
if l_result_block.objects(l_object).lines.exists(l_line_no) then
235-
-- enrich line level stats
236-
l_result_profiler_enrich.objects(l_object).lines(l_line_no).partcove := l_result_block.objects(l_object).lines(l_line_no).partcove;
237-
l_result_profiler_enrich.objects(l_object).lines(l_line_no).covered_blocks := l_result_block.objects(l_object).lines(l_line_no).covered_blocks;
238-
l_result_profiler_enrich.objects(l_object).lines(l_line_no).no_blocks := l_result_block.objects(l_object).lines(l_line_no).no_blocks;
239-
-- enrich object level stats
240-
l_result_profiler_enrich.objects(l_object).partcovered_lines := nvl(l_result_profiler_enrich.objects(l_object).partcovered_lines,0) + l_result_block.objects(l_object).lines(l_line_no).partcove;
219+
ut_event_manager.trigger_event('profiler coverage data retrieved');
220+
221+
-- If block coverage available we will use it.
222+
$if dbms_db_version.version = 12 and dbms_db_version.release >= 2 or dbms_db_version.version > 12 $then
223+
l_result_block := ut_coverage_block.get_coverage_data( a_coverage_options, get_coverage_id(gc_block_coverage) );
224+
ut_event_manager.trigger_event('block coverage data retrieved');
225+
226+
-- Enrich profiler results with some of the block results
227+
l_object := l_result_profiler_enrich.objects.first;
228+
while (l_object is not null) loop
229+
230+
l_line_no := l_result_profiler_enrich.objects(l_object).lines.first;
231+
232+
-- to avoid no data found check if we got object in profiler
233+
if l_result_block.objects.exists(l_object) then
234+
while (l_line_no is not null) loop
235+
-- To avoid no data check for object line
236+
if l_result_block.objects(l_object).lines.exists(l_line_no) then
237+
-- enrich line level stats
238+
l_result_profiler_enrich.objects(l_object).lines(l_line_no).partcove := l_result_block.objects(l_object).lines(l_line_no).partcove;
239+
l_result_profiler_enrich.objects(l_object).lines(l_line_no).covered_blocks := l_result_block.objects(l_object).lines(l_line_no).covered_blocks;
240+
l_result_profiler_enrich.objects(l_object).lines(l_line_no).no_blocks := l_result_block.objects(l_object).lines(l_line_no).no_blocks;
241+
-- enrich object level stats
242+
l_result_profiler_enrich.objects(l_object).partcovered_lines := nvl(l_result_profiler_enrich.objects(l_object).partcovered_lines,0) + l_result_block.objects(l_object).lines(l_line_no).partcove;
243+
end if;
244+
--At the end go to next line
245+
l_line_no := l_result_profiler_enrich.objects(l_object).lines.next(l_line_no);
246+
end loop;
247+
--total level stats enrich
248+
l_result_profiler_enrich.partcovered_lines := nvl(l_result_profiler_enrich.partcovered_lines,0) + l_result_profiler_enrich.objects(l_object).partcovered_lines;
249+
-- At the end go to next object
241250
end if;
242-
--At the end go to next line
243-
l_line_no := l_result_profiler_enrich.objects(l_object).lines.next(l_line_no);
244-
end loop;
245-
--total level stats enrich
246-
l_result_profiler_enrich.partcovered_lines := nvl(l_result_profiler_enrich.partcovered_lines,0) + l_result_profiler_enrich.objects(l_object).partcovered_lines;
247-
-- At the end go to next object
248-
end if;
249-
250-
l_object := l_result_profiler_enrich.objects.next(l_object);
251-
252-
end loop;
253-
$end
251+
252+
l_object := l_result_profiler_enrich.objects.next(l_object);
253+
end loop;
254+
ut_event_manager.trigger_event('coverage data combined');
255+
$end
254256

255257
return l_result_profiler_enrich;
256258
end get_coverage_data;

source/core/events/ut_event_item.tpb

Lines changed: 0 additions & 26 deletions
This file was deleted.

source/core/events/ut_event_item.tps

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ create or replace type ut_event_item authid current_user as object (
2020
* Object type is a pre-declaration to be referenced by ut_event_listener_base
2121
* The true abstract type is ut_suite_item
2222
*/
23-
self_type varchar2(250 byte),
24-
member function to_clob return clob
23+
self_type varchar2(250 byte)
2524
) not final not instantiable
2625
/

source/core/types/ut_expectation_result.tpb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ create or replace type body ut_expectation_result is
2121
a_description varchar2, a_message clob, a_include_caller_info boolean := true
2222
) return self as result is
2323
begin
24+
self.self_type := $$plsql_unit;
2425
self.status := a_status;
2526
self.description := a_description;
2627
self.message := a_message;

source/core/types/ut_expectation_result.tps

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
create or replace type ut_expectation_result authid current_user as object(
1+
create or replace type ut_expectation_result under ut_event_item(
22
/*
33
utPLSQL - Version 3
44
Copyright 2016 - 2018 utPLSQL Project

source/core/ut_expectation_processor.pkb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -73,13 +73,13 @@ create or replace package body ut_expectation_processor as
7373
l_expectations_results(l_expectations_results.last) := g_expectations_called(i);
7474
end if;
7575
end loop;
76-
ut_utils.debug_log('ut_expectation_processor.get_failed_expectations: l_expectations_results.count='||g_expectations_called.count);
76+
ut_utils.debug_log('ut_expectation_processor.get_failed_expectations: l_expectations_results.count='||l_expectations_results.count);
7777
return l_expectations_results;
7878
end get_failed_expectations;
7979

8080
procedure add_expectation_result(a_expectation_result ut_expectation_result) is
8181
begin
82-
ut_utils.debug_log('ut_expectation_processor.add_expectation_result');
82+
ut_event_manager.trigger_event(ut_event_manager.gc_debug, a_expectation_result);
8383
g_expectations_called.extend;
8484
g_expectations_called(g_expectations_called.last) := a_expectation_result;
8585
end;
Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,90 @@
1+
create or replace type body ut_key_anyvalues as
2+
/*
3+
utPLSQL - Version 3
4+
Copyright 2016 - 2018 utPLSQL Project
5+
6+
Licensed under the Apache License, Version 2.0 (the "License"):
7+
you may not use this file except in compliance with the License.
8+
You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing, software
13+
distributed under the License is distributed on an "AS IS" BASIS,
14+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
See the License for the specific language governing permissions and
16+
limitations under the License.
17+
*/
18+
constructor function ut_key_anyvalues(self in out nocopy ut_key_anyvalues) return self as result is
19+
begin
20+
self.self_type := $$plsql_unit;
21+
self.pairs := ut_key_anyval_pairs();
22+
return;
23+
end;
24+
member function put(a_item ut_key_anyval_pair) return ut_key_anyvalues is
25+
l_result ut_key_anyvalues := self;
26+
begin
27+
l_result.pairs.extend();
28+
l_result.pairs(l_result.pairs.last) := a_item;
29+
return l_result;
30+
end;
31+
member function put(a_key varchar2, a_value anydata) return ut_key_anyvalues is
32+
begin
33+
return put(ut_key_anyval_pair(a_key, ut_data_value_anydata.get_instance(a_value)));
34+
end;
35+
36+
member function put(a_key varchar2, a_value blob) return ut_key_anyvalues is
37+
begin
38+
return put(ut_key_anyval_pair(a_key, ut_data_value_blob(a_value)));
39+
end;
40+
41+
member function put(a_key varchar2, a_value boolean) return ut_key_anyvalues is
42+
begin
43+
return put(ut_key_anyval_pair(a_key, ut_data_value_boolean(a_value)));
44+
end;
45+
46+
member function put(a_key varchar2, a_value clob) return ut_key_anyvalues is
47+
begin
48+
return put(ut_key_anyval_pair(a_key, ut_data_value_clob(a_value)));
49+
end;
50+
51+
member function put(a_key varchar2, a_value date) return ut_key_anyvalues is
52+
begin
53+
return put(ut_key_anyval_pair(a_key, ut_data_value_date(a_value)));
54+
end;
55+
56+
member function put(a_key varchar2, a_value number) return ut_key_anyvalues is
57+
begin
58+
return put(ut_key_anyval_pair(a_key, ut_data_value_number(a_value)));
59+
end;
60+
member function put(a_key varchar2, a_value timestamp_unconstrained) return ut_key_anyvalues is
61+
begin
62+
return put(ut_key_anyval_pair(a_key, ut_data_value_timestamp(a_value)));
63+
end;
64+
65+
member function put(a_key varchar2, a_value timestamp_ltz_unconstrained) return ut_key_anyvalues is
66+
begin
67+
return put(ut_key_anyval_pair(a_key, ut_data_value_timestamp_ltz(a_value)));
68+
end;
69+
70+
member function put(a_key varchar2, a_value timestamp_tz_unconstrained) return ut_key_anyvalues is
71+
begin
72+
return put(ut_key_anyval_pair(a_key, ut_data_value_timestamp_tz(a_value)));
73+
end;
74+
75+
member function put(a_key varchar2, a_value varchar2) return ut_key_anyvalues is
76+
begin
77+
return put(ut_key_anyval_pair(a_key, ut_data_value_varchar2(a_value)));
78+
end;
79+
80+
member function put(a_key varchar2, a_value yminterval_unconstrained) return ut_key_anyvalues is
81+
begin
82+
return put(ut_key_anyval_pair(a_key, ut_data_value_yminterval(a_value)));
83+
end;
84+
85+
member function put(a_key varchar2, a_value dsinterval_unconstrained) return ut_key_anyvalues is
86+
begin
87+
return put(ut_key_anyval_pair(a_key, ut_data_value_dsinterval(a_value)));
88+
end;
89+
end;
90+
/
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
create or replace type ut_key_anyvalues under ut_event_item (
2+
/*
3+
utPLSQL - Version 3
4+
Copyright 2016 - 2018 utPLSQL Project
5+
6+
Licensed under the Apache License, Version 2.0 (the "License"):
7+
you may not use this file except in compliance with the License.
8+
You may obtain a copy of the License at
9+
10+
http://www.apache.org/licenses/LICENSE-2.0
11+
12+
Unless required by applicable law or agreed to in writing, software
13+
distributed under the License is distributed on an "AS IS" BASIS,
14+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15+
See the License for the specific language governing permissions and
16+
limitations under the License.
17+
*/
18+
pairs ut_key_anyval_pairs,
19+
constructor function ut_key_anyvalues(self in out nocopy ut_key_anyvalues) return self as result,
20+
member function put(a_item ut_key_anyval_pair) return ut_key_anyvalues,
21+
member function put(a_key varchar2, a_value anydata) return ut_key_anyvalues,
22+
member function put(a_key varchar2, a_value blob) return ut_key_anyvalues,
23+
member function put(a_key varchar2, a_value boolean) return ut_key_anyvalues,
24+
member function put(a_key varchar2, a_value clob) return ut_key_anyvalues,
25+
member function put(a_key varchar2, a_value date) return ut_key_anyvalues,
26+
member function put(a_key varchar2, a_value number) return ut_key_anyvalues,
27+
member function put(a_key varchar2, a_value timestamp_unconstrained) return ut_key_anyvalues,
28+
member function put(a_key varchar2, a_value timestamp_ltz_unconstrained) return ut_key_anyvalues,
29+
member function put(a_key varchar2, a_value timestamp_tz_unconstrained) return ut_key_anyvalues,
30+
member function put(a_key varchar2, a_value varchar2) return ut_key_anyvalues,
31+
member function put(a_key varchar2, a_value yminterval_unconstrained) return ut_key_anyvalues,
32+
member function put(a_key varchar2, a_value dsinterval_unconstrained) return ut_key_anyvalues
33+
)
34+
/

source/install.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,6 @@ alter session set current_schema = &&ut3_owner;
5757

5858
--event manager objects
5959
@@install_component.sql 'core/events/ut_event_item.tps'
60-
@@install_component.sql 'core/events/ut_event_item.tpb'
6160
@@install_component.sql 'core/events/ut_event_listener.tps'
6261
@@install_component.sql 'core/events/ut_event_manager.pks'
6362
@@install_component.sql 'core/events/ut_event_manager.pkb'
@@ -203,6 +202,8 @@ prompt Installing DBMSPLSQL Tables objects into &&ut3_owner schema
203202
@@install_component.sql 'expectations/data_values/ut_data_value_xmltype.tps'
204203
@@install_component.sql 'expectations/data_values/ut_key_anyval_pair.tps'
205204
@@install_component.sql 'expectations/data_values/ut_key_anyval_pairs.tps'
205+
@@install_component.sql 'expectations/data_values/ut_key_anyvalues.tps'
206+
@@install_component.sql 'expectations/data_values/ut_key_anyvalues.tpb'
206207
@@install_component.sql 'expectations/data_values/ut_compound_data_helper.pks'
207208
@@install_component.sql 'expectations/data_values/ut_curr_usr_compound_helper.pks'
208209
@@install_component.sql 'expectations/matchers/ut_matcher.tps'

source/reporters/ut_debug_reporter.tpb

Lines changed: 21 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@ create or replace type body ut_debug_reporter is
3333
c_time constant timestamp := current_timestamp();
3434
c_time_from_start constant interval day(0) to second(6) := (c_time - self.start_time);
3535
c_time_from_prev constant interval day(0) to second(6) := (c_time - self.event_time);
36-
l_debug varchar2(32767);
3736
l_stack varchar2(32767) := dbms_utility.format_call_stack();
3837
begin
3938
l_stack := regexp_replace(
@@ -42,30 +41,39 @@ create or replace type body ut_debug_reporter is
4241

4342
if a_event_name = ut_event_manager.gc_initialize then
4443
self.on_initialize(null);
45-
self.print_text('<DEBUG_LOG>');
44+
self.print_text('<DEBUG_LOG>', ut_event_manager.gc_debug);
4645
end if;
47-
l_debug :=
48-
to_clob( '<DEBUG>' || chr(10)
49-
|| ' <TIMESTAMP>' || ut_utils.to_string(c_time) || '</TIMESTAMP>' || chr(10)
46+
self.print_text('<DEBUG>', ut_event_manager.gc_debug);
47+
self.print_text(
48+
' <TIMESTAMP>' || ut_utils.to_string(c_time) || '</TIMESTAMP>' || chr(10)
5049
|| ' <TIME_FROM_START>' || c_time_from_start || '</TIME_FROM_START>' || chr(10)
5150
|| ' <TIME_FROM_PREVIOUS>' || c_time_from_prev || '</TIME_FROM_PREVIOUS>' || chr(10)
52-
|| ' <EVENT_NAME>' || a_event_name || '</EVENT_NAME>' || chr(10)
53-
|| ' <CALL_STACK>' || l_stack || '</CALL_STACK>' || chr(10)
54-
);
51+
|| ' <EVENT_NAME>' || a_event_name || '</EVENT_NAME>',
52+
ut_event_manager.gc_debug
53+
);
54+
self.print_text( ' <CALL_STACK>' || l_stack || '</CALL_STACK>', ut_event_manager.gc_debug);
5555
if a_event_item is not null then
56-
self.print_clob(
57-
to_clob( l_debug ) || a_event_item.to_clob() || to_clob('</DEBUG>'),
56+
self.print_text_lines(
57+
ut_utils.convert_collection(
58+
ut_utils.clob_to_table( event_item_to_clob(a_event_item), ut_utils.gc_max_storage_varchar2_len )
59+
),
5860
ut_event_manager.gc_debug
5961
);
60-
else
61-
self.print_clob( l_debug || '</DEBUG>', ut_event_manager.gc_debug );
6262
end if;
63+
self.print_text('</DEBUG>', ut_event_manager.gc_debug);
6364
if a_event_name = ut_event_manager.gc_finalize then
64-
self.print_text('</DEBUG_LOG>');
65+
self.print_text('</DEBUG_LOG>', ut_event_manager.gc_debug);
6566
self.on_finalize(null);
6667
end if;
6768
self.event_time := current_timestamp();
6869
end;
6970

71+
member function event_item_to_clob(a_event_item ut_event_item) return clob is
72+
l_clob clob;
73+
begin
74+
select xmlserialize( content deletexml(xmltype(a_event_item),'/*/ITEMS|/*/ALL_EXPECTATIONS|/*/FAILED_EXPECTATIONS') as clob indent size = 2 ) into l_clob from dual;
75+
return l_clob;
76+
end;
77+
7078
end;
7179
/

0 commit comments

Comments
 (0)