Don't include XML when serializing AFF (#5254)

* Don't include XML when serializing AFF

Avoids output of metadata XML when serialized object contains JSON (ABAP file format).

Preparation for #5126

PS: Contains new and updated unit tests

* Rename is_json_metadata

* CP

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2022-01-12 16:54:33 +01:00 committed by GitHub
parent 269c7cb1e6
commit 53bd8c3fe5
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 70 additions and 18 deletions

View File

@ -12,9 +12,7 @@ CLASS zcl_abapgit_objects_files DEFINITION
IMPORTING
!iv_extra TYPE clike OPTIONAL
!iv_ext TYPE string
!iv_string TYPE string
RAISING
zcx_abapgit_exception .
!iv_string TYPE string.
METHODS read_string
IMPORTING
!iv_extra TYPE clike OPTIONAL
@ -28,9 +26,7 @@ CLASS zcl_abapgit_objects_files DEFINITION
!iv_extra TYPE clike OPTIONAL
!ii_xml TYPE REF TO zif_abapgit_xml_output
!iv_normalize TYPE abap_bool DEFAULT abap_true
!is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
RAISING
zcx_abapgit_exception .
!is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL.
METHODS read_xml
IMPORTING
!iv_extra TYPE clike OPTIONAL
@ -49,9 +45,7 @@ CLASS zcl_abapgit_objects_files DEFINITION
METHODS add_abap
IMPORTING
!iv_extra TYPE clike OPTIONAL
!it_abap TYPE STANDARD TABLE
RAISING
zcx_abapgit_exception .
!it_abap TYPE STANDARD TABLE.
METHODS add
IMPORTING
!is_file TYPE zif_abapgit_definitions=>ty_file .
@ -59,9 +53,7 @@ CLASS zcl_abapgit_objects_files DEFINITION
IMPORTING
!iv_extra TYPE clike OPTIONAL
!iv_ext TYPE string
!iv_data TYPE xstring
RAISING
zcx_abapgit_exception .
!iv_data TYPE xstring.
METHODS read_raw
IMPORTING
!iv_extra TYPE clike OPTIONAL
@ -88,6 +80,9 @@ CLASS zcl_abapgit_objects_files DEFINITION
METHODS get_file_pattern
RETURNING
VALUE(rv_pattern) TYPE string .
METHODS is_json_metadata
RETURNING
VALUE(rv_result) TYPE abap_bool.
PROTECTED SECTION.
METHODS read_file
@ -248,6 +243,22 @@ CLASS zcl_abapgit_objects_files IMPLEMENTATION.
ENDMETHOD.
METHOD is_json_metadata.
DATA lv_pattern TYPE string.
FIELD-SYMBOLS <ls_file> LIKE LINE OF mt_files.
lv_pattern = |*.{ to_lower( ms_item-obj_type ) }.json|.
LOOP AT mt_files ASSIGNING <ls_file> WHERE filename CP lv_pattern.
rv_result = abap_true.
EXIT.
ENDLOOP.
ENDMETHOD.
METHOD read_abap.
DATA: lv_filename TYPE string,

View File

@ -29,6 +29,9 @@ CLASS ltcl_objects_files DEFINITION FOR TESTING
cx_static_check.
METHODS get_file_pattern FOR TESTING.
METHODS is_json_metadata FOR TESTING.
METHODS is_not_json_metadata FOR TESTING.
ENDCLASS.
CLASS ltcl_objects_files IMPLEMENTATION.
@ -38,6 +41,7 @@ CLASS ltcl_objects_files IMPLEMENTATION.
ls_item TYPE zif_abapgit_definitions=>ty_item.
FIELD-SYMBOLS: <ls_files> LIKE LINE OF lt_files.
" filenames are lower case
APPEND INITIAL LINE TO lt_files ASSIGNING <ls_files>.
<ls_files>-filename = 'zlf.prog.abap'.
<ls_files>-data = get_program_data( zif_abapgit_definitions=>c_newline ).
@ -45,8 +49,9 @@ CLASS ltcl_objects_files IMPLEMENTATION.
<ls_files>-filename = 'zlf.prog.xml'.
<ls_files>-data = get_xml_data( ).
ls_item-obj_type = 'prog'.
ls_item-obj_name = 'zlf'.
" object type and name are upper case
ls_item-obj_type = 'PROG'.
ls_item-obj_name = 'ZLF'.
CREATE OBJECT mo_cut
EXPORTING
is_item = ls_item.
@ -127,21 +132,55 @@ CLASS ltcl_objects_files IMPLEMENTATION.
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
" filenames are lower case
cl_abap_unit_assert=>assert_equals(
exp = 'zlf.prog.*'
act = mo_cut->get_file_pattern( ) ).
ls_item-obj_type = 'prog'.
ls_item-obj_name = '/test/zlf'.
" object type and name are upper case
ls_item-obj_type = 'PROG'.
ls_item-obj_name = '/TEST/ZLF'.
CREATE OBJECT mo_cut
EXPORTING
is_item = ls_item.
" filenames are lower case
cl_abap_unit_assert=>assert_equals(
exp = '##test##zlf.prog.*'
act = mo_cut->get_file_pattern( ) ).
ENDMETHOD.
METHOD is_json_metadata.
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
DATA lv_data TYPE xstring.
" object type and name are upper case
ls_item-obj_type = 'CHKO'.
ls_item-obj_name = 'Z_AFF_EXAMPLE_CHKO'.
CREATE OBJECT mo_cut
EXPORTING
is_item = ls_item.
mo_cut->add_raw( iv_data = lv_data
iv_ext = 'json' ).
cl_abap_unit_assert=>assert_equals(
exp = abap_true
act = mo_cut->is_json_metadata( ) ).
ENDMETHOD.
METHOD is_not_json_metadata.
" checks PROG ZLF (see setup)
cl_abap_unit_assert=>assert_equals(
exp = abap_false
act = mo_cut->is_json_metadata( ) ).
ENDMETHOD.
ENDCLASS.

View File

@ -1042,8 +1042,10 @@ CLASS zcl_abapgit_objects IMPLEMENTATION.
li_obj->serialize( li_xml ).
lo_files->add_xml( ii_xml = li_xml
is_metadata = li_obj->get_metadata( ) ).
IF lo_files->is_json_metadata( ) = abap_false.
lo_files->add_xml( ii_xml = li_xml
is_metadata = li_obj->get_metadata( ) ).
ENDIF.
rs_files_and_item-files = lo_files->get_files( ).