Leading spaces are lost when pulling bug #2571 (#2597)

* Leading spaces are lost when pulling bug #2571

Reason: during the pull (deserialization), the method `PARSE` of `ZCL_ABAPGIT_XML` does a `li_parser->set_normalizing( iv_normalize )` whose parameter has the default value "true", which strips leading and trailing spaces.

Solution: use `li_parser->add_strip_space_element( )` instead of using the normalization, which seems to work in elementary objects (clas, devc, doma, dtel, enho, enqu, fugr, intf, prog, scp1, tabl, tran, ttyp), but I fear of side effects throughout all abapGit features.

* #2571 zcl_abapgit_xml iv_normalize removed+AU

- Removal of useless parameter IV_NORMALIZE of method PARSE
- Abap Unit test added for testing the method PARSE for an XML valuecontaining leading and trailing spaces

* renaming attribute lo_xml to mo_xml
This commit is contained in:
sandraros 2019-04-19 11:49:15 +02:00 committed by Lars Hvam
parent c9609b2ac6
commit 5a6e6ee2f6
3 changed files with 95 additions and 6 deletions

View File

@ -1,13 +1,12 @@
CLASS zcl_abapgit_xml DEFINITION CLASS zcl_abapgit_xml DEFINITION
PUBLIC PUBLIC
ABSTRACT ABSTRACT
CREATE PUBLIC. CREATE PUBLIC .
PUBLIC SECTION. PUBLIC SECTION.
METHODS: METHODS:
constructor constructor
IMPORTING iv_filename TYPE string OPTIONAL. IMPORTING iv_filename TYPE string OPTIONAL.
PROTECTED SECTION. PROTECTED SECTION.
DATA: mi_ixml TYPE REF TO if_ixml, DATA: mi_ixml TYPE REF TO if_ixml,
mi_xml_doc TYPE REF TO if_ixml_document, mi_xml_doc TYPE REF TO if_ixml_document,
@ -24,8 +23,7 @@ CLASS zcl_abapgit_xml DEFINITION
RETURNING VALUE(rv_xml) TYPE string. RETURNING VALUE(rv_xml) TYPE string.
METHODS parse METHODS parse
IMPORTING iv_normalize TYPE abap_bool DEFAULT abap_true IMPORTING iv_xml TYPE string
iv_xml TYPE string
RAISING zcx_abapgit_exception. RAISING zcx_abapgit_exception.
PRIVATE SECTION. PRIVATE SECTION.
@ -39,7 +37,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_XML IMPLEMENTATION. CLASS zcl_abapgit_xml IMPLEMENTATION.
METHOD constructor. METHOD constructor.
@ -147,7 +145,7 @@ CLASS ZCL_ABAPGIT_XML IMPLEMENTATION.
li_parser = mi_ixml->create_parser( stream_factory = li_stream_factory li_parser = mi_ixml->create_parser( stream_factory = li_stream_factory
istream = li_istream istream = li_istream
document = mi_xml_doc ). document = mi_xml_doc ).
li_parser->set_normalizing( iv_normalize ). li_parser->add_strip_space_element( ).
IF li_parser->parse( ) <> 0. IF li_parser->parse( ) <> 0.
error( li_parser ). error( li_parser ).
ENDIF. ENDIF.

View File

@ -0,0 +1,90 @@
CLASS ltcl_xml DEFINITION DEFERRED.
CLASS ltcl_xml_concrete DEFINITION FOR TESTING
FINAL
INHERITING FROM zcl_abapgit_xml
FRIENDS ltcl_xml.
ENDCLASS.
CLASS ltcl_xml_concrete IMPLEMENTATION.
ENDCLASS.
CLASS ltcl_xml DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
METHODS:
space_leading_trailing FOR TESTING
RAISING zcx_abapgit_exception.
METHODS:
parse_xml
IMPORTING
iv_xml TYPE csequence
RAISING
zcx_abapgit_exception,
render_xml
IMPORTING
iv_name TYPE string
RETURNING
VALUE(rv_xml) TYPE string.
DATA: mo_xml TYPE REF TO ltcl_xml_concrete.
ENDCLASS.
CLASS ltcl_xml IMPLEMENTATION.
METHOD parse_xml.
DATA: lv_xml TYPE string.
CREATE OBJECT mo_xml.
lv_xml = |<?xml version="1.0"?>|
&& |<{ mo_xml->c_abapgit_tag } { mo_xml->c_attr_version }="{ zif_abapgit_version=>gc_xml_version }">|
&& iv_xml
&& |</{ mo_xml->c_abapgit_tag }>|.
mo_xml->parse( iv_xml = lv_xml ).
ENDMETHOD.
METHOD space_leading_trailing.
DATA: lv_from_xml TYPE string,
lv_to_xml TYPE string.
lv_from_xml = `<FOO> A </FOO>`.
parse_xml( lv_from_xml ).
lv_to_xml = render_xml( 'FOO' ).
cl_abap_unit_assert=>assert_equals(
act = lv_to_xml
exp = lv_from_xml ).
ENDMETHOD.
METHOD render_xml.
DATA: li_element TYPE REF TO if_ixml_element,
li_ostream TYPE REF TO if_ixml_ostream,
li_renderer TYPE REF TO if_ixml_renderer,
li_streamfactory TYPE REF TO if_ixml_stream_factory.
li_element = mo_xml->mi_xml_doc->find_from_path( |/{ mo_xml->c_abapgit_tag }/{ iv_name }| ).
li_streamfactory = mo_xml->mi_ixml->create_stream_factory( ).
li_ostream = li_streamfactory->create_ostream_cstring( rv_xml ).
li_element->render( ostream = li_ostream ).
ENDMETHOD.
ENDCLASS.

View File

@ -10,6 +10,7 @@
<CLSCCINCL>X</CLSCCINCL> <CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT> <FIXPT>X</FIXPT>
<UNICODE>X</UNICODE> <UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS> </VSEOCLASS>
</asx:values> </asx:values>
</asx:abap> </asx:abap>