Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
20 commits
Select commit Hold shift + click to select a range
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Making more changes
  • Loading branch information
lwasylow committed Feb 25, 2022
commit 7b9e0859438765be9585de966777cd043b4932a5
33 changes: 21 additions & 12 deletions source/core/coverage/ut_coverage.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ create or replace package body ut_coverage is
from {sources_view} s {join_file_mappings}
where s.type in ('PACKAGE BODY', 'TYPE BODY', 'PROCEDURE', 'FUNCTION', 'TRIGGER')
{filters}
{regex_exc_filters}
),
coverage_sources as (
select full_name, owner, name, type, line, text,
Expand Down Expand Up @@ -85,7 +86,6 @@ create or replace package body ut_coverage is
where s.owner = el.owner and s.name = el.name
)
and line > 0
{regex_filters}
]';

if a_coverage_options.file_mappings is not empty then
Expand All @@ -99,11 +99,14 @@ create or replace package body ut_coverage is
elsif a_coverage_options.include_schema_expr is not null or a_coverage_options.include_object_expr is not null then
l_full_name := q'[lower(s.type||' '||s.owner||'.'||s.name)]';
if a_coverage_options.include_schema_expr is not null then
l_filters := q'[and regexp_like(s.owner,']'||a_coverage_options.include_schema_expr||q'[','i')]';
end if;

l_filters := q'[and regexp_like(s.owner,:a_include_schema_expr,'i')]';
else
l_filters := 'and :a_include_schema_expr is null';
end if;
if a_coverage_options.include_object_expr is not null then
l_filters := l_filters|| q'[ and regexp_like(s.name,']'||a_coverage_options.include_object_expr||q'[','i')]';
l_filters := l_filters|| q'[ and regexp_like(s.name,:a_include_object_expr,'i')]';
else
l_filters := l_filters|| 'and :a_include_object_expr is null';
end if;
else
l_full_name := q'[lower(s.type||' '||s.owner||'.'||s.name)]';
Expand All @@ -124,11 +127,15 @@ create or replace package body ut_coverage is


if a_coverage_options.exclude_schema_expr is not null then
l_regex_exc_filters := l_regex_exc_filters||q'[ and not regexp_like(s.owner,']'||a_coverage_options.exclude_schema_expr||q'[,'i')]';
l_regex_exc_filters := q'[ and not regexp_like(s.owner,:a_exclude_schema_expr,'i')]';
else
l_regex_exc_filters := ' and :a_exclude_schema_expr is null ';
end if;

if a_coverage_options.exclude_object_expr is not null then
l_regex_exc_filters := l_regex_exc_filters||q'[ and not regexp_like(s.name,']'||a_coverage_options.exclude_object_expr||q'[,'i')]';
l_regex_exc_filters := l_regex_exc_filters||q'[ and not regexp_like(s.name,:a_exclude_obj_expr:,'i')]';
else
l_regex_exc_filters := l_regex_exc_filters||'and :a_exclude_obj_expr is null ';
end if;


Expand All @@ -139,7 +146,7 @@ create or replace package body ut_coverage is
l_result := replace(l_result, '{filters}', l_filters);
l_result := replace(l_result, '{mappings_cardinality}', l_mappings_cardinality);
l_result := replace(l_result, '{skipped_objects_cardinality}', ut_utils.scale_cardinality(cardinality(a_skip_objects)));
l_result := replace(l_result, '{regex_filters}', l_regex_exc_filters);
l_result := replace(l_result, '{regex_exc_filters}', l_regex_exc_filters);

return l_result;

Expand All @@ -160,13 +167,15 @@ create or replace package body ut_coverage is
ut_event_manager.trigger_event(ut_event_manager.gc_debug, ut_key_anyvalues().put('l_sql',l_sql) );

