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

Skip to content

Commit 4b3ea3c

Browse files
authored
Merge pull request #302 from jgebal/feature/file_mapping_refactoring
Refactored reporters API so that you can use API in unified way regar…
2 parents 0abe735 + 6f9dda6 commit 4b3ea3c

33 files changed

Lines changed: 743 additions & 639 deletions

docs/userguide/coverage.md

Lines changed: 22 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -64,13 +64,13 @@ Both of those options are meant to be used to narrow down the scope of unit test
6464

6565
Example:
6666
```sql
67-
exec ut.run('ut3_user.test_award_bonus', ut_coverage_html_reporter(a_include_object_list=>ut_varchar2_list('ut3_user.award_bonus')));
67+
exec ut.run('ut3_user.test_award_bonus', ut_coverage_html_reporter(), a_include_objects=>ut_varchar2_list('ut3_user.award_bonus'));
6868
```
6969
Executes test `test_award_bonus` and gather coverage only on object `ut3_user.award_bonus`
7070

7171
Alternatively you could run:
7272
```sql
73-
exec ut.run('ut3_user.test_award_bonus', ut_coverage_html_reporter(a_exclude_object_list=>ut_varchar2_list('ut3_user.betwnstr')));
73+
exec ut.run('ut3_user.test_award_bonus', ut_coverage_html_reporter(), a_exclude_objects=>ut_varchar2_list('ut3_user.betwnstr'));
7474
```
7575
Executes test `test_award_bonus` and gather on all objects in schema `ut3_user` except valid unit test objects and object `betwnstr` that schema.
7676

@@ -86,23 +86,22 @@ In this situation you need to provide list of schema names that the tested code
8686

8787
Example:
8888
```sql
89-
exec ut.run('ut3_user.test_award_bonus', ut_coverage_html_reporter(a_schema_names=>ut_varchar2_list('usr')));
89+
exec ut.run('ut3_user.test_award_bonus', ut_coverage_html_reporter(), a_coverage_schemes=>ut_varchar2_list('usr'));
9090
```
9191
Executes test `test_award_bonus` in schema `ut3_user` and gather coverage for that execution on all non `unit-test` objects from schema `usr`.
9292

9393
You can combine schema names with include/exclude parameters and all will be applied.
94-
The `a_schema_names` parameter takes precedence however, so if include list contains objects from other schemes, that will not be considered.
94+
The `a_coverage_schemes` parameter takes precedence however, so if include list contains objects from other schemes, that will not be considered.
9595

