From 387b8b9cc24ffbed2a8827fd5533be180c9ebda4 Mon Sep 17 00:00:00 2001 From: Christian Guenter Date: Sat, 2 Jun 2018 07:02:50 +0000 Subject: [PATCH] fix xml syntax for sole closing tag --- src/syntax/zcl_abapgit_syntax_xml.clas.abap | 21 ++++---- ...l_abapgit_syntax_xml.clas.testclasses.abap | 52 +++++++++++++++++++ src/syntax/zcl_abapgit_syntax_xml.clas.xml | 1 + 3 files changed, 64 insertions(+), 10 deletions(-) create mode 100644 src/syntax/zcl_abapgit_syntax_xml.clas.testclasses.abap diff --git a/src/syntax/zcl_abapgit_syntax_xml.clas.abap b/src/syntax/zcl_abapgit_syntax_xml.clas.abap index 3826dfc51..016bb32df 100644 --- a/src/syntax/zcl_abapgit_syntax_xml.clas.abap +++ b/src/syntax/zcl_abapgit_syntax_xml.clas.abap @@ -5,27 +5,26 @@ CLASS zcl_abapgit_syntax_xml DEFINITION PUBLIC SECTION. - METHODS constructor. - CONSTANTS: BEGIN OF c_css, xml_tag TYPE string VALUE 'xml_tag', "#EC NOTEXT attr TYPE string VALUE 'attr', "#EC NOTEXT attr_val TYPE string VALUE 'attr_val', "#EC NOTEXT - END OF c_css, - + END OF c_css . + CONSTANTS: BEGIN OF c_token, xml_tag TYPE c VALUE 'X', "#EC NOTEXT attr TYPE c VALUE 'A', "#EC NOTEXT attr_val TYPE c VALUE 'V', "#EC NOTEXT - END OF c_token, - + END OF c_token . + CONSTANTS: BEGIN OF c_regex, xml_tag TYPE string VALUE '[<>]', "#EC NOTEXT attr TYPE string VALUE '\s[-a-z:_0-9]+\s*(?==)', "#EC NOTEXT attr_val TYPE string VALUE '["''][^''"]+[''"]', "#EC NOTEXT - END OF c_regex. + END OF c_regex . + METHODS constructor . PROTECTED SECTION. METHODS order_matches REDEFINITION. @@ -34,7 +33,7 @@ ENDCLASS. -CLASS ZCL_ABAPGIT_SYNTAX_XML IMPLEMENTATION. +CLASS zcl_abapgit_syntax_xml IMPLEMENTATION. METHOD constructor. @@ -91,8 +90,10 @@ CLASS ZCL_ABAPGIT_SYNTAX_XML IMPLEMENTATION. " Adjust length and offset of closing tag ELSEIF -text_tag = '>' AND lv_prev_token <> c_token-xml_tag. lv_state = 'C'. - -length = -offset - -offset - -length + -length. - -offset = -offset + -length. + IF IS ASSIGNED. + -length = -offset - -offset - -length + -length. + -offset = -offset + -length. + ENDIF. ELSE. lv_state = 'O'. ENDIF. diff --git a/src/syntax/zcl_abapgit_syntax_xml.clas.testclasses.abap b/src/syntax/zcl_abapgit_syntax_xml.clas.testclasses.abap new file mode 100644 index 000000000..1cbe4d33d --- /dev/null +++ b/src/syntax/zcl_abapgit_syntax_xml.clas.testclasses.abap @@ -0,0 +1,52 @@ +*"* use this source file for your ABAP unit test classes + +CLASS abapgit_syntax_xml DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + DATA: + mo_cut TYPE REF TO zcl_abapgit_syntax_xml. + + METHODS: + setup, + sole_closing_xml_tag FOR TESTING RAISING cx_static_check, + complete_xml_tag FOR TESTING RAISING cx_static_check, + complete_xml_tag_with_closing FOR TESTING RAISING cx_static_check. + +ENDCLASS. + + +CLASS abapgit_syntax_xml IMPLEMENTATION. + + METHOD setup. + + CREATE OBJECT mo_cut. + + ENDMETHOD. + + METHOD sole_closing_xml_tag. + + cl_abap_unit_assert=>assert_equals( + exp = |>| + act = mo_cut->process_line( |>| ) ). + + ENDMETHOD. + + METHOD complete_xml_tag. + + cl_abap_unit_assert=>assert_equals( + exp = |<tag>| + act = mo_cut->process_line( || ) ). + + ENDMETHOD. + + METHOD complete_xml_tag_with_closing. + + cl_abap_unit_assert=>assert_equals( + exp = |<tag/>| + act = mo_cut->process_line( || ) ). + + ENDMETHOD. + +ENDCLASS. diff --git a/src/syntax/zcl_abapgit_syntax_xml.clas.xml b/src/syntax/zcl_abapgit_syntax_xml.clas.xml index 52e9764b1..5b887d9de 100644 --- a/src/syntax/zcl_abapgit_syntax_xml.clas.xml +++ b/src/syntax/zcl_abapgit_syntax_xml.clas.xml @@ -12,6 +12,7 @@ X X X + X