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

Skip to content

Commit 7632d99

Browse files
authored
Merge pull request #395 from jgebal/bugfix/coverage_filtering
Resolves #393 and #394 and #367
2 parents 00d2fce + 171d876 commit 7632d99

6 files changed

Lines changed: 92 additions & 42 deletions

File tree

.travis/install.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ alter user $UT3_OWNER identified by $UT3_OWNER_PASSWORD;
1717
--needed for Mystats script to work
1818
grant select any dictionary to $UT3_OWNER;
1919
--Needed for testing a coverage outside ut3_owner.
20-
grant create any procedure, execute any procedure to $UT3_OWNER;
20+
grant create any procedure, drop any procedure, execute any procedure to $UT3_OWNER;
2121
2222
set feedback off
2323
@../source/create_utplsql_owner.sql $UT3_USER $UT3_USER_PASSWORD $UT3_TABLESPACE

source/core/ut_suite_manager.pkb

Lines changed: 30 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -90,14 +90,11 @@ create or replace package body ut_suite_manager is
9090

9191
if l_annotation_data.package_annotations.exists('rollback') then
9292
l_suite_rollback_annotation := l_annotation_data.package_annotations('rollback').text;
93-
l_suite_rollback := case lower(l_suite_rollback_annotation)
94-
when 'manual' then
95-
ut_utils.gc_rollback_manual
96-
when 'auto' then
97-
ut_utils.gc_rollback_auto
98-
else
99-
ut_utils.gc_rollback_auto
100-
end;
93+
if lower(l_suite_rollback_annotation) = 'manual' then
94+
l_suite_rollback := ut_utils.gc_rollback_manual;
95+
else
96+
l_suite_rollback := ut_utils.gc_rollback_auto;
97+
end if;
10198
else
10299
l_suite_rollback := ut_utils.gc_rollback_auto;
103100
end if;
@@ -158,16 +155,13 @@ create or replace package body ut_suite_manager is
158155

159156
if l_proc_annotations.exists('rollback') then
160157
l_rollback_annotation := l_proc_annotations('rollback').text;
161-
l_rollback_type := case lower(l_rollback_annotation)
162-
when 'manual' then
163-
ut_utils.gc_rollback_manual
164-
when 'auto' then
165-
ut_utils.gc_rollback_auto
166-
--when 'on-error' then
167-
-- ut_utils.gc_rollback_on_error
168-
else
169-
l_suite_rollback
170-
end;
158+
if lower(l_rollback_annotation) = 'manual' then
159+
l_rollback_type := ut_utils.gc_rollback_manual;
160+
elsif lower(l_rollback_annotation) = 'auto' then
161+
l_rollback_type := ut_utils.gc_rollback_auto;
162+
else
163+
l_rollback_type := l_suite_rollback;
164+
end if;
171165
end if;
172166

