|
| 1 | +create or replace type body ut_tap_reporter is |
| 2 | + |
| 3 | + |
| 4 | + constructor function ut_tap_reporter(self in out nocopy ut_tap_reporter) return self as result is |
| 5 | + begin |
| 6 | + self.init($$plsql_unit); |
| 7 | + self.lvl := 0; |
| 8 | + return; |
| 9 | + end ut_tap_reporter; |
| 10 | + |
| 11 | + member procedure print_comment(self in out nocopy ut_tap_reporter, a_comment clob) as |
| 12 | + begin |
| 13 | + self.print_clob(regexp_replace(a_comment, '^', '# ', 1, 0, 'm')); |
| 14 | + end print_comment; |
| 15 | + |
| 16 | + member function escape_special_chars(self in out nocopy ut_tap_reporter, a_string_to_escape clob) return clob as |
| 17 | + begin |
| 18 | + return regexp_replace(a_string_to_escape, '([\\#])', '\\\1'); |
| 19 | + end escape_special_chars; |
| 20 | + |
| 21 | + overriding member procedure before_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite) as |
| 22 | + begin |
| 23 | + self.print_text('# Subtest: ' || self.escape_special_chars(coalesce(a_suite.description, a_suite.name))); |
| 24 | + lvl := lvl + 2; |
| 25 | + self.print_text('1..' || a_suite.items.count); |
| 26 | + end before_calling_suite; |
| 27 | + |
| 28 | + |
| 29 | + overriding member procedure after_calling_test(self in out nocopy ut_tap_reporter, a_test ut_test) as |
| 30 | + l_message varchar2(4000); |
| 31 | + l_test_name varchar2(4000) := self.escape_special_chars(coalesce(a_test.description, a_test.name)); |
| 32 | + |
| 33 | + procedure print_failed_expectation(a_test ut_test) is |
| 34 | + l_lines ut_varchar2_list; |
| 35 | + l_failed boolean; |
| 36 | + begin |
| 37 | + if a_test.get_error_stack_traces().count = 0 then |
| 38 | + -- If no error occurred, print failed expectation |
| 39 | + l_lines := a_test.all_expectations(a_test.all_expectations.last).get_result_lines(); |
| 40 | + l_failed := a_test.all_expectations(a_test.all_expectations.last).status >= ut_utils.gc_success; |
| 41 | + if l_failed then |
| 42 | + self.print_text('message: ''' || l_lines(1) || ''''); |
| 43 | + self.print_text('severity: fail'); |
| 44 | + end if; |
| 45 | + else |
| 46 | + -- Print multi-line YAML-String with implicit newline characters |
| 47 | + self.print_text('message: |'); |
| 48 | + self.lvl := self.lvl + 1; |
| 49 | + self.print_text(ut_utils.table_to_clob(a_test.get_error_stack_traces())); |
| 50 | + self.lvl := self.lvl - 1; |
| 51 | + self.print_text('severity: error'); |
| 52 | + end if; |
| 53 | + end print_failed_expectation; |
| 54 | + |
| 55 | + begin |
| 56 | + |
| 57 | + if a_test.result = ut_utils.gc_disabled then |
| 58 | + self.print_text('ok - ' || l_test_name || ' # SKIP'|| |
| 59 | + case when a_test.disabled_reason is not null |
| 60 | + then ': '|| self.escape_special_chars(a_test.disabled_reason) |
| 61 | + else null |
| 62 | + end ); |
| 63 | + elsif a_test.result = ut_utils.gc_success then |
| 64 | + self.print_text('ok - ' || l_test_name); |
| 65 | + elsif a_test.result > ut_utils.gc_success then |
| 66 | + if self.lvl = 0 then |
| 67 | + self.print_text(ut_ansiconsole_helper.red('not ok') || ' - ' || l_test_name); |
| 68 | + else |
| 69 | + self.print_text('not ok - ' || l_test_name); |
| 70 | + end if; |
| 71 | + self.lvl := self.lvl + 1; |
| 72 | + self.print_text('---'); |
| 73 | + print_failed_expectation(a_test); |
| 74 | + self.print_text('...'); |
| 75 | + self.lvl := self.lvl - 1; |
| 76 | + end if; |
| 77 | + |
| 78 | + self.print_comment(a_test.get_serveroutputs); |
| 79 | + |
| 80 | + end after_calling_test; |
| 81 | + |
| 82 | + overriding member procedure after_calling_before_all(self in out nocopy ut_tap_reporter, a_executable in ut_executable) is |
| 83 | + begin |
| 84 | + if a_executable.serveroutput is not null and a_executable.serveroutput != empty_clob() then |
| 85 | + self.print_comment(a_executable.serveroutput); |
| 86 | + end if; |
| 87 | + end after_calling_before_all; |
| 88 | + |
| 89 | + overriding member procedure after_calling_after_all(self in out nocopy ut_tap_reporter, a_executable in ut_executable) is |
| 90 | + begin |
| 91 | + if a_executable.serveroutput is not null and a_executable.serveroutput != empty_clob() then |
| 92 | + self.print_comment(a_executable.serveroutput); |
| 93 | + end if; |
| 94 | + end after_calling_after_all; |
| 95 | + |
| 96 | + overriding member procedure after_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite) as |
| 97 | + l_suite_name varchar2(4000) := coalesce(a_suite.description, a_suite.name); |
| 98 | + begin |
| 99 | + lvl := lvl - 2; |
| 100 | + if lvl = 0 then |
| 101 | + if a_suite.result = ut_utils.gc_success or a_suite.result = ut_utils.gc_disabled then |
| 102 | + self.print_text('ok - ' || self.escape_special_chars(l_suite_name)); |
| 103 | + elsif a_suite.result > ut_utils.gc_success then |
| 104 | + self.print_text(ut_ansiconsole_helper.red('not ok') || ' - ' || self.escape_special_chars(l_suite_name)); |
| 105 | + end if; |
| 106 | + |
| 107 | + self.print_text(' '); |
| 108 | + end if; |
| 109 | + |
| 110 | + end after_calling_suite; |
| 111 | + |
| 112 | + overriding member procedure before_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run) as |
| 113 | + begin |
| 114 | + self.print_text('TAP version 14'); |
| 115 | + self.print_text('1..' || a_run.items.count); |
| 116 | + self.print_text(' '); |
| 117 | + end before_calling_run; |
| 118 | + |
| 119 | + overriding member procedure after_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run) as |
| 120 | + begin |
| 121 | + self.lvl := 0; |
| 122 | + end; |
| 123 | +end; |
| 124 | +/ |
0 commit comments