9696
Example:
9797
```sql
9898
begin
9999
ut.run(
100100
'ut3_user.test_award_bonus',
101-
ut_coverage_html_reporter(
102-
a_schema_names => ut_varchar2_list('usr'),
103-
a_include_object_list => ut_varchar2_list('usr.award_bonus'),
104-
a_exclude_object_list => ut_varchar2_list('usr.betwnstr')
105-
)
101+
ut_coverage_html_reporter(),
102+
a_coverage_schemes => ut_varchar2_list('usr'),
103+
a_exclude_objects => ut_varchar2_list('usr.betwnstr'),
104+
a_include_objects => ut_varchar2_list('usr.award_bonus')
106105
);
107106
end;
108107
```
@@ -126,22 +125,22 @@ Example:
126125
begin
127126
ut.run(
128127
'usr',
129-
ut_coverage_html_reporter(
130-
a_file_mappings=>ut_coverage_file_mappings(
128+
ut_coverage_html_reporter(),
129+
a_source_file_mappings =>
130+
ut_coverage_file_mappings(
131131
ut_coverage_file_mapping(
132132
file_name => 'sources/hr/award_bonus.prc',
133-
object_owner => 'usr',
134-
object_name => 'award_bonus',
135-
object_type => 'procedure'
133+
object_owner => 'USR',
134+
object_name => 'AWARD_BONUS',
135+
object_type => 'PROCEDURE'
136136
),
137137
ut_coverage_file_mapping(
138138
file_name => 'sources/hr/betwnstr.fnc',
139-
object_owner => 'usr',
140-
object_name => 'betwnstr',
141-
object_type => 'function'
139+
object_owner => 'USR',
140+
object_name => 'BETWNSTR',
141+
object_type => 'FUNCTION'
142142
)
143143
)
144-
)
145144
);
146145
end;
147146
```
@@ -157,9 +156,8 @@ Example of running with predefined regex mapping rule.
157156
begin
158157
ut.run(
159158
'usr',
160-
ut_coverage_html_reporter(
161-
a_file_paths => ut_varchar2_list('sources/hr/award_bonus.prc','sources/hr/betwnstr.fnc')
162-
)
159+
ut_coverage_html_reporter(),
160+
a_source_files => ut_varchar2_list('sources/hr/award_bonus.prc','sources/hr/betwnstr.fnc')
163161
);
164162
end;
165163
```
@@ -191,20 +189,6 @@ Examples of filename paths that will be mapped correctly using predefined rules.
191189
* `[...]directory[\subdirectory[\...]]\schema_name.object_name.(tpb|pkb|trg|fnc|prc)`
192190

193191
If file names in your project structure are not prefixed with schema name (like above), the coverage report will look for objects to match the file names in the `current schema` of the connection that was used to execute tests with coverage.
194-
If for whatever reasons you use a user and current schema that is different then schem that holds your project code, you should use `a_schema_name` parameter to inform coverage reporter about database schema to be used for object lookup.
195-
196-
Example:
197-
```sql
198-
begin
199-
ut.run(
200-
'usr',
201-
ut_coverage_html_reporter(
202-
a_schema_name => 'hr',
203-
a_file_paths => ut_varchar2_list('sources/hr/award_bonus.prc','sources/hr/betwnstr.fnc')
204-
)
205-
);
206-
end;
207-
```
208192

209193
If your project structure is different, you may define your own mapping rule using regex.
210194

@@ -213,7 +197,8 @@ Example:
213197
begin
214198
ut.run(
215199
'usr',
216-
ut_coverage_html_reporter(
200+
ut_coverage_html_reporter(),
201+
ut_file_mapper.build_file_mappings(
217202
a_file_paths => ut_varchar2_list('sources/hr/procedures/award_bonus.sql','sources/hr/functions/betwnstr.sql'),
218203
a_regex_pattern => '.*(\\|\/)(\w+)\.(\w+)\.(\w{3})',
219204
a_object_owner_subexpression => 2,
@@ -222,6 +207,7 @@ begin
222207
a_file_to_object_type_mapping => ut_key_value_pairs(
223208
ut_key_value_pair('functions', 'function'),
224209
ut_key_value_pair('procedures', 'procedure')
210+
)
225211
)
226212
);
227213
end;

source/api/ut.pkb

Lines changed: 184 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -94,20 +94,93 @@ create or replace package body ut is
9494
ut_expectation_processor.report_failure(a_message);
9595
end;
9696

97-
procedure run_autonomous(a_paths ut_varchar2_list, a_reporter ut_reporter_base, a_color_console integer) is
97+
procedure run_autonomous(
98+
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,
100+
a_include_objects ut_varchar2_list, a_exclude_objects ut_varchar2_list
101+
) is
98102
pragma autonomous_transaction;
99103
begin
100-
ut_runner.run(a_paths, a_reporter, ut_utils.int_to_boolean(a_color_console));
104+
ut_runner.run(
105+
a_paths, a_reporter, ut_utils.int_to_boolean(a_color_console), a_coverage_schemes,
106+
a_source_file_mappings, a_test_file_mappings, a_include_objects, a_exclude_objects
107+
);
101108
rollback;
102109
end;
103110

104-
function run(a_reporter ut_reporter_base := ut_documentation_reporter(), a_color_console integer := 0) return ut_varchar2_rows pipelined is
111+
procedure run_autonomous(
112+
a_paths ut_varchar2_list, a_reporter ut_reporter_base, a_color_console integer,
113+
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
114+
a_include_objects ut_varchar2_list, a_exclude_objects ut_varchar2_list
115+
) is
116+
pragma autonomous_transaction;
117+
begin
118+
ut_runner.run(
119+
a_paths, a_reporter, ut_utils.int_to_boolean(a_color_console), a_coverage_schemes,
120+
a_source_files, a_test_files, a_include_objects, a_exclude_objects
121+
);
122+
rollback;
123+
end;
124+
125+
function run(
126+
a_reporter ut_reporter_base := null, a_color_console integer := 0,
127+
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
128+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
129+
) return ut_varchar2_rows pipelined is
105130
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
106131
l_paths ut_varchar2_list := ut_varchar2_list(sys_context('userenv', 'current_schema'));
107132
l_lines sys_refcursor;
108133
l_line varchar2(4000);
109134
begin
110-
run_autonomous(l_paths, a_reporter, a_color_console );
135+
run_autonomous(
136+
l_paths, l_reporter, a_color_console,
137+
a_coverage_schemes, a_source_file_mappings, a_test_file_mappings, a_include_objects, a_exclude_objects
138+
);
139+
l_lines := ut_output_buffer.get_lines_cursor(l_reporter.reporter_id);
140+
loop
141+
fetch l_lines into l_line;
142+
exit when l_lines%notfound;
143+
pipe row(l_line);
144+
end loop;
145+
close l_lines;
146+
end;
147+
148+
function run(
149+
a_reporter ut_reporter_base := null, a_color_console integer := 0,
150+
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
151+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
152+
) return ut_varchar2_rows pipelined is
153+
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
154+
l_paths ut_varchar2_list := ut_varchar2_list(sys_context('userenv', 'current_schema'));
155+
l_lines sys_refcursor;
156+
l_line varchar2(4000);
157+
begin
158+
run_autonomous(
159+
l_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_files, a_test_files,
160+
a_include_objects, a_exclude_objects
161+
);
162+
l_lines := ut_output_buffer.get_lines_cursor(l_reporter.reporter_id);
163+
loop
164+
fetch l_lines into l_line;
165+
exit when l_lines%notfound;
166+
pipe row(l_line);
167+
end loop;
168+
close l_lines;
169+
end;
170+
171+
function run(
172+
a_paths ut_varchar2_list, a_reporter ut_reporter_base := null, a_color_console integer := 0,
173+
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
174+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
175+
) return ut_varchar2_rows pipelined is
176+
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
177+
l_lines sys_refcursor;
178+
l_line varchar2(4000);
179+
begin
180+
run_autonomous(
181+
a_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_file_mappings, a_test_file_mappings,
182+
a_include_objects, a_exclude_objects
183+
);
111184
l_lines := ut_output_buffer.get_lines_cursor(l_reporter.reporter_id);
112185
loop
113186
fetch l_lines into l_line;
@@ -117,12 +190,19 @@ create or replace package body ut is
117190
close l_lines;
118191
end;
119192

120-
function run(a_paths ut_varchar2_list, a_reporter ut_reporter_base := ut_documentation_reporter(), a_color_console integer := 0) return ut_varchar2_rows pipelined is
193+
function run(
194+
a_paths ut_varchar2_list, a_reporter ut_reporter_base := null, a_color_console integer := 0,
195+
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
196+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
197+
) return ut_varchar2_rows pipelined is
121198
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
122199
l_lines sys_refcursor;
123200
l_line varchar2(4000);
124201
begin
125-
run_autonomous(a_paths, l_reporter, a_color_console);
202+
run_autonomous(
203+
a_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_files, a_test_files,
204+
a_include_objects, a_exclude_objects
205+
);
126206
l_lines := ut_output_buffer.get_lines_cursor(l_reporter.reporter_id);
127207
loop
128208
fetch l_lines into l_line;
@@ -132,13 +212,20 @@ create or replace package body ut is
132212
close l_lines;
133213
end;
134214

135-
function run(a_path varchar2, a_reporter ut_reporter_base := ut_documentation_reporter(), a_color_console integer := 0) return ut_varchar2_rows pipelined is
215+
function run(
216+
a_path varchar2, a_reporter ut_reporter_base := null, a_color_console integer := 0,
217+
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
218+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
219+
) return ut_varchar2_rows pipelined is
136220
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
137221
l_paths ut_varchar2_list := ut_varchar2_list(coalesce(a_path, sys_context('userenv', 'current_schema')));
138222
l_lines sys_refcursor;
139223
l_line varchar2(4000);
140224
begin
141-
run_autonomous(l_paths, a_reporter, a_color_console );
225+
run_autonomous(
226+
l_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_file_mappings, a_test_file_mappings,
227+
a_include_objects, a_exclude_objects
228+
);
142229
l_lines := ut_output_buffer.get_lines_cursor(l_reporter.reporter_id);
143230
loop
144231
fetch l_lines into l_line;
@@ -148,22 +235,105 @@ create or replace package body ut is
148235
close l_lines;
149236
end;
150237

151-
procedure run(a_reporter ut_reporter_base := ut_documentation_reporter(), a_color_console boolean := false) is
238+
function run(
239+
a_path varchar2, a_reporter ut_reporter_base := null, a_color_console integer := 0,
240+
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
241+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
242+
) return ut_varchar2_rows pipelined is
243+
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
244+
l_paths ut_varchar2_list := ut_varchar2_list(coalesce(a_path, sys_context('userenv', 'current_schema')));
245+
l_lines sys_refcursor;
246+
l_line varchar2(4000);
152247
begin
153-
ut.run(ut_varchar2_list(sys_context('userenv', 'current_schema')), a_reporter, a_color_console);
248+
run_autonomous(
249+
l_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_files, a_test_files,
250+
a_include_objects, a_exclude_objects
251+
);
252+
l_lines := ut_output_buffer.get_lines_cursor(l_reporter.reporter_id);
253+
loop
254+
fetch l_lines into l_line;
255+
exit when l_lines%notfound;
256+
pipe row(l_line);
257+
end loop;
258+
close l_lines;
154259
end;
155260

156-
procedure run(a_paths ut_varchar2_list, a_reporter ut_reporter_base := ut_documentation_reporter(), a_color_console boolean := false) is
261+
procedure run(
262+
a_reporter ut_reporter_base := null, a_color_console boolean := false,
263+
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
264+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
265+
) is
266+
begin
267+
ut.run(
268+
ut_varchar2_list(sys_context('userenv', 'current_schema')), a_reporter, a_color_console,
269+
a_coverage_schemes, a_source_file_mappings, a_test_file_mappings, a_include_objects, a_exclude_objects
270+
);
271+
end;
272+
273+
procedure run(
274+
a_reporter ut_reporter_base := null, a_color_console boolean := false,
275+
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
276+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
277+
) is
278+
begin
279+
ut.run(
280+
ut_varchar2_list(sys_context('userenv', 'current_schema')), a_reporter, a_color_console,
281+
a_coverage_schemes, a_source_files, a_test_files, a_include_objects, a_exclude_objects
282+
);
283+
end;
284+
285+
procedure run(
286+
a_paths ut_varchar2_list, a_reporter ut_reporter_base := null, a_color_console boolean := false,
287+
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
288+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
289+
) is
290+
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
291+
begin
292+
ut_runner.run(
293+
a_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_file_mappings, a_test_file_mappings,
294+
a_include_objects, a_exclude_objects
295+
);
296+
ut_output_buffer.lines_to_dbms_output(l_reporter.reporter_id);
297+
end;
298+
299+
procedure run(
300+
a_paths ut_varchar2_list, a_reporter ut_reporter_base := null, a_color_console boolean := false,
301+
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
302+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
303+
) is
157304
l_reporter ut_reporter_base := coalesce(a_reporter, ut_documentation_reporter());
158305
begin
159-
ut_runner.run(a_paths, l_reporter, a_color_console);
306+
ut_runner.run(
307+
a_paths, l_reporter, a_color_console, a_coverage_schemes, a_source_files, a_test_files,
308+
a_include_objects, a_exclude_objects
309+
);
160310
ut_output_buffer.lines_to_dbms_output(l_reporter.reporter_id);
161311
end;
162312

163-
procedure run(a_path varchar2, a_reporter ut_reporter_base := ut_documentation_reporter(), a_color_console boolean := false) is
313+
procedure run(
314+
a_path varchar2, a_reporter ut_reporter_base := null, a_color_console boolean := false,
315+
a_coverage_schemes ut_varchar2_list := null, a_source_file_mappings ut_file_mappings := null, a_test_file_mappings ut_file_mappings := null,
316+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
317+
) is
318+
l_paths ut_varchar2_list := ut_varchar2_list(coalesce(a_path, sys_context('userenv', 'current_schema')));
319+
begin
320+
ut.run(
321+
l_paths, a_reporter, a_color_console, a_coverage_schemes, a_source_file_mappings, a_test_file_mappings,
322+
a_include_objects, a_exclude_objects
323+
);
324+
end;
325+
326+
procedure run(
327+
a_path varchar2, a_reporter ut_reporter_base := null, a_color_console boolean := false,
328+
a_coverage_schemes ut_varchar2_list := null, a_source_files ut_varchar2_list, a_test_files ut_varchar2_list,
329+
a_include_objects ut_varchar2_list := null, a_exclude_objects ut_varchar2_list := null
330+
) is
164331
l_paths ut_varchar2_list := ut_varchar2_list(coalesce(a_path, sys_context('userenv', 'current_schema')));
165332
begin
166-
ut.run(l_paths, a_reporter, a_color_console);
333+
ut.run(
334+
l_paths, a_reporter, a_color_console, a_coverage_schemes, a_source_files, a_test_files,
335+
a_include_objects, a_exclude_objects
336+
);
167337
end;
168338

169339
procedure set_nls is

0 commit comments

Comments
 (0)