From 04b143ca2e3deec16e8fc60ccd34506131308fce Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Sat, 8 Apr 2023 16:36:04 +0200 Subject: [PATCH] zcl_excel_theme_fmt_scheme, replace use of cl_xml_document (#1046) * zcl_excel_theme_fmt_scheme, add unit test * replace use of cl_xml_document --------- Co-authored-by: Abo --- src/zcl_excel_theme_fmt_scheme.clas.abap | 35 ++++++++++-- ...cel_theme_fmt_scheme.clas.testclasses.abap | 54 +++++++++++++++++++ src/zcl_excel_theme_fmt_scheme.clas.xml | 1 + 3 files changed, 85 insertions(+), 5 deletions(-) create mode 100644 src/zcl_excel_theme_fmt_scheme.clas.testclasses.abap diff --git a/src/zcl_excel_theme_fmt_scheme.clas.abap b/src/zcl_excel_theme_fmt_scheme.clas.abap index 07c8a65..d224c8b 100644 --- a/src/zcl_excel_theme_fmt_scheme.clas.abap +++ b/src/zcl_excel_theme_fmt_scheme.clas.abap @@ -19,15 +19,18 @@ CLASS zcl_excel_theme_fmt_scheme DEFINITION METHODS get_default_fmt RETURNING VALUE(rv_string) TYPE string . + + METHODS parse_string + IMPORTING iv_string TYPE string + RETURNING VALUE(ri_node) TYPE REF TO if_ixml_node. ENDCLASS. -CLASS zcl_excel_theme_fmt_scheme IMPLEMENTATION. +CLASS ZCL_EXCEL_THEME_FMT_SCHEME IMPLEMENTATION. METHOD build_xml. - DATA: lo_xml TYPE REF TO cl_xml_document. DATA: lo_node TYPE REF TO if_ixml_node. DATA: lo_elements TYPE REF TO if_ixml_element. CHECK io_document IS BOUND. @@ -35,9 +38,7 @@ CLASS zcl_excel_theme_fmt_scheme IMPLEMENTATION. IF lo_elements IS BOUND. IF fmt_scheme IS INITIAL. - CREATE OBJECT lo_xml. - lo_xml->parse_string( get_default_fmt( ) ). - lo_node = lo_xml->get_first_node( ). + lo_node = parse_string( get_default_fmt( ) ). lo_elements->append_child( new_child = lo_node ). ELSE. lo_elements->append_child( new_child = fmt_scheme ). @@ -191,4 +192,28 @@ CLASS zcl_excel_theme_fmt_scheme IMPLEMENTATION. METHOD load. fmt_scheme = zcl_excel_common=>clone_ixml_with_namespaces( io_fmt_scheme ). ENDMETHOD. "load + + + METHOD parse_string. + DATA li_stream TYPE REF TO if_ixml_istream. + DATA li_ixml TYPE REF TO if_ixml. + DATA li_document TYPE REF TO if_ixml_document. + DATA li_factory TYPE REF TO if_ixml_stream_factory. + DATA li_parser TYPE REF TO if_ixml_parser. + DATA li_istream TYPE REF TO if_ixml_istream. + + li_ixml = cl_ixml=>create( ). + li_document = li_ixml->create_document( ). + li_factory = li_ixml->create_stream_factory( ). + li_istream = li_factory->create_istream_string( iv_string ). + li_parser = li_ixml->create_parser( + stream_factory = li_factory + istream = li_istream + document = li_document ). + li_parser->add_strip_space_element( ). + li_parser->parse( ). + li_istream->close( ). + ri_node = li_document->get_first_child( ). + + ENDMETHOD. ENDCLASS. diff --git a/src/zcl_excel_theme_fmt_scheme.clas.testclasses.abap b/src/zcl_excel_theme_fmt_scheme.clas.testclasses.abap new file mode 100644 index 0000000..c213b73 --- /dev/null +++ b/src/zcl_excel_theme_fmt_scheme.clas.testclasses.abap @@ -0,0 +1,54 @@ +CLASS ltcl_test DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. + PRIVATE SECTION. + METHODS build_xml FOR TESTING. + + DATA mi_ixml TYPE REF TO if_ixml. + DATA mi_document TYPE REF TO if_ixml_document. + METHODS setup. + METHODS render + RETURNING + VALUE(rv_xml) TYPE string. +ENDCLASS. + + +CLASS ltcl_test IMPLEMENTATION. + + METHOD setup. + mi_ixml = cl_ixml=>create( ). + mi_document = mi_ixml->create_document( ). + ENDMETHOD. + + METHOD render. + DATA li_ostream TYPE REF TO if_ixml_ostream. + DATA li_renderer TYPE REF TO if_ixml_renderer. + DATA li_factory TYPE REF TO if_ixml_stream_factory. + + li_factory = mi_ixml->create_stream_factory( ). + li_ostream = li_factory->create_ostream_cstring( rv_xml ). + li_renderer = mi_ixml->create_renderer( + ostream = li_ostream + document = mi_document ). + li_renderer->render( ). + ENDMETHOD. + + METHOD build_xml. + DATA lo_theme_fmt TYPE REF TO zcl_excel_theme_fmt_scheme. + DATA li_ixml TYPE REF TO if_ixml. + DATA li_document TYPE REF TO if_ixml_document. + DATA lv_xml TYPE string. + + mi_document->create_simple_element( + name = zcl_excel_theme=>c_theme_elements + parent = mi_document ). + + CREATE OBJECT lo_theme_fmt. + lo_theme_fmt->build_xml( mi_document ). + + lv_xml = render( ). + + cl_abap_unit_assert=>assert_char_cp( + act = lv_xml + exp = '**' ). + ENDMETHOD. + +ENDCLASS. diff --git a/src/zcl_excel_theme_fmt_scheme.clas.xml b/src/zcl_excel_theme_fmt_scheme.clas.xml index 5d7457d..eae2c4a 100644 --- a/src/zcl_excel_theme_fmt_scheme.clas.xml +++ b/src/zcl_excel_theme_fmt_scheme.clas.xml @@ -10,6 +10,7 @@ X X X + X