diff --git a/source/core/ut_suite_cache_manager.pkb b/source/core/ut_suite_cache_manager.pkb index 7c4b1ee93..06c4c76a5 100644 --- a/source/core/ut_suite_cache_manager.pkb +++ b/source/core/ut_suite_cache_manager.pkb @@ -161,13 +161,16 @@ create or replace package body ut_suite_cache_manager is begin return case when a_random_seed is null then q'[ - replace( - --suite path until objects name (excluding contexts and test path) with trailing dot (full stop) - substr( c.obj.path, 1, instr( c.obj.path, lower(c.obj.object_name), -1 ) + length(c.obj.object_name) ), - '.', - --'.' replaced with chr(0) to assure that child elements come before parent when sorting in descending oder - chr(0) - ) desc nulls last, + nlssort( + replace( + /*suite path until objects name (excluding contexts and test path) with trailing dot (full stop)*/ + substr( c.obj.path, 1, instr( c.obj.path, lower(c.obj.object_name), -1 ) + length(c.obj.object_name) ), + '.', + /*'.' replaced with chr(0) to assure that child elements come before parent when sorting in descending order*/ + chr(0) + ), + 'nls_sort=binary' + )desc nulls last, case when c.obj.self_type = 'UT_SUITE_CONTEXT' then ( select max( x.line_no ) + 1 from ut_suite_cache x @@ -178,7 +181,7 @@ create or replace package body ut_suite_cache_manager is else c.obj.line_no end, - --assures that child contexts come before parent contexts + /*assures that child contexts come before parent contexts*/ regexp_count(c.obj.path,'\.') desc, :a_random_seed]' else diff --git a/test/ut3_tester/core/test_suite_manager.pks b/test/ut3_tester/core/test_suite_manager.pks index ed318b890..90b589b9e 100644 --- a/test/ut3_tester/core/test_suite_manager.pks +++ b/test/ut3_tester/core/test_suite_manager.pks @@ -3,9 +3,6 @@ create or replace package test_suite_manager is --%suite(suite_manager) --%suitepath(utplsql.ut3_tester.core) - procedure create_dummy_long_test_package; - - procedure drop_dummy_long_test_package; --%beforeall procedure compile_dummy_packages; @@ -170,6 +167,8 @@ create or replace package test_suite_manager is --%beforetest(create_dummy_long_test_package) --%aftertest(drop_dummy_long_test_package) procedure add_new_long_test_package; + procedure create_dummy_long_test_package; + procedure drop_dummy_long_test_package; end test_suite_manager; / diff --git a/test/ut3_user/api/test_ut_run.pkb b/test/ut3_user/api/test_ut_run.pkb index 5142b1770..e3af7c5ad 100644 --- a/test/ut3_user/api/test_ut_run.pkb +++ b/test/ut3_user/api/test_ut_run.pkb @@ -780,6 +780,74 @@ Failures:% 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; diff --git a/test/ut3_user/api/test_ut_run.pks b/test/ut3_user/api/test_ut_run.pks index ac2e50e25..753af79da 100644 --- a/test/ut3_user/api/test_ut_run.pks +++ b/test/ut3_user/api/test_ut_run.pks @@ -155,6 +155,13 @@ create or replace package test_ut_run is 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)