mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
Add exception instead of popup for background XML errors (#3708)
* Add exception/message logic, refactoring * De-lint * More de-linting Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
8bc12fef01
commit
408f127b4a
|
@ -32,6 +32,13 @@ CLASS zcl_abapgit_xml DEFINITION
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
METHODS display_version_mismatch
|
METHODS display_version_mismatch
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception.
|
||||||
|
METHODS show_parser_errors
|
||||||
|
IMPORTING ii_parser TYPE REF TO if_ixml_parser.
|
||||||
|
METHODS raise_exception_for
|
||||||
|
IMPORTING
|
||||||
|
ii_error TYPE REF TO if_ixml_parse_error
|
||||||
|
RAISING
|
||||||
|
zcx_abapgit_exception.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
@ -76,48 +83,14 @@ CLASS zcl_abapgit_xml IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD error.
|
METHOD error.
|
||||||
|
|
||||||
DATA: lv_error TYPE i,
|
|
||||||
lv_column TYPE string,
|
|
||||||
lv_line TYPE string,
|
|
||||||
lv_reason TYPE string,
|
|
||||||
lv_txt1 TYPE string,
|
|
||||||
lv_txt2 TYPE string,
|
|
||||||
lv_txt3 TYPE string,
|
|
||||||
lv_txt4 TYPE string,
|
|
||||||
lv_times TYPE i,
|
|
||||||
li_error TYPE REF TO if_ixml_parse_error.
|
|
||||||
|
|
||||||
IF ii_parser->num_errors( ) <> 0.
|
IF ii_parser->num_errors( ) <> 0.
|
||||||
lv_times = ii_parser->num_errors( ).
|
|
||||||
|
|
||||||
DO lv_times TIMES.
|
IF zcl_abapgit_ui_factory=>get_gui_functions( )->gui_is_available( ) = abap_true.
|
||||||
lv_error = sy-index - 1.
|
show_parser_errors( ii_parser ).
|
||||||
li_error = ii_parser->get_error( lv_error ).
|
|
||||||
|
|
||||||
lv_column = li_error->get_column( ).
|
|
||||||
lv_line = li_error->get_line( ).
|
|
||||||
lv_reason = li_error->get_reason( ).
|
|
||||||
|
|
||||||
IF mv_filename IS NOT INITIAL.
|
|
||||||
lv_txt1 = |File: { mv_filename }|. "#EC NOTEXT
|
|
||||||
lv_txt2 = |Column: { lv_column }|. "#EC NOTEXT
|
|
||||||
lv_txt3 = |Line: { lv_line }|. "#EC NOTEXT
|
|
||||||
lv_txt4 = lv_reason.
|
|
||||||
ELSE.
|
ELSE.
|
||||||
lv_txt1 = |Column: { lv_column }|. "#EC NOTEXT
|
raise_exception_for( ii_parser->get_error( 0 ) ).
|
||||||
lv_txt2 = |Line: { lv_line }|. "#EC NOTEXT
|
|
||||||
lv_txt3 = lv_reason.
|
|
||||||
CLEAR lv_txt4.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
CALL FUNCTION 'POPUP_TO_INFORM'
|
|
||||||
EXPORTING
|
|
||||||
titel = 'Error from XML parser' "#EC NOTEXT
|
|
||||||
txt1 = lv_txt1
|
|
||||||
txt2 = lv_txt2
|
|
||||||
txt3 = lv_txt3
|
|
||||||
txt4 = lv_txt4.
|
|
||||||
ENDDO.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
IF mv_filename IS INITIAL.
|
IF mv_filename IS INITIAL.
|
||||||
|
@ -195,4 +168,67 @@ CLASS zcl_abapgit_xml IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD show_parser_errors.
|
||||||
|
|
||||||
|
DATA lv_error TYPE i.
|
||||||
|
DATA lv_column TYPE string.
|
||||||
|
DATA lv_line TYPE string.
|
||||||
|
DATA lv_reason TYPE string.
|
||||||
|
DATA lv_txt1 TYPE string.
|
||||||
|
DATA lv_txt2 TYPE string.
|
||||||
|
DATA lv_txt3 TYPE string.
|
||||||
|
DATA lv_txt4 TYPE string.
|
||||||
|
DATA lv_times TYPE i.
|
||||||
|
DATA li_error TYPE REF TO if_ixml_parse_error.
|
||||||
|
|
||||||
|
lv_times = ii_parser->num_errors( ).
|
||||||
|
|
||||||
|
DO lv_times TIMES.
|
||||||
|
lv_error = sy-index - 1.
|
||||||
|
li_error = ii_parser->get_error( lv_error ).
|
||||||
|
|
||||||
|
lv_column = li_error->get_column( ).
|
||||||
|
lv_line = li_error->get_line( ).
|
||||||
|
lv_reason = li_error->get_reason( ).
|
||||||
|
|
||||||
|
IF mv_filename IS NOT INITIAL.
|
||||||
|
lv_txt1 = |File: { mv_filename }|. "#EC NOTEXT
|
||||||
|
lv_txt2 = |Column: { lv_column }|. "#EC NOTEXT
|
||||||
|
lv_txt3 = |Line: { lv_line }|. "#EC NOTEXT
|
||||||
|
lv_txt4 = lv_reason.
|
||||||
|
ELSE.
|
||||||
|
lv_txt1 = |Column: { lv_column }|. "#EC NOTEXT
|
||||||
|
lv_txt2 = |Line: { lv_line }|. "#EC NOTEXT
|
||||||
|
lv_txt3 = lv_reason.
|
||||||
|
CLEAR lv_txt4.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CALL FUNCTION 'POPUP_TO_INFORM'
|
||||||
|
EXPORTING
|
||||||
|
titel = 'Error from XML parser' "#EC NOTEXT
|
||||||
|
txt1 = lv_txt1
|
||||||
|
txt2 = lv_txt2
|
||||||
|
txt3 = lv_txt3
|
||||||
|
txt4 = lv_txt4.
|
||||||
|
ENDDO.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
|
|
||||||
|
METHOD raise_exception_for.
|
||||||
|
DATA lv_message TYPE string.
|
||||||
|
|
||||||
|
lv_message = |XML parser error: { ii_error->get_reason( ) }, | &&
|
||||||
|
|Line { ii_error->get_line( ) } | &&
|
||||||
|
|Col. { ii_error->get_column( ) }|. "#EC NOTEXT
|
||||||
|
|
||||||
|
IF mv_filename IS NOT INITIAL.
|
||||||
|
lv_message = lv_message && | File { mv_filename }|.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
zcx_abapgit_exception=>raise( lv_message ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -13,9 +13,12 @@ CLASS ltcl_xml DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
METHODS setup.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
space_leading_trailing FOR TESTING
|
space_leading_trailing FOR TESTING
|
||||||
RAISING zcx_abapgit_exception.
|
RAISING zcx_abapgit_exception,
|
||||||
|
bad_xml_without_gui_raises_exc FOR TESTING RAISING cx_static_check.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
parse_xml
|
parse_xml
|
||||||
|
@ -29,19 +32,20 @@ CLASS ltcl_xml DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(rv_xml) TYPE string.
|
VALUE(rv_xml) TYPE string.
|
||||||
|
|
||||||
DATA: mo_xml TYPE REF TO ltcl_xml_concrete.
|
DATA mo_xml TYPE REF TO ltcl_xml_concrete.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
|
||||||
CLASS ltcl_xml IMPLEMENTATION.
|
CLASS ltcl_xml IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD setup.
|
||||||
|
CREATE OBJECT mo_xml.
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD parse_xml.
|
METHOD parse_xml.
|
||||||
|
|
||||||
DATA: lv_xml TYPE string.
|
DATA lv_xml TYPE string.
|
||||||
|
|
||||||
|
|
||||||
CREATE OBJECT mo_xml.
|
|
||||||
|
|
||||||
lv_xml = |<?xml version="1.0"?>|
|
lv_xml = |<?xml version="1.0"?>|
|
||||||
&& |<{ mo_xml->c_abapgit_tag } { mo_xml->c_attr_version }="{ zif_abapgit_version=>gc_xml_version }">|
|
&& |<{ mo_xml->c_abapgit_tag } { mo_xml->c_attr_version }="{ zif_abapgit_version=>gc_xml_version }">|
|
||||||
|
@ -86,4 +90,31 @@ CLASS ltcl_xml IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD bad_xml_without_gui_raises_exc.
|
||||||
|
DATA: lv_xml TYPE string,
|
||||||
|
lo_error TYPE REF TO zcx_abapgit_exception,
|
||||||
|
lv_text TYPE string.
|
||||||
|
|
||||||
|
IF zcl_abapgit_ui_factory=>get_gui_functions( )->gui_is_available( ) = abap_true.
|
||||||
|
RETURN. "Can only test with ADT or in background
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
lv_xml = |<?xml version="1.0"?>|
|
||||||
|
&& |<{ mo_xml->c_abapgit_tag } { mo_xml->c_attr_version }="{ zif_abapgit_version=>gc_xml_version }">|
|
||||||
|
&& |<open_tag>|
|
||||||
|
&& |</{ mo_xml->c_abapgit_tag }>|.
|
||||||
|
|
||||||
|
TRY.
|
||||||
|
mo_xml->parse( iv_xml = lv_xml ).
|
||||||
|
cl_abap_unit_assert=>fail( msg = 'Exception not raised' ).
|
||||||
|
|
||||||
|
CATCH zcx_abapgit_exception INTO lo_error.
|
||||||
|
lv_text = lo_error->get_text( ).
|
||||||
|
cl_abap_unit_assert=>assert_char_cp(
|
||||||
|
act = lv_text
|
||||||
|
exp = '*open_tag*' ).
|
||||||
|
ENDTRY.
|
||||||
|
|
||||||
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user