173167
l_test := ut_test(a_object_owner => l_owner_name
@@ -333,9 +327,8 @@ create or replace package body ut_suite_manager is
333327
begin
334328
-- Currently cache invalidation on DDL is not implemented so schema is rescaned each time
335329
l_schema_info := get_schema_info(a_schema_name);
336-
if not g_schema_suites.exists(a_schema_name) or g_schema_suites(a_schema_name)
337-
.changed_at <= l_schema_info.changed_at
338-
or g_schema_suites(a_schema_name).obj_cnt != l_schema_info.obj_cnt then
330+
if not g_schema_suites.exists(a_schema_name) or g_schema_suites(a_schema_name).changed_at <= l_schema_info.changed_at or
331+
g_schema_suites(a_schema_name).obj_cnt != l_schema_info.obj_cnt then
339332
ut_utils.debug_log('Rescanning schema ' || a_schema_name);
340333
config_schema(a_schema_name);
341334
end if;
@@ -351,18 +344,31 @@ create or replace package body ut_suite_manager is
351344
l_schema_ut_packages ut_object_names := ut_object_names();
352345
l_schema_suites tt_schema_suites;
353346
l_iter varchar2(4000);
347+
procedure populate_suite_ut_packages(a_suite ut_logical_suite, a_packages in out nocopy ut_object_names) is
348+
l_sub_suite ut_logical_suite;
349+
begin
350+
if a_suite is of (ut_suite) then
351+
a_packages.extend;
352+
a_packages(a_packages.last) := ut_object_name(a_suite.object_owner, a_suite.object_name);
353+
end if;
354+
for i in 1 .. a_suite.items.count loop
355+
if a_suite.items(i) is of (ut_logical_suite) then
356+
l_sub_suite := treat(a_suite.items(i) as ut_logical_suite);
357+
populate_suite_ut_packages(l_sub_suite, a_packages);
358+
end if;
359+
end loop;
360+
end;
354361
begin
355362
if a_schema_names is not null then
356363
for i in 1 .. a_schema_names.count loop
357364
l_schema_suites := get_schema_suites(a_schema_names(i));
358365
l_iter := l_schema_suites.first;
359366
while l_iter is not null loop
360-
l_schema_ut_packages.extend;
361-
l_schema_ut_packages(l_schema_ut_packages.last) := ut_object_name(l_schema_suites(l_iter).object_owner, l_schema_suites(l_iter).object_name);
367+
populate_suite_ut_packages(l_schema_suites(l_iter), l_schema_ut_packages);
362368
l_iter := l_schema_suites.next(l_iter);
363369
end loop;
364370
end loop;
365-
-- l_schema_ut_packages := set(l_schema_ut_packages);
371+
l_schema_ut_packages := set(l_schema_ut_packages);
366372
end if;
367373

368374
return l_schema_ut_packages;

tests/RunAll.sql

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ set longchunksize 1000000
1010
set serveroutput on size unlimited format truncated
1111
@@lib/RunVars.sql
1212

13+
@@lib/mystats/mystats start
14+
15+
spool RunAll.log
16+
1317
--Global setup
1418
@@helpers/ut_example_tests.pks
1519
@@helpers/ut_example_tests.pkb
@@ -32,7 +36,6 @@ create table ut$test_table (val varchar2(1));
3236
--Start coverage in develop mode (coverage for utPLSQL framework)
3337
--Regular coverage excludes the framework
3438
exec ut_coverage.coverage_start_develop();
35-
@@lib/mystats/mystats start
3639

3740
@@lib/RunTest.sql ut_annotations/ut_annotations.parse_package_annotations.IgnoreWrappedPackageAndDoesNotRaiseException.sql
3841
@@lib/RunTest.sql ut_annotations/ut_annotations.parse_package_annotations.ParseAnnotationMixedWithWrongBeforeProcedure.sql
@@ -182,13 +185,14 @@ exec ut_coverage.coverage_start_develop();
182185
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.configure_execution_by_path.PrepareRunnerForTheTop2PackageProcedureByPath.sql
183186
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.configure_execution_by_path.PrepareRunnerForTheTop2PackageProcedureByPathCurUser.sql
184187
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.DoesntFindTheSuiteWhenPackageSpecIsInvalid.sql
188+
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.emptySuitePath.sql
189+
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.get_schema_ut_packages.IncludesPackagesWithSutePath.sql
185190
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.IncludesInvalidPackageBodiesInTheRun.sql
186191
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.CacheInvalidaesOnPackageDrop.sql
187192
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.PackageWithDollarSign.sql
188-
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.TestWithDollarSign.sql
189193
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.PackageWithHash.sql
194+
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.TestWithDollarSign.sql
190195
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.TestWithHashSign.sql
191-
@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.emptySuitePath.sql
192196

193197

194198
@@lib/RunTest.sql ut_test/ut_test.DisabledFlagSkipTest.sql
@@ -259,10 +263,11 @@ exec ut_coverage.coverage_start_develop();
259263
@@lib/RunTest.sql ut_utils/ut_utils.to_string.veryBigVarchar2.sql
260264
@@lib/RunTest.sql ut_utils/ut_utils.to_string.verySmallNumber.sql
261265

262-
263266
--Finally
264267
@@lib/RunSummary
265268

269+
spool off
270+
266271
--Global cleanup
267272
--removing objects that should not be part of coverage report
268273
drop package ut_example_tests;
@@ -276,6 +281,7 @@ drop package test_package_2;
276281
drop package test_package_3;
277282
drop type utplsql_test_reporter;
278283
drop package test_reporters;
284+
drop package ut3$user#.html_coverage_test;
279285

280286
set timing on
281287
prompt Generating coverage data to reporter outputs
Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,25 @@
1-
CREATE OR REPLACE PACKAGE ut3$user#.html_coverage_test IS
1+
create or replace package ut3$user#.html_coverage_test is
22

33
-- Author : LUW07
44
-- Created : 23/05/2017 09:37:29
55
-- Purpose : Supporting html coverage procedure
66

77
-- Public type declarations
8-
PROCEDURE run_if_statment(o_result OUT NUMBER);
9-
END HTML_COVERAGE_TEST;
8+
procedure run_if_statment(o_result out number);
9+
end html_coverage_test;
1010
/
11-
CREATE OR REPLACE PACKAGE BODY ut3$user#.html_coverage_test IS
11+
create or replace package body ut3$user#.html_coverage_test is
1212

1313
-- Private type declarations
14-
PROCEDURE run_if_statment(o_result OUT NUMBER) IS
15-
l_testedvalue NUMBER := 1;
16-
l_success NUMBER := 0;
17-
BEGIN
18-
IF l_testedvalue = 1 THEN
14+
procedure run_if_statment(o_result out number) is
15+
l_testedvalue number := 1;
16+
l_success number := 0;
17+
begin
18+
if l_testedvalue = 1 then
1919
l_success := 1;
20-
END IF;
21-
20+
end if;
21+
2222
o_result := l_success;
23-
END run_if_statment;
24-
END HTML_COVERAGE_TEST;
23+
end run_if_statment;
24+
end html_coverage_test;
2525
/

tests/ut_suite_manager/ut_suite_manager.AllowsDescriptionsWithComma.sql

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -60,3 +60,8 @@ begin
6060
end loop;
6161
end;
6262
/
63+
64+
set termout off
65+
drop package tst_package_to_be_dropped
66+
/
67+
set termout on
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
set termout off
2+
create or replace package tests as
3+
procedure dummy;
4+
end;
5+
/
6+
set termout on
7+
8+
declare
9+
l_expected ut_object_names;
10+
l_actual ut_object_names;
11+
begin
12+
l_expected := ut_object_names(
13+
ut_object_name(user,'TEST_PACKAGE_1'),
14+
ut_object_name(user,'TEST_PACKAGE_2'),
15+
ut_object_name(user,'TEST_PACKAGE_3'),
16+
ut_object_name(user,'TEST_REPORTERS_1'),
17+
ut_object_name(user,'TEST_REPORTERS')
18+
);
19+
l_actual := ut_suite_manager.get_schema_ut_packages(ut_varchar2_list(user));
20+
if l_actual = l_expected then
21+
:test_result := ut_utils.tr_success;
22+
else
23+
dbms_output.put_line('actual:'||xmltype(anydata.convertcollection(l_actual)).getclobval());
24+
dbms_output.put_line('expected:'||xmltype(anydata.convertcollection(l_expected)).getclobval());
25+
end if;
26+
end;
27+
/
28+
29+
set termout off
30+
drop package tests
31+
/
32+
set termout on
33+

0 commit comments

Comments
 (0)