if a_coverage_options.file_mappings is not empty then
open l_cursor for l_sql using a_coverage_options.file_mappings, l_skip_objects;
open l_cursor for l_sql using a_coverage_options.file_mappings,a_coverage_options.exclude_schema_expr,a_coverage_options.exclude_object_expr,l_skip_objects;
elsif a_coverage_options.include_objects is not empty then
open l_cursor for l_sql using a_coverage_options.include_objects, l_skip_objects;
open l_cursor for l_sql using a_coverage_options.include_objects,a_coverage_options.exclude_schema_expr,a_coverage_options.exclude_object_expr,l_skip_objects;
elsif a_coverage_options.include_schema_expr is not null or a_coverage_options.include_object_expr is not null then
open l_cursor for l_sql using l_skip_objects;
open l_cursor for l_sql using a_coverage_options.include_schema_expr,a_coverage_options.include_object_expr,
a_coverage_options.exclude_schema_expr,a_coverage_options.exclude_object_expr,
l_skip_objects;
else
open l_cursor for l_sql using a_coverage_options.schema_names, l_skip_objects;
open l_cursor for l_sql using a_coverage_options.schema_names,a_coverage_options.exclude_schema_expr,a_coverage_options.exclude_object_expr,l_skip_objects;
end if;
return l_cursor;
end;
Expand Down
22 changes: 15 additions & 7 deletions test/ut3_tester_helper/coverage_helper.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -200,14 +200,14 @@ create or replace package body coverage_helper is
begin execute immediate q'[drop package ut3_develop.test_regex_dummy_cov]'; exception when others then null; end;
end;

procedure create_regex_dummy_cov_schema is
procedure create_regex_dummy_for_schema(p_schema in varchar2) is
pragma autonomous_transaction;
begin
execute immediate q'[create or replace package ut3_develop.]'||covered_package_name||q'[ is
execute immediate q'[create or replace package ]'||p_schema||q'[.regex_dummy_cov_schema is
procedure do_stuff(i_input in number);
end;]';

execute immediate q'[create or replace package body ut3_develop.]'||covered_package_name||q'[ is
execute immediate q'[create or replace package body ]'||p_schema||q'[.regex_dummy_cov_schema is
procedure do_stuff(i_input in number) is
begin
if i_input = 2 then dbms_output.put_line('should not get here'); elsif i_input = 1 then dbms_output.put_line('should get here');
Expand All @@ -217,7 +217,7 @@ create or replace package body coverage_helper is
end;
end;]';

execute immediate q'[create or replace package ut3_develop.test_dummy_coverage is
execute immediate q'[create or replace package ]'||p_schema||q'[.test_regex_dummy_cov_schema is
--%suite(dummy coverage test)
--%suitepath(coverage_testing)

Expand All @@ -228,10 +228,10 @@ create or replace package body coverage_helper is
procedure zero_coverage;
end;]';

execute immediate q'[create or replace package body ut3_develop.test_dummy_coverage is
execute immediate q'[create or replace package body ]'||p_schema||q'[.test_regex_dummy_cov_schema is
procedure test_do_stuff is
begin
]'||covered_package_name||q'[.do_stuff(1);
regex_dummy_cov_schema.do_stuff(1);
ut.expect(1).to_equal(1);
end;
procedure zero_coverage is
Expand All @@ -241,11 +241,19 @@ create or replace package body coverage_helper is
end;]';
end;

procedure create_regex_dummy_cov_schema is
begin
create_regex_dummy_for_schema('ut3_develop');
create_regex_dummy_for_schema('ut3_tester_helper');
end;

procedure drop_regex_dummy_cov_schema is
pragma autonomous_transaction;
begin
begin execute immediate q'[drop package ut3_helper.regex_dummy_cov_schema]'; exception when others then null; end;
begin execute immediate q'[drop package ut3_develop.regex_dummy_cov_schema]'; exception when others then null; end;
begin execute immediate q'[drop package ut3_develop.test_regex_dummy_cov_schema]'; exception when others then null; end;
begin execute immediate q'[drop package ut3_tester_helper.regex_dummy_cov_schema]'; exception when others then null; end;
begin execute immediate q'[drop package ut3_tester_helper.test_regex_dummy_cov_schema]'; exception when others then null; end;
end;


