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+ overriding member procedure before_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite) as
12+ begin
13+ self.print_text('# Subtest: ' || coalesce(a_suite.description, a_suite.name));
14+ lvl := lvl + 2;
15+ self.print_text('1..' || a_suite.items.count);
16+ end before_calling_suite;
17+
18+ overriding member procedure after_calling_test(self in out nocopy ut_tap_reporter, a_test ut_test) as
19+ l_message varchar2(4000);
20+ l_test_name varchar2(300) := coalesce(a_test.description, a_test.name);
21+
22+ procedure print_failed_expectation(a_test ut_test) is
23+ l_lines ut_varchar2_list;
24+ l_failed boolean;
25+ begin
26+ if a_test.get_error_stack_traces().count = 0 then
27+ -- If no error occurred, print failed expectation
28+ l_lines := a_test.all_expectations(a_test.all_expectations.last).get_result_lines();
29+ l_failed := a_test.all_expectations(a_test.all_expectations.last).status >= ut_utils.gc_success;
30+ if l_failed then
31+ self.print_text('message: ''' || l_lines(1) || '''');
32+ self.print_text('severity: fail');
33+ end if;
34+ else
35+ -- Print multi-line YAML-String with implicit newline characters
36+ self.print_text('message: |');
37+ self.lvl := self.lvl + 1;
38+ self.print_text(ut_utils.table_to_clob(a_test.get_error_stack_traces()));
39+ self.lvl := self.lvl - 1;
40+ self.print_text('severity: error');
41+ end if;
42+ end print_failed_expectation;
43+
44+ begin
45+
46+ if a_test.result = ut_utils.gc_disabled then
47+ self.print_text('ok - ' || l_test_name || ' # SKIP'||
48+ case when a_test.disabled_reason is not null
49+ then ': '||a_test.disabled_reason
50+ else null
51+ end );
52+ elsif a_test.result = ut_utils.gc_success then
53+ self.print_text('ok - ' || l_test_name);
54+ elsif a_test.result > ut_utils.gc_success then
55+ if self.lvl = 0 then
56+ self.print_text(ut_ansiconsole_helper.red('not ok') || ' - ' || l_test_name);
57+ else
58+ self.print_text('not ok - ' || l_test_name);
59+ end if;
60+ self.lvl := self.lvl + 1;
61+ self.print_text('---');
62+ print_failed_expectation(a_test);
63+ self.print_text('...');
64+ self.lvl := self.lvl - 1;
65+ end if;
66+
67+ end after_calling_test;
68+
69+ overriding member procedure after_calling_before_all(self in out nocopy ut_tap_reporter, a_executable in ut_executable) is
70+ begin
71+ if a_executable.serveroutput is not null and a_executable.serveroutput != empty_clob() then
72+ self.print_clob(a_executable.serveroutput);
73+ end if;
74+ end after_calling_before_all;
75+
76+ overriding member procedure after_calling_suite(self in out nocopy ut_tap_reporter, a_suite ut_logical_suite) as
77+ l_suite_name varchar2(300) := coalesce(a_suite.description, a_suite.name);
78+ begin
79+ lvl := lvl - 2;
80+ if lvl = 0 then
81+ if a_suite.result = ut_utils.gc_success then
82+ self.print_text('ok - ' || l_suite_name);
83+ elsif a_suite.result > ut_utils.gc_success then
84+ self.print_text(ut_ansiconsole_helper.red('not ok') || ' - ' || l_suite_name);
85+ end if;
86+
87+ self.print_text(' ');
88+ end if;
89+
90+ end after_calling_suite;
91+
92+ overriding member procedure before_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run) as
93+ begin
94+ self.print_text('TAP version 14');
95+ self.print_text('1..' || a_run.items.count);
96+ self.print_text(' ');
97+ end before_calling_run;
98+
99+ overriding member procedure after_calling_run(self in out nocopy ut_tap_reporter, a_run in ut_run) as
100+ begin
101+ self.lvl := 0;
102+ end;
103+ end;
104+ /
0 commit comments