From 90bcac39e892f6b618a283dd927a0e99c3808b4a Mon Sep 17 00:00:00 2001 From: Albert Mink Date: Thu, 10 Aug 2023 06:11:20 +0200 Subject: [PATCH] Do the ABAP Language Version for the AFF objects (#6375) Co-authored-by: Michael Schneider Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> --- .../zcl_abapgit_object_common_aff.clas.abap | 90 +++++++--- ...it_object_common_aff.clas.testclasses.abap | 170 ++++++++++++++++++ .../zcl_abapgit_object_common_aff.clas.xml | 1 + 3 files changed, 232 insertions(+), 29 deletions(-) create mode 100644 src/objects/aff/zcl_abapgit_object_common_aff.clas.testclasses.abap diff --git a/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap b/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap index 11f8346c0..e781dfcb6 100644 --- a/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap +++ b/src/objects/aff/zcl_abapgit_object_common_aff.clas.abap @@ -38,6 +38,14 @@ CLASS zcl_abapgit_object_common_aff DEFINITION RETURNING VALUE(rv_is_empty) TYPE abap_bool. + CLASS-METHODS remove_abap_language_version + IMPORTING + iv_json_as_xstring TYPE xstring + RETURNING + VALUE(rv_json_as_xstring_wo_alv) TYPE xstring + RAISING + zcx_abapgit_exception. + ENDCLASS. @@ -260,9 +268,10 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. CREATE OBJECT lo_settings TYPE ('CL_AFF_SETTINGS_DESERIALIZE') EXPORTING - version = 'A' - language = mv_language - user = sy-uname. + version = 'A' + language = mv_language + user = sy-uname + abap_language_version = ms_item-abap_language_version. CREATE OBJECT lo_object_json_file TYPE ('CL_AFF_FILE') EXPORTING @@ -372,11 +381,11 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. METHOD zif_abapgit_object~exists. - DATA: lr_intf_aff_obj TYPE REF TO data, - lo_object_handler TYPE REF TO object, - lo_object_aff TYPE REF TO object, - lv_name TYPE c LENGTH 120, - lx_error TYPE REF TO cx_root. + DATA: lr_intf_aff_obj TYPE REF TO data, + lo_object_handler TYPE REF TO object, + lo_object_aff TYPE REF TO object, + lv_name TYPE c LENGTH 120, + lx_error TYPE REF TO cx_root. FIELD-SYMBOLS: TYPE any. @@ -463,26 +472,26 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. METHOD zif_abapgit_object~serialize. - - DATA: lr_intf_aff_obj TYPE REF TO data, - lr_intf_aff_log TYPE REF TO data, - lr_intf_aff_settings TYPE REF TO data, - lr_messages TYPE REF TO data, - lo_object_handler TYPE REF TO object, - lo_object_aff TYPE REF TO object, - lo_object_json_file TYPE REF TO object, - lo_files_container TYPE REF TO object, - lo_settings TYPE REF TO object, - lo_aff_log TYPE REF TO object, - lo_aff_factory TYPE REF TO object, - lo_object_file TYPE REF TO object, - lv_json_as_xstring TYPE xstring, - lx_exception TYPE REF TO cx_root, - lv_name TYPE c LENGTH 120, - lv_file_name TYPE string, - lo_file_name_mapper TYPE REF TO object, - ls_additional_extensions TYPE ty_extension_mapper_pairs, - lv_file_as_xstring TYPE xstring. + DATA: lr_intf_aff_obj TYPE REF TO data, + lr_intf_aff_log TYPE REF TO data, + lr_intf_aff_settings TYPE REF TO data, + lr_messages TYPE REF TO data, + lo_object_handler TYPE REF TO object, + lo_object_aff TYPE REF TO object, + lo_object_json_file TYPE REF TO object, + lo_files_container TYPE REF TO object, + lo_settings TYPE REF TO object, + lo_aff_log TYPE REF TO object, + lo_aff_factory TYPE REF TO object, + lo_object_file TYPE REF TO object, + lv_json_as_xstring TYPE xstring, + lv_json_as_xstring_wo_alv TYPE xstring, + lx_exception TYPE REF TO cx_root, + lv_name TYPE c LENGTH 120, + lv_file_name TYPE string, + lo_file_name_mapper TYPE REF TO object, + ls_additional_extensions TYPE ty_extension_mapper_pairs, + lv_file_as_xstring TYPE xstring. FIELD-SYMBOLS: TYPE any, TYPE any, @@ -579,9 +588,11 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. RECEIVING result = lv_json_as_xstring. + lv_json_as_xstring_wo_alv = remove_abap_language_version( lv_json_as_xstring ). + zif_abapgit_object~mo_files->add_raw( iv_ext = 'json' - iv_data = lv_json_as_xstring ). + iv_data = lv_json_as_xstring_wo_alv ). ls_additional_extensions = get_additional_extensions( ). @@ -612,6 +623,27 @@ CLASS zcl_abapgit_object_common_aff IMPLEMENTATION. CATCH cx_root INTO lx_exception. zcx_abapgit_exception=>raise_with_text( lx_exception ). ENDTRY. + ENDMETHOD. + + + METHOD remove_abap_language_version. + DATA lv_json TYPE string. + DATA lv_json_wo_alv TYPE string. + DATA li_json TYPE REF TO zif_abapgit_ajson. + + lv_json = zcl_abapgit_convert=>xstring_to_string_utf8( iv_data = iv_json_as_xstring ). + + TRY. + li_json = zcl_abapgit_ajson=>parse( iv_json = lv_json + iv_keep_item_order = abap_true ). + li_json->delete( '/header/abapLanguageVersion' ). + lv_json_wo_alv = li_json->stringify( iv_indent = 2 ). + + rv_json_as_xstring_wo_alv = zcl_abapgit_convert=>string_to_xstring_utf8( lv_json_wo_alv ). + + CATCH zcx_abapgit_ajson_error. + rv_json_as_xstring_wo_alv = iv_json_as_xstring. + ENDTRY. ENDMETHOD. ENDCLASS. diff --git a/src/objects/aff/zcl_abapgit_object_common_aff.clas.testclasses.abap b/src/objects/aff/zcl_abapgit_object_common_aff.clas.testclasses.abap new file mode 100644 index 000000000..bf552cff9 --- /dev/null +++ b/src/objects/aff/zcl_abapgit_object_common_aff.clas.testclasses.abap @@ -0,0 +1,170 @@ +CLASS ltcl_remove_abap_lang_version DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. + PRIVATE SECTION. + + METHODS assert_abap_lang_vers_removed + IMPORTING + iv_json TYPE string + iv_json_exp TYPE string + RAISING + zcx_abapgit_exception. + METHODS at_end_of_header FOR TESTING RAISING zcx_abapgit_exception. + METHODS no_abap_lang_vers_in_header FOR TESTING RAISING cx_static_check. + METHODS at_begin_of_header FOR TESTING RAISING cx_static_check. + METHODS only_abap_lang_vers_in_header FOR TESTING RAISING cx_static_check. + METHODS other_abap_lang_vers_fld FOR TESTING RAISING cx_static_check. + METHODS only_other_abap_lang_vers_fld FOR TESTING RAISING cx_static_check. + METHODS keep_item_order FOR TESTING RAISING cx_static_check. + + +ENDCLASS. + +CLASS zcl_abapgit_object_common_aff DEFINITION LOCAL FRIENDS ltcl_remove_abap_lang_version. +CLASS ltcl_remove_abap_lang_version IMPLEMENTATION. + + METHOD assert_abap_lang_vers_removed. + DATA lv_json_act TYPE string. + DATA lv_json_x TYPE xstring. + DATA lv_json_act_x TYPE xstring. + + lv_json_x = zcl_abapgit_convert=>string_to_xstring_utf8( iv_json ). + + lv_json_act_x = zcl_abapgit_object_common_aff=>remove_abap_language_version( lv_json_x ). + + lv_json_act = zcl_abapgit_convert=>xstring_to_string_utf8( lv_json_act_x ). + cl_abap_unit_assert=>assert_equals( act = lv_json_act + exp = iv_json_exp ). + ENDMETHOD. + + METHOD at_end_of_header. + assert_abap_lang_vers_removed( + iv_json = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "description": "Category",\n| & + | "originalLanguage": "en",\n| & + | "abapLanguageVersion": "cloudDevelopment"\n| & + | \}\n| & + |\}| + iv_json_exp = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "description": "Category",\n| & + | "originalLanguage": "en"\n| & + | \}\n| & + |\}| ). + ENDMETHOD. + + METHOD no_abap_lang_vers_in_header. + assert_abap_lang_vers_removed( + iv_json = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "description": "Category",\n| & + | "originalLanguage": "en"\n| & + | \}\n| & + |\}| + iv_json_exp = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "description": "Category",\n| & + | "originalLanguage": "en"\n| & + | \}\n| & + |\}| ). + ENDMETHOD. + + METHOD at_begin_of_header. + assert_abap_lang_vers_removed( + iv_json = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "abapLanguageVersion": "cloudDevelopment",\n| & + | "description": "Category",\n| & + | "originalLanguage": "en"\n| & + | \}\n| & + |\}| + iv_json_exp = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "description": "Category",\n| & + | "originalLanguage": "en"\n| & + | \}\n| & + |\}| ). + ENDMETHOD. + + METHOD only_abap_lang_vers_in_header. + assert_abap_lang_vers_removed( + iv_json = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "abapLanguageVersion": "cloudDevelopment"\n| & + | \}\n| & + |\}| + iv_json_exp = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\}\n| & + |\}| ). + ENDMETHOD. + + METHOD other_abap_lang_vers_fld. + assert_abap_lang_vers_removed( + iv_json = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "description": "Category",\n| & + | "originalLanguage": "en",\n| & + | "abapLanguageVersion": "cloudDevelopment"\n| & + | \},\n| & + | "abapLanguageVersion": "someOtherConent"\n| & + |\}| + iv_json_exp = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "description": "Category",\n| & + | "originalLanguage": "en"\n| & + | \},\n| & + | "abapLanguageVersion": "someOtherConent"\n| & + |\}| ). + ENDMETHOD. + + METHOD only_other_abap_lang_vers_fld. + assert_abap_lang_vers_removed( + iv_json = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "description": "Category",\n| & + | "originalLanguage": "en"\n| & + | \},\n| & + | "abapLanguageVersion": "someOtherConent"\n| & + |\}| + iv_json_exp = |\{\n| & + | "formatVersion": "1",\n| & + | "header": \{\n| & + | "description": "Category",\n| & + | "originalLanguage": "en"\n| & + | \},\n| & + | "abapLanguageVersion": "someOtherConent"\n| & + |\}| ). + ENDMETHOD. + + + METHOD keep_item_order. + assert_abap_lang_vers_removed( + iv_json = |\{\n| & + | "c": "firstField",\n| & + | "b": \{\n| & + | "z": "firstFieldInObject",\n| & + | "y": "secondFieldInObject"\n| & + | \},\n| & + | "a": "lastField"\n| & + |\}| + iv_json_exp = |\{\n| & + | "c": "firstField",\n| & + | "b": \{\n| & + | "z": "firstFieldInObject",\n| & + | "y": "secondFieldInObject"\n| & + | \},\n| & + | "a": "lastField"\n| & + |\}| ). + ENDMETHOD. + +ENDCLASS. \ No newline at end of file diff --git a/src/objects/aff/zcl_abapgit_object_common_aff.clas.xml b/src/objects/aff/zcl_abapgit_object_common_aff.clas.xml index 152b03e63..43b4c0928 100644 --- a/src/objects/aff/zcl_abapgit_object_common_aff.clas.xml +++ b/src/objects/aff/zcl_abapgit_object_common_aff.clas.xml @@ -10,6 +10,7 @@ X X X + X