diff --git a/source/core/types/ut_suite_item.tpb b/source/core/types/ut_suite_item.tpb index 7d1a88bd2..825fc4da5 100644 --- a/source/core/types/ut_suite_item.tpb +++ b/source/core/types/ut_suite_item.tpb @@ -58,7 +58,7 @@ create or replace type body ut_suite_item as return l_savepoint; end; - member procedure rollback_to_savepoint(self in ut_suite_item, a_savepoint varchar2) is + member procedure rollback_to_savepoint(self in out nocopy ut_suite_item, a_savepoint varchar2) is ex_savepoint_not_exists exception; pragma exception_init(ex_savepoint_not_exists, -1086); begin @@ -67,7 +67,7 @@ create or replace type body ut_suite_item as end if; exception when ex_savepoint_not_exists then - null; + put_warning('Savepoint not established. Implicit commit might have occured.'); end; member function execution_time return number is diff --git a/source/core/types/ut_suite_item.tps b/source/core/types/ut_suite_item.tps index 5a4ee05c8..721506a8f 100644 --- a/source/core/types/ut_suite_item.tps +++ b/source/core/types/ut_suite_item.tps @@ -23,7 +23,7 @@ create or replace type ut_suite_item force under ut_suite_item_base ( member procedure set_disabled_flag(self in out nocopy ut_suite_item, a_disabled_flag boolean), member function get_disabled_flag return boolean, member function create_savepoint_if_needed return varchar2, - member procedure rollback_to_savepoint(self in ut_suite_item, a_savepoint varchar2), + member procedure rollback_to_savepoint(self in out nocopy ut_suite_item, a_savepoint varchar2), member function execution_time return number, not instantiable member function do_execute(self in out nocopy ut_suite_item, a_listener in out nocopy ut_event_listener_base) return boolean, diff --git a/tests/RunAll.sql b/tests/RunAll.sql index 8f5f98f12..ee1b044ed 100644 --- a/tests/RunAll.sql +++ b/tests/RunAll.sql @@ -164,6 +164,7 @@ exec ut_coverage.coverage_start_develop(); @@lib/RunTest.sql ut_test/ut_test.BeforeEachProcedureNameNull.sql @@lib/RunTest.sql ut_test/ut_test.TestOutputGathering.sql @@lib/RunTest.sql ut_test/ut_test.TestOutputGatheringForTeamcity.sql +@@lib/RunTest.sql ut_test/ut_test.ReportWarningOnRollbackFailed.sql @@lib/RunTest.sql ut_test_suite/ut_test_suite.ErrorsATestWhenAfterTestFails.sql @@lib/RunTest.sql ut_test_suite/ut_test_suite.ErrorsATestWhenBeforeTestFails.sql diff --git a/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql b/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql new file mode 100644 index 000000000..e090e92ba --- /dev/null +++ b/tests/ut_test/ut_test.ReportWarningOnRollbackFailed.sql @@ -0,0 +1,52 @@ +create or replace package ut_output_test_rollback +as + --%suite + + --%test + procedure tt; + +end; +/ + +create or replace package body ut_output_test_rollback +as + + procedure tt is + begin + commit; + end; + +end; +/ + +declare + l_output_data dbms_output.chararr; + l_num_lines integer := 100000; + l_output clob; +begin + --act + ut.run('ut_output_test_rollback'); + + --assert + dbms_output.get_lines( l_output_data, l_num_lines); + dbms_lob.createtemporary(l_output,true); + for i in 1 .. l_num_lines loop + dbms_lob.append(l_output,l_output_data(i)); + end loop; + + if l_output like '%Warnings:%Savepoint not established. Implicit commit might have occured.%0 disabled, 1 warning(s)%' then + :test_result := ut_utils.tr_success; + end if; + + if :test_result != ut_utils.tr_success or :test_result is null then + for i in 1 .. l_num_lines loop + dbms_output.put_line(l_output_data(i)); + end loop; + dbms_output.put_line('Failed: Wrong output'); + end if; +end; +/ + +drop package ut_output_test_rollback +/ +