|
1 | 1 | create or replace package body test_realtime_reporter as |
2 | 2 |
|
3 | | - procedure create_test_suites is |
| 3 | + g_actual_xml_report xmltype; |
| 4 | + |
| 5 | + procedure create_test_suites_and_run is |
4 | 6 | pragma autonomous_transaction; |
5 | 7 | begin |
6 | 8 | execute immediate q'[create or replace package ut3_tester.check_realtime_reporting1 is |
@@ -52,34 +54,271 @@ create or replace package body test_realtime_reporter as |
52 | 54 | procedure test_4_nok is |
53 | 55 | begin |
54 | 56 | ut3.ut.expect(2).to_equal(3); |
| 57 | + ut3.ut.expect(2).to_equal(4); |
55 | 58 | end; |
56 | 59 |
|
57 | 60 | procedure test_5 is |
58 | 61 | begin |
59 | 62 | null; |
60 | 63 | end; |
61 | 64 | end;]'; |
62 | | - commit; |
63 | | - end; |
| 65 | + |
| 66 | + execute immediate q'[create or replace package ut3_tester.check_realtime_reporting3 is |
| 67 | + --%suite |
| 68 | + --%suitepath(realtime_reporting) |
| 69 | + |
| 70 | + --%test |
| 71 | + procedure test_6_with_runtime_error; |
| 72 | + |
| 73 | + --%test |
| 74 | + procedure test_7_with_serveroutput; |
| 75 | + |
| 76 | + --%afterall |
| 77 | + procedure print_and_raise; |
| 78 | + end;]'; |
| 79 | + execute immediate q'[create or replace package body ut3_tester.check_realtime_reporting3 is |
| 80 | + procedure test_6_with_runtime_error is |
| 81 | + l_actual integer; |
| 82 | + begin |
| 83 | + execute immediate 'select 6 from non_existing_table' into l_actual; |
| 84 | + ut3.ut.expect(6).to_equal(l_actual); |
| 85 | + end; |
| 86 | + |
| 87 | + procedure test_7_with_serveroutput is |
| 88 | + begin |
| 89 | + dbms_output.put_line('before test 7'); |
| 90 | + ut3.ut.expect(7).to_equal(7); |
| 91 | + dbms_output.put_line('after test 7'); |
| 92 | + end; |
| 93 | + |
| 94 | + procedure print_and_raise is |
| 95 | + begin |
| 96 | + dbms_output.put_line('Now, a no_data_found exception is raised'); |
| 97 | + dbms_output.put_line('dbms_output and error stack is reported for this suite.'); |
| 98 | + dbms_output.put_line('A runtime error in afterall is counted as a warning.'); |
| 99 | + raise no_data_found; |
| 100 | + end; |
| 101 | + end;]'; |
| 102 | + |
| 103 | + <<run_report_and_cache_result>> |
| 104 | + declare |
| 105 | + l_results ut3.ut_varchar2_list; |
| 106 | + begin |
| 107 | + select * |
| 108 | + bulk collect into l_results |
| 109 | + from table(ut3.ut.run('ut3_tester:realtime_reporting', ut3.ut_realtime_reporter())); |
| 110 | + g_actual_xml_report := xmltype(ut3.ut_utils.table_to_clob(l_results)); |
| 111 | + end run_report_and_cache_result; |
| 112 | + end create_test_suites_and_run; |
| 113 | + |
| 114 | + procedure xml_report_structure is |
| 115 | + l_actual clob; |
| 116 | + l_expected_list ut3.ut_varchar2_list; |
| 117 | + l_expected clob; |
| 118 | + begin |
| 119 | + l_actual := g_actual_xml_report.getclobval(); |
| 120 | + ut3.ut_utils.append_to_list(l_expected_list, '<?xml version="1.0"?>'); |
| 121 | + ut3.ut_utils.append_to_list(l_expected_list, '%<report>'); |
| 122 | + ut3.ut_utils.append_to_list(l_expected_list, '% <preRun>'); |
| 123 | + ut3.ut_utils.append_to_list(l_expected_list, '% <suites>'); |
| 124 | + ut3.ut_utils.append_to_list(l_expected_list, '% <suite id="%">'); |
| 125 | + ut3.ut_utils.append_to_list(l_expected_list, '% %<test id="%">'); |
| 126 | + ut3.ut_utils.append_to_list(l_expected_list, '% %</test>'); |
| 127 | + ut3.ut_utils.append_to_list(l_expected_list, '% </suite>'); |
| 128 | + ut3.ut_utils.append_to_list(l_expected_list, '% </suites>'); |
| 129 | + ut3.ut_utils.append_to_list(l_expected_list, '% <totalNumberOfTests>%</totalNumberOfTests>'); |
| 130 | + ut3.ut_utils.append_to_list(l_expected_list, '% </preRun>'); |
| 131 | + ut3.ut_utils.append_to_list(l_expected_list, '% <runEvents>'); |
| 132 | + ut3.ut_utils.append_to_list(l_expected_list, '% <startSuiteEvent id="%">'); |
| 133 | + ut3.ut_utils.append_to_list(l_expected_list, '% </startTestEvent>'); |
| 134 | + ut3.ut_utils.append_to_list(l_expected_list, '% <startTestEvent id="%">'); |
| 135 | + ut3.ut_utils.append_to_list(l_expected_list, '% </startTestEvent>'); |
| 136 | + ut3.ut_utils.append_to_list(l_expected_list, '% <endTestEvent id="%">'); |
| 137 | + ut3.ut_utils.append_to_list(l_expected_list, '% </endTestEvent>'); |
| 138 | + ut3.ut_utils.append_to_list(l_expected_list, '% <endSuiteEvent id="%">'); |
| 139 | + ut3.ut_utils.append_to_list(l_expected_list, '% </endSuiteEvent>'); |
| 140 | + ut3.ut_utils.append_to_list(l_expected_list, '% </runEvents>'); |
| 141 | + ut3.ut_utils.append_to_list(l_expected_list, '%</report>'); |
| 142 | + l_expected := ut3.ut_utils.table_to_clob(l_expected_list, null); |
| 143 | + ut.expect(l_actual).to_be_like(l_expected); |
| 144 | + end xml_report_structure; |
| 145 | + |
| 146 | + procedure total_number_of_tests is |
| 147 | + l_actual integer; |
| 148 | + l_expected integer := 7; |
| 149 | + begin |
| 150 | + l_actual := g_actual_xml_report.extract('/report/preRun/totalNumberOfTests/text()').getnumberval(); |
| 151 | + ut.expect(l_actual).to_equal(l_expected); |
| 152 | + end total_number_of_tests; |
| 153 | + |
| 154 | + procedure escaped_characters is |
| 155 | + l_actual varchar2(32767); |
| 156 | + l_expected varchar2(20) := 'suite <A>'; |
| 157 | + begin |
| 158 | + l_actual := |
| 159 | + g_actual_xml_report.extract( |
| 160 | + '//suite[@id="realtime_reporting.check_realtime_reporting1"]/description/text()' |
| 161 | + ).getstringval(); |
| 162 | + ut.expect(l_actual).to_equal(l_expected); |
| 163 | + end escaped_characters; |
| 164 | + |
| 165 | + procedure number_of_starttestevent_nodes is |
| 166 | + l_actual integer; |
| 167 | + l_expected integer := 7; |
| 168 | + begin |
| 169 | + select count(*) |
| 170 | + into l_actual |
| 171 | + from xmltable( |
| 172 | + '/report/runEvents/startTestEvent' |
| 173 | + passing g_actual_xml_report |
| 174 | + columns id varchar2(4000) path '@id', |
| 175 | + test_number integer path 'testNumber', |
| 176 | + total_number_of_tests integer path 'totalNumberOfTests' |
| 177 | + ) |
| 178 | + where id is not null |
| 179 | + and test_number is not null |
| 180 | + and total_number_of_tests is not null; |
| 181 | + ut.expect(l_actual).to_equal(l_expected); |
| 182 | + end number_of_starttestevent_nodes; |
| 183 | + |
| 184 | + procedure endtestevent_nodes is |
| 185 | + l_actual sys_refcursor; |
| 186 | + l_expected sys_refcursor; |
| 187 | + begin |
| 188 | + open l_actual for |
| 189 | + select test_number, total_number_of_tests |
| 190 | + from xmltable( |
| 191 | + '/report/runEvents/endTestEvent' |
| 192 | + passing g_actual_xml_report |
| 193 | + columns id varchar2(4000) path '@id', |
| 194 | + test_number integer path 'testNumber', |
| 195 | + total_number_of_tests integer path 'totalNumberOfTests' |
| 196 | + ) |
| 197 | + where id is not null |
| 198 | + and test_number is not null |
| 199 | + and total_number_of_tests is not null; |
| 200 | + open l_expected for |
| 201 | + select level as test_number, |
| 202 | + 7 as total_number_of_tests |
| 203 | + from dual |
| 204 | + connect by level <= 7; |
| 205 | + ut.expect(l_actual).to_equal(l_expected).unordered; |
| 206 | + end endtestevent_nodes; |
64 | 207 |
|
65 | | - procedure report_produces_expected_out is |
66 | | - l_results ut3.ut_varchar2_list; |
67 | | - l_actual clob; |
68 | | - l_expected varchar2(32767) := q'[<?xml version="1.0"?>%]'; |
| 208 | + |
| 209 | + procedure single_failed_message is |
| 210 | + l_actual varchar2(32767); |
| 211 | + l_expected varchar2(80) := '<![CDATA[Actual: 1 (number) was expected to equal: 2 (number) ]]>'; |
| 212 | + begin |
| 213 | + l_actual := |
| 214 | + g_actual_xml_report.extract( |
| 215 | + '/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting1.test context.test_2_nok"]/failedExpectations/expectation[1]/message/text()' |
| 216 | + ).getstringval(); |
| 217 | + ut.expect(l_actual).to_equal(l_expected); |
| 218 | + end single_failed_message; |
| 219 | + |
| 220 | + procedure multiple_failed_messages is |
| 221 | + l_actual integer; |
| 222 | + l_expected integer := 2; |
| 223 | + begin |
| 224 | + select count(*) |
| 225 | + into l_actual |
| 226 | + from xmltable( |
| 227 | + '/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting2.test_4_nok"]/failedExpectations/expectation' |
| 228 | + passing g_actual_xml_report |
| 229 | + columns message clob path 'message', |
| 230 | + caller clob path 'caller' |
| 231 | + ) |
| 232 | + where message is not null |
| 233 | + and caller is not null; |
| 234 | + ut.expect(l_actual).to_equal(l_expected); |
| 235 | + end multiple_failed_messages; |
| 236 | + |
| 237 | + procedure serveroutput_of_test is |
| 238 | + l_actual clob; |
| 239 | + l_expected_list ut3.ut_varchar2_list; |
| 240 | + l_expected clob; |
69 | 241 | begin |
70 | | - select * |
71 | | - bulk collect into l_results |
72 | | - from table(ut3.ut.run('ut3_tester:realtime_reporting', ut3.ut_realtime_reporter())); |
73 | | - l_actual := ut3.ut_utils.table_to_clob(l_results); |
74 | | - ut.expect(l_actual).to_be_like(l_expected); |
75 | | - end; |
| 242 | + l_actual := |
| 243 | + g_actual_xml_report.extract( |
| 244 | + '/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting3.test_7_with_serveroutput"]/serverOutput/text()' |
| 245 | + ).getclobval(); |
| 246 | + ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[before test 7'); |
| 247 | + ut3.ut_utils.append_to_list(l_expected_list, 'after test 7'); |
| 248 | + ut3.ut_utils.append_to_list(l_expected_list, ']]>'); |
| 249 | + l_expected := ut3.ut_utils.table_to_clob(l_expected_list); |
| 250 | + ut.expect(l_actual).to_equal(l_expected); |
| 251 | + end serveroutput_of_test; |
| 252 | + |
| 253 | + procedure serveroutput_of_testsuite is |
| 254 | + l_actual clob; |
| 255 | + l_expected_list ut3.ut_varchar2_list; |
| 256 | + l_expected clob; |
| 257 | + begin |
| 258 | + l_actual := |
| 259 | + g_actual_xml_report.extract( |
| 260 | + '/report/runEvents/endSuiteEvent[@id="realtime_reporting.check_realtime_reporting3"]/serverOutput/text()' |
| 261 | + ).getclobval(); |
| 262 | + ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[Now, a no_data_found exception is raised'); |
| 263 | + ut3.ut_utils.append_to_list(l_expected_list, 'dbms_output and error stack is reported for this suite.'); |
| 264 | + ut3.ut_utils.append_to_list(l_expected_list, 'A runtime error in afterall is counted as a warning.'); |
| 265 | + ut3.ut_utils.append_to_list(l_expected_list, ']]>'); |
| 266 | + l_expected := ut3.ut_utils.table_to_clob(l_expected_list); |
| 267 | + ut.expect(l_actual).to_equal(l_expected); |
| 268 | + end serveroutput_of_testsuite; |
| 269 | + |
| 270 | + procedure error_stack_of_test is |
| 271 | + l_actual clob; |
| 272 | + l_expected_list ut3.ut_varchar2_list; |
| 273 | + l_expected clob; |
| 274 | + begin |
| 275 | + l_actual := |
| 276 | + g_actual_xml_report.extract( |
| 277 | + '/report/runEvents/endTestEvent[@id="realtime_reporting.check_realtime_reporting3.test_6_with_runtime_error"]/errorStack/text()' |
| 278 | + ).getclobval(); |
| 279 | + ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[ORA-00942: table or view does not exist'); |
| 280 | + ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 5'); |
| 281 | + ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 5'); |
| 282 | + ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at line 6]]>'); |
| 283 | + l_expected := ut3.ut_utils.table_to_clob(l_expected_list); |
| 284 | + ut.expect(l_actual).to_equal(l_expected); |
| 285 | + end error_stack_of_test; |
| 286 | + |
| 287 | + procedure error_stack_of_testsuite is |
| 288 | + l_actual clob; |
| 289 | + l_expected_list ut3.ut_varchar2_list; |
| 290 | + l_expected clob; |
| 291 | + begin |
| 292 | + l_actual := |
| 293 | + g_actual_xml_report.extract( |
| 294 | + '/report/runEvents/endSuiteEvent[@id="realtime_reporting.check_realtime_reporting3"]/errorStack/text()' |
| 295 | + ).getclobval(); |
| 296 | + ut3.ut_utils.append_to_list(l_expected_list, '<![CDATA[ORA-01403: no data found'); |
| 297 | + ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 21'); |
| 298 | + ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at "UT3_TESTER.CHECK_REALTIME_REPORTING3", line 21'); |
| 299 | + ut3.ut_utils.append_to_list(l_expected_list, 'ORA-06512: at line 6]]>'); |
| 300 | + l_expected := ut3.ut_utils.table_to_clob(l_expected_list); |
| 301 | + ut.expect(l_actual).to_equal(l_expected); |
| 302 | + end error_stack_of_testsuite; |
| 303 | + |
| 304 | + procedure get_description is |
| 305 | + l_reporter ut3.ut_realtime_reporter; |
| 306 | + l_actual varchar2(4000); |
| 307 | + l_expected varchar2(80) := '%SQL Developer%'; |
| 308 | + begin |
| 309 | + l_reporter := ut3.ut_realtime_reporter(); |
| 310 | + l_actual := l_reporter.get_description(); |
| 311 | + ut.expect(l_actual).to_be_like(l_expected); |
| 312 | + end get_description; |
76 | 313 |
|
77 | 314 | procedure remove_test_suites is |
78 | 315 | pragma autonomous_transaction; |
79 | | - begin |
| 316 | + begin/* |
80 | 317 | execute immediate 'drop package ut3_tester.check_realtime_reporting1'; |
81 | 318 | execute immediate 'drop package ut3_tester.check_realtime_reporting2'; |
82 | | - end; |
| 319 | + execute immediate 'drop package ut3_tester.check_realtime_reporting3'; |
| 320 | + */ null; |
| 321 | + end remove_test_suites; |
83 | 322 |
|
84 | | -end; |
| 323 | +end test_realtime_reporter; |
85 | 324 | / |
0 commit comments