8000 Merge pull request #1091 from utPLSQL/feature/fix_coverage_uk_violati… · utPLSQL/utPLSQL@09e495e · GitHub
[go: up one dir, main page]

Skip to content

Commit 09e495e

Browse files
authored
Merge pull request #1091 from utPLSQL/feature/fix_coverage_uk_violation_on_dup_obj_name
Feature/fix coverage uk violation on dup obj name
2 parents 461bc01 + e96b978 commit 09e495e

18 files changed

+127
-50
lines changed

.travis/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -147,7 +147,7 @@ PROMPT Grants for testing coverage outside of main $UT3_DEVELOP_SCHEMA schema.
147147
grant create any procedure, drop any procedure, execute any procedure, create any type, drop any type, execute any type, under any type,
148148
select any table, update any table, insert any table, delete any table, create any table, drop any table, alter any table,
149149
select any dictionary, create any synonym, drop any synonym,
150-
grant any object privilege, grant any privilege, create public synonym, drop public synonym
150+
grant any object privilege, grant any privilege, create public synonym, drop public synonym, create any trigger
151151
to $UT3_TESTER_HELPER;
152152
153153
grant create job to $UT3_TESTER_HELPER;

source/core/coverage/ut_coverage.pkb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ create or replace package body ut_coverage is
4848
),
4949
sources as (
5050
select /*+ cardinality(f {mappings_cardinality}) */
51-
{l_full_name} as full_name, s.owner, s.name,
51+
{l_full_name} as full_name, s.owner, s.name, s.type,
5252
s.line - case when s.type = 'TRIGGER' then o.offset else 0 end as line,
5353
s.text
5454
from {sources_view} s {join_file_mappings}
@@ -58,7 +58,7 @@ create or replace package body ut_coverage is
5858
{filters}
5959
),
6060
coverage_sources as (
61-
select full_name, owner, name, line, text,
61+
select full_name, owner, name, type, line, text,
6262
case
6363
when
6464
-- to avoid execution of regexp_like on every line
@@ -77,7 +77,7 @@ create or replace package body ut_coverage is
7777
end as to_be_skipped
7878
from sources s
7979
)
80-
select full_name, owner, name, line, to_be_skipped, text
80+
select full_name, owner, name, type, line, to_be_skipped, text
8181
from coverage_sources s
8282
-- Exclude calls to utPLSQL framework, Unit Test packages and objects from a_exclude_list parameter of coverage reporter
8383
where (s.owner, s.name) not in ( select /*+ cardinality(el {skipped_objects_cardinality})*/el.owner, el.name from table(:l_skipped_objects) el )
@@ -93,7 +93,7 @@ create or replace package body ut_coverage is
9393
and s.type = f.object_type
9494
and s.owner = f.object_owner';
9595
else
96-
l_full_name := q'[lower(s.owner||'.'||s.name)]';
96+
l_full_name := q'[lower(s.type||' '||s.owner||'.'||s.name)]';
9797
l_filters := case
9898
when a_coverage_options.in 57AE clude_objects is not empty then '
9999
and (s.owner, s.name) in (

source/core/coverage/ut_coverage_block.pkb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -40,11 +40,7 @@ create or replace package body ut_coverage_block is
4040
exit when l_source_objects_crsr%notfound;
4141

4242
--get coverage data
43-
l_line_calls := ut_coverage_helper_block.get_raw_coverage_data(
44-
l_source_object.owner,
45-
l_source_object.name,
46-
a_coverage_options.coverage_run_id
47-
);
43+
l_line_calls := ut_coverage_helper_block.get_raw_coverage_data(l_source_object, a_coverage_options.coverage_run_id);
4844
--if there is coverage, we need to filter out the garbage (badly indicated data)
4945
if l_line_calls.count > 0 then
5046
--remove lines that should not be indicted as meaningful

source/core/coverage/ut_coverage_helper.pkb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ create or replace package body ut_coverage_helper is
3636
begin
3737
forall i in 1 .. a_data.count
3838
insert into ut_coverage_sources_tmp
39-
(full_name,owner,name,line,text, to_be_skipped)
40-
values(a_data(i).full_name,a_data(i).owner,a_data(i).name,a_data(i).line,a_data(i).text,a_data(i).to_be_skipped);
39+
(full_name,owner,name,type,line,text,to_be_skipped)
40+
values(a_data(i).full_name,a_data(i).owner,a_data(i).name,a_data(i).type,a_data(i).line,a_data(i).text,a_data(i).to_be_skipped);
4141
end;
4242

4343
procedure cleanup_tmp_table is
@@ -60,12 +60,12 @@ create or replace package body ut_coverage_helper is
6060
l_result t_tmp_table_objects_crsr;
6161
begin
6262
open l_result for
63-
select o.owner, o.name, o.full_name, max(o.line) as lines_count,
63+
select o.owner, o.name, o.type, o.full_name, max(o.line) as lines_count,
6464
cast(
6565
collect(decode(to_be_skipped, 'Y', to_char(line))) as ut_varchar2_list
6666
) as to_be_skipped_list
6767
from ut_coverage_sources_tmp o
68-
group by o.owner, o.name, o.full_name;
68+
group by o.owner, o.name, o.type, o.full_name;
6969

7070
return l_result;
7171
end;

source/core/coverage/ut_coverage_helper.pks

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ create or replace package ut_coverage_helper authid definer is
3232
full_name ut_coverage_sources_tmp.full_name%type,
3333
owner ut_coverage_sources_tmp.owner%type,
3434
name ut_coverage_sources_tmp.name%type,
35+
type ut_coverage_sources_tmp.type%type,
3536
line ut_coverage_sources_tmp.line%type,
3637
to_be_skipped ut_coverage_sources_tmp.to_be_skipped%type,
3738
text ut_coverage_sources_tmp.text%type
@@ -42,6 +43,7 @@ create or replace package ut_coverage_helper authid definer is
4243
type t_tmp_table_object is record(
4344
owner ut_coverage_sources_tmp.owner%type,
4445
name ut_coverage_sources_tmp.name%type,
46+
type ut_coverage_sources_tmp.type%type,
4547
full_name ut_coverage_sources_tmp.full_name%type,
4648
lines_count integer,
4749
to_be_skipped_list ut_varchar2_list

source/core/coverage/ut_coverage_helper_block.pkb

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ create or replace package body ut_coverage_helper_block is
4141
$end
4242
end;
4343

44-
function block_results(a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw) return t_block_rows is
44+
function block_results(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return t_block_rows is
4545
l_coverage_rows t_block_rows;
4646
l_ut_owner varchar2(250) := ut_utils.ut_owner;
4747
begin
@@ -61,23 +61,27 @@ create or replace package body ut_coverage_helper_block is
6161
where r.coverage_run_id = :a_coverage_run_id
6262
and ccu.owner = :a_object_owner
6363
and ccu.name = :a_object_name
64+
and ccu.type = :a_object_type
6465
group by ccb.line, ccb.block
6566
)
6667
group by line
68+
having count(block) > 1
6769
order by line]'
68-
bulk collect into l_coverage_rows using a_coverage_run_id, a_object_owner, a_object_name;
70+
bulk collect into l_coverage_rows
71+
using
72+
a_coverage_run_id, a_object.owner,
73+
a_object.name, a_object.type;
74+
6975
return l_coverage_rows;
7076
end;
7177

72-
function get_raw_coverage_data(
73-
a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw
74-
) return ut_coverage_helper.t_unit_line_calls is
78+
function get_raw_coverage_data(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return ut_coverage_helper.t_unit_line_calls is
7579
l_tmp_data t_block_rows;
7680
l_results ut_coverage_helper.t_unit_line_calls;
7781

7882
begin
7983
$if dbms_db_version.version = 12 and dbms_db_version.release >= 2 or dbms_db_version.version > 12 $then
80-
l_tmp_data := block_results(a_object_owner, a_object_name, a_coverage_run_id);
84+
l_tmp_data := block_results(a_object, a_coverage_run_id);
8185

8286
for i in 1 .. l_tmp_data.count loop
8387
l_results(l_tmp_data(i).line).blocks := l_tmp_data(i).blocks;

source/core/coverage/ut_coverage_helper_block.pks

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,7 @@ create or replace package ut_coverage_helper_block authid current_user is
2020

2121
procedure coverage_stop;
2222

23-
function get_raw_coverage_data(
24-
a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw
25-
) return ut_coverage_helper.t_unit_line_calls;
23+
function get_raw_coverage_data(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return ut_coverage_helper.t_unit_line_calls;
2624

2725
end;
2826
/

source/core/coverage/ut_coverage_helper_profiler.pkb

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ create or replace package body ut_coverage_helper_profiler is
5555
dbms_profiler.stop_profiler();
5656
end;
5757

58-
function proftab_results(a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw) return t_proftab_rows is
58+
function proftab_results(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return t_proftab_rows is
5959
l_coverage_rows t_proftab_rows;
6060
begin
6161
select
@@ -69,21 +69,19 @@ create or replace package body ut_coverage_helper_profiler is
6969
join ut_coverage_runs r
7070
on r.line_coverage_id = u.runid
7171
where r.coverage_run_id = a_coverage_run_id
72-
and u.unit_owner = a_object_owner
73-
and u.unit_name = a_object_name
74-
and u.unit_type in ('PACKAGE BODY', 'TYPE BODY', 'PROCEDURE', 'FUNCTION', 'TRIGGER')
72+
and u.unit_owner = a_object.owner
73+
and u.unit_name = a_object.name
74+
and u.unit_type = a_object.type
7575
group by d.line#;
7676

7777
return l_coverage_rows;
7878
end;
7979

80-
function get_raw_coverage_data(
81-
a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw
82-
) return ut_coverage_helper.t_unit_line_calls is
80+
function get_raw_coverage_data(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return ut_coverage_helper.t_unit_line_calls is
8381
l_tmp_data t_proftab_rows;
8482
l_results ut_coverage_helper.t_unit_line_calls;
8583
begin
86-
l_tmp_data := proftab_results(a_object_owner, a_object_name, a_coverage_run_id);
84+
l_tmp_data := proftab_results(a_object, a_coverage_run_id);
8785

8886
for i in 1 .. l_tmp_data.count loop
8987
l_results(l_tmp_data(i).line).calls := l_tmp_data(i).calls;

source/core/coverage/ut_coverage_helper_profiler.pks

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,7 @@ create or replace package ut_coverage_helper_profiler authid definer is
2424

2525
procedure coverage_resume;
2626

27-
function get_raw_coverage_data(
28-
a_object_owner varchar2, a_object_name varchar2, a_coverage_run_id raw
29-
) return ut_coverage_helper.t_unit_line_calls;
27+
function get_raw_coverage_data(a_object ut_coverage_helper.t_tmp_table_object, a_coverage_run_id raw) return ut_coverage_helper.t_unit_line_calls;
3028

3129
end;
3230
/

source/core/coverage/ut_coverage_profiler.pkb

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,11 +34,7 @@ create or replace package body ut_coverage_profiler is
3434
exit when l_source_objects_crsr%notfound;
3535

3636
--get coverage data
37-
l_line_calls := ut_coverage_helper_profiler.get_raw_coverage_data(
38-
l_source_object.owner,
39-
l_source_object.name,
40-
a_coverage_options.coverage_run_id
41-
);
37+
l_line_calls := ut_coverage_helper_profiler.get_raw_coverage_data( l_source_object, a_coverage_options.coverage_run_id);
4238

4339
--if there is coverage, we need to filter out the garbage (badly indicated data from dbms_profiler)
4440
if l_line_calls.count > 0 then

source/core/coverage/ut_coverage_sources_tmp.sql

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,11 @@ create global temporary table ut_coverage_sources_tmp(
1515
full_name varchar2(4000),
1616
owner varchar2(250),
1717
name varchar2(250),
18+
type varchar2(250),
1819
line number(38,0),
1920
to_be_skipped varchar2(1),
2021
text varchar2(4000),
21-
constraint ut_coverage_sources_tmp_pk primary key (owner,name,line)
22+
constraint ut_coverage_sources_tmp_pk primary key (owner,name,type,line)
2223
) on commit preserve rows;
2324

2425
--is this needed?

test/ut3_tester_helper/coverage_helper.pkb

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -246,5 +246,58 @@ create or replace package body coverage_helper is
246246
return run_code_as_job( l_plsql_block );
247247
end;
248248

249+
procedure create_dup_object_name is
250+
pragma autonomous_transaction;
10000 251+
begin
252+
execute immediate 'create table ut3_develop.test_table(id integer)';
253+
execute immediate q'[
254+
create or replace trigger ut3_develop.duplicate_name
255+
before insert on ut3_develop.test_table
256+
begin
257+
258+
dbms_output.put_line('A');
259+
end;
260+
]';
261+
execute immediate q'[
262+
create or replace package ut3_develop.duplicate_name is
263+
procedure some_procedure;
264+
end;
265+
]';
266+
execute immediate q'[
267+
create or replace package body ut3_develop.duplicate_name is
268+
procedure some_procedure is
269+
begin
270+
insert into test_table(id) values(1);
271+
end;
272+
end;
273+
]';
274+
execute immediate q'[
275+
create or replace package ut3_develop.test_duplicate_name is
276+
--%suite
277+
278+
--%test
279+
procedure run_duplicate_name;
280+
end;
281+
]';
282+
execute immediate q'[
283+
create or replace package body ut3_develop.test_duplicate_name is
284+
procedure run_duplicate_name is
285+
l_actual sys_refcursor;
286+
begin
287+
ut3_develop.duplicate_name.some_procedure;
288+
ut.expect(l_actual).to_have_count(1);
289+
end;
290+
end;
291+
]';
292+
end;
293+
294+
procedure drop_dup_object_name is
295+
pragma autonomous_transaction;
296+
begin
297+
execute immediate 'drop table ut3_develop.test_table';
298+
execute immediate 'drop package ut3_develop.duplicate_name';
299+
execute immediate 'drop package ut3_develop.test_duplicate_name';
300+
end;
301+
249302
end;
250303
/

