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

Skip to content

Commit 7a48278

Browse files
committed
Initial checkin
1 parent 3aa872b commit 7a48278

7 files changed

Lines changed: 141 additions & 2 deletions

File tree

source/core/ut_expectation_processor.pkb

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,12 @@ create or replace package body ut_expectation_processor as
8888
begin
8989
add_expectation_result(ut_expectation_result(ut_utils.gc_failure, null, a_message));
9090
end;
91-
91+
92+
procedure report_failure_no_caller(a_message in varchar2) is
93+
begin
94+
add_expectation_result(ut_expectation_result(ut_utils.gc_failure, null, a_message,false));
95+
end;
96+
9297
function get_session_parameters return tt_nls_params is
9398
l_session_params tt_nls_params;
9499
begin

source/core/ut_expectation_processor.pks

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@ create or replace package ut_expectation_processor authid current_user as
3535
procedure add_expectation_result(a_expectation_result ut_expectation_result);
3636

3737
procedure report_failure(a_message in varchar2);
38+
39+
procedure report_failure_no_caller(a_message in varchar2);
3840

3941
procedure set_xml_nls_params;
4042

source/core/ut_utils.pkb

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -719,5 +719,18 @@ create or replace package body ut_utils is
719719
return l_results;
720720
end;
721721

722+
function remove_error_from_stack(a_error_stack varchar2, a_ora_code number) return varchar2 is
723+
l_caller_stack_line varchar2(4000);
724+
l_ora_search_pattern varchar2(500) := '^ORA'||a_ora_code||': (.*)$';
725+
begin
726+
l_caller_stack_line := regexp_replace(srcstr => a_error_stack
727+
,pattern => l_ora_search_pattern
728+
,replacestr => null
729+
,position => 1
730+
,occurrence => 1
731+
,modifier => 'm');
732+
return l_caller_stack_line;
733+
end;
734+
722735
end ut_utils;
723736
/

source/core/ut_utils.pks

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,10 @@ create or replace package ut_utils authid definer is
105105
gc_dml_for_all constant pls_integer := -20215;
106106
pragma exception_init (ex_dml_for_all, -20215);
107107

108+
ex_xml_processing exception;
109+
gc_xml_processing constant pls_integer := -19202;
110+
pragma exception_init (ex_xml_processing, -19202);
111+
108112
gc_max_storage_varchar2_len constant integer := 4000;
109113
gc_max_output_string_length constant integer := 4000;
110114
gc_max_input_string_length constant integer := gc_max_output_string_length - 2; --we need to remove 2 chars for quotes around string
@@ -353,6 +357,12 @@ create or replace package ut_utils authid definer is
353357
* Returns list of sub-type reporters for given list of super-type reporters
354358
*/
355359
function get_child_reporters(a_for_reporters ut_reporters_info := null) return ut_reporters_info;
356-
360+
361+
/**
362+
* Remove given ORA error from stack
363+
*/
364+
function remove_error_from_stack(a_error_stack varchar2, a_ora_code number) return varchar2;
365+
366+
357367
end ut_utils;
358368
/

source/expectations/data_values/ut_data_value_refcursor.tpb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,12 @@ create or replace type body ut_data_value_refcursor as
9696
exception
9797
when cursor_not_open then
9898
raise_application_error(-20155, 'Cursor is not open');
99+
when ut_utils.ex_xml_processing then
100+
if l_cursor%isopen then
101+
close l_cursor;
102+
end if;
103+
ut_expectation_processor.report_failure_no_caller('Failed to process ref_cursor with error'||chr(10)||
104+
ut_utils.remove_error_from_stack(sqlerrm,-19202));
99105
when others then
100106
if l_cursor%isopen then
101107
close l_cursor;

test/core/expectations/test_expectations_cursor.pkb

Lines changed: 94 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2465,5 +2465,99 @@ Diff:%
24652465
ut.expect(l_actual_message).to_be_like(l_expected_message);
24662466
end;
24672467

