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

Skip to content

Commit 5f74db9

Browse files
authored
Merge pull request #602 from lwasylow/12coveragestab2
Block Coverage for 12.2 Oracle
2 parents aedbbe7 + ac40332 commit 5f74db9

36 files changed

Lines changed: 1171 additions & 252 deletions

docs/userguide/coverage.md

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ If you have `execute` privilege on the code that are tested, but do not have `cr
2929
If you have `execute` privilege only on the unit tests, but do not have `execute` privilege on the code that is tested, the code will not be reported by coverage - as if it did not exist in the database.
3030
If the code that is testes is complied as NATIVE, the code coverage will not be reported as well.
3131

32-
## Running unite tests with coverage
32+
## Running unit tests with coverage
3333
Using code coverage functionality is as easy as using any other [reporter](reporters.md) for utPLSQL project. All you need to do is run your tests from your preferred SQL tool and save the outcomes of reporter to a file.
3434
All you need to do, is pass the constructor of the reporter to your `ut.run`
3535

@@ -40,6 +40,8 @@ begin
4040
end;
4141
/
4242
```
43+
44+
4345
Executes all unit tests in current schema, gather information about code coverage and output the html text into DBMS_OUTPUT.
4446
The `ut_coverage_html_reporter` will produce a interactive HTML report. You may see a sample of code coverage for utPLSQL project [here](https://utplsql.github.io/utPLSQL-coverage-html/)
4547

@@ -52,6 +54,20 @@ The report allow to navigate to every source and inspect line by line coverage.
5254
![Coverage Details page](../images/coverage_html_details.png)
5355

5456

57+
#### Oracle 12.2 block coverage.
58+
In Oracle 12.2 new functionality was released which supports native [block coverage](https://docs.oracle.com/en/database/oracle/oracle-database/12.2/arpls/DBMS_PLSQL_CODE_COVERAGE.html#GUID-55A9E502-9EC2-4118-B292-DC79E6DC465E).
59+
This has been enabled in utPLSQL code coverage as a separate option. It can be invoked by passing a argument a_coverage_type with value 'block'. By default profiler option is enabled ('proftab').
60+
61+
Example:
62+
```sql
63+
begin
64+
ut.run(ut_coverage_html_reporter(),a_coverage_type => 'block');
65+
end;
66+
/
67+
```
68+
69+
In this mode html reporter will show additionally number of lines that been partially covered and highlight them in orange. Number of blocks in code, blocks covered and missed.
70+
5571
## Coverage reporting options
5672
By default the database schema/schemes containing the tests that were executed during the run, are fully reported by coverage reporter.
5773
All valid unit tests are excluded from the report regardless if they were invoked or not. This way the coverage report is not affected by presence of tests and contains only the tested code.

source/api/ut.pkb

Lines changed: 28 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -96,29 +96,29 @@ create or replace package body ut is
9696

9797
procedure run_autonomous(
9898
a_paths ut_varchar2_list, a_reporter ut_reporter_base, a_color_console integer,
99-
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings, a_test_file_mappings ut_file_mappings,
99+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_file_mappings ut_file_mappings, a_test_file_mappings ut_file_mappings,
100100
a_include_objects ut_varchar2_list, a_exclude_objects ut_varchar2_list
101101
) is
102102
pragma autonomous_transaction;
103103
begin
104104
ut_runner.run(
105105
a_paths, ut_reporters(coalesce(a_reporter,ut_documentation_reporter())),
106-
ut_utils.int_to_boolean(a_color_console), a_coverage_schemes,
106+
ut_utils.int_to_boolean(a_color_console), a_coverage_schemes,a_coverage_type,
107107
a_source_file_mappings, a_test_file_mappings, a_include_objects, a_exclude_objects
108108
);
109109
rollback;
110110
end;
111111

112112
procedure run_autonomous(
113113
a_paths ut_varchar2_list, a_reporter ut_reporter_base, a_color_console integer,
114-
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
114+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
115115
a_include_objects ut_varchar2_list, a_exclude_objects ut_varchar2_list
116116
) is
117117
pragma autonomous_transaction;
118118
begin
119119
ut_runner.run(
120120
a_paths, ut_reporters(coalesce(a_reporter,ut_documentation_reporter())),
121-
ut_utils.int_to_boolean(a_color_console), a_coverage_schemes,
121+
ut_utils.int_to_boolean(a_color_console), a_coverage_schemes,a_coverage_type,
122122
ut_file_mapper.build_file_mappings(a_source_files),
123123
ut_file_mapper.build_file_mappings(a_test_files),
124124
a_include_objects, a_exclude_objects
@@ -128,7 +128,7 @@ create or replace package body ut is
128128

129129
function run(
130130
a_reporter ut_reporter_base := null, a_color_console integer := 0,
131-
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
131+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
132132
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
133133
) return ut_varchar2_rows pipelined is
134134
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
@@ -138,7 +138,7 @@ create or replace package body ut is
138138
begin
139139
run_autonomous(
140140
l_paths, l_reporter, a_color_console,
141-
a_coverage_schemes, a_source_file_mappings, a_test_file_mappings, a_include_objects, a_exclude_objects
141+
a_coverage_schemes,a_coverage_type, a_source_file_mappings, a_test_file_mappings, a_include_objects, a_exclude_objects
142142
);
143143
if l_reporter is of (ut_output_reporter_base) then
144144
l_lines := treat(l_reporter as ut_output_reporter_base).get_lines_cursor();
@@ -153,7 +153,7 @@ create or replace package body ut is
153153

154154
function run(
155155
a_reporter ut_reporter_base := null, a_color_console integer := 0,
156-
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
156+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
157157
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
158158
) return ut_varchar2_rows pipelined is
159159
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
@@ -162,7 +162,7 @@ create or replace package body ut is
162162
l_line varchar2(4000);
163163
begin
164164
run_autonomous(
165-
l_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_files, a_test_files,
165+
l_paths, l_reporter, a_color_console, a_coverage_schemes,a_coverage_type, a_source_files, a_test_files,
166166
a_include_objects, a_exclude_objects
167167
);
168168
if l_reporter is of (ut_output_reporter_base) then
@@ -178,15 +178,15 @@ create or replace package body ut is
178178

179179
function run(
180180
a_paths ut_varchar2_list, a_reporter ut_reporter_base := null, a_color_console integer := 0,
181-
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
181+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
182182
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
183183
) return ut_varchar2_rows pipelined is
184184
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
185185
l_lines sys_refcursor;
186186
l_line varchar2(4000);
187187
begin
188188
run_autonomous(
189-
a_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_file_mappings, a_test_file_mappings,
189+
a_paths, l_reporter, a_color_console, a_coverage_schemes,a_coverage_type, a_source_file_mappings, a_test_file_mappings,
190190
a_include_objects, a_exclude_objects
191191
);
192192
if l_reporter is of (ut_output_reporter_base) then
@@ -202,15 +202,15 @@ create or replace package body ut is
202202

203203
function run(
204204
a_paths ut_varchar2_list, a_reporter ut_reporter_base := null, a_color_console integer := 0,
205-
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
205+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
206206
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
207207
) return ut_varchar2_rows pipelined is
208208
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
209209
l_lines sys_refcursor;
210210
l_line varchar2(4000);
211211
begin
212212
run_autonomous(
213-
a_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_files, a_test_files,
213+
a_paths, l_reporter, a_color_console, a_coverage_schemes,a_coverage_type, a_source_files, a_test_files,
214214
a_include_objects, a_exclude_objects
215215
);
216216
if l_reporter is of (ut_output_reporter_base) then
@@ -226,7 +226,7 @@ create or replace package body ut is
226226

227227
function run(
228228
a_path varchar2, a_reporter ut_reporter_base := null, a_color_console integer := 0,
229-
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
229+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
230230
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
231231
) return ut_varchar2_rows pipelined is
232232
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
@@ -235,7 +235,7 @@ create or replace package body ut is
235235
l_line varchar2(4000);
236236
begin
237237
run_autonomous(
238-
l_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_file_mappings, a_test_file_mappings,
238+
l_paths, l_reporter, a_color_console, a_coverage_schemes,a_coverage_type, a_source_file_mappings, a_test_file_mappings,
239239
a_include_objects, a_exclude_objects
240240
);
241241
if l_reporter is of (ut_output_reporter_base) then
@@ -251,7 +251,7 @@ create or replace package body ut is
251251

252252
function run(
253253
a_path varchar2, a_reporter ut_reporter_base := null, a_color_console integer := 0,
254-
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
254+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
255255
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
256256
) return ut_varchar2_rows pipelined is
257257
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
@@ -260,7 +260,7 @@ create or replace package body ut is
260260
l_line varchar2(4000);
261261
begin
262262
run_autonomous(
263-
l_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_files, a_test_files,
263+
l_paths, l_reporter, a_color_console, a_coverage_schemes,a_coverage_type, a_source_files, a_test_files,
264264
a_include_objects, a_exclude_objects
265265
);
266266
if l_reporter is of (ut_output_reporter_base) then
@@ -276,13 +276,13 @@ create or replace package body ut is
276276

277277
procedure run(
278278
a_paths ut_varchar2_list, a_reporter ut_reporter_base := null, a_color_console boolean := false,
279-
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
279+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
280280
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
281281
) is
282282
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
283283
begin
284284
run_autonomous(
285-
a_paths, l_reporter, ut_utils.boolean_to_int(a_color_console), a_coverage_schemes, a_source_file_mappings, a_test_file_mappings,
285+
a_paths, l_reporter, ut_utils.boolean_to_int(a_color_console), a_coverage_schemes,a_coverage_type, a_source_file_mappings, a_test_file_mappings,
286286
a_include_objects, a_exclude_objects
287287
);
288288
if l_reporter is of (ut_output_reporter_base) then
@@ -292,13 +292,13 @@ create or replace package body ut is
292292

293293
procedure run(
294294
a_paths ut_varchar2_list, a_reporter ut_reporter_base := null, a_color_console boolean := false,
295-
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
295+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
296296
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
297297
) is
298298
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
299299
begin
300300
run_autonomous(
301-
a_paths, l_reporter, ut_utils.boolean_to_int(a_color_console), a_coverage_schemes, a_source_files, a_test_files,
301+
a_paths, l_reporter, ut_utils.boolean_to_int(a_color_console), a_coverage_schemes,a_coverage_type, a_source_files, a_test_files,
302302
a_include_objects, a_exclude_objects
303303
);
304304
if l_reporter is of (ut_output_reporter_base) then
@@ -308,50 +308,50 @@ create or replace package body ut is
308308

309309
procedure run(
310310
a_reporter ut_reporter_base := null, a_color_console boolean := false,
311-
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
311+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
312312
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
313313
) is
314314
begin
315315
ut.run(
316316
ut_varchar2_list(sys_context('userenv', 'current_schema')), a_reporter, a_color_console,
317-
a_coverage_schemes, a_source_file_mappings, a_test_file_mappings, a_include_objects, a_exclude_objects
317+
a_coverage_schemes,a_coverage_type, a_source_file_mappings, a_test_file_mappings, a_include_objects, a_exclude_objects
318318
);
319319
end;
320320

321321
procedure run(
322322
a_reporter ut_reporter_base := null, a_color_console boolean := false,
323-
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
323+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
324324
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
325325
) is
326326
begin
327327
ut.run(
328328
ut_varchar2_list(sys_context('userenv', 'current_schema')), a_reporter, a_color_console,
329-
a_coverage_schemes, a_source_files, a_test_files, a_include_objects, a_exclude_objects
329+
a_coverage_schemes,a_coverage_type, a_source_files, a_test_files, a_include_objects, a_exclude_objects
330330
);
331331
end;
332332

333333
procedure run(
334334
a_path varchar2, a_reporter ut_reporter_base := null, a_color_console boolean := false,
335-
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
335+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
336336
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
337337
) is
338338
l_paths ut_varchar2_list := ut_varchar2_list(coalesce(a_path, sys_context('userenv', 'current_schema')));
339339
begin
340340
ut.run(
341-
l_paths, a_reporter, a_color_console, a_coverage_schemes, a_source_file_mappings, a_test_file_mappings,
341+
l_paths, a_reporter, a_color_console, a_coverage_schemes,a_coverage_type, a_source_file_mappings, a_test_file_mappings,
342342
a_include_objects, a_exclude_objects
343343
);
344344
end;
345345

346346
procedure run(
347347
a_path varchar2, a_reporter ut_reporter_base := null, a_color_console boolean := false,
348-
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
348+
a_coverage_schemes ut_varchar2_list := null,a_coverage_type varchar2:=null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
349349
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
350350
) is
351351
l_paths ut_varchar2_list := ut_varchar2_list(coalesce(a_path, sys_context('userenv', 'current_schema')));
352352
begin
353353
ut.run(
354-
l_paths, a_reporter, a_color_console, a_coverage_schemes, a_source_files, a_test_files,
354+
l_paths, a_reporter, a_color_console, a_coverage_schemes,a_coverage_type, a_source_files, a_test_files,
355355
a_include_objects, a_exclude_objects
356356
);
357357
end;

0 commit comments

Comments
 (0)