Expand Down
71 changes: 71 additions & 0 deletions test/ut3_user/reporters/test_coverage/test_extended_coverage.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -106,5 +106,76 @@ create or replace package body test_extended_coverage is
ut.expect(l_actual).to_be_like(l_expected);
end;

procedure coverage_regex_include_schema is
l_expected_ut3 clob;
l_expected_help clob;
l_actual_ut3 clob;
l_actual_help clob;
l_actual_both clob;

begin
--Arrange
l_expected_ut3 := '%<file path="package body ut3_develop.test_regex_dummy_cov_schema">' ||
'%<lineToCover lineNumber="4" covered="true"/>%';
l_expected_help := '%<file path="package body ut3_tester_helper.test_regex_dummy_cov_schema">' ||
'%<lineToCover lineNumber="4" covered="true"/>%';
--Act
l_actual_ut3 :=
ut3_tester_helper.coverage_helper.run_tests_as_job(
q'[
ut3_develop.ut.run(
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov_schema', 'ut3_tester_helper.test_regex_dummy_cov_schema'),
a_reporter=> ut3_develop.ut_coverage_sonar_reporter( ),
a_include_schema_expr => '^ut3_develop'
)
]'
);
/*
l_actual_help :=
ut3_tester_helper.coverage_helper.run_tests_as_job(
q'[
ut3_develop.ut.run(
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov_schema', 'ut3_tester_helper.test_regex_dummy_cov_schema'),
a_reporter=> ut3_develop.ut_coverage_sonar_reporter( ),
a_include_schema_expr => '^ut3_tester_helper'
)
]'
);

l_actual_both :=
ut3_tester_helper.coverage_helper.run_tests_as_job(
q'[
ut3_develop.ut.run(
a_paths => ut3_develop.ut_varchar2_list('ut3_develop.test_regex_dummy_cov_schema', 'ut3_tester_helper.test_regex_dummy_cov_schema'),
a_reporter=> ut3_develop.ut_coverage_sonar_reporter( ),
a_include_schema_expr => '^ut3_tester_helper||^ut3_tester_helper'
)
]'
);
*/
--Assert
ut.expect(l_actual_ut3).to_be_like(l_expected_ut3);
ut.expect(l_actual_ut3).not_to_be_like(l_expected_help);
--ut.expect(l_actual_help).to_be_like(l_expected_help);
--ut.expect(l_actual_help).not_to_be_like(l_expected_ut3);
--ut.expect(l_actual_both).to_be_like(l_expected_ut3);
--ut.expect(l_actual_both).to_be_like(l_expected_help);
end;

procedure coverage_regex_include_object is
begin
null;
end;

procedure coverage_regex_exclude_schema is
begin
null;
end;

procedure coverage_regex_exclude_object is
begin
null;
end;

end;
/
16 changes: 15 additions & 1 deletion test/ut3_user/reporters/test_coverage/test_extended_coverage.pks
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,20 @@ create or replace package test_extended_coverage is
--%tags(#1097,#1094)
--%test(Extended coverage does not fail the test run then tested code calls DBMS_STATS)
procedure coverage_with_dbms_stats;


--%beforetest(ut3_tester_helper.coverage_helper.create_regex_dummy_cov_schema)
--%aftertest(ut3_tester_helper.coverage_helper.drop_regex_dummy_cov_schema)
--%test(Collect coverage for objects with schema regex include)
procedure coverage_regex_include_schema;

--%test(Collect coverage for objects with schema regex include)
procedure coverage_regex_include_object;

--%test(Collect coverage for objects with schema regex include)
procedure coverage_regex_exclude_schema;

--%test(Collect coverage for objects with schema regex include)
procedure coverage_regex_exclude_object;

end;
/