test/ut3_tester_helper/coverage_helper.pks

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,5 +22,8 @@ create or replace package coverage_helper is
2222
procedure create_test_results_table;
2323
procedure drop_test_results_table;
2424

25+
procedure drop_dup_object_name;
26+
procedure create_dup_object_name;
27+
2528
end;
2629
/

test/ut3_user/reporters/test_coverage/test_coverage_standalone.pkb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ create or replace package body test_coverage_standalone is
55
l_block_cov clob;
66
l_file_path varchar2(250);
77
begin
8-
l_file_path := 'ut3_develop.'||a_object_name;
8+
l_file_path := 'package body ut3_develop.'||a_object_name;
99
--Arrange
1010
if ut3_tester_helper.coverage_helper.block_coverage_available then
1111
l_block_cov := '<line number="4" hits="5" branch="true" condition-coverage="67% (2/3)"/>';

test/ut3_user/reporters/test_coverage/test_coveralls_reporter.pkb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ null,
4141
begin
4242
--Arrange
4343
l_expected := q'[{"source_files":[
44-
{ "name": "ut3_develop.]'||ut3_tester_helper.coverage_helper.covered_package_name||q'[",
44+
{ "name": "package body ut3_develop.]'||ut3_tester_helper.coverage_helper.covered_package_name||q'[",
4545
"coverage": [
4646
0,
4747
0,

test/ut3_user/reporters/test_coverage/test_extended_coverage.pkb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ create or replace package body test_extended_coverage is
1515
l_actual clob;
1616
begin
1717
--Arrange
18-
l_expected := '%<file path="ut3_develop.'||ut3_tester_helper.coverage_helper.covered_package_name||'">' ||
18+
l_expected := '%<file path="package body ut3_develop.'||ut3_tester_helper.coverage_helper.covered_package_name||'">' ||
1919
get_block_coverage_line||
2020
'%<lineToCover lineNumber="6" covered="false"/>%';
2121
--Act
@@ -38,7 +38,7 @@ create or replace package body test_extended_coverage is
3838
l_actual clob;
3939
begin
4040
--Arrange
41-
l_expected := '%<file path="ut3_develop.'||ut3_tester_helper.coverage_helper.covered_package_name||'">' ||
41+
l_expected := '%<file path="package body ut3_develop.'||ut3_tester_helper.coverage_helper.covered_package_name||'">' ||
4242
get_block_coverage_line ||
4343
'%<lineToCover lineNumber="6" covered="false"/>%';
4444
--Act
@@ -54,7 +54,7 @@ create or replace package body test_extended_coverage is
5454
);
5555
--Assert
5656
ut.expect(l_actual).to_be_like(l_expected);
57-
ut.expect(l_actual).to_be_like('%<file path="ut3_develop.%">%<file path="ut3_develop.%">%');
57+
ut.expect(l_actual).to_be_like('%<file path="package body ut3_develop.%">%<file path="package body ut3_develop.%">%');
5858
end;
5959

6060
procedure coverage_for_file is

0 commit comments

Comments
 (0)
0