From a650d5cb39968f587728386adf345a972f8e8f24 Mon Sep 17 00:00:00 2001 From: Jacek Date: Wed, 12 Jul 2017 19:35:52 +0100 Subject: [PATCH] Resolves #374 The `--%disabled` annotation was ignoring a suite instead of reporting all the tests from the suite as (IGNORED). This is now resolved by: - Propagating the disabled flag each child item (at build stage) - Processing each child item and evaluating the disabled flag (at execute stage) --- source/core/types/ut_logical_suite.tpb | 22 +++----- source/core/types/ut_suite.tpb | 11 ++-- source/core/ut_suite_manager.pkb | 4 +- .../ut_test_suite.DisabledFlagSkipSuite.sql | 52 +++++++++++-------- 4 files changed, 43 insertions(+), 46 deletions(-) diff --git a/source/core/types/ut_logical_suite.tpb b/source/core/types/ut_logical_suite.tpb index b0e19a3cb..983a7c5a9 100644 --- a/source/core/types/ut_logical_suite.tpb +++ b/source/core/types/ut_logical_suite.tpb @@ -62,23 +62,13 @@ create or replace type body ut_logical_suite as a_listener.fire_before_event(ut_utils.gc_suite,self); self.start_time := current_timestamp; - if self.get_disabled_flag() then - self.result := ut_utils.tr_disabled; - self.end_time := self.start_time; - ut_utils.debug_log('ut_logical_suite.execute - disabled'); - else - - self.start_time := current_timestamp; - - for i in 1 .. self.items.count loop - -- execute the item (test or suite) - self.items(i).do_execute(a_listener); - end loop; - - self.calc_execution_result(); - self.end_time := current_timestamp; + for i in 1 .. self.items.count loop + -- execute the item (test or suite) + self.items(i).do_execute(a_listener); + end loop; - end if; + self.calc_execution_result(); + self.end_time := current_timestamp; a_listener.fire_after_event(ut_utils.gc_suite,self); diff --git a/source/core/types/ut_suite.tpb b/source/core/types/ut_suite.tpb index 09d316ec6..0215b6c0b 100644 --- a/source/core/types/ut_suite.tpb +++ b/source/core/types/ut_suite.tpb @@ -57,8 +57,9 @@ create or replace type body ut_suite as self.start_time := current_timestamp; if self.get_disabled_flag() then - self.result := ut_utils.tr_disabled; - self.end_time := self.start_time; + for i in 1 .. self.items.count loop + self.items(i).do_execute(a_listener); + end loop; ut_utils.debug_log('ut_suite.execute - disabled'); else @@ -87,11 +88,9 @@ create or replace type body ut_suite as else propagate_error(ut_utils.table_to_clob(self.get_error_stack_traces())); end if; - - self.calc_execution_result(); - self.end_time := current_timestamp; - end if; + self.calc_execution_result(); + self.end_time := current_timestamp; a_listener.fire_after_event(ut_utils.gc_suite,self); return l_suite_step_without_errors; diff --git a/source/core/ut_suite_manager.pkb b/source/core/ut_suite_manager.pkb index ec70af29e..f77e6a4f6 100644 --- a/source/core/ut_suite_manager.pkb +++ b/source/core/ut_suite_manager.pkb @@ -176,7 +176,7 @@ create or replace package body ut_suite_manager is ,a_description => l_displayname ,a_path => l_suite.path || '.' || l_proc_name ,a_rollback_type => l_rollback_type - ,a_disabled_flag => l_proc_annotations.exists('disabled') + ,a_disabled_flag => l_annotation_data.package_annotations.exists('disabled') or l_proc_annotations.exists('disabled') ,a_before_test_proc_name => l_beforetest_procedure ,a_after_test_proc_name => l_aftertest_procedure ,a_before_each_proc_name => l_default_setup_proc @@ -416,8 +416,6 @@ create or replace package body ut_suite_manager is l_item_name varchar2(32767); begin - a_suite.set_disabled_flag(false); - if a_path is not null and a_suite is not null and a_suite is of (ut_logical_suite) then l_suite := treat(a_suite as ut_logical_suite); diff --git a/tests/ut_test_suite/ut_test_suite.DisabledFlagSkipSuite.sql b/tests/ut_test_suite/ut_test_suite.DisabledFlagSkipSuite.sql index 1fec69f68..308e4027d 100644 --- a/tests/ut_test_suite/ut_test_suite.DisabledFlagSkipSuite.sql +++ b/tests/ut_test_suite/ut_test_suite.DisabledFlagSkipSuite.sql @@ -1,34 +1,44 @@ -PROMPT Disable whole suite by disabled flag - --Arrange +create or replace package test_disabled_suite as + --%suite + --%disabled + gv_glob_val number := 0; + --%beforeall + procedure before_all; + --%test + procedure test1; + --%test + procedure test2; +end; +/ + declare - l_suite ut_logical_suite; - l_test ut_test; - l_parsing_result ut_annotations.typ_annotated_package; - l_expected ut_annotations.typ_annotated_package; - l_ann_param ut_annotations.typ_annotation_param; - l_cnt number; - l_listener ut_event_listener := ut_event_listener(ut_reporters()); + l_lines ut_varchar2_list; + l_results clob; begin - - delete from ut$test_table; - - l_test := ut_test(a_object_name => 'ut_transaction_control',a_name => 'test', a_rollback_type => ut_utils.gc_rollback_auto); - l_suite := ut_suite (a_description => 'Suite name', a_name => 'UT_TRANSACTION_CONTROL', a_object_name => 'UT_TRANSACTION_CONTROL', a_rollback_type => ut_utils.gc_rollback_auto,a_path => 'ut_transaction_control'); - l_suite.add_item(l_test); - l_suite.set_disabled_flag(true); - --Act - l_suite.do_execute(l_listener); + select * bulk collect into l_lines from table(ut.run('test_disabled_suite')); - ut_expectation_processor.clear_expectations; + l_results := ut_utils.table_to_clob(l_lines); --Assert - ut.expect(ut_transaction_control.count_rows('t')).to_equal(0); + ut.expect(l_results).to_be_like('%test1 [0 sec] (IGNORED)%'); + ut.expect(l_results).to_be_like('%test2 [0 sec] (IGNORED)%'); + ut.expect(l_results).to_be_like('%2 tests, 0 failed, 0 errored, 2 disabled, 0 warning(s)%'); if ut_expectation_processor.get_status = ut_utils.tr_success then :test_result := ut_utils.tr_success; + else + dbms_output.put_line( + xmltype( + anydata.convertcollection( + ut_expectation_processor.get_expectations_results() + ) + ).getclobval() + ); end if; - end; / + +drop package test_disabled_suite +/