Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
933f41a
Added TAP reporter and synonyms
WayneNani Jul 10, 2025
c5f07a7
Larger variables to prevent failure during reporting
WayneNani Jul 10, 2025
4ed6837
Added TAP Reporter to install script
WayneNani Jul 11, 2025
5e656fe
Add TAP to expected reporters
WayneNani Jul 11, 2025
6f47bb9
Added simple test for TAP reporter
WayneNani Jul 14, 2025
641ef7d
Added failing test for TAP
WayneNani Jul 15, 2025
2500604
Added erroring Test for TAP reporter
WayneNani Jul 15, 2025
9d765a4
Added test for disabled TAP test
WayneNani Jul 16, 2025
ef7f811
Added boilerplate expression for shorter tests
WayneNani Jul 16, 2025
78cc772
Added skipped test with no reason
WayneNani Jul 18, 2025
1e78987
Add explicit spaces for correct indentation
WayneNani Jul 18, 2025
ee22669
Added test for multiple test outcomes in one go
WayneNani Jul 18, 2025
55d5b61
Added serverout for beforetest procedures
WayneNani Jul 18, 2025
e451e4b
Included print of serverout as comment
WayneNani Jul 21, 2025
fb9ef0b
Added suite name escaping
WayneNani Jul 21, 2025
f18981d
Included escaped test name
WayneNani Jul 26, 2025
f1c0f86
Included escaped skip reason
WayneNani Jul 26, 2025
33865dd
Added escaped comment test
WayneNani Jul 27, 2025
a477d68
Central use of comment procedure
WayneNani Jul 27, 2025
2e399fd
Comments shouldn't escape special characters
WayneNani Jul 29, 2025
3193f5b
Added TAP reporter to documentation
WayneNani Aug 2, 2025
707fadd
Added empty lines at the end
WayneNani Mar 16, 2026
7ddbacc
Added tests for contexts and suites
WayneNani Mar 17, 2026
3d38fbe
Added TAP subtests to documentation
WayneNani Mar 17, 2026
18af6b0
Added test for including context when it only contains skipped tests
WayneNani Mar 17, 2026
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
Next Next commit
Added TAP reporter and synonyms
  • Loading branch information
WayneNani committed Jul 10, 2025
commit 933f41a70510a04c2eef89846301458009a312e8
1 change: 1 addition & 0 deletions source/create_grants.sql
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,7 @@ grant execute on &&ut3_owner..ut_tfs_junit_reporter to &ut3_user;
grant execute on &&ut3_owner..ut_documentation_reporter to &ut3_user;
grant execute on &&ut3_owner..ut_sonar_test_reporter to &ut3_user;
grant execute on &&ut3_owner..ut_realtime_reporter to &ut3_user;
grant execute on &&ut3_owner..ut_tap_reporter to &ut3_user;
--reporters - coverage
grant execute on &&ut3_owner..ut_coverage_html_reporter to &ut3_user;
grant execute on &&ut3_owner..ut_coverage_sonar_reporter to &ut3_user;
Expand Down
1 change: 1 addition & 0 deletions source/create_synonyms.sql
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,7 @@ create &action_type. synonym &ut3_user.ut_tfs_junit_reporter for &&ut3_owner..ut
create &action_type. synonym &ut3_user.ut_documentation_reporter for &&ut3_owner..ut_documentation_reporter;
create &action_type. synonym &ut3_user.ut_sonar_test_reporter for &&ut3_owner..ut_sonar_test_reporter;
create &action_type. synonym &ut3_user.ut_realtime_reporter for &&ut3_owner..ut_realtime_reporter;
create &action_type. synonym &ut3_user.ut_tap_reporter for &&ut3_owner..ut_tap_reporter;
--reporters - coverage
create &action_type. synonym &ut3_user.ut_coverage_html_reporter for &&ut3_owner..ut_coverage_html_reporter;
create &action_type. synonym &ut3_user.ut_coverage_sonar_reporter for &&ut3_owner..ut_coverage_sonar_reporter;
Expand Down
104 changes: 104 additions & 0 deletions source/reporters/ut_tap_reporter.tpb
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
create or replace type body ut_tap_reporter is


