diff --git a/.travis/install.sh b/.travis/install.sh index 4a319d5bc..cd8d669c0 100644 --- a/.travis/install.sh +++ b/.travis/install.sh @@ -17,7 +17,7 @@ alter user $UT3_OWNER identified by $UT3_OWNER_PASSWORD; --needed for Mystats script to work grant select any dictionary to $UT3_OWNER; --Needed for testing a coverage outside ut3_owner. -grant create any procedure, execute any procedure to $UT3_OWNER; +grant create any procedure, drop any procedure, execute any procedure to $UT3_OWNER; set feedback off @../source/create_utplsql_owner.sql $UT3_USER $UT3_USER_PASSWORD $UT3_TABLESPACE diff --git a/source/core/ut_suite_manager.pkb b/source/core/ut_suite_manager.pkb index f77e6a4f6..7c969c662 100644 --- a/source/core/ut_suite_manager.pkb +++ b/source/core/ut_suite_manager.pkb @@ -90,14 +90,11 @@ create or replace package body ut_suite_manager is if l_annotation_data.package_annotations.exists('rollback') then l_suite_rollback_annotation := l_annotation_data.package_annotations('rollback').text; - l_suite_rollback := case lower(l_suite_rollback_annotation) - when 'manual' then - ut_utils.gc_rollback_manual - when 'auto' then - ut_utils.gc_rollback_auto - else - ut_utils.gc_rollback_auto - end; + if lower(l_suite_rollback_annotation) = 'manual' then + l_suite_rollback := ut_utils.gc_rollback_manual; + else + l_suite_rollback := ut_utils.gc_rollback_auto; + end if; else l_suite_rollback := ut_utils.gc_rollback_auto; end if; @@ -158,16 +155,13 @@ create or replace package body ut_suite_manager is if l_proc_annotations.exists('rollback') then l_rollback_annotation := l_proc_annotations('rollback').text; - l_rollback_type := case lower(l_rollback_annotation) - when 'manual' then - ut_utils.gc_rollback_manual - when 'auto' then - ut_utils.gc_rollback_auto - --when 'on-error' then - -- ut_utils.gc_rollback_on_error - else - l_suite_rollback - end; + if lower(l_rollback_annotation) = 'manual' then + l_rollback_type := ut_utils.gc_rollback_manual; + elsif lower(l_rollback_annotation) = 'auto' then + l_rollback_type := ut_utils.gc_rollback_auto; + else + l_rollback_type := l_suite_rollback; + end if; end if; l_test := ut_test(a_object_owner => l_owner_name @@ -333,9 +327,8 @@ create or replace package body ut_suite_manager is begin -- Currently cache invalidation on DDL is not implemented so schema is rescaned each time l_schema_info := get_schema_info(a_schema_name); - if not g_schema_suites.exists(a_schema_name) or g_schema_suites(a_schema_name) - .changed_at <= l_schema_info.changed_at - or g_schema_suites(a_schema_name).obj_cnt != l_schema_info.obj_cnt then + if not g_schema_suites.exists(a_schema_name) or g_schema_suites(a_schema_name).changed_at <= l_schema_info.changed_at or + g_schema_suites(a_schema_name).obj_cnt != l_schema_info.obj_cnt then ut_utils.debug_log('Rescanning schema ' || a_schema_name); config_schema(a_schema_name); end if; @@ -351,18 +344,31 @@ create or replace package body ut_suite_manager is l_schema_ut_packages ut_object_names := ut_object_names(); l_schema_suites tt_schema_suites; l_iter varchar2(4000); + procedure populate_suite_ut_packages(a_suite ut_logical_suite, a_packages in out nocopy ut_object_names) is + l_sub_suite ut_logical_suite; + begin + if a_suite is of (ut_suite) then + a_packages.extend; + a_packages(a_packages.last) := ut_object_name(a_suite.object_owner, a_suite.object_name); + end if; + for i in 1 .. a_suite.items.count loop + if a_suite.items(i) is of (ut_logical_suite) then + l_sub_suite := treat(a_suite.items(i) as ut_logical_suite); + populate_suite_ut_packages(l_sub_suite, a_packages); + end if; + end loop; + end; begin if a_schema_names is not null then for i in 1 .. a_schema_names.count loop l_schema_suites := get_schema_suites(a_schema_names(i)); l_iter := l_schema_suites.first; while l_iter is not null loop - l_schema_ut_packages.extend; - 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); + populate_suite_ut_packages(l_schema_suites(l_iter), l_schema_ut_packages); l_iter := l_schema_suites.next(l_iter); end loop; end loop; --- l_schema_ut_packages := set(l_schema_ut_packages); + l_schema_ut_packages := set(l_schema_ut_packages); end if; return l_schema_ut_packages; diff --git a/tests/RunAll.sql b/tests/RunAll.sql index 0ef71878f..d312f4f84 100644 --- a/tests/RunAll.sql +++ b/tests/RunAll.sql @@ -10,6 +10,10 @@ set longchunksize 1000000 set serveroutput on size unlimited format truncated @@lib/RunVars.sql +@@lib/mystats/mystats start + +spool RunAll.log + --Global setup @@helpers/ut_example_tests.pks @@helpers/ut_example_tests.pkb @@ -32,7 +36,6 @@ create table ut$test_table (val varchar2(1)); --Start coverage in develop mode (coverage for utPLSQL framework) --Regular coverage excludes the framework exec ut_coverage.coverage_start_develop(); -@@lib/mystats/mystats start @@lib/RunTest.sql ut_annotations/ut_annotations.parse_package_annotations.IgnoreWrappedPackageAndDoesNotRaiseException.sql @@lib/RunTest.sql ut_annotations/ut_annotations.parse_package_annotations.ParseAnnotationMixedWithWrongBeforeProcedure.sql @@ -182,13 +185,14 @@ exec ut_coverage.coverage_start_develop(); @@lib/RunTest.sql ut_suite_manager/ut_suite_manager.configure_execution_by_path.PrepareRunnerForTheTop2PackageProcedureByPath.sql @@lib/RunTest.sql ut_suite_manager/ut_suite_manager.configure_execution_by_path.PrepareRunnerForTheTop2PackageProcedureByPathCurUser.sql @@lib/RunTest.sql ut_suite_manager/ut_suite_manager.DoesntFindTheSuiteWhenPackageSpecIsInvalid.sql +@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.emptySuitePath.sql +@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.get_schema_ut_packages.IncludesPackagesWithSutePath.sql @@lib/RunTest.sql ut_suite_manager/ut_suite_manager.IncludesInvalidPackageBodiesInTheRun.sql @@lib/RunTest.sql ut_suite_manager/ut_suite_manager.CacheInvalidaesOnPackageDrop.sql @@lib/RunTest.sql ut_suite_manager/ut_suite_manager.PackageWithDollarSign.sql -@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.TestWithDollarSign.sql @@lib/RunTest.sql ut_suite_manager/ut_suite_manager.PackageWithHash.sql +@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.TestWithDollarSign.sql @@lib/RunTest.sql ut_suite_manager/ut_suite_manager.TestWithHashSign.sql -@@lib/RunTest.sql ut_suite_manager/ut_suite_manager.emptySuitePath.sql @@lib/RunTest.sql ut_test/ut_test.DisabledFlagSkipTest.sql @@ -259,10 +263,11 @@ exec ut_coverage.coverage_start_develop(); @@lib/RunTest.sql ut_utils/ut_utils.to_string.veryBigVarchar2.sql @@lib/RunTest.sql ut_utils/ut_utils.to_string.verySmallNumber.sql - --Finally @@lib/RunSummary +spool off + --Global cleanup --removing objects that should not be part of coverage report drop package ut_example_tests; @@ -276,6 +281,7 @@ drop package test_package_2; drop package test_package_3; drop type utplsql_test_reporter; drop package test_reporters; +drop package ut3$user#.html_coverage_test; set timing on prompt Generating coverage data to reporter outputs diff --git a/tests/helpers/html_coverage_test.pck b/tests/helpers/html_coverage_test.pck index 08946ea0d..58b80e7b2 100644 --- a/tests/helpers/html_coverage_test.pck +++ b/tests/helpers/html_coverage_test.pck @@ -1,25 +1,25 @@ -CREATE OR REPLACE PACKAGE ut3$user#.html_coverage_test IS +create or replace package ut3$user#.html_coverage_test is -- Author : LUW07 -- Created : 23/05/2017 09:37:29 -- Purpose : Supporting html coverage procedure -- Public type declarations - PROCEDURE run_if_statment(o_result OUT NUMBER); -END HTML_COVERAGE_TEST; + procedure run_if_statment(o_result out number); +end html_coverage_test; / -CREATE OR REPLACE PACKAGE BODY ut3$user#.html_coverage_test IS +create or replace package body ut3$user#.html_coverage_test is -- Private type declarations - PROCEDURE run_if_statment(o_result OUT NUMBER) IS - l_testedvalue NUMBER := 1; - l_success NUMBER := 0; - BEGIN - IF l_testedvalue = 1 THEN + procedure run_if_statment(o_result out number) is + l_testedvalue number := 1; + l_success number := 0; + begin + if l_testedvalue = 1 then l_success := 1; - END IF; - + end if; + o_result := l_success; - END run_if_statment; -END HTML_COVERAGE_TEST; + end run_if_statment; +end html_coverage_test; / diff --git a/tests/ut_suite_manager/ut_suite_manager.AllowsDescriptionsWithComma.sql b/tests/ut_suite_manager/ut_suite_manager.AllowsDescriptionsWithComma.sql index 3ee8321a0..398030fea 100644 --- a/tests/ut_suite_manager/ut_suite_manager.AllowsDescriptionsWithComma.sql +++ b/tests/ut_suite_manager/ut_suite_manager.AllowsDescriptionsWithComma.sql @@ -60,3 +60,8 @@ begin end loop; end; / + +set termout off +drop package tst_package_to_be_dropped +/ +set termout on diff --git a/tests/ut_suite_manager/ut_suite_manager.get_schema_ut_packages.IncludesPackagesWithSutePath.sql b/tests/ut_suite_manager/ut_suite_manager.get_schema_ut_packages.IncludesPackagesWithSutePath.sql new file mode 100644 index 000000000..0f87aa2da --- /dev/null +++ b/tests/ut_suite_manager/ut_suite_manager.get_schema_ut_packages.IncludesPackagesWithSutePath.sql @@ -0,0 +1,33 @@ +set termout off +create or replace package tests as + procedure dummy; +end; +/ +set termout on + +declare + l_expected ut_object_names; + l_actual ut_object_names; +begin + l_expected := ut_object_names( + ut_object_name(user,'TEST_PACKAGE_1'), + ut_object_name(user,'TEST_PACKAGE_2'), + ut_object_name(user,'TEST_PACKAGE_3'), + ut_object_name(user,'TEST_REPORTERS_1'), + ut_object_name(user,'TEST_REPORTERS') + ); + l_actual := ut_suite_manager.get_schema_ut_packages(ut_varchar2_list(user)); + if l_actual = l_expected then + :test_result := ut_utils.tr_success; + else + dbms_output.put_line('actual:'||xmltype(anydata.convertcollection(l_actual)).getclobval()); + dbms_output.put_line('expected:'||xmltype(anydata.convertcollection(l_expected)).getclobval()); + end if; +end; +/ + +set termout off +drop package tests +/ +set termout on +