From b0b5f1e67c854297afa82fdf47dc4d549bf6e3ec Mon Sep 17 00:00:00 2001 From: larshp Date: Sat, 10 Jun 2017 11:26:51 +0000 Subject: [PATCH] empty xml, fix #775 --- src/zabapgit_unit_test.prog.abap | 34 ++++++++++++++++++++++++++++++++ src/zabapgit_xml.prog.abap | 33 ++++++++++++++++++++++++++++--- 2 files changed, 64 insertions(+), 3 deletions(-) diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 9ef13f80e..b093fc3d7 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -666,6 +666,8 @@ CLASS ltcl_xml DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. METHODS: up FOR TESTING RAISING lcx_exception, + empty FOR TESTING + RAISING lcx_exception, down FOR TESTING RAISING lcx_exception. @@ -684,6 +686,38 @@ ENDCLASS. CLASS ltcl_xml IMPLEMENTATION. + METHOD empty. + + DATA: ls_old TYPE st_old, + ls_new TYPE st_new, + lv_xml TYPE string, + lo_input TYPE REF TO lcl_xml_input, + lo_output TYPE REF TO lcl_xml_output. + + + CLEAR ls_old. + + CREATE OBJECT lo_output. + lo_output->add( iv_name = 'DATA' + ig_data = ls_old ). + lv_xml = lo_output->render( ). + + CREATE OBJECT lo_input + EXPORTING + iv_xml = lv_xml. + lo_input->read( EXPORTING iv_name = 'DATA' + CHANGING cg_data = ls_new ). + + cl_abap_unit_assert=>assert_equals( + act = ls_new-foo + exp = ls_old-foo ). + + cl_abap_unit_assert=>assert_equals( + act = ls_new-bar + exp = ls_old-bar ). + + ENDMETHOD. + METHOD up. DATA: ls_old TYPE st_old, diff --git a/src/zabapgit_xml.prog.abap b/src/zabapgit_xml.prog.abap index a0a06955e..109f62f55 100644 --- a/src/zabapgit_xml.prog.abap +++ b/src/zabapgit_xml.prog.abap @@ -183,6 +183,8 @@ CLASS lcl_xml_output DEFINITION FINAL INHERITING FROM lcl_xml CREATE PUBLIC. add_xml IMPORTING iv_name TYPE clike ii_xml TYPE REF TO if_ixml_element, + build_asx_node + RETURNING VALUE(ri_element) TYPE REF TO if_ixml_element, render IMPORTING iv_normalize TYPE sap_bool DEFAULT abap_true is_metadata TYPE lif_defs=>ty_metadata OPTIONAL @@ -260,17 +262,20 @@ CLASS lcl_xml_output IMPLEMENTATION. IF mi_raw IS INITIAL. li_abap ?= mi_xml_doc->get_root( )->get_first_child( ). mi_xml_doc->get_root( )->remove_child( li_abap ). + IF li_abap IS INITIAL. + li_abap = build_asx_node( ). + ENDIF. ELSE. li_abap = mi_raw. ENDIF. li_git = mi_xml_doc->create_element( c_abapgit_tag ). - li_git->set_attribute( name = c_attr_version value = gc_xml_version ). "#EC NOTEXT + li_git->set_attribute( name = c_attr_version value = gc_xml_version ). IF NOT is_metadata IS INITIAL. li_git->set_attribute( name = c_attr_serializer - value = is_metadata-class ). "#EC NOTEXT + value = is_metadata-class ). li_git->set_attribute( name = c_attr_serializer_version - value = is_metadata-version ). "#EC NOTEXT + value = is_metadata-version ). ENDIF. li_git->append_child( li_abap ). mi_xml_doc->get_root( )->append_child( li_git ). @@ -279,6 +284,28 @@ CLASS lcl_xml_output IMPLEMENTATION. ENDMETHOD. "render + METHOD build_asx_node. + + DATA: li_attr TYPE REF TO if_ixml_attribute. + + + ri_element = mi_xml_doc->create_element_ns( + name = 'abap' + prefix = 'asx' ). + + li_attr = mi_xml_doc->create_attribute_ns( + name = 'version' ). + li_attr->if_ixml_node~set_value( '1.0' ). + ri_element->set_attribute_node_ns( li_attr ). + + li_attr = mi_xml_doc->create_attribute_ns( + name = 'asx' + prefix = 'xmlns' ). + li_attr->if_ixml_node~set_value( 'http://www.sap.com/abapxml' ). + ri_element->set_attribute_node_ns( li_attr ). + + ENDMETHOD. + ENDCLASS. "lcl_xml_output IMPLEMENTATION *----------------------------------------------------------------------*