constructor function ut_tap_reporter(self in out nocopy ut_tap_reporter) return self as result is
begin
self.init($$plsql_unit);
self.lvl := 0;
return;
end ut_tap_reporter;

overriding member procedure before_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite) as
begin
self.print_text('# Subtest: ' || coalesce(a_suite.description, a_suite.name));
lvl := lvl + 2;
self.print_text('1..' || a_suite.items.count);
end before_calling_suite;

overriding member procedure after_calling_test(self in out nocopy ut_tap_reporter, a_test ut_test) as
l_message varchar2(4000);
l_test_name varchar2(300) := coalesce(a_test.description, a_test.name);

procedure print_failed_expectation(a_test ut_test) is
l_lines ut_varchar2_list;
l_failed boolean;
begin
if a_test.get_error_stack_traces().count = 0 then
-- If no error occurred, print failed expectation
l_lines := a_test.all_expectations(a_test.all_expectations.last).get_result_lines();
l_failed := a_test.all_expectations(a_test.all_expectations.last).status >= ut_utils.gc_success;
if l_failed then
self.print_text('message: ''' || l_lines(1) || '''');
self.print_text('severity: fail');
end if;
else
-- Print multi-line YAML-String with implicit newline characters
self.print_text('message: |');
self.lvl := self.lvl + 1;
self.print_text(ut_utils.table_to_clob(a_test.get_error_stack_traces()));
self.lvl := self.lvl - 1;
self.print_text('severity: error');
end if;
end print_failed_expectation;

begin

if a_test.result = ut_utils.gc_disabled then
self.print_text('ok - ' || l_test_name || ' # SKIP'||
case when a_test.disabled_reason is not null
then ': '||a_test.disabled_reason
else null
end );
elsif a_test.result = ut_utils.gc_success then
self.print_text('ok - ' || l_test_name);
elsif a_test.result > ut_utils.gc_success then
if self.lvl = 0 then
self.print_text(ut_ansiconsole_helper.red('not ok') || ' - ' || l_test_name);
else
self.print_text('not ok - ' || l_test_name);
end if;
self.lvl := self.lvl + 1;
self.print_text('---');
print_failed_expectation(a_test);
self.print_text('...');
self.lvl := self.lvl - 1;
end if;

end after_calling_test;

overriding member procedure after_calling_before_all(self in out nocopy ut_tap_reporter, a_executable in ut_executable) is
begin
if a_executable.serveroutput is not null and a_executable.serveroutput != empty_clob() then
self.print_clob(a_executable.serveroutput);
end if;
end after_calling_before_all;

overriding member procedure after_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite) as
l_suite_name varchar2(300) := coalesce(a_suite.description, a_suite.name);
begin
lvl := lvl - 2;
if lvl = 0 then
if a_suite.result = ut_utils.gc_success then
self.print_text('ok - ' || l_suite_name);
elsif a_suite.result > ut_utils.gc_success then
self.print_text(ut_ansiconsole_helper.red('not ok') || ' - ' || l_suite_name);
end if;

self.print_text(' ');
end if;

end after_calling_suite;

overriding member procedure before_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run) as
begin
self.print_text('TAP version 14');
self.print_text('1..' || a_run.items.count);
self.print_text(' ');
end before_calling_run;

overriding member procedure after_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run) as
begin
self.lvl := 0;
end;
end;
/

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

In general, it's probably better to leave an empty newline at the end of each file.

13 changes: 13 additions & 0 deletions source/reporters/ut_tap_reporter.tps
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
create or replace type ut_tap_reporter under ut_documentation_reporter(

constructor function ut_tap_reporter(self in out nocopy ut_tap_reporter) return self as result,
overriding member procedure before_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite),
overriding member procedure after_calling_test(self in out nocopy ut_tap_reporter, a_test ut_test),
overriding member procedure after_calling_before_all (self in out nocopy ut_tap_reporter, a_executable in ut_executable),
overriding member procedure before_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run),
overriding member procedure after_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite),
overriding member procedure after_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run)

)
not final
/