Thanks to visit codestin.com
Credit goes to github.com

Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
c787e47
Added support for multiple occurrences of before and after blocks.
jgebal Mar 4, 2018
2399981
tmp
jgebal Mar 14, 2018
2631355
Fixed issue with null items list.
jgebal Mar 15, 2018
a05475a
Redefined event listeners mechanism.
jgebal Mar 25, 2018
f955d2a
Redefined event listeners mechanism.
jgebal Mar 25, 2018
430f76f
Fixed minor bug in XUnit reporter (showing CDATA for errors even when…
jgebal Mar 25, 2018
2537ced
Changed propagation of rollback. Now rollback will propagate from par…
jgebal Mar 29, 2018
9308662
Fixed examples.
jgebal Mar 29, 2018
17ee8cb
Fixed test for empty description in 11g.
jgebal Mar 29, 2018
93be873
Fixed test for empty description in 11g.
jgebal Mar 29, 2018
75b96c3
Fixed double warning on missing endcontext annotation.
jgebal Mar 29, 2018
a6dadcc
fix in test to overcome 11g XML missing attributes in 3.0.4
jgebal Mar 30, 2018
4bc7ced
Merge branch 'develop' into feature/support_of_context
jgebal Apr 7, 2018
8a26845
Fixes after merging from develop.
jgebal Apr 7, 2018
e9c4e80
Fixed test failure on 11g R2 - some issues with LIKE operator, long p…
jgebal Apr 7, 2018
bfbfa43
Updated documentation.
jgebal Apr 7, 2018
9cd61bf
Marking first column as bold
jgebal Apr 7, 2018
1adf35d
Changed the way reporters events are registered.
jgebal Apr 14, 2018
71d0b70
Fixed issues with comment-replace in big package specs.
jgebal Apr 14, 2018
8617613
Updated test for comments removal to include multi-line comments with…
jgebal Apr 16, 2018
51ba943
Updated documentation with new and changed annotations.
jgebal Apr 16, 2018
ad3f830
Changed behaviour for duplicate annotations - first wins.
jgebal Apr 19, 2018
4346b57
Updates to documentation.
jgebal Apr 20, 2018
b1ff0fc
Updates to documentation.
jgebal Apr 20, 2018
ab5a1ca
Updated and extended documentation for annotations.
jgebal Apr 22, 2018
e672ef0
Added description of `context` to annotations documentation.
jgebal Apr 22, 2018
9897247
Merge remote-tracking branch 'origin/develop' into feature/support_of…
jgebal Apr 22, 2018
b2df93e
Integrated with develop branch changes.
jgebal Apr 22, 2018
d604127
Removed empty header from documentation.
jgebal Apr 24, 2018
9afb7be
A bit of code cleanup and tests alignment.
jgebal Apr 25, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
Redefined event listeners mechanism.
  • Loading branch information
jgebal committed Mar 25, 2018
commit f955d2ad17505e854b53afe4d34df1a53e8195ee
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,8 @@ begin

l_test_proc := treat(l_test2_suite.items(1) as ut_test);
ut.expect(l_test_proc.name).to_equal('test2');
ut.expect(l_test_proc.before_test is not null).to_be_true;
ut.expect(l_test_proc.after_test is not null).to_be_true;
ut.expect(l_test_proc.before_test_list.count).to_equal(1);
ut.expect(l_test_proc.after_test_list.count).to_equal(1);

if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand All @@ -44,8 +44,8 @@ begin
dbms_output.put_line(q'[ut.expect(l_test2_suite.name).to_equal('test_package_2');=]'||l_test2_suite.name);
dbms_output.put_line(q'[ut.expect(l_test2_suite.items.count).to_equal(1);=]'||l_test2_suite.items.count);
dbms_output.put_line(q'[ut.expect(l_test_proc.name).to_equal('test2');=]'||l_test_proc.name);
dbms_output.put_line(q'[ut.expect(l_test_proc.before_test is not null).to_be_true;=]'||ut_utils.to_string(l_test_proc.before_test is not null));
dbms_output.put_line(q'[ut.expect(l_test_proc.after_test is not null).to_be_true;=]'||ut_utils.to_string(l_test_proc.after_test is not null));
dbms_output.put_line(q'[ut.expect(l_test_proc.before_test is not null).to_be_true;=]'||ut_utils.to_string(l_test_proc.before_test_list.count()));
dbms_output.put_line(q'[ut.expect(l_test_proc.after_test is not null).to_be_true;=]'||ut_utils.to_string(l_test_proc.after_test_list.count()));
end if;

end;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ begin
l_test_proc := treat(l_test2_suite.items(1) as ut_test);
ut.expect(l_test_proc.name).to_equal('test2');
ut.expect(l_test_proc.before_test_list.count).to_equal(1);
ut.expect(l_test_proc.after_test.count).to_equal(1);
ut.expect(l_test_proc.after_test_list.count).to_equal(1);

if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand All @@ -44,8 +44,8 @@ begin
dbms_output.put_line(q'[ut.expect(l_test2_suite.name).to_equal('test_package_2');=]'||l_test2_suite.name);
dbms_output.put_line(q'[ut.expect(l_test2_suite.items.count).to_equal(1);=]'||l_test2_suite.items.count);
dbms_output.put_line(q'[ut.expect(l_test_proc.name).to_equal('test2');=]'||l_test_proc.name);
dbms_output.put_line(q'[ut.expect(l_test_proc.before_test is not null).to_be_true;=]'||ut_utils.to_string(l_test_proc.before_test is not null));
dbms_output.put_line(q'[ut.expect(l_test_proc.after_test is not null).to_be_true;=]'||ut_utils.to_string(l_test_proc.after_test is not null));
dbms_output.put_line(q'[ut.expect(l_test_proc.before_test is not null).to_be_true;=]'||ut_utils.to_string(l_test_proc.before_test_list.count()));
dbms_output.put_line(q'[ut.expect(l_test_proc.after_test is not null).to_be_true;=]'||ut_utils.to_string(l_test_proc.after_test_list.count()));
end if;

end;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ begin

ut.expect(l_test1_suite.items(1).name).to_equal('test1');
ut.expect(l_test1_suite.items(1).description).to_equal('Test1 from test package 1');
ut.expect(treat(l_test1_suite.items(1) as ut_test).before_test.is_defined).to_be_false;
ut.expect(treat(l_test1_suite.items(1) as ut_test).after_test.is_defined).to_be_false;
ut.expect(treat(l_test1_suite.items(1) as ut_test).before_each.is_defined).to_be_true;
ut.expect(treat(l_test1_suite.items(1) as ut_test).before_test_list.count()).to_equal(0);
ut.expect(treat(l_test1_suite.items(1) as ut_test).after_test_list.count()).to_equal(0);
ut.expect(treat(l_test1_suite.items(1) as ut_test).before_each_list.count()).to_equal(1);
ut.expect(treat(l_test1_suite.items(1) as ut_test).disabled_flag).to_equal(0);

ut.expect(l_test1_suite.items(2).name).to_equal('test2');
ut.expect(l_test1_suite.items(2).description).to_equal('Test2 from test package 1');
ut.expect(treat(l_test1_suite.items(2) as ut_test).before_test.is_defined).to_be_true;
ut.expect(treat(l_test1_suite.items(2) as ut_test).after_test.is_defined).to_be_true;
ut.expect(treat(l_test1_suite.items(2) as ut_test).before_each.is_defined).to_be_true;
ut.expect(treat(l_test1_suite.items(2) as ut_test).before_test_list.count()).to_equal(1);
ut.expect(treat(l_test1_suite.items(2) as ut_test).after_test_list.count()).to_equal(1);
ut.expect(treat(l_test1_suite.items(2) as ut_test).before_each_list.count()).to_equal(1);
ut.expect(treat(l_test1_suite.items(2) as ut_test).disabled_flag).to_equal(0);

-- temporary behavior.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,16 +25,16 @@ begin

ut.expect(l_test1_suite.items(1).name).to_equal('test1');
ut.expect(l_test1_suite.items(1).description).to_equal('Test1 from test package 1');
ut.expect(treat(l_test1_suite.items(1) as ut_test).before_test.is_defined).to_be_false;
ut.expect(treat(l_test1_suite.items(1) as ut_test).after_test.is_defined).to_be_false;
ut.expect(treat(l_test1_suite.items(1) as ut_test).before_each.is_defined).to_be_true;
ut.expect(treat(l_test1_suite.items(1) as ut_test).before_test_list.count()).to_equal(0);
ut.expect(treat(l_test1_suite.items(1) as ut_test).after_test_list.count()).to_equal(0);
ut.expect(treat(l_test1_suite.items(1) as ut_test).before_each_list.count()).to_equal(1);
ut.expect(treat(l_test1_suite.items(1) as ut_test).disabled_flag).to_equal(0);

ut.expect(l_test1_suite.items(2).name).to_equal('test2');
ut.expect(l_test1_suite.items(2).description).to_equal('Test2 from test package 1');
ut.expect(treat(l_test1_suite.items(2) as ut_test).before_test.is_defined).to_be_true;
ut.expect(treat(l_test1_suite.items(2) as ut_test).after_test.is_defined).to_be_true;
ut.expect(treat(l_test1_suite.items(2) as ut_test).before_each.is_defined).to_be_true;
ut.expect(treat(l_test1_suite.items(2) as ut_test).before_test_list.count()).to_equal(1);
ut.expect(treat(l_test1_suite.items(2) as ut_test).after_test_list.count()).to_equal(1);
ut.expect(treat(l_test1_suite.items(2) as ut_test).before_each_list.count()).to_equal(1);
ut.expect(treat(l_test1_suite.items(2) as ut_test).disabled_flag).to_equal(0);

-- temporary behavior.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ begin

ut.expect(l_test_proc.name).to_equal('test2');
ut.expect(l_test_proc.description).to_equal('Test2 from test package 1');
ut.expect(l_test_proc.before_test is not null).to_be_true;
ut.expect(l_test_proc.after_test is not null).to_be_true;
ut.expect(l_test_proc.before_test_list.count).to_equal(1);
ut.expect(l_test_proc.after_test_list.count).to_equal(1);

if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ begin

ut.expect(l_test_proc.name).to_equal('test2');
ut.expect(l_test_proc.description).to_equal('Test2 from test package 1');
ut.expect(l_test_proc.before_test is not null).to_be_true;
ut.expect(l_test_proc.after_test is not null).to_be_true;
ut.expect(l_test_proc.before_test_list.count).to_equal(1);
ut.expect(l_test_proc.after_test_list.count).to_equal(1);

if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ begin

l_test_proc := treat(l_test1_suite.items(1) as ut_test);
ut.expect(l_test_proc.name).to_equal('test2');
ut.expect(l_test_proc.before_test is not null).to_be_true;
ut.expect(l_test_proc.after_test is not null).to_be_true;
ut.expect(l_test_proc.before_test_list.count).to_equal(1);
ut.expect(l_test_proc.after_test_list.count).to_equal(1);

if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ begin

l_test_proc := treat(l_test1_suite.items(1) as ut_test);
ut.expect(l_test_proc.name).to_equal('test2');
ut.expect(l_test_proc.before_test is not null).to_be_true;
ut.expect(l_test_proc.after_test is not null).to_be_true;
ut.expect(l_test_proc.before_test_list.count).to_equal(1);
ut.expect(l_test_proc.after_test_list.count).to_equal(1);

if ut_expectation_processor.get_status = ut_utils.tr_success then
:test_result := ut_utils.tr_success;
Expand Down
2 changes: 1 addition & 1 deletion old_tests/ut_test/ut_test.TeardownProcedureNameNull.sql
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ begin
if ut_example_tests.g_char = 'a' then
:test_result := ut_utils.tr_success;
else
dbms_output.put_line('expected: ut_example_tests.g_char = ''a'', got: '||ut_example_tests.g_char );
dbms_output.put_line('expected: ut_example_tests.g_char = ''a'', got: '''||ut_example_tests.g_char||'''' );
end if;
end;
/
2 changes: 1 addition & 1 deletion source/api/ut_runner.pkb
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ create or replace package body ut_runner is
procedure finish_run(a_run ut_run) is
begin
ut_utils.cleanup_temp_tables;
ut_event_manager.trigger_event(ut_event_manager.on_finalize, a_run);
ut_event_manager.trigger_event(ut_utils.gc_finalize, a_run);
ut_metadata.reset_source_definition_cache;
ut_utils.read_cache_to_dbms_output();
ut_coverage_helper.cleanup_tmp_table();
Expand Down
25 changes: 1 addition & 24 deletions source/core/events/ut_event_manager.pks
Original file line number Diff line number Diff line change
Expand Up @@ -15,30 +15,7 @@ create or replace package ut_event_manager authid current_user as
See the License for the specific language governing permissions and
limitations under the License.
*/

/* Constants: Event names */
subtype t_event_name is varchar2(30);
before_run constant t_event_name := 'before_run';
before_suite constant t_event_name := 'before_suite';
before_before_all constant t_event_name := 'before_before_all';
before_before_each constant t_event_name := 'before_before_each';
before_before_test constant t_event_name := 'before_before_test';
before_test constant t_event_name := 'before_test';
before_test_execute constant t_event_name := 'before_test_execute';
before_after_test constant t_event_name := 'before_after_test';
before_after_each constant t_event_name := 'before_after_each';
before_after_all constant t_event_name := 'before_after_all';
after_run constant t_event_name := 'after_run';
after_suite constant t_event_name := 'after_suite';
after_before_all constant t_event_name := 'after_before_all';
after_before_each constant t_event_name := 'after_before_each';
after_before_test constant t_event_name := 'after_before_test';
after_test constant t_event_name := 'after_test';
after_test_execute constant t_event_name := 'after_test_execute';
after_after_test constant t_event_name := 'after_after_test';
after_after_each constant t_event_name := 'after_after_each';
after_after_all constant t_event_name := 'after_after_all';
on_finalize constant t_event_name := 'on_finalize';
subtype t_event_name is varchar2(250);

procedure trigger_event( a_event_name t_event_name, a_event_object ut_event_item );

Expand Down
121 changes: 54 additions & 67 deletions source/core/types/ut_executable.tpb
Original file line number Diff line number Diff line change
Expand Up @@ -28,11 +28,6 @@ create or replace type body ut_executable is
return;
end;

member function is_defined return boolean is
begin
return self.procedure_name is not null and self.object_name is not null;
end;

member function is_valid(self in out nocopy ut_executable) return boolean is
l_result boolean := false;
l_message_part varchar2(4000) := 'Call params for ' || self.associated_event_name || ' are not valid: ';
Expand All @@ -45,7 +40,7 @@ create or replace type body ut_executable is
elsif self.procedure_name is null then
self.error_stack := l_message_part || 'procedure is not defined';
elsif not ut_metadata.procedure_exists(self.owner_name, self.object_name, self.procedure_name) then
self.error_stack := l_message_part || 'package missing procedure '
self.error_stack := l_message_part || 'procedure does not exist '
|| upper(self.owner_name || '.' || self.object_name || '.' ||self.procedure_name);
else
l_result := true;
Expand Down Expand Up @@ -91,70 +86,62 @@ create or replace type body ut_executable is
end loop;
end save_dbms_output;
begin
if self.is_defined() then
l_start_transaction_id := dbms_transaction.local_transaction_id(true);

-- report to application_info
ut_utils.set_client_info(self.procedure_name);

--listener - before call to executable
ut_event_manager.trigger_event('before_'||self.associated_event_name, self);

begin
ut_metadata.do_resolve(a_owner => self.owner_name, a_object => self.object_name, a_procedure_name => self.procedure_name);
exception
when others then
self.error_stack := dbms_utility.format_error_stack;
self.error_backtrace := dbms_utility.format_error_backtrace;
l_completed_without_errors := false;
end;
if l_completed_without_errors then
l_statement :=
'declare' || chr(10) ||
' l_error_stack varchar2(32767);' || chr(10) ||
' l_error_backtrace varchar2(32767);' || chr(10) ||
'begin' || chr(10) ||
' begin' || chr(10) ||
' ' || ut_metadata.form_name(self.owner_name, self.object_name, self.procedure_name) || ';' || chr(10) ||
' exception' || chr(10) ||
' when others then ' || chr(10) ||
' l_error_stack := dbms_utility.format_error_stack;' || chr(10) ||
' l_error_backtrace := dbms_utility.format_error_backtrace;' || chr(10) ||
' --raise on ORA-04068, ORA-04061: existing state of packages has been discarded to avoid unrecoverable session exception' || chr(10) ||
' end;' || chr(10) ||
' :a_error_stack := l_error_stack;' || chr(10) ||
' :a_error_backtrace := l_error_backtrace;' || chr(10) ||
'end;';

ut_utils.debug_log('ut_executable.do_execute l_statement: ' || l_statement);

l_cursor_number := dbms_sql.open_cursor;
dbms_sql.parse(l_cursor_number, statement => l_statement, language_flag => dbms_sql.native);
dbms_sql.bind_variable(l_cursor_number, 'a_error_stack', to_char(null), 32767);
dbms_sql.bind_variable(l_cursor_number, 'a_error_backtrace', to_char(null), 32767);

l_status := dbms_sql.execute(l_cursor_number);
dbms_sql.variable_value(l_cursor_number, 'a_error_stack', self.error_stack);
dbms_sql.variable_value(l_cursor_number, 'a_error_backtrace', self.error_backtrace);
dbms_sql.close_cursor(l_cursor_number);

save_dbms_output;

l_completed_without_errors := (self.error_stack||self.error_backtrace) is null;
if self.error_stack like '%ORA-04068%' or self.error_stack like '%ORA-04061%' then
ut_expectation_processor.set_invalidation_exception();
end if;
--listener - after call to executable
ut_event_manager.trigger_event('after_'||self.associated_event_name, self);

l_end_transaction_id := dbms_transaction.local_transaction_id();
if l_start_transaction_id != l_end_transaction_id or l_end_transaction_id is null then
a_item.add_transaction_invalidator(self.form_name());
end if;
ut_utils.set_client_info(null);
l_start_transaction_id := dbms_transaction.local_transaction_id(true);

-- report to application_info
ut_utils.set_client_info(self.procedure_name);

--listener - before call to executable
ut_event_manager.trigger_event('before_'||self.associated_event_name, self);

l_completed_without_errors := self.is_valid();
if l_completed_without_errors then
l_statement :=
'declare' || chr(10) ||
' l_error_stack varchar2(32767);' || chr(10) ||
' l_error_backtrace varchar2(32767);' || chr(10) ||
'begin' || chr(10) ||
' begin' || chr(10) ||
' ' || ut_metadata.form_name(self.owner_name, self.object_name, self.procedure_name) || ';' || chr(10) ||
' exception' || chr(10) ||
' when others then ' || chr(10) ||
' l_error_stack := dbms_utility.format_error_stack;' || chr(10) ||
' l_error_backtrace := dbms_utility.format_error_backtrace;' || chr(10) ||
' --raise on ORA-04068, ORA-04061: existing state of packages has been discarded to avoid unrecoverable session exception' || chr(10) ||
' end;' || chr(10) ||
' :a_error_stack := l_error_stack;' || chr(10) ||
' :a_error_backtrace := l_error_backtrace;' || chr(10) ||
'end;';

ut_utils.debug_log('ut_executable.do_execute l_statement: ' || l_statement);

l_cursor_number := dbms_sql.open_cursor;
dbms_sql.parse(l_cursor_number, statement => l_statement, language_flag => dbms_sql.native);
dbms_sql.bind_variable(l_cursor_number, 'a_error_stack', to_char(null), 32767);
dbms_sql.bind_variable(l_cursor_number, 'a_error_backtrace', to_char(null), 32767);

l_status := dbms_sql.execute(l_cursor_number);
dbms_sql.variable_value(l_cursor_number, 'a_error_stack', self.error_stack);
dbms_sql.variable_value(l_cursor_number, 'a_error_backtrace', self.error_backtrace);
dbms_sql.close_cursor(l_cursor_number);

save_dbms_output;

l_completed_without_errors := (self.error_stack||self.error_backtrace) is null;
if self.error_stack like '%ORA-04068%' or self.error_stack like '%ORA-04061%' then
ut_expectation_processor.set_invalidation_exception();
end if;
end if;

--listener - after call to executable
ut_event_manager.trigger_event('after_'||self.associated_event_name, self);

l_end_transaction_id := dbms_transaction.local_transaction_id();
if l_start_transaction_id != l_end_transaction_id or l_end_transaction_id is null then
a_item.add_transaction_invalidator(self.form_name());
end if;
ut_utils.set_client_info(null);

return l_completed_without_errors;
end do_execute;

Expand Down
1 change: 0 additions & 1 deletion source/core/types/ut_executable.tps
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,6 @@ create or replace type ut_executable under ut_event_item(
serveroutput clob,
constructor function ut_executable( self in out nocopy ut_executable, a_context ut_suite_item, a_procedure_name varchar2, a_associated_event_name varchar2) return self as result,
member function is_valid(self in out nocopy ut_executable) return boolean,
member function is_defined return boolean,
member function form_name return varchar2,
member procedure do_execute(self in out nocopy ut_executable, a_item in out nocopy ut_suite_item),
/**
Expand Down
Loading