mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 21:08:01 +08:00
217 lines
7.0 KiB
ABAP
217 lines
7.0 KiB
ABAP
CLASS ltcl_json_path DEFINITION FINAL FOR TESTING
|
|
DURATION SHORT
|
|
RISK LEVEL HARMLESS.
|
|
|
|
PRIVATE SECTION.
|
|
DATA: mt_act TYPE string_table,
|
|
mt_exp TYPE string_table,
|
|
ms_data TYPE zif_abapgit_aff_intf_v1=>ty_main.
|
|
METHODS:
|
|
deserialize_simple FOR TESTING RAISING cx_static_check,
|
|
deserialize_nested_arrays FOR TESTING RAISING cx_static_check,
|
|
flat_structure FOR TESTING RAISING cx_static_check,
|
|
array FOR TESTING RAISING cx_static_check,
|
|
array_nested FOR TESTING RAISING cx_static_check,
|
|
deserialize_with_comments FOR TESTING RAISING cx_static_check.
|
|
METHODS:
|
|
serialize
|
|
IMPORTING is_data TYPE zif_abapgit_aff_intf_v1=>ty_main
|
|
RETURNING VALUE(rt_result) TYPE string_table
|
|
RAISING zcx_abapgit_ajson_error
|
|
zcx_abapgit_exception.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS ltcl_json_path IMPLEMENTATION.
|
|
|
|
METHOD serialize.
|
|
DATA:
|
|
lo_ajson TYPE REF TO zif_abapgit_ajson,
|
|
lo_cut TYPE REF TO zcl_abapgit_json_path.
|
|
|
|
|
|
lo_ajson = zcl_abapgit_ajson=>new( iv_keep_item_order = abap_true
|
|
)->set( iv_path = '/'
|
|
iv_val = is_data
|
|
)->map( zcl_abapgit_ajson_mapping=>create_to_camel_case( )
|
|
)->filter( zcl_abapgit_ajson_filter_lib=>create_empty_filter( ) ).
|
|
|
|
lo_ajson->delete( '/category/' ).
|
|
lo_ajson->delete( '/proxy/' ).
|
|
|
|
CREATE OBJECT lo_cut.
|
|
rt_result = lo_cut->serialize( lo_ajson->stringify( ) ).
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD flat_structure.
|
|
DATA lv_header_descr TYPE string.
|
|
lv_header_descr = `$.header.description=Text`.
|
|
|
|
ms_data-header-description = 'Text'.
|
|
|
|
mt_act = serialize( ms_data ).
|
|
APPEND lv_header_descr TO mt_exp.
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = mt_exp
|
|
act = mt_act ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD array.
|
|
DATA lv_header_descr TYPE string.
|
|
DATA lv_descr_meth_1 TYPE string.
|
|
DATA lv_descr_meth_2 TYPE string.
|
|
DATA ls_meth_desc TYPE zif_abapgit_aff_oo_types_v1=>ty_method.
|
|
|
|
lv_header_descr = `$.header.description=Text`.
|
|
lv_descr_meth_1 = `$.descriptions.methods[?(@.name=='METH1')].description=Sonne`.
|
|
lv_descr_meth_2 = `$.descriptions.methods[?(@.name=='METH2')].description=Mond`.
|
|
|
|
APPEND lv_header_descr TO mt_exp.
|
|
APPEND lv_descr_meth_1 TO mt_exp.
|
|
APPEND lv_descr_meth_2 TO mt_exp.
|
|
|
|
|
|
ms_data-header-description = 'Text'.
|
|
|
|
ls_meth_desc-name = `METH1`.
|
|
ls_meth_desc-description = `Sonne`.
|
|
APPEND ls_meth_desc TO ms_data-descriptions-methods.
|
|
CLEAR ls_meth_desc.
|
|
ls_meth_desc-name = `METH2`.
|
|
ls_meth_desc-description = `Mond`.
|
|
APPEND ls_meth_desc TO ms_data-descriptions-methods.
|
|
|
|
|
|
mt_act = serialize( ms_data ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = mt_exp
|
|
act = mt_act ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD array_nested.
|
|
DATA lv_header_descr TYPE string.
|
|
DATA lv_descr_meth_1 TYPE string.
|
|
DATA lv_descr_meth_1_param_1 TYPE string.
|
|
DATA lv_descr_meth_1_param_2 TYPE string.
|
|
DATA lv_descr_meth_2 TYPE string.
|
|
DATA ls_meth_desc TYPE zif_abapgit_aff_oo_types_v1=>ty_method.
|
|
DATA ls_meth_param TYPE zif_abapgit_aff_oo_types_v1=>ty_component_description.
|
|
|
|
lv_header_descr = `$.header.description=Text`.
|
|
lv_descr_meth_1 = `$.descriptions.methods[?(@.name=='METH1')].description=Sonne`.
|
|
lv_descr_meth_1_param_1 =
|
|
`$.descriptions.methods[?(@.name=='METH1')].parameters[?(@.name=='param1')].description=Parameter A`.
|
|
lv_descr_meth_1_param_2 =
|
|
`$.descriptions.methods[?(@.name=='METH1')].parameters[?(@.name=='param2')].description=Parameter B`.
|
|
lv_descr_meth_2 = `$.descriptions.methods[?(@.name=='METH2')].description=Mond`.
|
|
|
|
APPEND lv_header_descr TO mt_exp.
|
|
APPEND lv_descr_meth_1 TO mt_exp.
|
|
APPEND lv_descr_meth_1_param_1 TO mt_exp.
|
|
APPEND lv_descr_meth_1_param_2 TO mt_exp.
|
|
APPEND lv_descr_meth_2 TO mt_exp.
|
|
|
|
|
|
|
|
ls_meth_param-name = 'param1'.
|
|
ls_meth_param-description = 'Parameter A'.
|
|
APPEND ls_meth_param TO ls_meth_desc-parameters.
|
|
|
|
ls_meth_param-name = 'param2'.
|
|
ls_meth_param-description = 'Parameter B'.
|
|
APPEND ls_meth_param TO ls_meth_desc-parameters.
|
|
|
|
ls_meth_desc-name = `METH1`.
|
|
ls_meth_desc-description = `Sonne`.
|
|
APPEND ls_meth_desc TO ms_data-descriptions-methods.
|
|
CLEAR ls_meth_desc.
|
|
|
|
ls_meth_desc-name = `METH2`.
|
|
ls_meth_desc-description = `Mond`.
|
|
APPEND ls_meth_desc TO ms_data-descriptions-methods.
|
|
|
|
ms_data-header-description = 'Text'.
|
|
|
|
mt_act = serialize( ms_data ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = mt_exp
|
|
act = mt_act ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD deserialize_nested_arrays.
|
|
DATA: lt_file TYPE string_table,
|
|
lo_cut TYPE REF TO zcl_abapgit_json_path,
|
|
lv_act TYPE string,
|
|
lv_exp TYPE string,
|
|
lt_exp TYPE string_table,
|
|
lv_is_equal TYPE abap_bool.
|
|
|
|
APPEND `$.header.description=Text` TO lt_file.
|
|
APPEND `$.descriptions.methods[?(@.name=='METH1')].description=Sonne` TO lt_file.
|
|
APPEND `$.descriptions.methods[?(@.name=='METH1')].parameters[?(@.name=='param2')].description=ABC` TO lt_file.
|
|
|
|
CREATE OBJECT lo_cut.
|
|
lv_act = lo_cut->deserialize( lt_file ).
|
|
|
|
APPEND `{ "header": { "description": "Text" } ,` TO lt_exp.
|
|
APPEND `"descriptions": {` TO lt_exp.
|
|
APPEND `"methods": [ ` TO lt_exp.
|
|
APPEND ` { "name": "METH1",` TO lt_exp.
|
|
APPEND `"description": "Sonne",` TO lt_exp.
|
|
APPEND `"parameters": [ { "name": "param2", "description": "ABC" } ]` TO lt_exp.
|
|
APPEND `}]}}` TO lt_exp.
|
|
|
|
|
|
lv_exp = concat_lines_of( table = lt_exp
|
|
sep = cl_abap_char_utilities=>newline ).
|
|
|
|
lv_is_equal = zcl_abapgit_ajson_utilities=>new( )->is_equal( iv_json_a = lv_act
|
|
iv_json_b = lv_exp ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( act = lv_is_equal
|
|
exp = abap_true ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD deserialize_simple.
|
|
DATA: lt_file TYPE string_table,
|
|
lo_cut TYPE REF TO zcl_abapgit_json_path,
|
|
lv_act TYPE string,
|
|
lv_is_equal TYPE abap_bool.
|
|
|
|
APPEND `$.header.description=Text` TO lt_file.
|
|
|
|
CREATE OBJECT lo_cut.
|
|
lv_act = lo_cut->deserialize( lt_file ).
|
|
|
|
lv_is_equal = zcl_abapgit_ajson_utilities=>new( )->is_equal(
|
|
iv_json_a = lv_act
|
|
iv_json_b = ` { "header": { "description": "Text" } } ` ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( act = lv_is_equal
|
|
exp = abap_true ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD deserialize_with_comments.
|
|
DATA: lt_file TYPE string_table,
|
|
lo_cut TYPE REF TO zcl_abapgit_json_path,
|
|
lv_act TYPE string.
|
|
|
|
APPEND `# comment = abc` TO lt_file.
|
|
APPEND `!this is a comment [abc]` TO lt_file.
|
|
APPEND `` TO lt_file.
|
|
|
|
CREATE OBJECT lo_cut.
|
|
lv_act = lo_cut->deserialize( lt_file ).
|
|
|
|
cl_abap_unit_assert=>assert_initial( lv_act ).
|
|
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS.
|