2468+
procedure xml_error_actual is
2469+
c_price CONSTANT NUMBER(20,4):= 1357;
2470+
c_user CONSTANT varchar2(30):= 'TEST_USER';
2471+
v_actual sys_refcursor;
2472+
v_expected sys_refcursor;
2473+
l_expected_message varchar2(32767);
2474+
l_actual_message varchar2(32767);
2475+
begin
2476+
open v_actual for
2477+
select cast(null as number(10)) as usd_price_amt, c_user as update_id
2478+
from dual where dummy = 1;
2479+
open v_expected for
2480+
select c_price as usd_price_amt, c_user as update_id from dual;
2481+
2482+
ut3.ut.expect(v_actual).to_equal(v_expected);
2483+
--Assert
2484+
l_expected_message := q'[%Failed to process ref_cursor with error
2485+
%ORA-01722: invalid number
2486+
%Actual: refcursor [ count = ] was expected to equal: refcursor [ count = 1 ]
2487+
%Diff:
2488+
%Columns:
2489+
%Column <USD_PRICE_AMT> [data-type: NUMBER] is missing. Expected column position: 1.
2490+
%Column <UPDATE_ID> [data-type: VARCHAR2] is missing. Expected column position: 2.
2491+
%Rows: [ 1 differences ]
2492+
%Row No. 1 - Missing: <USD_PRICE_AMT>1357</USD_PRICE_AMT><UPDATE_ID>TEST_USER</UPDATE_ID>]';
2493+
2494+
l_actual_message := ut3.ut_expectation_processor.get_failed_expectations()(1).message;
2495+
--Assert
2496+
ut.expect(l_actual_message).to_be_like(l_expected_message);
2497+
end;
2498+
2499+
procedure xml_error_expected is
2500+
c_price CONSTANT NUMBER(20,4):= 1357;
2501+
c_user CONSTANT varchar2(30):= 'TEST_USER';
2502+
v_actual sys_refcursor;
2503+
v_expected sys_refcursor;
2504+
l_expected_message varchar2(32767);
2505+
l_actual_message varchar2(32767);
2506+
begin
2507+
open v_expected for
2508+
select cast(null as number(10)) as usd_price_amt, c_user as update_id
2509+
from dual where dummy = 1;
2510+
open v_actual for
2511+
select c_price as usd_price_amt, c_user as update_id from dual;
2512+
2513+
ut3.ut.expect(v_actual).to_equal(v_expected);
2514+
--Assert
2515+
l_expected_message := q'[%Failed to process ref_cursor with error
2516+
%ORA-01722: invalid number
2517+
%Actual: refcursor [ count = 1 ] was expected to equal: refcursor [ count = ]
2518+
%Diff:
2519+
%Columns:
2520+
%Column <USD_PRICE_AMT> [data-type: NUMBER] is missing. Expected column position: 1.
2521+
%Column <UPDATE_ID> [data-type: VARCHAR2] is missing. Expected column position: 2.
2522+
%Rows: [ 1 differences ]
2523+
%Row No. 1 - Extra: <USD_PRICE_AMT>1357</USD_PRICE_AMT><UPDATE_ID>TEST_USER</UPDATE_ID>]';
2524+
2525+
l_actual_message := ut3.ut_expectation_processor.get_failed_expectations()(1).message;
2526+
--Assert
2527+
ut.expect(l_actual_message).to_be_like(l_expected_message);
2528+
end;
2529+
2530+
procedure xml_error_both is
2531+
c_price CONSTANT NUMBER(20,4):= 1357;
2532+
c_user CONSTANT varchar2(30):= 'TEST_USER';
2533+
v_actual sys_refcursor;
2534+
v_expected sys_refcursor;
2535+
l_expected_message varchar2(32767);
2536+
l_actual_message varchar2(32767);
2537+
begin
2538+
open v_actual for
2539+
select cast(null as number(10)) as usd_price_amt, c_user as update_id
2540+
from dual where dummy = 1;
2541+
open v_expected for
2542+
select cast(null as number(10)) as usd_price_amt, c_user as update_id
2543+
from dual where dummy = 1;
2544+
2545+
ut3.ut.expect(v_actual).to_equal(v_expected);
2546+
--Assert
2547+
l_expected_message := q'[%Failed to process ref_cursor with error
2548+
%ORA-01722: invalid number
2549+
%Actual: refcursor [ count = 1 ] was expected to equal: refcursor [ count = ]
2550+
%Diff:
2551+
%Columns:
2552+
%Column <USD_PRICE_AMT> [data-type: NUMBER] is missing. Expected column position: 1.
2553+
%Column <UPDATE_ID> [data-type: VARCHAR2] is missing. Expected column position: 2.
2554+
%Rows: [ 1 differences ]
2555+
%Row No. 1 - Extra: <USD_PRICE_AMT>1357</USD_PRICE_AMT><UPDATE_ID>TEST_USER</UPDATE_ID>]';
2556+
2557+
l_actual_message := ut3.ut_expectation_processor.get_failed_expectations()(1).message;
2558+
--Assert
2559+
ut.expect(l_actual_message).to_be_like(l_expected_message);
2560+
end;
2561+
24682562
end;
24692563
/

test/core/expectations/test_expectations_cursor.pks

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -390,6 +390,15 @@ create or replace package test_expectations_cursor is
390390

391391
--%test(Cursor to contain duplicates fail)
392392
procedure to_contain_duplicates_fail;
393+
394+
--%test(Fail to process a cursor for actual)
395+
procedure xml_error_actual;
396+
397+
--%test(Fail to process a cursor for expected)
398+
procedure xml_error_expected;
399+
400+
--%test(Fail to process a cursor for both)
401+
procedure xml_error_both;
393402

394403
end;
395404
/

0 commit comments

Comments
 (0)