@@ -66,6 +66,33 @@ create or replace package test_ut_test_suite is
6666 procedure prep_failing_no_body;
6767 procedure clean_failing_no_body;
6868
69+ --%test(Test description with comma)
70+ --%beforetest(setup_desc_with_comma)
71+ --%aftertest(clean_desc_with_comma)
72+ procedure test_desc_with_comma;
73+ procedure setup_desc_with_comma;
74+ procedure clean_desc_with_comma;
75+
76+ --%test(Invalidate cache on package drop)
77+ --%beforetest(setup_inv_cache_on_drop)
78+ --%aftertest(clean_inv_cache_on_drop)
79+ procedure test_inv_cache_on_drop;
80+ procedure setup_inv_cache_on_drop;
81+ procedure clean_inv_cache_on_drop;
82+
83+ --%test(Includes Invalid Package Bodies In The Run)
84+ --%beforetest(setup_inv_pck_bodies)
85+ --%aftertest(clean_inv_pck_bodies)
86+ procedure test_inv_pck_bodies;
87+ procedure setup_inv_pck_bodies;
88+ procedure clean_inv_pck_bodies;
89+
90+ --%test(Package With Dollar Sign)
91+ --%beforetest(setup_pck_with_dollar)
92+ --%aftertest(clean_pck_with_dollar)
93+ procedure test_pck_with_dollar;
94+ procedure setup_pck_with_dollar;
95+ procedure clean_pck_with_dollar;
6996
7097 --%beforeall
7198 procedure prepare;
@@ -77,8 +104,20 @@ end test_ut_test_suite;
77104/
78105create or replace package body test_ut_test_suite is
79106
107+
80108 ex_obj_doesnt_exist exception;
81109 pragma exception_init(ex_obj_doesnt_exist, -04043);
110+
111+ procedure restore_asserts(a_assert_results ut_expectation_results) is
112+ begin
113+ ut_expectation_processor.clear_expectations;
114+
115+ if a_assert_results is not null then
116+ for i in 1 .. a_assert_results.count loop
117+ ut_expectation_processor.add_expectation_result(a_assert_results(i));
118+ end loop;
119+ end if;
120+ end;
82121
83122 /*
84123 procedure suite_disabled is
@@ -400,7 +439,7 @@ end;';
400439 end loop;
401440
402441 execute immediate 'begin ut.expect(suite_disabled.gv_glob_val,''Not all tests were executed'').to_equal(0); end;';
403- ut.expect(l_output,'Not all tests were marked as failed').tO_be_like ('%0 tests, 0 failed, 0 errored, 0 skipped %');
442+ ut.expect(l_output,'Not all tests were marked as failed').to_be_like ('%0 tests, 0 failed, 0 errored, 0 disabled %');
404443 end;
405444
406445 procedure prep_suite_disabled is
@@ -619,6 +658,184 @@ end;]';
619658 null;
620659 end;
621660 end;
661+
662+ procedure test_desc_with_comma is
663+ l_objects_to_run ut_suite_items;
664+ l_suite ut_suite;
665+ l_test ut_test;
666+ begin
667+ l_objects_to_run := ut_suite_manager.configure_execution_by_path(ut_varchar2_list('tst_package_to_be_dropped'));
668+
669+ --Assert
670+ ut.expect(l_objects_to_run.count).to_equal(1);
671+
672+ l_suite := treat(l_objects_to_run(1) as ut_suite);
673+
674+ ut.expect(l_suite.name).to_equal('tst_package_to_be_dropped');
675+ ut.expect(l_suite.description).to_equal('A suite description, though with comma, is assigned by suite_manager');
676+ ut.expect(l_suite.items.count).to_equal(2);
677+
678+ l_test := treat(l_suite.items(1) as ut_test);
679+
680+ ut.expect(l_test.name).to_equal('test1');
681+ ut.expect(l_test.description).to_equal('A test description, though with comma, is assigned by suite_manager');
682+
683+ l_test := treat(l_suite.items(2) as ut_test);
684+
685+ ut.expect(l_test.name).to_equal('test2');
686+ ut.expect(l_test.description).to_equal('A test description, though with comma, is assigned by suite_manager');
687+
688+ end;
689+ procedure setup_desc_with_comma is
690+ pragma autonomous_transaction;
691+ begin
692+ execute immediate 'create or replace package tst_package_to_be_dropped as
693+ --%suite(A suite description, though with comma, is assigned by suite_manager)
694+
695+ --%test(A test description, though with comma, is assigned by suite_manager)
696+ procedure test1;
697+
698+ --%test
699+ --%displayname(A test description, though with comma, is assigned by suite_manager)
700+ procedure test2;
701+ end;';
702+
703+ execute immediate 'create or replace package body tst_package_to_be_dropped as
704+ procedure test1 is begin ut.expect(1).to_equal(1); end;
705+ procedure test2 is begin ut.expect(1).to_equal(1); end;
706+ end;';
707+ end;
708+ procedure clean_desc_with_comma is
709+ pragma autonomous_transaction;
710+ begin
711+ begin
712+ execute immediate 'drop package tst_package_to_be_dropped';
713+ exception
714+ when ex_obj_doesnt_exist then
715+ null;
716+ end;
717+ end;
718+
719+ procedure test_inv_cache_on_drop is
720+ l_test_report ut_varchar2_list;
721+ begin
722+
723+ select * bulk collect into l_test_report from table(ut.run(USER||'.tst_package_to_be_dropped'));
724+
725+ -- drop package
726+ clean_inv_cache_on_drop;
727+
728+ begin
729+ select * bulk collect into l_test_report from table(ut.run(user || '.tst_package_to_be_dropped'));
730+ ut.fail('Cache not invalidated on package drop');
731+ exception
732+ when others then
733+ ut.expect(sqlerrm).to_be_like('%tst_package_to_be_dropped%does not exist%');
734+ end;
735+
736+ end;
737+ procedure setup_inv_cache_on_drop is
738+ pragma autonomous_transaction;
739+ begin
740+ execute immediate 'create or replace package tst_package_to_be_dropped as
741+ --%suite
742+
743+ --%test
744+ procedure test1;
745+ end;';
746+
747+ execute immediate 'create or replace package body tst_package_to_be_dropped as
748+ procedure test1 is begin ut.expect(1).to_equal(1); end;
749+ procedure test2 is begin ut.expect(1).to_equal(1); end;
750+ end;';
751+ end;
752+
753+ procedure clean_inv_cache_on_drop is
754+ pragma autonomous_transaction;
755+ begin
756+ execute immediate 'drop package tst_package_to_be_dropped';
757+ exception
758+ when ex_obj_doesnt_exist then
759+ null;
760+ end;
761+
762+ procedure test_inv_pck_bodies is
763+ l_result integer;
764+ begin
765+ execute immediate 'select * from table(ut.run(''test_dependencies'', utplsql_test_reporter()))' into l_result;
766+
767+ ut.expect(l_result).to_equal(ut_utils.tr_success);
768+ end;
769+ procedure setup_inv_pck_bodies is
770+ pragma autonomous_transaction;
771+ begin
772+ execute immediate 'create table test_dependency_table (id integer)';
773+ execute immediate 'create or replace package test_dependencies as
774+ -- %suite
775+
776+ -- %test
777+ procedure dependant;
778+ end;';
779+ execute immediate 'create or replace package body test_dependencies as
780+ gc_dependant_variable test_dependency_table.id%type;
781+ procedure dependant is begin null; end;
782+ end;';
783+
784+ execute immediate 'alter table test_dependency_table modify id number';
785+
786+ execute immediate 'create or replace type utplsql_test_reporter under ut_reporter_base(
787+ constructor function utplsql_test_reporter(self in out nocopy utplsql_test_reporter) return self as result,
788+ overriding member procedure after_calling_run(self in out nocopy utplsql_test_reporter, a_run in ut_run))';
789+ execute immediate 'create or replace type body utplsql_test_reporter is
790+ constructor function utplsql_test_reporter(self in out nocopy utplsql_test_reporter) return self as result is
791+ begin
792+ self.init($$plsql_unit);
793+ return;
794+ end;
795+
796+ overriding member procedure after_calling_run(self in out nocopy utplsql_test_reporter, a_run in ut_run) is
797+ begin
798+ self.print_text(a_run.result);
799+ end;
800+ end;';
801+
802+ end;
803+ procedure clean_inv_pck_bodies is
804+ pragma autonomous_transaction;
805+ begin
806+ execute immediate 'drop type utplsql_test_reporter';
807+ execute immediate 'drop table test_dependency_table';
808+ execute immediate 'drop package test_dependencies';
809+ end;
810+
811+ procedure test_pck_with_dollar is
812+ l_objects_to_run ut_suite_items;
813+ begin
814+ --act
815+ l_objects_to_run := ut_suite_manager.configure_execution_by_path(ut_varchar2_list('tst_package_with$dollar'));
816+
817+ ut.expect(treat(l_objects_to_run(1) as ut_suite).name).to_equal('tst_package_with$dollar');
818+ end;
819+ procedure setup_pck_with_dollar is
820+ pragma autonomous_transaction;
821+ begin
822+ execute immediate 'create or replace package tst_package_with$dollar as
823+ --%suite
824+
825+ --%test
826+ procedure test1;
827+ end;';
828+
829+ execute immediate 'create or replace package body tst_package_with$dollar as
830+ procedure test1 is begin ut.expect(1).to_equal(1); end;
831+ procedure test2 is begin ut.expect(1).to_equal(1); end;
832+ end;';
833+ end;
834+ procedure clean_pck_with_dollar is
835+ pragma autonomous_transaction;
836+ begin
837+ execute immediate 'drop package tst_package_with$dollar';
838+ end;
622839
623840end test_ut_test_suite;
624841/
0 commit comments