abap2UI5/src/01/00/01/z2ui5_cl_ajson_mapping.clas.testclasses.abap
2024-09-07 12:56:21 +02:00

545 lines
15 KiB
ABAP

CLASS ltcl_test_mappers DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
from_json_to_json FOR TESTING RAISING z2ui5_cx_ajson_error,
to_abap FOR TESTING RAISING z2ui5_cx_ajson_error,
to_json FOR TESTING RAISING z2ui5_cx_ajson_error,
to_json_nested_struc FOR TESTING RAISING z2ui5_cx_ajson_error,
to_json_nested_table FOR TESTING RAISING z2ui5_cx_ajson_error,
to_json_first_lower FOR TESTING RAISING z2ui5_cx_ajson_error.
METHODS:
to_snake FOR TESTING RAISING z2ui5_cx_ajson_error,
to_camel FOR TESTING RAISING z2ui5_cx_ajson_error,
to_camel_1st_upper FOR TESTING RAISING z2ui5_cx_ajson_error,
rename_by_attr FOR TESTING RAISING z2ui5_cx_ajson_error,
rename_by_path FOR TESTING RAISING z2ui5_cx_ajson_error,
rename_by_pattern FOR TESTING RAISING z2ui5_cx_ajson_error,
compound_mapper FOR TESTING RAISING z2ui5_cx_ajson_error,
test_to_upper FOR TESTING RAISING z2ui5_cx_ajson_error,
test_to_lower FOR TESTING RAISING z2ui5_cx_ajson_error.
ENDCLASS.
CLASS ltcl_test_mappers IMPLEMENTATION.
METHOD from_json_to_json.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson.
lo_ajson =
z2ui5_cl_ajson=>parse(
iv_json = `{"fieldData":"field_value"}`
ii_custom_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ) ).
lo_ajson->set_string( iv_path = `/fieldData`
iv_val = 'E' ).
cl_abap_unit_assert=>assert_equals(
act = lo_ajson->stringify( )
exp = '{"fieldData":"E"}' ).
ENDMETHOD.
METHOD to_abap.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson,
li_mapping TYPE REF TO z2ui5_if_ajson_mapping.
DATA:
BEGIN OF ls_result,
field_data TYPE string,
END OF ls_result.
li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( ).
lo_ajson = z2ui5_cl_ajson=>parse( iv_json = '{"FieldData":"field_value"}'
ii_custom_mapping = li_mapping ).
lo_ajson->to_abap( IMPORTING ev_container = ls_result ).
cl_abap_unit_assert=>assert_equals(
act = ls_result-field_data
exp = 'field_value' ).
ENDMETHOD.
METHOD to_json.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson,
li_mapping TYPE REF TO z2ui5_if_ajson_mapping.
DATA:
BEGIN OF ls_result,
field_data TYPE string,
END OF ls_result.
li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ).
ls_result-field_data = 'field_value'.
lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ).
lo_ajson->set( iv_path = '/'
iv_val = ls_result ).
cl_abap_unit_assert=>assert_equals(
act = lo_ajson->stringify( )
exp = '{"fieldData":"field_value"}' ).
ENDMETHOD.
METHOD to_json_nested_struc.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson,
li_mapping TYPE REF TO z2ui5_if_ajson_mapping.
DATA:
BEGIN OF ls_result,
field_data TYPE string,
BEGIN OF struc_data,
field_more TYPE string,
END OF struc_data,
END OF ls_result.
li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ).
ls_result-field_data = 'field_value'.
ls_result-struc_data-field_more = 'field_more'.
lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ).
lo_ajson->set( iv_path = '/'
iv_val = ls_result ).
cl_abap_unit_assert=>assert_equals(
act = lo_ajson->stringify( )
exp = '{"fieldData":"field_value","strucData":{"fieldMore":"field_more"}}' ).
ENDMETHOD.
METHOD to_json_nested_table.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson,
li_mapping TYPE REF TO z2ui5_if_ajson_mapping.
DATA:
lv_value TYPE string,
BEGIN OF ls_result,
field_data TYPE string,
BEGIN OF struc_data,
field_more TYPE string_table,
END OF struc_data,
END OF ls_result.
li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( iv_first_json_upper = abap_false ).
ls_result-field_data = 'field_value'.
lv_value = 'field_more'.
INSERT lv_value INTO TABLE ls_result-struc_data-field_more.
lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ).
lo_ajson->set( iv_path = '/'
iv_val = ls_result ).
cl_abap_unit_assert=>assert_equals(
act = lo_ajson->stringify( )
exp = '{"fieldData":"field_value","strucData":{"fieldMore":["field_more"]}}' ).
ENDMETHOD.
METHOD to_json_first_lower.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson,
li_mapping TYPE REF TO z2ui5_if_ajson_mapping.
DATA:
BEGIN OF ls_result,
field_data TYPE string,
END OF ls_result.
li_mapping = z2ui5_cl_ajson_mapping=>create_camel_case( ).
ls_result-field_data = 'field_value'.
lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ).
lo_ajson->set( iv_path = '/'
iv_val = ls_result ).
cl_abap_unit_assert=>assert_equals(
act = lo_ajson->stringify( )
exp = '{"FieldData":"field_value"}' ).
ENDMETHOD.
METHOD test_to_upper.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"c":2}}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_upper_case( ) )->stringify( )
exp = '{"A":1,"B":{"C":2}}' ).
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"c":2}}'
)->map( z2ui5_cl_ajson_mapping=>create_upper_case( )
)->stringify( )
exp = '{"A":1,"B":{"C":2}}' ).
ENDMETHOD.
METHOD test_to_lower.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"A":1,"B":{"C":2}}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_lower_case( ) )->stringify( )
exp = '{"a":1,"b":{"c":2}}' ).
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>parse( '{"A":1,"B":{"C":2}}'
)->map( z2ui5_cl_ajson_mapping=>create_lower_case( )
)->stringify( )
exp = '{"a":1,"b":{"c":2}}' ).
ENDMETHOD.
METHOD rename_by_attr.
DATA lt_map TYPE z2ui5_if_ajson_mapping=>tty_rename_map.
FIELD-SYMBOLS <i> LIKE LINE OF lt_map.
APPEND INITIAL LINE TO lt_map ASSIGNING <i>.
<i>-from = 'a'.
<i>-to = 'x'.
APPEND INITIAL LINE TO lt_map ASSIGNING <i>.
<i>-from = 'c'.
<i>-to = 'y'.
APPEND INITIAL LINE TO lt_map ASSIGNING <i>.
<i>-from = 'd'.
<i>-to = 'z'.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"c":2},"d":{"e":3}}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_rename( lt_map
) )->stringify( )
exp = '{"b":{"y":2},"x":1,"z":{"e":3}}' ).
ENDMETHOD.
METHOD rename_by_path.
DATA lt_map TYPE z2ui5_if_ajson_mapping=>tty_rename_map.
FIELD-SYMBOLS <i> LIKE LINE OF lt_map.
APPEND INITIAL LINE TO lt_map ASSIGNING <i>.
<i>-from = '/b/a'.
<i>-to = 'x'.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"a":2},"c":{"a":3}}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_rename(
it_rename_map = lt_map
iv_rename_by = z2ui5_cl_ajson_mapping=>rename_by-full_path
) )->stringify( )
exp = '{"a":1,"b":{"x":2},"c":{"a":3}}' ).
ENDMETHOD.
METHOD rename_by_pattern.
DATA lt_map TYPE z2ui5_if_ajson_mapping=>tty_rename_map.
FIELD-SYMBOLS <i> LIKE LINE OF lt_map.
APPEND INITIAL LINE TO lt_map ASSIGNING <i>.
<i>-from = '/*/this*'.
<i>-to = 'x'.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"andthisnot":1,"b":{"thisone":2},"c":{"a":3}}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_rename(
it_rename_map = lt_map
iv_rename_by = z2ui5_cl_ajson_mapping=>rename_by-pattern
) )->stringify( )
exp = '{"andthisnot":1,"b":{"x":2},"c":{"a":3}}' ).
ENDMETHOD.
METHOD compound_mapper.
DATA lt_map TYPE z2ui5_if_ajson_mapping=>tty_rename_map.
FIELD-SYMBOLS <i> LIKE LINE OF lt_map.
APPEND INITIAL LINE TO lt_map ASSIGNING <i>.
<i>-from = '/b/a'.
<i>-to = 'x'.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"a":1,"b":{"a":2},"c":{"a":3}}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_compound_mapper(
ii_mapper1 = z2ui5_cl_ajson_mapping=>create_rename(
it_rename_map = lt_map
iv_rename_by = z2ui5_cl_ajson_mapping=>rename_by-full_path )
ii_mapper2 = z2ui5_cl_ajson_mapping=>create_upper_case( ) )
)->stringify( )
exp = '{"A":1,"B":{"X":2},"C":{"A":3}}' ).
ENDMETHOD.
METHOD to_snake.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"aB":1,"BbC":2,"cD":{"xY":3},"ZZ":4}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_to_snake_case( )
)->stringify( )
exp = '{"a_b":1,"bb_c":2,"c_d":{"x_y":3},"zz":4}' ).
ENDMETHOD.
METHOD to_camel.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"a_b":1,"bb_c":2,"c_d":{"x_y":3},"zz":4}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_to_camel_case( )
)->stringify( )
exp = '{"aB":1,"bbC":2,"cD":{"xY":3},"zz":4}' ).
" Forced underscore
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"a__b":1}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_to_camel_case( )
)->stringify( )
exp = '{"a_b":1}' ).
ENDMETHOD.
METHOD to_camel_1st_upper.
cl_abap_unit_assert=>assert_equals(
act = z2ui5_cl_ajson=>create_from(
ii_source_json = z2ui5_cl_ajson=>parse( '{"aj_bc":1,"bb_c":2,"c_d":{"xq_yq":3},"zz":4}' )
ii_mapper = z2ui5_cl_ajson_mapping=>create_to_camel_case( iv_first_json_upper = abap_true )
)->stringify( )
exp = '{"AjBc":1,"BbC":2,"CD":{"XqYq":3},"Zz":4}' ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_fields DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
to_json_without_path FOR TESTING RAISING z2ui5_cx_ajson_error,
to_json_with_path FOR TESTING RAISING z2ui5_cx_ajson_error,
to_abap FOR TESTING RAISING z2ui5_cx_ajson_error,
to_json IMPORTING iv_path TYPE string RETURNING VALUE(rv_result) TYPE string RAISING z2ui5_cx_ajson_error.
ENDCLASS.
CLASS ltcl_fields IMPLEMENTATION.
METHOD to_abap.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson,
li_mapping TYPE REF TO z2ui5_if_ajson_mapping,
lt_mapping_fields TYPE z2ui5_if_ajson_mapping=>ty_mapping_fields,
ls_mapping_field LIKE LINE OF lt_mapping_fields.
DATA:
BEGIN OF ls_result,
abap_field TYPE string,
field TYPE string,
END OF ls_result.
CLEAR ls_mapping_field.
ls_mapping_field-abap = 'ABAP_FIELD'.
ls_mapping_field-json = 'json.field'.
INSERT ls_mapping_field INTO TABLE lt_mapping_fields.
li_mapping = z2ui5_cl_ajson_mapping=>create_field_mapping( lt_mapping_fields ).
lo_ajson =
z2ui5_cl_ajson=>parse( iv_json = '{"field":"value","json.field":"field_value"}'
ii_custom_mapping = li_mapping ).
lo_ajson->to_abap( IMPORTING ev_container = ls_result ).
cl_abap_unit_assert=>assert_equals(
act = ls_result-abap_field
exp = 'field_value' ).
cl_abap_unit_assert=>assert_equals(
act = ls_result-field
exp = 'value' ).
ENDMETHOD.
METHOD to_json_without_path.
cl_abap_unit_assert=>assert_equals(
act = to_json( `/` )
exp = '{"field":"value","json.field":"field_value"}' ).
ENDMETHOD.
METHOD to_json_with_path.
cl_abap_unit_assert=>assert_equals(
act = to_json( '/samplePath' )
exp = '{"samplePath":{"field":"value","json.field":"field_value"}}' ).
ENDMETHOD.
METHOD to_json.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson,
li_mapping TYPE REF TO z2ui5_if_ajson_mapping,
lt_mapping_fields TYPE z2ui5_if_ajson_mapping=>ty_mapping_fields,
ls_mapping_field LIKE LINE OF lt_mapping_fields.
DATA:
BEGIN OF ls_result,
abap_field TYPE string,
field TYPE string,
END OF ls_result.
CLEAR ls_mapping_field.
ls_mapping_field-abap = 'ABAP_FIELD'.
ls_mapping_field-json = 'json.field'.
INSERT ls_mapping_field INTO TABLE lt_mapping_fields.
li_mapping = z2ui5_cl_ajson_mapping=>create_field_mapping( lt_mapping_fields ).
ls_result-abap_field = 'field_value'.
ls_result-field = 'value'.
lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ).
lo_ajson->set( iv_path = iv_path
iv_val = ls_result ).
rv_result = lo_ajson->stringify( ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_to_lower DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
to_json FOR TESTING RAISING z2ui5_cx_ajson_error.
ENDCLASS.
CLASS ltcl_to_lower IMPLEMENTATION.
METHOD to_json.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson,
li_mapping TYPE REF TO z2ui5_if_ajson_mapping.
DATA:
BEGIN OF ls_result,
field_data TYPE string,
END OF ls_result.
li_mapping = z2ui5_cl_ajson_mapping=>create_lower_case( ).
ls_result-field_data = 'field_value'.
lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ).
lo_ajson->set( iv_path = '/'
iv_val = ls_result ).
cl_abap_unit_assert=>assert_equals(
act = lo_ajson->stringify( )
exp = '{"field_data":"field_value"}' ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_to_upper DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
to_json FOR TESTING RAISING z2ui5_cx_ajson_error.
ENDCLASS.
CLASS ltcl_to_upper IMPLEMENTATION.
METHOD to_json.
DATA:
lo_ajson TYPE REF TO z2ui5_cl_ajson,
li_mapping TYPE REF TO z2ui5_if_ajson_mapping.
DATA:
BEGIN OF ls_result,
field_data TYPE string,
END OF ls_result.
li_mapping = z2ui5_cl_ajson_mapping=>create_upper_case( ).
ls_result-field_data = 'field_value'.
lo_ajson = z2ui5_cl_ajson=>create_empty( ii_custom_mapping = li_mapping ).
lo_ajson->set( iv_path = '/'
iv_val = ls_result ).
cl_abap_unit_assert=>assert_equals(
act = lo_ajson->stringify( )
exp = '{"FIELD_DATA":"field_value"}' ).
ENDMETHOD.
ENDCLASS.