diff --git a/source/api/ut.pkb b/source/api/ut.pkb index cff35b771..f2421cb78 100644 --- a/source/api/ut.pkb +++ b/source/api/ut.pkb @@ -18,7 +18,6 @@ create or replace package body ut is */ g_nls_date_format varchar2(4000); - gc_fail_on_errors constant boolean := false; g_result_line_no binary_integer; g_result_lines ut_varchar2_list := ut_varchar2_list(); @@ -135,7 +134,8 @@ create or replace package body ut is a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ) is pragma autonomous_transaction; begin @@ -149,7 +149,7 @@ create or replace package body ut is a_test_file_mappings, a_include_objects, a_exclude_objects, - gc_fail_on_errors, + a_fail_on_errors, a_client_character_set, false, ut_utils.int_to_boolean(a_random_test_order), @@ -179,7 +179,8 @@ create or replace package body ut is a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ) is pragma autonomous_transaction; begin @@ -194,7 +195,7 @@ create or replace package body ut is ut_file_mapper.build_file_mappings(a_test_files), a_include_objects, a_exclude_objects, - gc_fail_on_errors, + a_fail_on_errors, a_client_character_set, false, ut_utils.int_to_boolean(a_random_test_order), @@ -254,6 +255,7 @@ create or replace package body ut is a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined is l_reporter ut_reporter_base := a_reporter; l_results sys_refcursor; @@ -274,7 +276,8 @@ create or replace package body ut is a_include_schema_expr, a_include_object_expr, a_exclude_schema_expr, - a_exclude_object_expr + a_exclude_object_expr + ); if l_reporter is of (ut_output_reporter_base) then l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor(); @@ -302,6 +305,7 @@ create or replace package body ut is a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined is l_reporter ut_reporter_base := a_reporter; l_results sys_refcursor; @@ -323,6 +327,7 @@ create or replace package body ut is a_include_object_expr, a_exclude_schema_expr, a_exclude_object_expr + --a_fail_on_errors ); if l_reporter is of (ut_output_reporter_base) then l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor(); @@ -351,6 +356,7 @@ create or replace package body ut is a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined is l_reporter ut_reporter_base := a_reporter; l_results sys_refcursor; @@ -372,6 +378,7 @@ create or replace package body ut is a_include_object_expr, a_exclude_schema_expr, a_exclude_object_expr + --a_fail_on_errors ); if l_reporter is of (ut_output_reporter_base) then l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor(); @@ -400,6 +407,7 @@ create or replace package body ut is a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined is l_reporter ut_reporter_base := a_reporter; l_results sys_refcursor; @@ -421,6 +429,7 @@ create or replace package body ut is a_include_object_expr, a_exclude_schema_expr, a_exclude_object_expr + -- a_fail_on_errors ); if l_reporter is of (ut_output_reporter_base) then l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor(); @@ -449,6 +458,7 @@ create or replace package body ut is a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined is l_reporter ut_reporter_base := a_reporter; l_results sys_refcursor; @@ -470,6 +480,7 @@ create or replace package body ut is a_include_object_expr, a_exclude_schema_expr, a_exclude_object_expr + -- a_fail_on_errors ); if l_reporter is of (ut_output_reporter_base) then l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor(); @@ -498,6 +509,7 @@ create or replace package body ut is a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined is l_reporter ut_reporter_base := a_reporter; l_results sys_refcursor; @@ -518,7 +530,8 @@ create or replace package body ut is a_include_schema_expr, a_include_object_expr, a_exclude_schema_expr, - a_exclude_object_expr + a_exclude_object_expr + -- a_fail_on_errors ); if l_reporter is of (ut_output_reporter_base) then l_results := treat(l_reporter as ut_output_reporter_base).get_lines_cursor(); @@ -547,12 +560,14 @@ create or replace package body ut is a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ) is l_reporter ut_reporter_base := a_reporter; begin + l_reporter := coalesce(l_reporter,ut_documentation_reporter()); if a_force_manual_rollback then - l_reporter := coalesce(l_reporter,ut_documentation_reporter()); + ut_runner.run( a_paths, ut_reporters(l_reporter), @@ -562,7 +577,7 @@ create or replace package body ut is a_test_file_mappings, a_include_objects, a_exclude_objects, - gc_fail_on_errors, + a_fail_on_errors, a_client_character_set, a_force_manual_rollback, a_random_test_order, @@ -590,13 +605,21 @@ create or replace package body ut is a_include_schema_expr, a_include_object_expr, a_exclude_schema_expr, - a_exclude_object_expr + a_exclude_object_expr + -- a_fail_on_errors ); end if; if l_reporter is of (ut_output_reporter_base) then treat(l_reporter as ut_output_reporter_base).lines_to_dbms_output(); end if; raise_if_packages_invalidated(); + + exception when others then + if l_reporter is of (ut_output_reporter_base) then + treat(l_reporter as ut_output_reporter_base).lines_to_dbms_output(); + end if; + raise_if_packages_invalidated(); + raise; end; procedure run( @@ -616,7 +639,8 @@ create or replace package body ut is a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ) is l_reporter ut_reporter_base := a_reporter; begin @@ -637,7 +661,8 @@ create or replace package body ut is a_include_schema_expr, a_include_object_expr, a_exclude_schema_expr, - a_exclude_object_expr + a_exclude_object_expr , + a_fail_on_errors ); end; @@ -657,7 +682,8 @@ create or replace package body ut is a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ) is begin ut.run( @@ -677,7 +703,8 @@ create or replace package body ut is a_include_schema_expr, a_include_object_expr, a_exclude_schema_expr, - a_exclude_object_expr + a_exclude_object_expr , + a_fail_on_errors ); end; @@ -697,7 +724,8 @@ create or replace package body ut is a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ) is begin ut.run( @@ -717,7 +745,8 @@ create or replace package body ut is a_include_schema_expr, a_include_object_expr, a_exclude_schema_expr, - a_exclude_object_expr + a_exclude_object_expr , + a_fail_on_errors ); end; @@ -738,7 +767,8 @@ create or replace package body ut is a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ) is begin ut.run( @@ -758,7 +788,8 @@ create or replace package body ut is a_include_schema_expr, a_include_object_expr, a_exclude_schema_expr, - a_exclude_object_expr + a_exclude_object_expr , + a_fail_on_errors ); end; @@ -779,7 +810,8 @@ create or replace package body ut is a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ) is begin ut.run( @@ -799,7 +831,8 @@ create or replace package body ut is a_include_schema_expr, a_include_object_expr, a_exclude_schema_expr, - a_exclude_object_expr + a_exclude_object_expr, + a_fail_on_errors ); end; diff --git a/source/api/ut.pks b/source/api/ut.pks index f72c82a0c..7c008ace2 100644 --- a/source/api/ut.pks +++ b/source/api/ut.pks @@ -67,6 +67,7 @@ create or replace package ut authid current_user as a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined; function run( @@ -85,6 +86,7 @@ create or replace package ut authid current_user as a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined; function run( @@ -104,6 +106,7 @@ create or replace package ut authid current_user as a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined; function run( @@ -123,6 +126,7 @@ create or replace package ut authid current_user as a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined; function run( @@ -142,6 +146,7 @@ create or replace package ut authid current_user as a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + --a_fail_on_errors boolean := fals ) return ut_varchar2_rows pipelined; function run( @@ -161,6 +166,7 @@ create or replace package ut authid current_user as a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, a_exclude_object_expr varchar2 := null + -- a_fail_on_errors boolean := false ) return ut_varchar2_rows pipelined; procedure run( @@ -179,7 +185,8 @@ create or replace package ut authid current_user as a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ); procedure run( @@ -198,7 +205,8 @@ create or replace package ut authid current_user as a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ); procedure run( @@ -218,7 +226,8 @@ create or replace package ut authid current_user as a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ); procedure run( @@ -238,7 +247,8 @@ create or replace package ut authid current_user as a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ); procedure run( @@ -258,7 +268,8 @@ create or replace package ut authid current_user as a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ); procedure run( @@ -278,7 +289,8 @@ create or replace package ut authid current_user as a_include_schema_expr varchar2 := null, a_include_object_expr varchar2 := null, a_exclude_schema_expr varchar2 := null, - a_exclude_object_expr varchar2 := null + a_exclude_object_expr varchar2 := null, + a_fail_on_errors boolean := false ); /** diff --git a/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_FALSE.pkb b/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_FALSE.pkb new file mode 100644 index 000000000..95a074c71 --- /dev/null +++ b/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_FALSE.pkb @@ -0,0 +1,1659 @@ +create or replace package body test_ut_run_fail_on_err_par_false is + + gc_owner constant varchar2(250) := sys_context('userenv', 'current_schema'); + gc_module constant varchar2(32767) := 'test module'; + gc_action constant varchar2(32767) := 'test action'; + gc_client_info constant varchar2(32767) := 'test client info'; + + g_context_test_results clob; + g_timestamp timestamp; + + procedure clear_expectations is + begin + ut3_tester_helper.main_helper.clear_expectations(); + end; + + procedure create_ut3_user_tests is + begin + ut3_tester_helper.run_helper.create_ut3_user_tests(); + end; + + procedure drop_ut3_user_tests is + begin + ut3_tester_helper.run_helper.drop_ut3_user_tests(); + end; + + procedure ut_version is + begin + ut.expect(ut3_develop.ut.version()).to_match('^v\d+\.\d+\.\d+\.\d+(-\w+)?$'); + end; + + procedure ut_fail is + begin + --Act + ut3_develop.ut.fail('Testing failure message'); + --Assert + ut.expect(ut3_tester_helper.main_helper.get_failed_expectations(1)) + .to_be_like('%Testing failure message%'); + end; + + procedure run_proc_no_params is + l_results clob; + begin + ut3_tester_helper.run_helper.run(); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_proc_specific_reporter is + l_results clob; + begin + --Act + ut3_develop.ut.run('ut3_tester_helper',a_reporter => ut3_develop.ut_documentation_reporter(), a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_proc_cov_file_list is + l_results clob; + begin + --Act + ut3_develop.ut.run( + 'ut3_tester_helper', + a_reporter => ut3_develop.ut_sonar_test_reporter(), + a_source_files => ut3_develop.ut_varchar2_list(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb'), + a_fail_on_errors => false + ); + + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb'|| + '%tests/ut3_tester_helper.test_package_1.pkb'|| + '%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure run_proc_pkg_name is + l_results clob; + begin + ut3_develop.ut.run('ut3_tester_helper.test_package_1' , a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_proc_pkg_name_file_list is + l_results clob; + begin + ut3_develop.ut.run( + 'ut3_tester_helper.test_package_3', + ut3_develop.ut_sonar_test_reporter(), a_source_files => ut3_develop.ut_varchar2_list(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb'), + a_fail_on_errors => false + ); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + end; + + procedure run_proc_path_list is + l_results clob; + begin + ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests')); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_proc_path_list_file_list is + l_results clob; + begin + ut3_tester_helper.run_helper.run( + a_paths => ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'), + a_reporter => ut3_develop.ut_sonar_test_reporter(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb') + ); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure run_proc_null_reporter is + l_results clob; + begin + --Act + ut3_develop.ut.run('ut3_tester_helper', cast(null as ut3_develop.ut_reporter_base), a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests%test_package_1%test_package_2%tests2%test_package_3%' ); + end; + + procedure run_proc_null_path is + l_results clob; + begin + --Act + ut3_tester_helper.run_helper.run(cast(null as varchar2)); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_proc_null_path_list is + l_results clob; + l_paths ut3_develop.ut_varchar2_list; + begin + --Act + ut3_tester_helper.run_helper.run(l_paths); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_proc_empty_path_list is + l_results clob; + begin + --Act + ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list()); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure create_suite_with_commit is + pragma autonomous_transaction; + begin + execute immediate 'create or replace package test_commit_warning is + --%suite + --%suitepath(ut.run.transaction) + + --%test + procedure does_commit; + end;'; + execute immediate 'create or replace package body test_commit_warning is + procedure does_commit is + begin + ut3_develop.ut.expect(1).to_equal(1); + commit; + end; + end;'; + end; + + procedure drop_suite_with_commit is + pragma autonomous_transaction; + begin + execute immediate 'drop package test_commit_warning'; + end; + + procedure run_proc_warn_on_commit is + l_results clob; + begin + ut3_develop.ut.run('test_commit_warning', a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + ut.expect(l_results).to_be_like( + '%Unable to perform automatic rollback after test%'|| + 'An implicit or explicit commit/rollback occurred in procedures:%' || + 'does_commit%' || + 'Use the "--%rollback(manual)" annotation or remove commit/rollback/ddl statements that are causing the issue.%' + ); + end; + + procedure create_failing_beforeall_suite is + pragma autonomous_transaction; + begin + execute immediate 'create or replace package parent_suite is + --%suite + --%suitepath(ut.run.failing_setup) + + --%beforeall + procedure failing_setup; + end;'; + execute immediate 'create or replace package body parent_suite is + procedure failing_setup is + begin + raise no_data_found; + end; + end;'; + execute immediate 'create or replace package child_suite is + --%suite + --%suitepath(ut.run.failing_setup.parent_suite.some_sub_suite) + + --%test + procedure does_stuff; + end;'; + execute immediate 'create or replace package body child_suite is + procedure does_stuff is + begin + ut3_develop.ut.expect(1).to_equal(1); + end; + end;'; + end; + + procedure drop_failing_beforeall_suite is + pragma autonomous_transaction; + begin + execute immediate 'drop package parent_suite'; + execute immediate 'drop package child_suite'; + end; + + procedure run_proc_fail_child_suites is + l_results clob; + begin + ut3_develop.ut.run('child_suite', a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + ut.expect(l_results).to_be_like( + '%1) does_stuff%' || + 'ORA-01403: no data found%' || + 'ORA-06512: at "UT3_USER.PARENT_SUITE%' + ); + end; + + procedure transaction_setup is + pragma autonomous_transaction; + begin + execute immediate 'create table transaction_test_table(message varchar2(100))'; + execute immediate 'create or replace package test_transaction is + --%suite + + --%test + procedure insert_row; + + --%test + procedure insert_and_raise; + end; + '; + execute immediate 'create or replace package body test_transaction is + procedure insert_row is + begin + insert into transaction_test_table values (''2 - inside the test_transaction.insert_row test''); + end; + procedure insert_and_raise is + begin + insert into transaction_test_table values (''2 - inside the test_transaction.insert_row test''); + raise no_data_found; + end; + end; + '; + + end; + + procedure transaction_cleanup is + pragma autonomous_transaction; + begin + begin + execute immediate 'drop table transaction_test_table'; + exception + when others then null; + end; + begin + execute immediate 'drop package test_transaction'; + exception + when others then null; + end; + end; + + procedure run_proc_keep_test_data is + l_expected sys_refcursor; + l_actual sys_refcursor; + l_results clob; + begin + --Arrange + execute immediate ' + insert into transaction_test_table values (''1 - inside the test_ut_run.run_proc_keep_test_changes test'')'; + + --Act + ut3_develop.ut.run('test_transaction.insert_row', a_force_manual_rollback => true, a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + + --Assert + open l_expected for + select '1 - inside the test_ut_run.run_proc_keep_test_changes test' as message from dual + union all + select '2 - inside the test_transaction.insert_row test' from dual + order by 1; + + open l_actual for 'select * from transaction_test_table order by 1'; + + ut.expect( l_actual ).to_equal(l_expected); + end; + + procedure run_proc_keep_test_data_raise is + l_expected sys_refcursor; + l_actual sys_refcursor; + l_results clob; + begin + --Arrange + execute immediate ' + insert into transaction_test_table values (''1 - inside the test_ut_run.run_proc_keep_test_changes test'')'; + + --Act + ut3_develop.ut.run('test_transaction.insert_and_raise', a_force_manual_rollback => true, a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + + --Assert + open l_expected for + select '1 - inside the test_ut_run.run_proc_keep_test_changes test' as message from dual + union all + select '2 - inside the test_transaction.insert_row test' from dual + order by 1; + + open l_actual for 'select * from transaction_test_table order by 1'; + + ut.expect( l_actual ).to_equal(l_expected); + end; + + procedure run_proc_discard_test_data is + l_expected sys_refcursor; + l_actual sys_refcursor; + l_results clob; + begin + --Arrange + execute immediate ' + insert into transaction_test_table values (''1 - inside the test_ut_run.run_proc_keep_test_changes test'')'; + + --Act + ut3_develop.ut.run('test_transaction.insert_row', a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + + --Assert + open l_expected for + select '1 - inside the test_ut_run.run_proc_keep_test_changes test' as message from dual; + + open l_actual for 'select * from transaction_test_table order by 1'; + + ut.expect( l_actual ).to_equal(l_expected); + end; + + procedure run_func_no_params is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_specific_reporter is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_documentation_reporter()); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_cov_file_list is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + select * bulk collect into l_results from table ( + ut3_develop.ut.run('ut3_tester_helper', + ut3_develop.ut_sonar_test_reporter(), + a_source_files => ut3_develop.ut_varchar2_list(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb') + )); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%tests/ut3_tester_helper.test_package_1.pkb%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure run_func_pkg_name is + l_results ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_results from table (ut3_develop.ut.run('ut3_tester_helper.test_package_1')); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_func_pkg_name_file_list is + l_results ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_results from table ( + ut3_develop.ut.run('ut3_tester_helper.test_package_3', + ut3_develop.ut_sonar_test_reporter(), + a_source_files => ut3_develop.ut_varchar2_list(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb') + )); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + end; + + procedure run_func_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests')); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_func_path_list_file_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run( + a_paths => ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'), + a_reporter => ut3_develop.ut_sonar_test_reporter(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb') + ); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure run_func_null_reporter is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + select * bulk collect into l_results from table (ut3_develop.ut.run('ut3_tester_helper',cast(null as ut3_develop.ut_reporter_base))); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests%test_package_1%test_package_2%tests2%test_package_3%' ); + end; + + procedure run_func_null_path is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run(cast(null as varchar2)); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_null_path_list is + l_results ut3_develop.ut_varchar2_list; + l_paths ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run(l_paths); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_empty_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list()); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_cov_file_lst_null_rep is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run( + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb'), + a_reporter => cast(null as ut3_develop.ut_reporter_base)); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_empty_suite is + l_results ut3_develop.ut_varchar2_list; + l_expected varchar2(32767); + pragma autonomous_transaction; + begin + --Arrange + execute immediate q'[create or replace package empty_suite as + -- %suite + + procedure not_a_test; + end;]'; + execute immediate q'[create or replace package body empty_suite as + procedure not_a_test is begin null; end; + end;]'; + l_expected := '%empty_suite%0 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%'; + --Act + select * bulk collect into l_results from table(ut3_develop.ut.run('empty_suite')); + + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + + --Cleanup + execute immediate q'[drop package empty_suite]'; + end; + + procedure raise_in_invalid_state is + l_results ut3_develop.ut_varchar2_list; + l_expected varchar2(32767); + begin + --Arrange + l_expected := 'test_state + test_stateful + failing_stateful_test [% sec] (FAILED - 1)% +Failures:% + 1) failing_stateful_test + ORA-04068: existing state of packages (DB_LOOPBACK%) has been discarded + ORA-04061: existing state of package body "%.STATEFUL_PACKAGE" has been invalidated + ORA-04065: not executed, altered or dropped package body "%.STATEFUL_PACKAGE"% + ORA-06512: at line 6% +1 tests, 0 failed, 1 errored, 0 disabled, 0 warning(s)%'; + + --Act + select * bulk collect into l_results from table(ut3_develop.ut.run('ut3_tester_helper.test_stateful')); + + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + ut.fail('Expected exception but nothing was raised'); + exception + when others then + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + ut.expect(sqlcode).to_equal(-4068); + end; + + procedure create_test_suite is + begin + ut3_tester_helper.run_helper.create_test_suite; + end; + + procedure drop_test_suite is + begin + ut3_tester_helper.run_helper.drop_test_suite; + end; + + procedure run_in_invalid_state is + l_results ut3_develop.ut_varchar2_list; + l_actual clob; + l_expected varchar2(32767); + begin + select * bulk collect into l_results from table(ut3_develop.ut.run('failing_invalid_spec')); + + l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); + ut.expect(l_actual).to_be_like('%Call params for % are not valid: package %FAILING_INVALID_SPEC% does not exist or is invalid.%'); + + end; + + procedure compile_invalid_package is + ex_compilation_error exception; + pragma exception_init(ex_compilation_error,-24344); + pragma autonomous_transaction; + begin + begin + execute immediate q'[ + create or replace package failing_invalid_spec as + --%suite + gv_glob_val non_existing_table.id%type := 0; + + --%test + procedure test1; + end;]'; + exception when ex_compilation_error then null; + end; + begin + execute immediate q'[ + create or replace package body failing_invalid_spec as + procedure test1 is begin ut.expect(1).to_equal(1); end; + end;]'; + exception when ex_compilation_error then null; + end; + end; + procedure drop_invalid_package is + pragma autonomous_transaction; + begin + execute immediate 'drop package failing_invalid_spec'; + end; + + procedure run_and_revalidate_specs is + l_results ut3_develop.ut_varchar2_list; + l_actual clob; + l_is_invalid number; + begin + execute immediate q'[select count(1) from all_objects o where o.owner = :object_owner and o.object_type = 'PACKAGE' + and o.status = 'INVALID' and o.object_name= :object_name]' into l_is_invalid + using 'UT3_USER','INVALID_PCKAG_THAT_REVALIDATES'; + + select * bulk collect into l_results from table(ut3_develop.ut.run('invalid_pckag_that_revalidates')); + + l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); + ut.expect(1).to_equal(l_is_invalid); + ut.expect(l_actual).to_be_like('%invalid_pckag_that_revalidates%invalidspecs [% sec]% +%Finished in % seconds% +%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%'); + + end; + + procedure generate_invalid_spec is + ex_compilation_error exception; + pragma exception_init(ex_compilation_error,-24344); + pragma autonomous_transaction; + begin + + execute immediate q'[ + create or replace package parent_specs as + c_test constant varchar2(1) := 'Y'; + end;]'; + + execute immediate q'[ + create or replace package invalid_pckag_that_revalidates as + --%suite + g_var varchar2(1) := parent_specs.c_test; + + --%test(invalidspecs) + procedure test1; + end;]'; + + execute immediate q'[ + create or replace package body invalid_pckag_that_revalidates as + procedure test1 is begin ut.expect('Y').to_equal(g_var); end; + end;]'; + + -- That should invalidate test package and we can then revers + execute immediate q'[ + create or replace package parent_specs as + c_test_error constant varchar2(1) := 'Y'; + end;]'; + + execute immediate q'[ + create or replace package parent_specs as + c_test constant varchar2(1) := 'Y'; + end;]'; + + end; + procedure drop_invalid_spec is + pragma autonomous_transaction; + begin + execute immediate 'drop package invalid_pckag_that_revalidates'; + execute immediate 'drop package parent_specs'; + end; + + procedure run_and_report_warnings is + l_results ut3_develop.ut_varchar2_list; + l_actual clob; + begin + + select * bulk collect into l_results from table(ut3_develop.ut.run('bad_annotations')); + l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); + + ut.expect(l_actual).to_be_like('%Missing "--%endcontext" annotation for a "--%context" annotation. The end of package is considered end of context.% +%1 tests, 0 failed, 0 errored, 0 disabled, 1 warning(s)%'); + + end; + + procedure create_bad_annot is + pragma autonomous_transaction; + begin + execute immediate q'[ + create or replace package bad_annotations as + --%suite + + --%context + + --%test(invalidspecs) + procedure test1; + + end;]'; + + execute immediate q'[ + create or replace package body bad_annotations as + procedure test1 is begin ut.expect(1).to_equal(1); end; + end;]'; + + end; + + procedure drop_bad_annot is + pragma autonomous_transaction; + begin + execute immediate 'drop package bad_annotations'; + end; + + procedure create_suite_with_link is + begin + ut3_tester_helper.run_helper.create_suite_with_link; + end; + + procedure drop_suite_with_link is + begin + ut3_tester_helper.run_helper.drop_suite_with_link; + end; + + procedure savepoints_on_db_links is + l_results clob; + begin + ut3_develop.ut.run('ut3_tester_helper.test_distributed_savepoint', a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + ut.expect(l_results).to_be_like('%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%'); + end; + + procedure remove_time_from_results(a_results in out nocopy ut3_develop.ut_varchar2_list) is + begin + for i in 1 .. a_results.count loop + a_results(i) := regexp_replace(a_results(i),'\[[0-9]*[\.,]?[0-9]+ sec\]',''); + a_results(i) := regexp_replace(a_results(i),'Finished in [0-9]*[\.,][0-9]+ seconds',''); + end loop; + end; + + procedure run_schema_name_test is + l_results ut3_develop.ut_varchar2_list; + l_expected clob; + begin + select * bulk collect into l_results + from table ( ut3_develop.ut.run( gc_owner||'.'||gc_owner ) ); + l_expected := '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%'; + ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + end; + + procedure create_schema_name_package is + pragma autonomous_transaction; + begin + execute immediate ' + create or replace package '||gc_owner||'.'||gc_owner||' as + --%suite + + --%test + procedure sample_test; + end;'; + + execute immediate ' + create or replace package body '||gc_owner||'.'||gc_owner||' as + procedure sample_test is begin ut.expect(1).to_equal(1); end; + end;'; + + end; + + procedure drop_schema_name_package is + pragma autonomous_transaction; + begin + execute immediate 'drop package '||gc_owner||'.'||gc_owner; + end; + + procedure create_suites_with_path is + pragma autonomous_transaction; + begin + execute immediate q'[create or replace package ut_abc is + -- %suite + -- %suitepath(main.abc) + + -- %test + procedure ut_test_01; + end ut_abc;]'; + + execute immediate q'[create or replace package body ut_abc + is + procedure ut_test_01 as begin ut.expect(true).to_be_true(); end; + end;]'; + + execute immediate q'[create or replace package ut_abc_def + is + -- %suite + -- %suitepath(main.abc_def) + + -- %test + procedure ut_test_01; + end ut_abc_def;]'; + + execute immediate q'[create or replace package body ut_abc_def + is + procedure ut_test_01 as begin ut.expect(true).to_be_true(); end; + end;]'; + + end; + + procedure drop_suites_with_path is + pragma autonomous_transaction; + begin + execute immediate q'[drop package ut_abc]'; + execute immediate q'[drop package ut_abc_def]'; + end; + + procedure run_suite_with_nls_sort is + L_current_sort varchar2(2000); + l_results ut3_develop.ut_varchar2_list; + l_expected clob; + begin + --Arrange + select value + into l_current_sort + from nls_session_parameters where parameter = 'NLS_SORT'; + + execute immediate 'alter session set nls_sort=GERMAN'; + + --Act + select * + bulk collect into l_results + from table ( ut3_develop.ut.run( gc_owner||':main' ) ); + --Assert + l_expected := q'[main% + abc_def% + ut_abc_def% + ut_test_01% + abc% + ut_abc% + ut_test_01%]'; + ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + + execute immediate 'alter session set nls_sort='||l_current_sort; + end; + + procedure run_with_random_order is + l_random_results ut3_develop.ut_varchar2_list; + l_results ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_random_results + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1', a_random_test_order_seed => 6 ) ) + where trim(column_value) is not null and column_value not like 'Finished in %' + and column_value not like '%Tests were executed with random order %'; + + select * bulk collect into l_results + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1' ) ) + --TODO this condition should be removed once issues with unordered compare and 'blank text rows' are resolved. + where trim(column_value) is not null and column_value not like 'Finished in %'; + + remove_time_from_results(l_results); + remove_time_from_results(l_random_results); + + ut.expect(anydata.convertCollection(l_random_results)).to_equal(anydata.convertCollection(l_results)).unordered(); + ut.expect(anydata.convertCollection(l_random_results)).not_to_equal(anydata.convertCollection(l_results)); + end; + + procedure run_and_report_random_ord_seed is + l_actual ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_actual + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1', a_random_test_order_seed => 123456789 ) ); + + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_actual) ).to_be_like( q'[%Tests were executed with random order seed '123456789'.%]' ); + end; + + procedure run_with_random_order_seed is + l_expected ut3_develop.ut_varchar2_list; + l_actual ut3_develop.ut_varchar2_list; + begin + + select * bulk collect into l_expected + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1', a_random_test_order_seed => 3 ) ); + select * bulk collect into l_actual + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1', a_random_test_order_seed => 3 ) ); + + remove_time_from_results(l_actual); + remove_time_from_results(l_expected); + l_actual.delete(l_actual.count); + l_expected.delete(l_expected.count); + + ut.expect(anydata.convertCollection(l_actual)).to_equal(anydata.convertCollection(l_expected)); + end; + + procedure test_run_by_one_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite1test1'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure suite_run_by_one_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).not_to_be_like( '%test_package_1.%executed%' ); + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).to_be_like( '%test_package_2.%executed%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3.%executed%' ); + end; + + procedure two_test_run_by_one_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'test2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).not_to_be_like( '%test_package_1.%executed%' ); + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).to_be_like( '%test_package_2.%executed%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3.%executed%' ); + end; + + procedure all_suites_run_by_one_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'helper'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).to_be_like( '%test_package_3%' ); + end; + + procedure two_test_run_by_two_tags is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'subtest1|subtest2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_1.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure two_test_run_by_two_tags_leg is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'subtest1,subtest2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_1.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure suite_with_children_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite1'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure suite_with_tag_parent is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure test_nonexists_tag is + l_results clob; + l_exp_message varchar2(4000); + begin + ut3_tester_helper.run_helper.run(a_tags => 'nonexisting'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + ut.expect( l_results ).not_to_be_like( '%test_package_1%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure test_duplicate_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite1test1,suite1test1'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure suite_duplicate_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite1,suite1'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_proc_pkg_name_tag is + l_results clob; + begin + ut3_develop.ut.run('ut3_tester_helper.test_package_1',a_tags => 'suite1test1', a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_1.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_pkg_name_file_list_tag is + l_results clob; + begin + ut3_develop.ut.run('ut3_tester_helper.test_package_1',a_tags => 'suite1test1', a_fail_on_errors => false); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_1.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_proc_path_list_tag is + l_results clob; + begin + ut3_develop.ut.run( + 'ut3_tester_helper.test_package_1', + ut3_develop.ut_sonar_test_reporter(), a_source_files => ut3_develop.ut_varchar2_list(),a_tags => 'suite1', + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb'), + a_fail_on_errors => false + ); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure tag_run_func_no_params is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => 'helper'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure tag_run_func_pkg_name is + l_results ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_results from table (ut3_develop.ut.run('ut3_tester_helper.test_package_1', a_tags => 'suite1test1')); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_run_func_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'),a_tags => 'suite1test1|suite2test1'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_run_func_path_list_leg is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'),a_tags => 'suite1test1,suite2test1'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_inc_exc_run_func_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'),a_tags => '(suite1test1|suite2test1)&!suite2'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_inc_exc_run_fun_pth_lst_lg is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'),a_tags => 'suite1test1,suite2test1,-suite2'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_exclude_run_func_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests,:tests2'),a_tags => '!suite1test2&!suite2test1&!test1suite3'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_3%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_3.test2%executed%' ); + end; + +procedure tag_exclude_run_fun_pth_lst_lg is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests,:tests2'),a_tags => '-suite1test2,-suite2test1,-test1suite3'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_3%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_3.test2%executed%' ); + end; + + procedure tag_include_exclude_run_func is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => '(suite1)&(!suite1test2&!suite2test1&!test1suite3)'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test2%executed%' ); + end; + + procedure tag_include_exclude_run_fun_lg is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => 'suite1,-suite1test2,-suite2test1,-test1suite3'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test2%executed%' ); + end; + + procedure tag_complex_expressions is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => 'release_3_1_13&(fast|simple)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test5 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test6 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test3%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => 'release_3_1_13&(!patch_3_1_13&!patch_3_1_14)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_1.test1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test3%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test5%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test6%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => 'release_3_1_13&(patch_3_1_13&!slow)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test5 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test3%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test6%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(simple&end_to_end)|(development&fast)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_1.test1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_2.test3 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test5 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test6 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development&end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test5 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test3%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test6%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => 'any'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite2_level1_pkg.test1_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite2_level1_pkg.test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_level1_pkg.test1_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite2_2_level2_pkg.suite2_2_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite2_2_level2_pkg.suite2_2_test2_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_2_level2_pkg.suite1_2_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_2_level2_pkg.suite1_2_test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_1_level2_pkg.suite1_1_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_level1_pkg.test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_1_level2_pkg.suite1_1_test2_level2 executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => 'none'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_level1_pkg.test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_1_level2_pkg.suite1_1_test2_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite2_level1_pkg.test1_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite2_level1_pkg.test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_level1_pkg.test1_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite2_2_level2_pkg.suite2_2_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite2_2_level2_pkg.suite2_2_test2_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_2_level2_pkg.suite1_2_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_2_level2_pkg.suite1_2_test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_1_level2_pkg.suite1_1_test1_level2 executed%' ); + + + end; + + procedure invalid_tag_expression is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development!&end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development&&end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development&end_to_end|)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development&!!end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(&development&end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(development|end_to_end))'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + end; + + procedure set_application_info is + begin + dbms_application_info.set_module( gc_module, gc_action ); + dbms_application_info.set_client_info( gc_client_info ); + end; + + procedure create_context_test_suite is + pragma autonomous_transaction; + begin + execute immediate q'[ + create or replace package check_context is + --%suite(Suite description) + --%suitepath(some.suite.path) + + --%beforeall + procedure before_suite; + + --%context(context description) + --%name(some_context) + + --%beforeall + procedure before_context; + + --%beforeeach + procedure before_each_test; + + --%test(Some test description) + --%beforetest(before_test) + --%aftertest(after_test) + procedure the_test; + procedure before_test; + procedure after_test; + + --%aftereach + procedure after_each_test; + + --%afterall + procedure after_context; + + --%endcontext + + + --%afterall + procedure after_suite; + + end;]'; + execute immediate q'[ + create or replace package body check_context is + + procedure print_context( a_procedure_name varchar2 ) is + l_results ut_varchar2_rows; + l_module varchar2(32767); + l_action varchar2(32767); + l_client_info varchar2(32767); + begin + select attribute||'='||value + bulk collect into l_results + from session_context where namespace = 'UT3_DEVELOP_INFO' + order by attribute; + for i in 1 .. l_results.count loop + dbms_output.put_line( upper(a_procedure_name) ||':'|| l_results(i) ); + end loop; + dbms_application_info.read_module( l_module, l_action ); + dbms_application_info.read_client_info( l_client_info ); + + dbms_output.put_line( 'APPLICATION_INFO:MODULE=' || l_module ); + dbms_output.put_line( 'APPLICATION_INFO:ACTION=' || l_action ); + dbms_output.put_line( 'APPLICATION_INFO:CLIENT_INFO=' || l_client_info ); + end; + + procedure before_suite is + begin + print_context('before_suite'); + end; + + procedure before_context is + begin + print_context('before_context'); + end; + + procedure before_each_test is + begin + print_context('before_each_test'); + end; + + procedure the_test is + begin + print_context('the_test'); + end; + + procedure before_test is + begin + print_context('before_test'); + end; + + procedure after_test is + begin + print_context('after_test'); + end; + + procedure after_each_test is + begin + print_context('after_each_test'); + end; + + procedure after_context is + begin + print_context('after_context'); + end; + + procedure after_suite is + begin + print_context('after_suite'); + end; + + end;]'; + end; + + procedure drop_context_test_suite is + pragma autonomous_transaction; + begin + execute immediate q'[drop package check_context]'; + end; + + procedure run_context_test_suite is + l_lines ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_lines from table(ut3_develop.ut.run('check_context')); + g_context_test_results := ut3_tester_helper.main_helper.table_to_clob(l_lines); + g_timestamp := current_timestamp; + end; + + + procedure sys_ctx_on_suite_beforeall is + begin + ut.expect(g_context_test_results).to_be_like( + '%BEFORE_SUITE:COVERAGE_RUN_ID=________________________________%' + ||'%BEFORE_SUITE:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.before_suite' + ||'%BEFORE_SUITE:CURRENT_EXECUTABLE_TYPE=beforeall' + ||'%BEFORE_SUITE:RUN_PATHS=check_context' + ||'%BEFORE_SUITE:SUITE_DESCRIPTION=Suite description' + ||'%BEFORE_SUITE:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%BEFORE_SUITE:SUITE_PATH=some.suite.path.check_context' + ||'%BEFORE_SUITE:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=before_suite%' + ); + ut.expect(g_context_test_results).not_to_be_like('%BEFORE_SUITE:CONTEXT_%'); + ut.expect(g_context_test_results).not_to_be_like('%BEFORE_SUITE:TEST_%'); + end; + + procedure sys_ctx_on_context_beforeall is + begin + ut.expect(g_context_test_results).to_be_like( + '%BEFORE_CONTEXT:CONTEXT_DESCRIPTION=context description' + ||'%BEFORE_CONTEXT:CONTEXT_NAME=some_context' + ||'%BEFORE_CONTEXT:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%BEFORE_CONTEXT:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_CONTEXT:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.before_context' + ||'%BEFORE_CONTEXT:CURRENT_EXECUTABLE_TYPE=beforeall' + ||'%BEFORE_CONTEXT:RUN_PATHS=check_context' + ||'%BEFORE_CONTEXT:SUITE_DESCRIPTION=Suite description' + ||'%BEFORE_CONTEXT:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%BEFORE_CONTEXT:SUITE_PATH=some.suite.path.check_context' + ||'%BEFORE_CONTEXT:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=before_context%' + ); + ut.expect(g_context_test_results).not_to_be_like('%BEFORE_CONTEXT:TEST_%'); + end; + + procedure sys_ctx_on_beforeeach is + begin + ut.expect(g_context_test_results).to_be_like( + '%BEFORE_EACH_TEST:CONTEXT_DESCRIPTION=context description' + ||'%BEFORE_EACH_TEST:CONTEXT_NAME=some_context' + ||'%BEFORE_EACH_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%BEFORE_EACH_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_EACH_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.before_each_test' + ||'%BEFORE_EACH_TEST:CURRENT_EXECUTABLE_TYPE=beforeeach' + ||'%BEFORE_EACH_TEST:RUN_PATHS=check_context' + ||'%BEFORE_EACH_TEST:SUITE_DESCRIPTION=Suite description' + ||'%BEFORE_EACH_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%BEFORE_EACH_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%BEFORE_EACH_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_EACH_TEST:TEST_DESCRIPTION=Some test description' + ||'%BEFORE_EACH_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%BEFORE_EACH_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=before_each_test%' + ); + end; + + procedure sys_ctx_on_beforetest is + begin + ut.expect(g_context_test_results).to_be_like( + '%BEFORE_TEST:CONTEXT_DESCRIPTION=context description' + ||'%BEFORE_TEST:CONTEXT_NAME=some_context' + ||'%BEFORE_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%BEFORE_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.before_test' + ||'%BEFORE_TEST:CURRENT_EXECUTABLE_TYPE=beforetest' + ||'%BEFORE_TEST:RUN_PATHS=check_context' + ||'%BEFORE_TEST:SUITE_DESCRIPTION=Suite description' + ||'%BEFORE_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%BEFORE_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%BEFORE_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_TEST:TEST_DESCRIPTION=Some test description' + ||'%BEFORE_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%BEFORE_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=before_test%' + ); + end; + + procedure sys_ctx_on_test is + begin + ut.expect(g_context_test_results).to_be_like( + '%THE_TEST:CONTEXT_DESCRIPTION=context description' + ||'%THE_TEST:CONTEXT_NAME=some_context' + ||'%THE_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%THE_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%THE_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.the_test' + ||'%THE_TEST:CURRENT_EXECUTABLE_TYPE=test' + ||'%THE_TEST:RUN_PATHS=check_context' + ||'%THE_TEST:SUITE_DESCRIPTION=Suite description' + ||'%THE_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%THE_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%THE_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%THE_TEST:TEST_DESCRIPTION=Some test description' + ||'%THE_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%THE_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=the_test%' + ); + end; + + procedure sys_ctx_on_aftertest is + begin + ut.expect(g_context_test_results).to_be_like( + '%AFTER_TEST:CONTEXT_DESCRIPTION=context description' + ||'%AFTER_TEST:CONTEXT_NAME=some_context' + ||'%AFTER_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%AFTER_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.after_test' + ||'%AFTER_TEST:CURRENT_EXECUTABLE_TYPE=aftertest' + ||'%AFTER_TEST:RUN_PATHS=check_context' + ||'%AFTER_TEST:SUITE_DESCRIPTION=Suite description' + ||'%AFTER_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%AFTER_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%AFTER_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_TEST:TEST_DESCRIPTION=Some test description' + ||'%AFTER_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%AFTER_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=after_test%' + ); + end; + + procedure sys_ctx_on_aftereach is + begin + ut.expect(g_context_test_results).to_be_like( + '%AFTER_EACH_TEST:CONTEXT_DESCRIPTION=context description' + ||'%AFTER_EACH_TEST:CONTEXT_NAME=some_context' + ||'%AFTER_EACH_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%AFTER_EACH_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_EACH_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.after_each_test' + ||'%AFTER_EACH_TEST:CURRENT_EXECUTABLE_TYPE=aftereach' + ||'%AFTER_EACH_TEST:RUN_PATHS=check_context' + ||'%AFTER_EACH_TEST:SUITE_DESCRIPTION=Suite description' + ||'%AFTER_EACH_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%AFTER_EACH_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%AFTER_EACH_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_EACH_TEST:TEST_DESCRIPTION=Some test description' + ||'%AFTER_EACH_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%AFTER_EACH_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=after_each_test%' + ); + end; + + procedure sys_ctx_on_context_afterall is + begin + ut.expect(g_context_test_results).to_be_like( + '%AFTER_CONTEXT:CONTEXT_DESCRIPTION=context description' + ||'%AFTER_CONTEXT:CONTEXT_NAME=some_context' + ||'%AFTER_CONTEXT:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%AFTER_CONTEXT:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_CONTEXT:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.after_context' + ||'%AFTER_CONTEXT:CURRENT_EXECUTABLE_TYPE=afterall' + ||'%AFTER_CONTEXT:RUN_PATHS=check_context' + ||'%AFTER_CONTEXT:SUITE_DESCRIPTION=Suite description' + ||'%AFTER_CONTEXT:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%AFTER_CONTEXT:SUITE_PATH=some.suite.path.check_context' + ||'%AFTER_CONTEXT:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=after_context%' + ); + ut.expect(g_context_test_results).not_to_be_like('%AFTER_CONTEXT:TEST_%'); + end; + + procedure sys_ctx_on_suite_afterall is + begin + ut.expect(g_context_test_results).to_be_like( + '%AFTER_SUITE:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.after_suite' + ||'%AFTER_SUITE:CURRENT_EXECUTABLE_TYPE=afterall' + ||'%AFTER_SUITE:RUN_PATHS=check_context' + ||'%AFTER_SUITE:SUITE_DESCRIPTION=Suite description' + ||'%AFTER_SUITE:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%AFTER_SUITE:SUITE_PATH=some.suite.path.check_context' + ||'%AFTER_SUITE:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=after_suite%' + ); + ut.expect(g_context_test_results).not_to_be_like('%AFTER_SUITE:CONTEXT_%'); + ut.expect(g_context_test_results).not_to_be_like('%AFTER_SUITE:TEST_%'); + end; + + procedure sys_ctx_clear_after_run is + l_actual sys_refcursor; + begin + open l_actual for + select attribute||'='||value + from session_context where namespace = 'UT3_DEVELOP_INFO'; + + ut.expect(l_actual).to_be_empty(); + end; + + procedure app_info_restore_after_run is + l_module varchar2(32767); + l_action varchar2(32767); + l_client_info varchar2(32767); + begin + dbms_application_info.read_module( l_module, l_action ); + dbms_application_info.read_client_info( l_client_info ); + + ut.expect(l_module).to_equal(gc_module); + ut.expect(l_action).to_equal(gc_action); + --Disabled as it can't be tested. + --UT3_LATEST_RELEASE is also setting the client_info on each procedure + -- ut.expect(l_client_info).to_equal(gc_client_info); + end; + +end; \ No newline at end of file diff --git a/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_FALSE.pks b/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_FALSE.pks new file mode 100644 index 000000000..3aa99ba51 --- /dev/null +++ b/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_FALSE.pks @@ -0,0 +1,319 @@ +create or replace package test_ut_run_fail_on_err_par_false is + --%suite(ut.run) + --%suitepath(utplsql.test_user.api) + + procedure clear_expectations; + + procedure create_ut3_user_tests; + procedure drop_ut3_user_tests; + + --%test(ut.version() returns version of the framework) + procedure ut_version; + + --%test(ut.fail() marks test as failed) + --%beforetest(ut3_tester_helper.main_helper.set_ut_run_context) + --%aftertest(clear_expectations, ut3_tester_helper.main_helper.clear_ut_run_context) + procedure ut_fail; + + --%context(ut_run_procedure) + --%displayname(ut.run() procedure options) + --%beforeall(create_ut3_user_tests) + --%afterall(drop_ut3_user_tests) + + --%test(Runs all tests in current schema with default reporter when no parameters given) + procedure run_proc_no_params; + --%test(Runs all tests in current schema with specified reporter) + procedure run_proc_specific_reporter; + --%test(Runs all tests in current schema with coverage file list) + procedure run_proc_cov_file_list; + + --%test(Runs given package only with package name given as path) + procedure run_proc_pkg_name; + --%test(Runs all from given package with package name given as path and coverage file list) + procedure run_proc_pkg_name_file_list; + --%test(Runs tests from given paths only with paths list) + procedure run_proc_path_list; + --%test(Runs tests from given paths only with paths list and coverage file list) + procedure run_proc_path_list_file_list; + --%test(Runs all tests in current schema using default reporter when null reporter given) + procedure run_proc_null_reporter; + --%test(Runs all tests in current schema with null path provided) + procedure run_proc_null_path; + --%test(Runs all tests in current schema with null path list given) + procedure run_proc_null_path_list; + --%test(Runs all tests in current schema with empty path list given) + procedure run_proc_empty_path_list; + + procedure create_suite_with_commit; + procedure drop_suite_with_commit; + --%test(Reports a warning if transaction was invalidated by test with automatic rollback) + --%beforetest(create_suite_with_commit) + --%aftertest(drop_suite_with_commit) + procedure run_proc_warn_on_commit; + + + procedure create_failing_beforeall_suite; + procedure drop_failing_beforeall_suite; + --%test(Marks child suite as failed when parent's suite beforeall fails) + --%beforetest(create_failing_beforeall_suite) + --%aftertest(drop_failing_beforeall_suite) + procedure run_proc_fail_child_suites; + + procedure create_suite_with_link; + procedure drop_suite_with_link; + + --%test(Savepoints are working properly on distributed transactions - Issue #839) + --%beforetest(create_suite_with_link) + --%aftertest(drop_suite_with_link) + procedure savepoints_on_db_links; + + --%endcontext + + --%context(run_proc_transaction_control) + + --%beforeall + procedure transaction_setup; + --%afterall + procedure transaction_cleanup; + --%test(Leaves transaction open and uncommitted with a_force_manual_rollback) + procedure run_proc_keep_test_data; + --%test(Leaves transaction open and uncommitted with a_force_manual_rollback with exceptions) + procedure run_proc_keep_test_data_raise; + --%test(Does not impact current transaction when ran without a_force_manual_rollback) + procedure run_proc_discard_test_data; + + --%endcontext + + + --%context(ut_run_function) + + --%displayname(ut.run() function options) + --%beforeall(create_ut3_user_tests) + --%afterall(drop_ut3_user_tests) + + --%test(Runs all tests in current schema with default reporter when no parameters given) + procedure run_func_no_params; + --%test(Runs all tests in current schema with specified reporter) + procedure run_func_specific_reporter; + --%test(Runs all tests in current schema with coverage file list) + procedure run_func_cov_file_list; + + --%test(Runs given package only with package name given as path) + procedure run_func_pkg_name; + --%test(Runs all from given package with package name given as path and coverage file list) + procedure run_func_pkg_name_file_list; + --%test(Runs tests from given paths with paths list) + procedure run_func_path_list; + --%test(Runs tests from given paths with paths list and coverage file list) + procedure run_func_path_list_file_list; + --%test(Runs all tests in current schema using default reporter when null reporter given) + procedure run_func_null_reporter; + --%test(Runs all tests in current schema with null path provided) + procedure run_func_null_path; + --%test(Runs all tests in current schema with null path list given) + procedure run_func_null_path_list; + --%test(Runs all tests in current schema with empty path list given) + procedure run_func_empty_path_list; + --%test(Runs all tests in current schema with coverage file list and default reporter) + procedure run_func_cov_file_lst_null_rep; + --%test(Executes successfully an empty suite) + procedure run_func_empty_suite; + + --disabled(Makes session wait for lock on 18.1 due to library cache pin wait) + --%test(ut.run - raises after completing all tests if a test fails with ORA-04068 or ORA-04061) + --%beforetest(create_test_suite) + --%aftertest(drop_test_suite) + procedure raise_in_invalid_state; + procedure create_test_suite; + procedure drop_test_suite; + + --%test(ut.run - Does not execute suite when specified package is not valid) + --%beforetest(compile_invalid_package) + --%aftertest(drop_invalid_package) + procedure run_in_invalid_state; + procedure compile_invalid_package; + procedure drop_invalid_package; + + --%test(Invalidate package specs via rebuild but still execute package) + --%beforetest(generate_invalid_spec) + --%aftertest(drop_invalid_spec) + procedure run_and_revalidate_specs; + procedure generate_invalid_spec; + procedure drop_invalid_spec; + + --%test(Provides warnings on invalid annotations) + --%beforetest(create_bad_annot) + --%aftertest(drop_bad_annot) + procedure run_and_report_warnings; + procedure create_bad_annot; + procedure drop_bad_annot; + + --%test(Can run test package that is named the same as schema name) + --%beforetest(create_schema_name_package) + --%aftertest(drop_schema_name_package) + procedure run_schema_name_test; + procedure create_schema_name_package; + procedure drop_schema_name_package; + + --%test(Runs properly formed suite hierarchy regardless of NLS_SORT settings - Issue #1060) + --%beforetest(create_suites_with_path) + --%aftertest(drop_suites_with_path) + procedure run_suite_with_nls_sort; + procedure create_suites_with_path; + procedure drop_suites_with_path; + + --%endcontext + + --%context(random_order) + + --%displayname(Random test execution order) + --%beforeall(create_ut3_user_tests) + --%afterall(drop_ut3_user_tests) + + --%test(Runs tests in random order) + procedure run_with_random_order; + + --%test(Reports test random_test_order_seed) + procedure run_and_report_random_ord_seed; + + --%test(Runs tests in the same random order with provided seed) + procedure run_with_random_order_seed; + + --%endcontext + + --%context(run with tags) + --%displayname(Call ut.run with #tags) + + --%beforeall(create_ut3_user_tests) + --%afterall(drop_ut3_user_tests) + + --%test(Execute test by tag ut_run) + procedure test_run_by_one_tag; + + --%test( Execute suite by one tag) + procedure suite_run_by_one_tag; + + --%test(Execute two tests by one tag) + procedure two_test_run_by_one_tag; + + --%test(Execute all suites tests with tag) + procedure all_suites_run_by_one_tag; + + --%test(Execute tests by passing two tags) + procedure two_test_run_by_two_tags; + + --%test(Execute tests by passing two tags - Legacy notation) + procedure two_test_run_by_two_tags_leg; + + --%test(Execute suite and all of its children) + procedure suite_with_children_tag; + + --%test(Execute suite and parents) + procedure suite_with_tag_parent; + + --%test(Execute test for non existing tag) + procedure test_nonexists_tag; + + --%test(Execute test for duplicate list tags) + procedure test_duplicate_tag; + + --%test(Execute suite test for duplicate list tags) + procedure suite_duplicate_tag; + + --%test(Runs given package only with package name given as path and filter by tag) + procedure run_proc_pkg_name_tag; + + --%test(Runs all from given package with package name given as path and coverage file list with tag) + procedure run_pkg_name_file_list_tag; + + --%test(Runs tests from given paths with paths list and tag) + procedure run_proc_path_list_tag; + + --%test(Runs all tests in current schema with default reporter when only tag is given) + procedure tag_run_func_no_params; + + --%test(Runs given package only with package name given as path and filter by tag) + procedure tag_run_func_pkg_name; + + --%test(Runs tests from given paths with paths list and a tag) + procedure tag_run_func_path_list; + + --%test(Runs tests from given paths with paths list and a tag - Legacy Notation) + procedure tag_run_func_path_list_leg; + + --%test(Runs tests from given paths with paths list and include/exclude tags) + procedure tag_inc_exc_run_func_path_list; + + --%test(Runs tests from given paths with paths list and include/exclude tags - Legacy Notation) + procedure tag_inc_exc_run_fun_pth_lst_lg; + + --%test(Runs tests from given path and excludes specific tags) + procedure tag_exclude_run_func_path_list; + + --%test(Runs tests from given path and excludes specific tags - Legacy Notation) + procedure tag_exclude_run_fun_pth_lst_lg; + + --%test(Runs tests from given tags and exclude tags) + procedure tag_include_exclude_run_func; + + --%test(Runs tests from given tags and exclude tags - Legacy Notation) + procedure tag_include_exclude_run_fun_lg; + + --%test(Runs tests suing complex expressions) + procedure tag_complex_expressions; + + --%test(Testing invalid tag expression) + --%throws(-20219) + procedure invalid_tag_expression; + + --%endcontext + + --%context(ut3_info context) + + --%beforeall + procedure set_application_info; + --%beforeall + procedure create_context_test_suite; + + --%beforeall + procedure run_context_test_suite; + + --%afterall + procedure drop_context_test_suite; + + --%test(sets context for suite level beforeall) + procedure sys_ctx_on_suite_beforeall; + + --%test(sets context for context level beforeall) + procedure sys_ctx_on_context_beforeall; + + --%test(set for context level beforeeach) + procedure sys_ctx_on_beforeeach; + + --%test(set for context level beforetest) + procedure sys_ctx_on_beforetest; + + --%test(set for context level test) + procedure sys_ctx_on_test; + + --%test(set for context level aftertest) + procedure sys_ctx_on_aftertest; + + --%test(set for context level aftereach) + procedure sys_ctx_on_aftereach; + + --%test(set for context level afterall) + procedure sys_ctx_on_context_afterall; + + --%test(set for suite level afterall) + procedure sys_ctx_on_suite_afterall; + + --%test(is cleared after run) + procedure sys_ctx_clear_after_run; + + --%test(application info is restored after run) + procedure app_info_restore_after_run; + + --%endcontext + +end; \ No newline at end of file diff --git a/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_TRUE.pkb b/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_TRUE.pkb new file mode 100644 index 000000000..5a3585f74 --- /dev/null +++ b/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_TRUE.pkb @@ -0,0 +1,1659 @@ +create or replace package body test_ut_run_fail_on_err_par_true is + + gc_owner constant varchar2(250) := sys_context('userenv', 'current_schema'); + gc_module constant varchar2(32767) := 'test module'; + gc_action constant varchar2(32767) := 'test action'; + gc_client_info constant varchar2(32767) := 'test client info'; + + g_context_test_results clob; + g_timestamp timestamp; + + procedure clear_expectations is + begin + ut3_tester_helper.main_helper.clear_expectations(); + end; + + procedure create_ut3_user_tests is + begin + ut3_tester_helper.run_helper.create_ut3_user_tests(); + end; + + procedure drop_ut3_user_tests is + begin + ut3_tester_helper.run_helper.drop_ut3_user_tests(); + end; + + procedure ut_version is + begin + ut.expect(ut3_develop.ut.version()).to_match('^v\d+\.\d+\.\d+\.\d+(-\w+)?$'); + end; + + procedure ut_fail is + begin + --Act + ut3_develop.ut.fail('Testing failure message'); + --Assert + ut.expect(ut3_tester_helper.main_helper.get_failed_expectations(1)) + .to_be_like('%Testing failure message%'); + end; + + procedure run_proc_no_params is + l_results clob; + begin + ut3_tester_helper.run_helper.run(); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_proc_specific_reporter is + l_results clob; + begin + --Act + ut3_develop.ut.run('ut3_tester_helper',a_reporter => ut3_develop.ut_documentation_reporter(), a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_proc_cov_file_list is + l_results clob; + begin + --Act + ut3_develop.ut.run( + 'ut3_tester_helper', + a_reporter => ut3_develop.ut_sonar_test_reporter(), + a_source_files => ut3_develop.ut_varchar2_list(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb'), + a_fail_on_errors => true + ); + + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb'|| + '%tests/ut3_tester_helper.test_package_1.pkb'|| + '%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure run_proc_pkg_name is + l_results clob; + begin + ut3_develop.ut.run('ut3_tester_helper.test_package_1' , a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_proc_pkg_name_file_list is + l_results clob; + begin + ut3_develop.ut.run( + 'ut3_tester_helper.test_package_3', + ut3_develop.ut_sonar_test_reporter(), a_source_files => ut3_develop.ut_varchar2_list(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb'), + a_fail_on_errors => true + ); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + end; + + procedure run_proc_path_list is + l_results clob; + begin + ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests')); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_proc_path_list_file_list is + l_results clob; + begin + ut3_tester_helper.run_helper.run( + a_paths => ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'), + a_reporter => ut3_develop.ut_sonar_test_reporter(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb') + ); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure run_proc_null_reporter is + l_results clob; + begin + --Act + ut3_develop.ut.run('ut3_tester_helper', cast(null as ut3_develop.ut_reporter_base), a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests%test_package_1%test_package_2%tests2%test_package_3%' ); + end; + + procedure run_proc_null_path is + l_results clob; + begin + --Act + ut3_tester_helper.run_helper.run(cast(null as varchar2)); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_proc_null_path_list is + l_results clob; + l_paths ut3_develop.ut_varchar2_list; + begin + --Act + ut3_tester_helper.run_helper.run(l_paths); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_proc_empty_path_list is + l_results clob; + begin + --Act + ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list()); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure create_suite_with_commit is + pragma autonomous_transaction; + begin + execute immediate 'create or replace package test_commit_warning is + --%suite + --%suitepath(ut.run.transaction) + + --%test + procedure does_commit; + end;'; + execute immediate 'create or replace package body test_commit_warning is + procedure does_commit is + begin + ut3_develop.ut.expect(1).to_equal(1); + commit; + end; + end;'; + end; + + procedure drop_suite_with_commit is + pragma autonomous_transaction; + begin + execute immediate 'drop package test_commit_warning'; + end; + + procedure run_proc_warn_on_commit is + l_results clob; + begin + ut3_develop.ut.run('test_commit_warning', a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + ut.expect(l_results).to_be_like( + '%Unable to perform automatic rollback after test%'|| + 'An implicit or explicit commit/rollback occurred in procedures:%' || + 'does_commit%' || + 'Use the "--%rollback(manual)" annotation or remove commit/rollback/ddl statements that are causing the issue.%' + ); + end; + + procedure create_failing_beforeall_suite is + pragma autonomous_transaction; + begin + execute immediate 'create or replace package parent_suite is + --%suite + --%suitepath(ut.run.failing_setup) + + --%beforeall + procedure failing_setup; + end;'; + execute immediate 'create or replace package body parent_suite is + procedure failing_setup is + begin + raise no_data_found; + end; + end;'; + execute immediate 'create or replace package child_suite is + --%suite + --%suitepath(ut.run.failing_setup.parent_suite.some_sub_suite) + + --%test + procedure does_stuff; + end;'; + execute immediate 'create or replace package body child_suite is + procedure does_stuff is + begin + ut3_develop.ut.expect(1).to_equal(1); + end; + end;'; + end; + + procedure drop_failing_beforeall_suite is + pragma autonomous_transaction; + begin + execute immediate 'drop package parent_suite'; + execute immediate 'drop package child_suite'; + end; + + procedure run_proc_fail_child_suites is + l_results clob; + begin + ut3_develop.ut.run('child_suite', a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + ut.expect(l_results).to_be_like( + '%1) does_stuff%' || + 'ORA-01403: no data found%' || + 'ORA-06512: at "UT3_USER.PARENT_SUITE%' + ); + end; + + procedure transaction_setup is + pragma autonomous_transaction; + begin + execute immediate 'create table transaction_test_table(message varchar2(100))'; + execute immediate 'create or replace package test_transaction is + --%suite + + --%test + procedure insert_row; + + --%test + procedure insert_and_raise; + end; + '; + execute immediate 'create or replace package body test_transaction is + procedure insert_row is + begin + insert into transaction_test_table values (''2 - inside the test_transaction.insert_row test''); + end; + procedure insert_and_raise is + begin + insert into transaction_test_table values (''2 - inside the test_transaction.insert_row test''); + raise no_data_found; + end; + end; + '; + + end; + + procedure transaction_cleanup is + pragma autonomous_transaction; + begin + begin + execute immediate 'drop table transaction_test_table'; + exception + when others then null; + end; + begin + execute immediate 'drop package test_transaction'; + exception + when others then null; + end; + end; + + procedure run_proc_keep_test_data is + l_expected sys_refcursor; + l_actual sys_refcursor; + l_results clob; + begin + --Arrange + execute immediate ' + insert into transaction_test_table values (''1 - inside the test_ut_run.run_proc_keep_test_changes test'')'; + + --Act + ut3_develop.ut.run('test_transaction.insert_row', a_force_manual_rollback => true, a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + + --Assert + open l_expected for + select '1 - inside the test_ut_run.run_proc_keep_test_changes test' as message from dual + union all + select '2 - inside the test_transaction.insert_row test' from dual + order by 1; + + open l_actual for 'select * from transaction_test_table order by 1'; + + ut.expect( l_actual ).to_equal(l_expected); + end; + + procedure run_proc_keep_test_data_raise is + l_expected sys_refcursor; + l_actual sys_refcursor; + l_results clob; + begin + --Arrange + execute immediate ' + insert into transaction_test_table values (''1 - inside the test_ut_run.run_proc_keep_test_changes test'')'; + + --Act -problem??? + ut3_develop.ut.run('test_transaction.insert_and_raise', a_force_manual_rollback => true, a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + + --Assert + open l_expected for + select '1 - inside the test_ut_run.run_proc_keep_test_changes test' as message from dual + union all + select '2 - inside the test_transaction.insert_row test' from dual + order by 1; + + open l_actual for 'select * from transaction_test_table order by 1'; + + ut.expect( l_actual ).to_equal(l_expected); + end; + + procedure run_proc_discard_test_data is + l_expected sys_refcursor; + l_actual sys_refcursor; + l_results clob; + begin + --Arrange + execute immediate ' + insert into transaction_test_table values (''1 - inside the test_ut_run.run_proc_keep_test_changes test'')'; + + --Act + ut3_develop.ut.run('test_transaction.insert_row', a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + + --Assert + open l_expected for + select '1 - inside the test_ut_run.run_proc_keep_test_changes test' as message from dual; + + open l_actual for 'select * from transaction_test_table order by 1'; + + ut.expect( l_actual ).to_equal(l_expected); + end; + + procedure run_func_no_params is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_specific_reporter is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_documentation_reporter()); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_cov_file_list is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + select * bulk collect into l_results from table ( + ut3_develop.ut.run('ut3_tester_helper', + ut3_develop.ut_sonar_test_reporter(), + a_source_files => ut3_develop.ut_varchar2_list(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb') + )); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%tests/ut3_tester_helper.test_package_1.pkb%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure run_func_pkg_name is + l_results ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_results from table (ut3_develop.ut.run('ut3_tester_helper.test_package_1')); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_func_pkg_name_file_list is + l_results ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_results from table ( + ut3_develop.ut.run('ut3_tester_helper.test_package_3', + ut3_develop.ut_sonar_test_reporter(), + a_source_files => ut3_develop.ut_varchar2_list(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb') + )); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + end; + + procedure run_func_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests')); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_func_path_list_file_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run( + a_paths => ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'), + a_reporter => ut3_develop.ut_sonar_test_reporter(), + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb') + ); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure run_func_null_reporter is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + select * bulk collect into l_results from table (ut3_develop.ut.run('ut3_tester_helper',cast(null as ut3_develop.ut_reporter_base))); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%tests%test_package_1%test_package_2%tests2%test_package_3%' ); + end; + + procedure run_func_null_path is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run(cast(null as varchar2)); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_null_path_list is + l_results ut3_develop.ut_varchar2_list; + l_paths ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run(l_paths); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_empty_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list()); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_cov_file_lst_null_rep is + l_results ut3_develop.ut_varchar2_list; + begin + --Act + l_results := ut3_tester_helper.run_helper.run( + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb'), + a_reporter => cast(null as ut3_develop.ut_reporter_base)); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure run_func_empty_suite is + l_results ut3_develop.ut_varchar2_list; + l_expected varchar2(32767); + pragma autonomous_transaction; + begin + --Arrange + execute immediate q'[create or replace package empty_suite as + -- %suite + + procedure not_a_test; + end;]'; + execute immediate q'[create or replace package body empty_suite as + procedure not_a_test is begin null; end; + end;]'; + l_expected := '%empty_suite%0 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%'; + --Act + select * bulk collect into l_results from table(ut3_develop.ut.run('empty_suite')); + + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + + --Cleanup + execute immediate q'[drop package empty_suite]'; + end; + + procedure raise_in_invalid_state is + l_results ut3_develop.ut_varchar2_list; + l_expected varchar2(32767); + begin + --Arrange + l_expected := 'test_state + test_stateful + failing_stateful_test [% sec] (FAILED - 1)% +Failures:% + 1) failing_stateful_test + ORA-04068: existing state of packages (DB_LOOPBACK%) has been discarded + ORA-04061: existing state of package body "%.STATEFUL_PACKAGE" has been invalidated + ORA-04065: not executed, altered or dropped package body "%.STATEFUL_PACKAGE"% + ORA-06512: at line 6% +1 tests, 0 failed, 1 errored, 0 disabled, 0 warning(s)%'; + + --Act + select * bulk collect into l_results from table(ut3_develop.ut.run('ut3_tester_helper.test_stateful')); + + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + ut.fail('Expected exception but nothing was raised'); + exception + when others then + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + ut.expect(sqlcode).to_equal(-4068); + end; + + procedure create_test_suite is + begin + ut3_tester_helper.run_helper.create_test_suite; + end; + + procedure drop_test_suite is + begin + ut3_tester_helper.run_helper.drop_test_suite; + end; + + procedure run_in_invalid_state is + l_results ut3_develop.ut_varchar2_list; + l_actual clob; + l_expected varchar2(32767); + begin + select * bulk collect into l_results from table(ut3_develop.ut.run('failing_invalid_spec')); + + l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); + ut.expect(l_actual).to_be_like('%Call params for % are not valid: package %FAILING_INVALID_SPEC% does not exist or is invalid.%'); + + end; + + procedure compile_invalid_package is + ex_compilation_error exception; + pragma exception_init(ex_compilation_error,-24344); + pragma autonomous_transaction; + begin + begin + execute immediate q'[ + create or replace package failing_invalid_spec as + --%suite + gv_glob_val non_existing_table.id%type := 0; + + --%test + procedure test1; + end;]'; + exception when ex_compilation_error then null; + end; + begin + execute immediate q'[ + create or replace package body failing_invalid_spec as + procedure test1 is begin ut.expect(1).to_equal(1); end; + end;]'; + exception when ex_compilation_error then null; + end; + end; + procedure drop_invalid_package is + pragma autonomous_transaction; + begin + execute immediate 'drop package failing_invalid_spec'; + end; + + procedure run_and_revalidate_specs is + l_results ut3_develop.ut_varchar2_list; + l_actual clob; + l_is_invalid number; + begin + execute immediate q'[select count(1) from all_objects o where o.owner = :object_owner and o.object_type = 'PACKAGE' + and o.status = 'INVALID' and o.object_name= :object_name]' into l_is_invalid + using 'UT3_USER','INVALID_PCKAG_THAT_REVALIDATES'; + + select * bulk collect into l_results from table(ut3_develop.ut.run('invalid_pckag_that_revalidates')); + + l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); + ut.expect(1).to_equal(l_is_invalid); + ut.expect(l_actual).to_be_like('%invalid_pckag_that_revalidates%invalidspecs [% sec]% +%Finished in % seconds% +%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%'); + + end; + + procedure generate_invalid_spec is + ex_compilation_error exception; + pragma exception_init(ex_compilation_error,-24344); + pragma autonomous_transaction; + begin + + execute immediate q'[ + create or replace package parent_specs as + c_test constant varchar2(1) := 'Y'; + end;]'; + + execute immediate q'[ + create or replace package invalid_pckag_that_revalidates as + --%suite + g_var varchar2(1) := parent_specs.c_test; + + --%test(invalidspecs) + procedure test1; + end;]'; + + execute immediate q'[ + create or replace package body invalid_pckag_that_revalidates as + procedure test1 is begin ut.expect('Y').to_equal(g_var); end; + end;]'; + + -- That should invalidate test package and we can then revers + execute immediate q'[ + create or replace package parent_specs as + c_test_error constant varchar2(1) := 'Y'; + end;]'; + + execute immediate q'[ + create or replace package parent_specs as + c_test constant varchar2(1) := 'Y'; + end;]'; + + end; + procedure drop_invalid_spec is + pragma autonomous_transaction; + begin + execute immediate 'drop package invalid_pckag_that_revalidates'; + execute immediate 'drop package parent_specs'; + end; + + procedure run_and_report_warnings is + l_results ut3_develop.ut_varchar2_list; + l_actual clob; + begin + + select * bulk collect into l_results from table(ut3_develop.ut.run('bad_annotations')); + l_actual := ut3_tester_helper.main_helper.table_to_clob(l_results); + + ut.expect(l_actual).to_be_like('%Missing "--%endcontext" annotation for a "--%context" annotation. The end of package is considered end of context.% +%1 tests, 0 failed, 0 errored, 0 disabled, 1 warning(s)%'); + + end; + + procedure create_bad_annot is + pragma autonomous_transaction; + begin + execute immediate q'[ + create or replace package bad_annotations as + --%suite + + --%context + + --%test(invalidspecs) + procedure test1; + + end;]'; + + execute immediate q'[ + create or replace package body bad_annotations as + procedure test1 is begin ut.expect(1).to_equal(1); end; + end;]'; + + end; + + procedure drop_bad_annot is + pragma autonomous_transaction; + begin + execute immediate 'drop package bad_annotations'; + end; + + procedure create_suite_with_link is + begin + ut3_tester_helper.run_helper.create_suite_with_link; + end; + + procedure drop_suite_with_link is + begin + ut3_tester_helper.run_helper.drop_suite_with_link; + end; + + procedure savepoints_on_db_links is + l_results clob; + begin + ut3_develop.ut.run('ut3_tester_helper.test_distributed_savepoint', a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + ut.expect(l_results).to_be_like('%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%'); + end; + + procedure remove_time_from_results(a_results in out nocopy ut3_develop.ut_varchar2_list) is + begin + for i in 1 .. a_results.count loop + a_results(i) := regexp_replace(a_results(i),'\[[0-9]*[\.,]?[0-9]+ sec\]',''); + a_results(i) := regexp_replace(a_results(i),'Finished in [0-9]*[\.,][0-9]+ seconds',''); + end loop; + end; + + procedure run_schema_name_test is + l_results ut3_develop.ut_varchar2_list; + l_expected clob; + begin + select * bulk collect into l_results + from table ( ut3_develop.ut.run( gc_owner||'.'||gc_owner ) ); + l_expected := '%1 tests, 0 failed, 0 errored, 0 disabled, 0 warning(s)%'; + ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + end; + + procedure create_schema_name_package is + pragma autonomous_transaction; + begin + execute immediate ' + create or replace package '||gc_owner||'.'||gc_owner||' as + --%suite + + --%test + procedure sample_test; + end;'; + + execute immediate ' + create or replace package body '||gc_owner||'.'||gc_owner||' as + procedure sample_test is begin ut.expect(1).to_equal(1); end; + end;'; + + end; + + procedure drop_schema_name_package is + pragma autonomous_transaction; + begin + execute immediate 'drop package '||gc_owner||'.'||gc_owner; + end; + + procedure create_suites_with_path is + pragma autonomous_transaction; + begin + execute immediate q'[create or replace package ut_abc is + -- %suite + -- %suitepath(main.abc) + + -- %test + procedure ut_test_01; + end ut_abc;]'; + + execute immediate q'[create or replace package body ut_abc + is + procedure ut_test_01 as begin ut.expect(true).to_be_true(); end; + end;]'; + + execute immediate q'[create or replace package ut_abc_def + is + -- %suite + -- %suitepath(main.abc_def) + + -- %test + procedure ut_test_01; + end ut_abc_def;]'; + + execute immediate q'[create or replace package body ut_abc_def + is + procedure ut_test_01 as begin ut.expect(true).to_be_true(); end; + end;]'; + + end; + + procedure drop_suites_with_path is + pragma autonomous_transaction; + begin + execute immediate q'[drop package ut_abc]'; + execute immediate q'[drop package ut_abc_def]'; + end; + + procedure run_suite_with_nls_sort is + L_current_sort varchar2(2000); + l_results ut3_develop.ut_varchar2_list; + l_expected clob; + begin + --Arrange + select value + into l_current_sort + from nls_session_parameters where parameter = 'NLS_SORT'; + + execute immediate 'alter session set nls_sort=GERMAN'; + + --Act + select * + bulk collect into l_results + from table ( ut3_develop.ut.run( gc_owner||':main' ) ); + --Assert + l_expected := q'[main% + abc_def% + ut_abc_def% + ut_test_01% + abc% + ut_abc% + ut_test_01%]'; + ut.expect(ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( l_expected ); + + execute immediate 'alter session set nls_sort='||l_current_sort; + end; + + procedure run_with_random_order is + l_random_results ut3_develop.ut_varchar2_list; + l_results ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_random_results + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1', a_random_test_order_seed => 6 ) ) + where trim(column_value) is not null and column_value not like 'Finished in %' + and column_value not like '%Tests were executed with random order %'; + + select * bulk collect into l_results + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1' ) ) + --TODO this condition should be removed once issues with unordered compare and 'blank text rows' are resolved. + where trim(column_value) is not null and column_value not like 'Finished in %'; + + remove_time_from_results(l_results); + remove_time_from_results(l_random_results); + + ut.expect(anydata.convertCollection(l_random_results)).to_equal(anydata.convertCollection(l_results)).unordered(); + ut.expect(anydata.convertCollection(l_random_results)).not_to_equal(anydata.convertCollection(l_results)); + end; + + procedure run_and_report_random_ord_seed is + l_actual ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_actual + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1', a_random_test_order_seed => 123456789 ) ); + + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_actual) ).to_be_like( q'[%Tests were executed with random order seed '123456789'.%]' ); + end; + + procedure run_with_random_order_seed is + l_expected ut3_develop.ut_varchar2_list; + l_actual ut3_develop.ut_varchar2_list; + begin + + select * bulk collect into l_expected + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1', a_random_test_order_seed => 3 ) ); + select * bulk collect into l_actual + from table ( ut3_develop.ut.run( 'ut3_tester_helper.test_package_1', a_random_test_order_seed => 3 ) ); + + remove_time_from_results(l_actual); + remove_time_from_results(l_expected); + l_actual.delete(l_actual.count); + l_expected.delete(l_expected.count); + + ut.expect(anydata.convertCollection(l_actual)).to_equal(anydata.convertCollection(l_expected)); + end; + + procedure test_run_by_one_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite1test1'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure suite_run_by_one_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).not_to_be_like( '%test_package_1.%executed%' ); + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).to_be_like( '%test_package_2.%executed%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3.%executed%' ); + end; + + procedure two_test_run_by_one_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'test2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).not_to_be_like( '%test_package_1.%executed%' ); + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).to_be_like( '%test_package_2.%executed%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3.%executed%' ); + end; + + procedure all_suites_run_by_one_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'helper'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).to_be_like( '%test_package_3%' ); + end; + + procedure two_test_run_by_two_tags is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'subtest1|subtest2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_1.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure two_test_run_by_two_tags_leg is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'subtest1,subtest2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_1.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure suite_with_children_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite1'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure suite_with_tag_parent is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite2'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure test_nonexists_tag is + l_results clob; + l_exp_message varchar2(4000); + begin + ut3_tester_helper.run_helper.run(a_tags => 'nonexisting'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + ut.expect( l_results ).not_to_be_like( '%test_package_1%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure test_duplicate_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite1test1,suite1test1'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure suite_duplicate_tag is + l_results clob; + begin + ut3_tester_helper.run_helper.run(a_tags => 'suite1,suite1'); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_proc_pkg_name_tag is + l_results clob; + begin + ut3_develop.ut.run('ut3_tester_helper.test_package_1',a_tags => 'suite1test1', a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_1.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_pkg_name_file_list_tag is + l_results clob; + begin + ut3_develop.ut.run('ut3_tester_helper.test_package_1',a_tags => 'suite1test1', a_fail_on_errors => true); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%test_package_1%' ); + ut.expect( l_results ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_1.test2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_2%' ); + ut.expect( l_results ).not_to_be_like( '%test_package_3%' ); + end; + + procedure run_proc_path_list_tag is + l_results clob; + begin + ut3_develop.ut.run( + 'ut3_tester_helper.test_package_1', + ut3_develop.ut_sonar_test_reporter(), a_source_files => ut3_develop.ut_varchar2_list(),a_tags => 'suite1', + a_test_files => ut3_develop.ut_varchar2_list('tests/ut3_tester_helper.test_package_1.pkb', + 'tests/ut3_tester_helper.test_package_2.pkb', + 'tests/ut3_tester_helper.test_package_3.pkb'), + a_fail_on_errors => true + ); + l_results := ut3_tester_helper.main_helper.get_dbms_output_as_clob(); + --Assert + ut.expect( l_results ).to_be_like( '%tests/ut3_tester_helper.test_package_1.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_2.pkb%' ); + ut.expect( l_results ).not_to_be_like( '%tests/ut3_tester_helper.test_package_3.pkb%' ); + end; + + procedure tag_run_func_no_params is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => 'helper'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%test_package_2%test_package_3%' ); + end; + + procedure tag_run_func_pkg_name is + l_results ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_results from table (ut3_develop.ut.run('ut3_tester_helper.test_package_1', a_tags => 'suite1test1')); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_run_func_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'),a_tags => 'suite1test1|suite2test1'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_run_func_path_list_leg is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'),a_tags => 'suite1test1,suite2test1'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_inc_exc_run_func_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'),a_tags => '(suite1test1|suite2test1)&!suite2'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_inc_exc_run_fun_pth_lst_lg is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests.test_package_1',':tests'),a_tags => 'suite1test1,suite2test1,-suite2'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + end; + + procedure tag_exclude_run_func_path_list is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests,:tests2'),a_tags => '!suite1test2&!suite2test1&!test1suite3'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_3%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_3.test2%executed%' ); + end; + +procedure tag_exclude_run_fun_pth_lst_lg is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(ut3_develop.ut_varchar2_list(':tests,:tests2'),a_tags => '-suite1test2,-suite2test1,-test1suite3'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_3%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_3.test2%executed%' ); + end; + + procedure tag_include_exclude_run_func is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => '(suite1)&(!suite1test2&!suite2test1&!test1suite3)'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test2%executed%' ); + end; + + procedure tag_include_exclude_run_fun_lg is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => 'suite1,-suite1test2,-suite2test1,-test1suite3'); + --Assert + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_package_2.test2%executed%' ); + end; + + procedure tag_complex_expressions is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => 'release_3_1_13&(fast|simple)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test5 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test6 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test3%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => 'release_3_1_13&(!patch_3_1_13&!patch_3_1_14)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_1.test1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test3%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test5%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test6%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => 'release_3_1_13&(patch_3_1_13&!slow)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test5 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test3%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test6%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(simple&end_to_end)|(development&fast)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_1.test1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_2.test3 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test5 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test6 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development&end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%test_tag_pkg_3.test5 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test1%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_1.test2%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test3%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_2.test4%executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%test_package_3.test6%executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => 'any'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite2_level1_pkg.test1_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite2_level1_pkg.test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_level1_pkg.test1_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite2_2_level2_pkg.suite2_2_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite2_2_level2_pkg.suite2_2_test2_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_2_level2_pkg.suite1_2_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_2_level2_pkg.suite1_2_test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_1_level2_pkg.suite1_1_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_level1_pkg.test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_1_level2_pkg.suite1_1_test2_level2 executed%' ); + + l_results := ut3_tester_helper.run_helper.run(a_tags => 'none'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_level1_pkg.test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_be_like( '%suite1_1_level2_pkg.suite1_1_test2_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite2_level1_pkg.test1_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite2_level1_pkg.test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_level1_pkg.test1_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite2_2_level2_pkg.suite2_2_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite2_2_level2_pkg.suite2_2_test2_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_2_level2_pkg.suite1_2_test1_level2 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_2_level2_pkg.suite1_2_test2_level1 executed%' ); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like( '%suite1_1_level2_pkg.suite1_1_test1_level2 executed%' ); + + + end; + + procedure invalid_tag_expression is + l_results ut3_develop.ut_varchar2_list; + begin + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development!&end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development&&end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development&end_to_end|)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(!development&!!end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(&development&end_to_end)'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + l_results := ut3_tester_helper.run_helper.run(a_tags => '(development|end_to_end))'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).to_match('^\s*invalid_tag_expression \[[,\.0-9]+ sec\]\s*$','m'); + ut.expect( ut3_tester_helper.main_helper.table_to_clob(l_results) ).not_to_be_like('%(FAILED -%'); + + end; + + procedure set_application_info is + begin + dbms_application_info.set_module( gc_module, gc_action ); + dbms_application_info.set_client_info( gc_client_info ); + end; + + procedure create_context_test_suite is + pragma autonomous_transaction; + begin + execute immediate q'[ + create or replace package check_context is + --%suite(Suite description) + --%suitepath(some.suite.path) + + --%beforeall + procedure before_suite; + + --%context(context description) + --%name(some_context) + + --%beforeall + procedure before_context; + + --%beforeeach + procedure before_each_test; + + --%test(Some test description) + --%beforetest(before_test) + --%aftertest(after_test) + procedure the_test; + procedure before_test; + procedure after_test; + + --%aftereach + procedure after_each_test; + + --%afterall + procedure after_context; + + --%endcontext + + + --%afterall + procedure after_suite; + + end;]'; + execute immediate q'[ + create or replace package body check_context is + + procedure print_context( a_procedure_name varchar2 ) is + l_results ut_varchar2_rows; + l_module varchar2(32767); + l_action varchar2(32767); + l_client_info varchar2(32767); + begin + select attribute||'='||value + bulk collect into l_results + from session_context where namespace = 'UT3_DEVELOP_INFO' + order by attribute; + for i in 1 .. l_results.count loop + dbms_output.put_line( upper(a_procedure_name) ||':'|| l_results(i) ); + end loop; + dbms_application_info.read_module( l_module, l_action ); + dbms_application_info.read_client_info( l_client_info ); + + dbms_output.put_line( 'APPLICATION_INFO:MODULE=' || l_module ); + dbms_output.put_line( 'APPLICATION_INFO:ACTION=' || l_action ); + dbms_output.put_line( 'APPLICATION_INFO:CLIENT_INFO=' || l_client_info ); + end; + + procedure before_suite is + begin + print_context('before_suite'); + end; + + procedure before_context is + begin + print_context('before_context'); + end; + + procedure before_each_test is + begin + print_context('before_each_test'); + end; + + procedure the_test is + begin + print_context('the_test'); + end; + + procedure before_test is + begin + print_context('before_test'); + end; + + procedure after_test is + begin + print_context('after_test'); + end; + + procedure after_each_test is + begin + print_context('after_each_test'); + end; + + procedure after_context is + begin + print_context('after_context'); + end; + + procedure after_suite is + begin + print_context('after_suite'); + end; + + end;]'; + end; + + procedure drop_context_test_suite is + pragma autonomous_transaction; + begin + execute immediate q'[drop package check_context]'; + end; + + procedure run_context_test_suite is + l_lines ut3_develop.ut_varchar2_list; + begin + select * bulk collect into l_lines from table(ut3_develop.ut.run('check_context')); + g_context_test_results := ut3_tester_helper.main_helper.table_to_clob(l_lines); + g_timestamp := current_timestamp; + end; + + + procedure sys_ctx_on_suite_beforeall is + begin + ut.expect(g_context_test_results).to_be_like( + '%BEFORE_SUITE:COVERAGE_RUN_ID=________________________________%' + ||'%BEFORE_SUITE:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.before_suite' + ||'%BEFORE_SUITE:CURRENT_EXECUTABLE_TYPE=beforeall' + ||'%BEFORE_SUITE:RUN_PATHS=check_context' + ||'%BEFORE_SUITE:SUITE_DESCRIPTION=Suite description' + ||'%BEFORE_SUITE:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%BEFORE_SUITE:SUITE_PATH=some.suite.path.check_context' + ||'%BEFORE_SUITE:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=before_suite%' + ); + ut.expect(g_context_test_results).not_to_be_like('%BEFORE_SUITE:CONTEXT_%'); + ut.expect(g_context_test_results).not_to_be_like('%BEFORE_SUITE:TEST_%'); + end; + + procedure sys_ctx_on_context_beforeall is + begin + ut.expect(g_context_test_results).to_be_like( + '%BEFORE_CONTEXT:CONTEXT_DESCRIPTION=context description' + ||'%BEFORE_CONTEXT:CONTEXT_NAME=some_context' + ||'%BEFORE_CONTEXT:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%BEFORE_CONTEXT:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_CONTEXT:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.before_context' + ||'%BEFORE_CONTEXT:CURRENT_EXECUTABLE_TYPE=beforeall' + ||'%BEFORE_CONTEXT:RUN_PATHS=check_context' + ||'%BEFORE_CONTEXT:SUITE_DESCRIPTION=Suite description' + ||'%BEFORE_CONTEXT:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%BEFORE_CONTEXT:SUITE_PATH=some.suite.path.check_context' + ||'%BEFORE_CONTEXT:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=before_context%' + ); + ut.expect(g_context_test_results).not_to_be_like('%BEFORE_CONTEXT:TEST_%'); + end; + + procedure sys_ctx_on_beforeeach is + begin + ut.expect(g_context_test_results).to_be_like( + '%BEFORE_EACH_TEST:CONTEXT_DESCRIPTION=context description' + ||'%BEFORE_EACH_TEST:CONTEXT_NAME=some_context' + ||'%BEFORE_EACH_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%BEFORE_EACH_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_EACH_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.before_each_test' + ||'%BEFORE_EACH_TEST:CURRENT_EXECUTABLE_TYPE=beforeeach' + ||'%BEFORE_EACH_TEST:RUN_PATHS=check_context' + ||'%BEFORE_EACH_TEST:SUITE_DESCRIPTION=Suite description' + ||'%BEFORE_EACH_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%BEFORE_EACH_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%BEFORE_EACH_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_EACH_TEST:TEST_DESCRIPTION=Some test description' + ||'%BEFORE_EACH_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%BEFORE_EACH_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=before_each_test%' + ); + end; + + procedure sys_ctx_on_beforetest is + begin + ut.expect(g_context_test_results).to_be_like( + '%BEFORE_TEST:CONTEXT_DESCRIPTION=context description' + ||'%BEFORE_TEST:CONTEXT_NAME=some_context' + ||'%BEFORE_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%BEFORE_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.before_test' + ||'%BEFORE_TEST:CURRENT_EXECUTABLE_TYPE=beforetest' + ||'%BEFORE_TEST:RUN_PATHS=check_context' + ||'%BEFORE_TEST:SUITE_DESCRIPTION=Suite description' + ||'%BEFORE_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%BEFORE_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%BEFORE_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%BEFORE_TEST:TEST_DESCRIPTION=Some test description' + ||'%BEFORE_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%BEFORE_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=before_test%' + ); + end; + + procedure sys_ctx_on_test is + begin + ut.expect(g_context_test_results).to_be_like( + '%THE_TEST:CONTEXT_DESCRIPTION=context description' + ||'%THE_TEST:CONTEXT_NAME=some_context' + ||'%THE_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%THE_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%THE_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.the_test' + ||'%THE_TEST:CURRENT_EXECUTABLE_TYPE=test' + ||'%THE_TEST:RUN_PATHS=check_context' + ||'%THE_TEST:SUITE_DESCRIPTION=Suite description' + ||'%THE_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%THE_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%THE_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%THE_TEST:TEST_DESCRIPTION=Some test description' + ||'%THE_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%THE_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=the_test%' + ); + end; + + procedure sys_ctx_on_aftertest is + begin + ut.expect(g_context_test_results).to_be_like( + '%AFTER_TEST:CONTEXT_DESCRIPTION=context description' + ||'%AFTER_TEST:CONTEXT_NAME=some_context' + ||'%AFTER_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%AFTER_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.after_test' + ||'%AFTER_TEST:CURRENT_EXECUTABLE_TYPE=aftertest' + ||'%AFTER_TEST:RUN_PATHS=check_context' + ||'%AFTER_TEST:SUITE_DESCRIPTION=Suite description' + ||'%AFTER_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%AFTER_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%AFTER_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_TEST:TEST_DESCRIPTION=Some test description' + ||'%AFTER_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%AFTER_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=after_test%' + ); + end; + + procedure sys_ctx_on_aftereach is + begin + ut.expect(g_context_test_results).to_be_like( + '%AFTER_EACH_TEST:CONTEXT_DESCRIPTION=context description' + ||'%AFTER_EACH_TEST:CONTEXT_NAME=some_context' + ||'%AFTER_EACH_TEST:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%AFTER_EACH_TEST:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_EACH_TEST:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.after_each_test' + ||'%AFTER_EACH_TEST:CURRENT_EXECUTABLE_TYPE=aftereach' + ||'%AFTER_EACH_TEST:RUN_PATHS=check_context' + ||'%AFTER_EACH_TEST:SUITE_DESCRIPTION=Suite description' + ||'%AFTER_EACH_TEST:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%AFTER_EACH_TEST:SUITE_PATH=some.suite.path.check_context' + ||'%AFTER_EACH_TEST:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_EACH_TEST:TEST_DESCRIPTION=Some test description' + ||'%AFTER_EACH_TEST:TEST_NAME='||gc_owner||'.check_context.the_test' + ||'%AFTER_EACH_TEST:TEST_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=after_each_test%' + ); + end; + + procedure sys_ctx_on_context_afterall is + begin + ut.expect(g_context_test_results).to_be_like( + '%AFTER_CONTEXT:CONTEXT_DESCRIPTION=context description' + ||'%AFTER_CONTEXT:CONTEXT_NAME=some_context' + ||'%AFTER_CONTEXT:CONTEXT_PATH=some.suite.path.check_context.some_context' + ||'%AFTER_CONTEXT:CONTEXT_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%AFTER_CONTEXT:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.after_context' + ||'%AFTER_CONTEXT:CURRENT_EXECUTABLE_TYPE=afterall' + ||'%AFTER_CONTEXT:RUN_PATHS=check_context' + ||'%AFTER_CONTEXT:SUITE_DESCRIPTION=Suite description' + ||'%AFTER_CONTEXT:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%AFTER_CONTEXT:SUITE_PATH=some.suite.path.check_context' + ||'%AFTER_CONTEXT:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=after_context%' + ); + ut.expect(g_context_test_results).not_to_be_like('%AFTER_CONTEXT:TEST_%'); + end; + + procedure sys_ctx_on_suite_afterall is + begin + ut.expect(g_context_test_results).to_be_like( + '%AFTER_SUITE:CURRENT_EXECUTABLE_NAME='||gc_owner||'.check_context.after_suite' + ||'%AFTER_SUITE:CURRENT_EXECUTABLE_TYPE=afterall' + ||'%AFTER_SUITE:RUN_PATHS=check_context' + ||'%AFTER_SUITE:SUITE_DESCRIPTION=Suite description' + ||'%AFTER_SUITE:SUITE_PACKAGE='||gc_owner||'.check_context' + ||'%AFTER_SUITE:SUITE_PATH=some.suite.path.check_context' + ||'%AFTER_SUITE:SUITE_START_TIME='||to_char(g_timestamp,'syyyy-mm-dd"T"hh24:mi') + ||'%APPLICATION_INFO:MODULE=utPLSQL' + ||'%APPLICATION_INFO:ACTION=check_context' + ||'%APPLICATION_INFO:CLIENT_INFO=after_suite%' + ); + ut.expect(g_context_test_results).not_to_be_like('%AFTER_SUITE:CONTEXT_%'); + ut.expect(g_context_test_results).not_to_be_like('%AFTER_SUITE:TEST_%'); + end; + + procedure sys_ctx_clear_after_run is + l_actual sys_refcursor; + begin + open l_actual for + select attribute||'='||value + from session_context where namespace = 'UT3_DEVELOP_INFO'; + + ut.expect(l_actual).to_be_empty(); + end; + + procedure app_info_restore_after_run is + l_module varchar2(32767); + l_action varchar2(32767); + l_client_info varchar2(32767); + begin + dbms_application_info.read_module( l_module, l_action ); + dbms_application_info.read_client_info( l_client_info ); + + ut.expect(l_module).to_equal(gc_module); + ut.expect(l_action).to_equal(gc_action); + --Disabled as it can't be tested. + --UT3_LATEST_RELEASE is also setting the client_info on each procedure + -- ut.expect(l_client_info).to_equal(gc_client_info); + end; + +end; \ No newline at end of file diff --git a/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_TRUE.pks b/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_TRUE.pks new file mode 100644 index 000000000..a54305c2e --- /dev/null +++ b/test/ut3_user/api/TEST_UT_RUN_FAIL_ON_ERR_PAR_TRUE.pks @@ -0,0 +1,319 @@ +create or replace package test_ut_run_fail_on_err_par_true is + --%suite(ut.run) + --%suitepath(utplsql.test_user.api) + + procedure clear_expectations; + + procedure create_ut3_user_tests; + procedure drop_ut3_user_tests; + + --%test(ut.version() returns version of the framework) + procedure ut_version; + + --%test(ut.fail() marks test as failed) + --%beforetest(ut3_tester_helper.main_helper.set_ut_run_context) + --%aftertest(clear_expectations, ut3_tester_helper.main_helper.clear_ut_run_context) + procedure ut_fail; + + --%context(ut_run_procedure) + --%displayname(ut.run() procedure options) + --%beforeall(create_ut3_user_tests) + --%afterall(drop_ut3_user_tests) + + --%test(Runs all tests in current schema with default reporter when no parameters given) + procedure run_proc_no_params; + --%test(Runs all tests in current schema with specified reporter) + procedure run_proc_specific_reporter; + --%test(Runs all tests in current schema with coverage file list) + procedure run_proc_cov_file_list; + + --%test(Runs given package only with package name given as path) + procedure run_proc_pkg_name; + --%test(Runs all from given package with package name given as path and coverage file list) + procedure run_proc_pkg_name_file_list; + --%test(Runs tests from given paths only with paths list) + procedure run_proc_path_list; + --%test(Runs tests from given paths only with paths list and coverage file list) + procedure run_proc_path_list_file_list; + --%test(Runs all tests in current schema using default reporter when null reporter given) + procedure run_proc_null_reporter; + --%test(Runs all tests in current schema with null path provided) + procedure run_proc_null_path; + --%test(Runs all tests in current schema with null path list given) + procedure run_proc_null_path_list; + --%test(Runs all tests in current schema with empty path list given) + procedure run_proc_empty_path_list; + + procedure create_suite_with_commit; + procedure drop_suite_with_commit; + --%test(Reports a warning if transaction was invalidated by test with automatic rollback) + --%beforetest(create_suite_with_commit) + --%aftertest(drop_suite_with_commit) + procedure run_proc_warn_on_commit; + + + procedure create_failing_beforeall_suite; + procedure drop_failing_beforeall_suite; + --%test(Marks child suite as failed when parent's suite beforeall fails) + --%beforetest(create_failing_beforeall_suite) + --%aftertest(drop_failing_beforeall_suite) + procedure run_proc_fail_child_suites; + + procedure create_suite_with_link; + procedure drop_suite_with_link; + + --%test(Savepoints are working properly on distributed transactions - Issue #839) + --%beforetest(create_suite_with_link) + --%aftertest(drop_suite_with_link) + procedure savepoints_on_db_links; + + --%endcontext + + --%context(run_proc_transaction_control) + + --%beforeall + procedure transaction_setup; + --%afterall + procedure transaction_cleanup; + --%test(Leaves transaction open and uncommitted with a_force_manual_rollback) + procedure run_proc_keep_test_data; + --%test(Leaves transaction open and uncommitted with a_force_manual_rollback with exceptions) + procedure run_proc_keep_test_data_raise; + --%test(Does not impact current transaction when ran without a_force_manual_rollback) + procedure run_proc_discard_test_data; + + --%endcontext + + + --%context(ut_run_function) + + --%displayname(ut.run() function options) + --%beforeall(create_ut3_user_tests) + --%afterall(drop_ut3_user_tests) + + --%test(Runs all tests in current schema with default reporter when no parameters given) + procedure run_func_no_params; + --%test(Runs all tests in current schema with specified reporter) + procedure run_func_specific_reporter; + --%test(Runs all tests in current schema with coverage file list) + procedure run_func_cov_file_list; + + --%test(Runs given package only with package name given as path) + procedure run_func_pkg_name; + --%test(Runs all from given package with package name given as path and coverage file list) + procedure run_func_pkg_name_file_list; + --%test(Runs tests from given paths with paths list) + procedure run_func_path_list; + --%test(Runs tests from given paths with paths list and coverage file list) + procedure run_func_path_list_file_list; + --%test(Runs all tests in current schema using default reporter when null reporter given) + procedure run_func_null_reporter; + --%test(Runs all tests in current schema with null path provided) + procedure run_func_null_path; + --%test(Runs all tests in current schema with null path list given) + procedure run_func_null_path_list; + --%test(Runs all tests in current schema with empty path list given) + procedure run_func_empty_path_list; + --%test(Runs all tests in current schema with coverage file list and default reporter) + procedure run_func_cov_file_lst_null_rep; + --%test(Executes successfully an empty suite) + procedure run_func_empty_suite; + + --disabled(Makes session wait for lock on 18.1 due to library cache pin wait) + --%test(ut.run - raises after completing all tests if a test fails with ORA-04068 or ORA-04061) + --%beforetest(create_test_suite) + --%aftertest(drop_test_suite) + procedure raise_in_invalid_state; + procedure create_test_suite; + procedure drop_test_suite; + + --%test(ut.run - Does not execute suite when specified package is not valid) + --%beforetest(compile_invalid_package) + --%aftertest(drop_invalid_package) + procedure run_in_invalid_state; + procedure compile_invalid_package; + procedure drop_invalid_package; + + --%test(Invalidate package specs via rebuild but still execute package) + --%beforetest(generate_invalid_spec) + --%aftertest(drop_invalid_spec) + procedure run_and_revalidate_specs; + procedure generate_invalid_spec; + procedure drop_invalid_spec; + + --%test(Provides warnings on invalid annotations) + --%beforetest(create_bad_annot) + --%aftertest(drop_bad_annot) + procedure run_and_report_warnings; + procedure create_bad_annot; + procedure drop_bad_annot; + + --%test(Can run test package that is named the same as schema name) + --%beforetest(create_schema_name_package) + --%aftertest(drop_schema_name_package) + procedure run_schema_name_test; + procedure create_schema_name_package; + procedure drop_schema_name_package; + + --%test(Runs properly formed suite hierarchy regardless of NLS_SORT settings - Issue #1060) + --%beforetest(create_suites_with_path) + --%aftertest(drop_suites_with_path) + procedure run_suite_with_nls_sort; + procedure create_suites_with_path; + procedure drop_suites_with_path; + + --%endcontext + + --%context(random_order) + + --%displayname(Random test execution order) + --%beforeall(create_ut3_user_tests) + --%afterall(drop_ut3_user_tests) + + --%test(Runs tests in random order) + procedure run_with_random_order; + + --%test(Reports test random_test_order_seed) + procedure run_and_report_random_ord_seed; + + --%test(Runs tests in the same random order with provided seed) + procedure run_with_random_order_seed; + + --%endcontext + + --%context(run with tags) + --%displayname(Call ut.run with #tags) + + --%beforeall(create_ut3_user_tests) + --%afterall(drop_ut3_user_tests) + + --%test(Execute test by tag ut_run) + procedure test_run_by_one_tag; + + --%test( Execute suite by one tag) + procedure suite_run_by_one_tag; + + --%test(Execute two tests by one tag) + procedure two_test_run_by_one_tag; + + --%test(Execute all suites tests with tag) + procedure all_suites_run_by_one_tag; + + --%test(Execute tests by passing two tags) + procedure two_test_run_by_two_tags; + + --%test(Execute tests by passing two tags - Legacy notation) + procedure two_test_run_by_two_tags_leg; + + --%test(Execute suite and all of its children) + procedure suite_with_children_tag; + + --%test(Execute suite and parents) + procedure suite_with_tag_parent; + + --%test(Execute test for non existing tag) + procedure test_nonexists_tag; + + --%test(Execute test for duplicate list tags) + procedure test_duplicate_tag; + + --%test(Execute suite test for duplicate list tags) + procedure suite_duplicate_tag; + + --%test(Runs given package only with package name given as path and filter by tag) + procedure run_proc_pkg_name_tag; + + --%test(Runs all from given package with package name given as path and coverage file list with tag) + procedure run_pkg_name_file_list_tag; + + --%test(Runs tests from given paths with paths list and tag) + procedure run_proc_path_list_tag; + + --%test(Runs all tests in current schema with default reporter when only tag is given) + procedure tag_run_func_no_params; + + --%test(Runs given package only with package name given as path and filter by tag) + procedure tag_run_func_pkg_name; + + --%test(Runs tests from given paths with paths list and a tag) + procedure tag_run_func_path_list; + + --%test(Runs tests from given paths with paths list and a tag - Legacy Notation) + procedure tag_run_func_path_list_leg; + + --%test(Runs tests from given paths with paths list and include/exclude tags) + procedure tag_inc_exc_run_func_path_list; + + --%test(Runs tests from given paths with paths list and include/exclude tags - Legacy Notation) + procedure tag_inc_exc_run_fun_pth_lst_lg; + + --%test(Runs tests from given path and excludes specific tags) + procedure tag_exclude_run_func_path_list; + + --%test(Runs tests from given path and excludes specific tags - Legacy Notation) + procedure tag_exclude_run_fun_pth_lst_lg; + + --%test(Runs tests from given tags and exclude tags) + procedure tag_include_exclude_run_func; + + --%test(Runs tests from given tags and exclude tags - Legacy Notation) + procedure tag_include_exclude_run_fun_lg; + + --%test(Runs tests suing complex expressions) + procedure tag_complex_expressions; + + --%test(Testing invalid tag expression) + --%throws(-20219) + procedure invalid_tag_expression; + + --%endcontext + + --%context(ut3_info context) + + --%beforeall + procedure set_application_info; + --%beforeall + procedure create_context_test_suite; + + --%beforeall + procedure run_context_test_suite; + + --%afterall + procedure drop_context_test_suite; + + --%test(sets context for suite level beforeall) + procedure sys_ctx_on_suite_beforeall; + + --%test(sets context for context level beforeall) + procedure sys_ctx_on_context_beforeall; + + --%test(set for context level beforeeach) + procedure sys_ctx_on_beforeeach; + + --%test(set for context level beforetest) + procedure sys_ctx_on_beforetest; + + --%test(set for context level test) + procedure sys_ctx_on_test; + + --%test(set for context level aftertest) + procedure sys_ctx_on_aftertest; + + --%test(set for context level aftereach) + procedure sys_ctx_on_aftereach; + + --%test(set for context level afterall) + procedure sys_ctx_on_context_afterall; + + --%test(set for suite level afterall) + procedure sys_ctx_on_suite_afterall; + + --%test(is cleared after run) + procedure sys_ctx_clear_after_run; + + --%test(application info is restored after run) + procedure app_info_restore_after_run; + + --%endcontext + +end; \ No newline at end of file