abapGit/src/zcx_abapgit_exception.clas.testclasses.abap
2023-10-25 09:07:18 -04:00

521 lines
18 KiB
ABAP

CLASS ltcl_split_text DEFINITION DEFERRED.
CLASS ltcl_base DEFINITION DEFERRED.
CLASS zcx_abapgit_exception DEFINITION LOCAL FRIENDS ltcl_split_text ltcl_base.
CLASS ltcl_base DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT ABSTRACT.
PUBLIC SECTION.
CLASS-METHODS:
get_t100_text IMPORTING is_message TYPE symsg
RETURNING VALUE(rv_text) TYPE string.
PROTECTED SECTION.
CONSTANTS:
BEGIN OF gs_test_data,
text TYPE string VALUE `This is a test error message.`,
empty_text TYPE string VALUE ``,
END OF gs_test_data.
DATA:
mo_cut TYPE REF TO zcx_abapgit_exception,
BEGIN OF ms_given,
text TYPE string,
t100_message TYPE symsg,
longtext TYPE string,
previous_exception TYPE REF TO cx_root,
END OF ms_given.
METHODS:
given_the_text IMPORTING iv_text TYPE csequence,
given_the_longtext IMPORTING iv_longtext TYPE csequence,
given_the_t100_message IMPORTING is_message TYPE symsg,
given_the_previous_exception IMPORTING ix_previous_exception TYPE REF TO cx_root,
when_instantiated_using_raise,
when_instan_using_raise_t100,
when_inst_usng_raise_with_text,
then_the_text_should_equal IMPORTING iv_text TYPE csequence,
then_the_longtext_should_equal IMPORTING iv_longtext TYPE csequence,
then_the_prev_exc_should_equal IMPORTING ix_exception TYPE REF TO cx_root.
PRIVATE SECTION.
METHODS:
teardown.
ENDCLASS.
CLASS ltcl_base IMPLEMENTATION.
METHOD get_t100_text.
MESSAGE ID is_message-msgid TYPE 'S' NUMBER is_message-msgno
WITH is_message-msgv1 is_message-msgv2 is_message-msgv3 is_message-msgv4
INTO rv_text.
ENDMETHOD.
METHOD given_the_text.
ms_given-text = iv_text.
ENDMETHOD.
METHOD given_the_longtext.
ms_given-longtext = iv_longtext.
ENDMETHOD.
METHOD given_the_t100_message.
ms_given-t100_message = is_message.
ENDMETHOD.
METHOD given_the_previous_exception.
ms_given-previous_exception = ix_previous_exception.
ENDMETHOD.
METHOD when_instantiated_using_raise.
TRY.
zcx_abapgit_exception=>raise( iv_text = ms_given-text
ix_previous = ms_given-previous_exception
iv_longtext = ms_given-longtext ).
cl_abap_unit_assert=>fail( ).
CATCH zcx_abapgit_exception INTO mo_cut ##NO_HANDLER.
ENDTRY.
ENDMETHOD.
METHOD when_instan_using_raise_t100.
TRY.
zcx_abapgit_exception=>raise_t100( iv_msgid = ms_given-t100_message-msgid
iv_msgno = ms_given-t100_message-msgno
iv_msgv1 = ms_given-t100_message-msgv1
iv_msgv2 = ms_given-t100_message-msgv2
iv_msgv3 = ms_given-t100_message-msgv3
iv_msgv4 = ms_given-t100_message-msgv4
ix_previous = ms_given-previous_exception
iv_longtext = ms_given-longtext ).
cl_abap_unit_assert=>fail( ).
CATCH zcx_abapgit_exception INTO mo_cut ##NO_HANDLER.
ENDTRY.
ENDMETHOD.
METHOD when_inst_usng_raise_with_text.
TRY.
zcx_abapgit_exception=>raise_with_text( ix_previous = ms_given-previous_exception
iv_longtext = ms_given-longtext ).
cl_abap_unit_assert=>fail( ).
CATCH zcx_abapgit_exception INTO mo_cut ##NO_HANDLER.
ENDTRY.
ENDMETHOD.
METHOD then_the_text_should_equal.
cl_abap_unit_assert=>assert_equals( exp = iv_text
act = mo_cut->get_text( ) ).
ENDMETHOD.
METHOD then_the_longtext_should_equal.
cl_abap_unit_assert=>assert_equals( exp = iv_longtext
act = mo_cut->get_longtext( abap_true ) ).
ENDMETHOD.
METHOD then_the_prev_exc_should_equal.
cl_abap_unit_assert=>assert_equals( exp = ix_exception
act = mo_cut->previous ).
ENDMETHOD.
METHOD teardown.
CLEAR ms_given.
FREE mo_cut.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_general DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS INHERITING FROM ltcl_base.
PUBLIC SECTION.
METHODS:
direct_text FOR TESTING,
no_text FOR TESTING,
text_from_exception FOR TESTING.
ENDCLASS.
CLASS ltcl_general IMPLEMENTATION.
METHOD direct_text.
given_the_text( gs_test_data-text ).
when_instantiated_using_raise( ).
then_the_text_should_equal( gs_test_data-text ).
ENDMETHOD.
METHOD no_text.
given_the_text( gs_test_data-empty_text ).
when_instantiated_using_raise( ).
then_the_text_should_equal( zcx_abapgit_exception=>c_generic_error_msg ).
ENDMETHOD.
METHOD text_from_exception.
DATA: lx_previous TYPE REF TO cx_sy_dyn_call_illegal_method.
CREATE OBJECT lx_previous TYPE cx_sy_dyn_call_illegal_method
EXPORTING
textid = cx_sy_dyn_call_illegal_method=>private_method
classname = 'CLASS'
methodname = 'METHOD'.
given_the_previous_exception( lx_previous ).
when_inst_usng_raise_with_text( ).
then_the_text_should_equal( lx_previous->get_text( ) ).
then_the_prev_exc_should_equal( lx_previous ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_t100 DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS INHERITING FROM ltcl_base.
PUBLIC SECTION.
METHODS:
text1 FOR TESTING,
text2 FOR TESTING,
text3 FOR TESTING,
text4 FOR TESTING,
text5 FOR TESTING,
text6 FOR TESTING,
text7 FOR TESTING,
text8 FOR TESTING.
PROTECTED SECTION.
PRIVATE SECTION.
CLASS-DATA:
BEGIN OF gs_t100_test_data,
message1 TYPE symsg,
message2 TYPE symsg,
message3 TYPE symsg,
message4 TYPE symsg,
message5 TYPE symsg,
message6 TYPE symsg,
message7 TYPE symsg,
message8 TYPE symsg,
END OF gs_t100_test_data.
CLASS-METHODS:
class_setup.
ENDCLASS.
CLASS ltcl_t100 IMPLEMENTATION.
METHOD text1.
given_the_t100_message( gs_t100_test_data-message1 ).
when_instan_using_raise_t100( ).
then_the_text_should_equal( get_t100_text( gs_t100_test_data-message1 ) ).
ENDMETHOD.
METHOD text2.
given_the_t100_message( gs_t100_test_data-message2 ).
when_instan_using_raise_t100( ).
then_the_text_should_equal( get_t100_text( gs_t100_test_data-message2 ) ).
ENDMETHOD.
METHOD text3.
given_the_t100_message( gs_t100_test_data-message3 ).
when_instan_using_raise_t100( ).
then_the_text_should_equal( get_t100_text( gs_t100_test_data-message3 ) ).
ENDMETHOD.
METHOD text4.
given_the_t100_message( gs_t100_test_data-message4 ).
when_instan_using_raise_t100( ).
then_the_text_should_equal( get_t100_text( gs_t100_test_data-message4 ) ).
ENDMETHOD.
METHOD text5.
given_the_t100_message( gs_t100_test_data-message5 ).
when_instan_using_raise_t100( ).
then_the_text_should_equal( get_t100_text( gs_t100_test_data-message5 ) ).
ENDMETHOD.
METHOD text6.
given_the_t100_message( gs_t100_test_data-message6 ).
when_instan_using_raise_t100( ).
then_the_text_should_equal( get_t100_text( gs_t100_test_data-message6 ) ).
ENDMETHOD.
METHOD text7.
given_the_t100_message( gs_t100_test_data-message7 ).
when_instan_using_raise_t100( ).
then_the_text_should_equal( get_t100_text( gs_t100_test_data-message7 ) ).
ENDMETHOD.
METHOD text8.
given_the_t100_message( gs_t100_test_data-message8 ).
when_instan_using_raise_t100( ).
then_the_text_should_equal( get_t100_text( gs_t100_test_data-message8 ) ).
ENDMETHOD.
METHOD class_setup.
gs_t100_test_data-message1-msgid = '00'.
gs_t100_test_data-message1-msgno = '001'.
gs_t100_test_data-message2-msgid = '00'.
gs_t100_test_data-message2-msgno = '001'.
gs_t100_test_data-message2-msgv1 = 'Variable 1'.
gs_t100_test_data-message3-msgid = '00'.
gs_t100_test_data-message3-msgno = '001'.
gs_t100_test_data-message3-msgv1 = 'Variable 1'.
gs_t100_test_data-message3-msgv2 = 'Variable 2'.
gs_t100_test_data-message4-msgid = '00'.
gs_t100_test_data-message4-msgno = '001'.
gs_t100_test_data-message4-msgv1 = 'Variable 1'.
gs_t100_test_data-message4-msgv2 = 'Variable 2'.
gs_t100_test_data-message4-msgv3 = 'Variable 3'.
gs_t100_test_data-message5-msgid = '00'.
gs_t100_test_data-message5-msgno = '001'.
gs_t100_test_data-message5-msgv1 = 'Variable 1'.
gs_t100_test_data-message5-msgv2 = 'Variable 2'.
gs_t100_test_data-message5-msgv3 = 'Variable 3'.
gs_t100_test_data-message5-msgv4 = 'Variable 4'.
gs_t100_test_data-message6-msgid = '00'.
gs_t100_test_data-message6-msgno = '003'.
gs_t100_test_data-message6-msgv1 = 'Variable 1'.
gs_t100_test_data-message6-msgv2 = 'Variable 2'.
gs_t100_test_data-message6-msgv3 = 'Variable 3'.
gs_t100_test_data-message6-msgv4 = 'Variable 4'.
gs_t100_test_data-message7-msgid = '00'.
gs_t100_test_data-message7-msgno = '003'.
gs_t100_test_data-message8-msgid = '00'.
gs_t100_test_data-message8-msgno = '002'.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_get_t100_longtext DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PUBLIC SECTION.
METHODS test01 FOR TESTING.
ENDCLASS.
CLASS ltcl_get_t100_longtext IMPLEMENTATION.
METHOD test01.
DATA: lx_err TYPE REF TO zcx_abapgit_exception,
lv_result TYPE string.
TRY.
MESSAGE e058(00) WITH 'Value_1' 'Value_2' 'Value_3' 'Value_4' INTO zcx_abapgit_exception=>null.
zcx_abapgit_exception=>raise_t100( ).
CATCH zcx_abapgit_exception INTO lx_err.
lv_result = lx_err->get_longtext( ).
ENDTRY.
cl_abap_unit_assert=>assert_not_initial( lv_result ).
IF lv_result NS 'Value_1'.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF lv_result NS 'Value_2'.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF lv_result NS 'Value_3'.
cl_abap_unit_assert=>fail( ).
ENDIF.
IF lv_result NS 'Value_4'.
cl_abap_unit_assert=>fail( ).
ENDIF.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_split_text DEFINITION
FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PUBLIC SECTION.
METHODS:
test_set_msg_b FOR TESTING,
test_set_msg_c FOR TESTING,
test_set_msg_d FOR TESTING,
test_set_msg_e FOR TESTING,
test_set_msg_z FOR TESTING.
PROTECTED SECTION.
PRIVATE SECTION.
TYPES:
BEGIN OF ty_msg,
v1 TYPE sy-msgv1,
v2 TYPE sy-msgv2,
v3 TYPE sy-msgv3,
v4 TYPE sy-msgv4,
END OF ty_msg.
CLASS-METHODS:
test_set_msg_vars
IMPORTING
iv_text TYPE string
is_msg TYPE ty_msg.
ENDCLASS.
CLASS ltcl_split_text IMPLEMENTATION.
METHOD test_set_msg_b.
CONSTANTS:
lc_text_b TYPE string VALUE '0123456789012345678901234567890123456789012345678 0123456789',
BEGIN OF lc_msg_b,
v1 TYPE sy-msgv1 VALUE '0123456789012345678901234567890123456789012345678',
v2 TYPE sy-msgv2 VALUE ' 0123456789',
v3 TYPE sy-msgv3 VALUE '',
v4 TYPE sy-msgv4 VALUE '',
END OF lc_msg_b.
test_set_msg_vars( iv_text = lc_text_b
is_msg = lc_msg_b ).
ENDMETHOD.
METHOD test_set_msg_c.
CONSTANTS:
lc_text_c TYPE string VALUE '01234567890123456789012345678901234567890123456789 123456789',
BEGIN OF lc_msg_c,
v1 TYPE sy-msgv1 VALUE '01234567890123456789012345678901234567890123456789',
v2 TYPE sy-msgv2 VALUE ' 123456789',
v3 TYPE sy-msgv3 VALUE '',
v4 TYPE sy-msgv4 VALUE '',
END OF lc_msg_c.
test_set_msg_vars( iv_text = lc_text_c
is_msg = lc_msg_c ).
ENDMETHOD.
METHOD test_set_msg_d.
CONSTANTS:
lc_text_d TYPE string VALUE '012345678901234567890123456789012345678901234567890 23456789',
BEGIN OF lc_msg_d,
v1 TYPE sy-msgv1 VALUE '01234567890123456789012345678901234567890123456789',
v2 TYPE sy-msgv2 VALUE '0 23456789',
v3 TYPE sy-msgv3 VALUE '',
v4 TYPE sy-msgv4 VALUE '',
END OF lc_msg_d.
test_set_msg_vars( iv_text = lc_text_d
is_msg = lc_msg_d ).
ENDMETHOD.
METHOD test_set_msg_e.
CONSTANTS:
lc_text_e TYPE string VALUE '012345678901234567890123456789012345678901234567890123456789',
BEGIN OF lc_msg_e,
v1 TYPE sy-msgv1 VALUE '01234567890123456789012345678901234567890123456789',
v2 TYPE sy-msgv2 VALUE '0123456789',
v3 TYPE sy-msgv3 VALUE '',
v4 TYPE sy-msgv4 VALUE '',
END OF lc_msg_e.
test_set_msg_vars( iv_text = lc_text_e
is_msg = lc_msg_e ).
ENDMETHOD.
METHOD test_set_msg_z.
CONSTANTS:
lc_text_x TYPE string VALUE `Here is a very long text more than 200 characters and we have to invent `,
lc_text_y TYPE string VALUE `a nice story about abapGit to fill this long message. abapGit is simply `,
lc_text_z TYPE string VALUE `the greatest! #abapGit #awesome #community #opensource`,
BEGIN OF lc_msg_z,
v1 TYPE sy-msgv1 VALUE `Here is a very long text more than 200 characters`,
v2 TYPE sy-msgv2 VALUE ` and we have to invent a nice story about abapGit`,
v3 TYPE sy-msgv3 VALUE ` to fill this long message. abapGit is simply the`,
v4 TYPE sy-msgv4 VALUE ` greatest! #abapGit #awesome #community #opensourc`,
END OF lc_msg_z.
test_set_msg_vars( iv_text = lc_text_x && lc_text_y && lc_text_z
is_msg = lc_msg_z ).
ENDMETHOD.
METHOD test_set_msg_vars.
zcx_abapgit_exception=>split_text_to_symsg( iv_text ).
cl_abap_unit_assert=>assert_equals( act = sy-msgv1
exp = is_msg-v1 ).
cl_abap_unit_assert=>assert_equals( act = sy-msgv2
exp = is_msg-v2 ).
cl_abap_unit_assert=>assert_equals( act = sy-msgv3
exp = is_msg-v3 ).
cl_abap_unit_assert=>assert_equals( act = sy-msgv4
exp = is_msg-v4 ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_longtext DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT INHERITING FROM ltcl_base.
PUBLIC SECTION.
METHODS:
empty_longtext FOR TESTING,
longtext FOR TESTING,
multiline_longtext FOR TESTING,
t100_longtext_override FOR TESTING,
text_from_previous_exception FOR TESTING.
PRIVATE SECTION.
CLASS-DATA:
BEGIN OF gs_longtext_test_data,
longtext_500 TYPE string,
longtext_500_multline TYPE string,
empty_longtext TYPE string VALUE ``,
t100_with_longtext TYPE symsg,
END OF gs_longtext_test_data.
CLASS-METHODS:
class_setup.
ENDCLASS.
CLASS ltcl_longtext IMPLEMENTATION.
METHOD empty_longtext.
given_the_text( gs_test_data-text ).
given_the_longtext( gs_longtext_test_data-empty_longtext ).
when_instantiated_using_raise( ).
then_the_text_should_equal( gs_test_data-text ).
then_the_longtext_should_equal( gs_longtext_test_data-empty_longtext ).
ENDMETHOD.
METHOD longtext.
given_the_text( gs_test_data-text ).
given_the_longtext( gs_longtext_test_data-longtext_500 ).
when_instantiated_using_raise( ).
then_the_text_should_equal( gs_test_data-text ).
then_the_longtext_should_equal( gs_longtext_test_data-longtext_500 ).
ENDMETHOD.
METHOD multiline_longtext.
given_the_text( gs_test_data-text ).
given_the_longtext( gs_longtext_test_data-longtext_500_multline ).
when_instantiated_using_raise( ).
then_the_text_should_equal( gs_test_data-text ).
then_the_longtext_should_equal( gs_longtext_test_data-longtext_500_multline ).
ENDMETHOD.
METHOD t100_longtext_override.
given_the_longtext( gs_longtext_test_data-longtext_500 ).
given_the_t100_message( gs_longtext_test_data-t100_with_longtext ).
when_instan_using_raise_t100( ).
then_the_longtext_should_equal( gs_longtext_test_data-longtext_500 ).
ENDMETHOD.
METHOD text_from_previous_exception.
DATA: lx_previous TYPE REF TO cx_sy_dyn_call_illegal_method.
CREATE OBJECT lx_previous.
given_the_previous_exception( lx_previous ).
given_the_longtext( gs_longtext_test_data-longtext_500 ).
when_inst_usng_raise_with_text( ).
then_the_text_should_equal( condense( lx_previous->get_text( ) ) ).
then_the_longtext_should_equal( gs_longtext_test_data-longtext_500 ).
then_the_prev_exc_should_equal( lx_previous ).
ENDMETHOD.
METHOD class_setup.
gs_longtext_test_data-longtext_500 =
`Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et` &&
` dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Ste` &&
`t clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, ` &&
`consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat,` &&
` sed diam voluptua. At vero eos et accusam et justo duo dolores et e`.
gs_longtext_test_data-longtext_500_multline =
`Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et` &&
` dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum.` &&
cl_abap_char_utilities=>newline &&
`Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.` &&
cl_abap_char_utilities=>newline &&
cl_abap_char_utilities=>newline &&
`Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et` &&
` dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores ete`.
gs_longtext_test_data-t100_with_longtext-msgid = '00'.
gs_longtext_test_data-t100_with_longtext-msgno = '002'.
ENDMETHOD.
ENDCLASS.