CLASS ltcl_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, empty_attributes FOR TESTING RAISING cx_static_check, open_tags FOR TESTING RAISING cx_static_check, attributes_only FOR TESTING RAISING cx_static_check. ENDCLASS. CLASS ltcl_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. METHOD empty_attributes. cl_abap_unit_assert=>assert_equals( exp = |<ECTD| && | SAPRL=| && |"751"| && | VERSION=| && |"1.5"| && | DOWNLOADDATE=""| && | DOWNLOADTIME=""| && |>| act = mo_cut->process_line( || ) ). ENDMETHOD. METHOD attributes_only. cl_abap_unit_assert=>assert_equals( exp = | SAPRL=| && |"751"| && | VERSION=| && |">1.5"| act = mo_cut->process_line( | SAPRL="751" VERSION=">1.5"| ) ). cl_abap_unit_assert=>assert_equals( exp = |SAPRL=| && |"751"| && | VERSION=| && |'>1.5'| act = mo_cut->process_line( |SAPRL="751" VERSION='>1.5'| ) ). ENDMETHOD. METHOD open_tags. cl_abap_unit_assert=>assert_equals( exp = |<ECTD| act = mo_cut->process_line( |assert_equals( exp = |<ECTD| && | SAPRL=| && |"751"| && | VERSION=| && |"1.5"| act = mo_cut->process_line( |ty_match_tt, mt_after_order TYPE zcl_abapgit_syntax_xml=>ty_match_tt, mt_after_extend TYPE zcl_abapgit_syntax_xml=>ty_match_tt. METHODS: do_test IMPORTING iv_line TYPE string, generate_parse IMPORTING iv_token TYPE c iv_offset TYPE i iv_length TYPE i, generate_order IMPORTING iv_token TYPE c iv_offset TYPE i iv_length TYPE i iv_text_tag TYPE string, generate_extend IMPORTING iv_token TYPE c iv_offset TYPE i iv_length TYPE i iv_text_tag TYPE string, test_xml_01 FOR TESTING, test_xml_02 FOR TESTING, test_xml_03 FOR TESTING, test_xml_04 FOR TESTING, test_xml_05 FOR TESTING, test_xml_06 FOR TESTING, test_xml_07 FOR TESTING, test_xml_08 FOR TESTING. ENDCLASS. *----------------------------------------------------------------------* * CLASS ltcl_syntax_cases IMPLEMENTATION *----------------------------------------------------------------------* CLASS ltcl_syntax_cases IMPLEMENTATION. METHOD do_test. DATA: lt_matches_act TYPE zcl_abapgit_syntax_xml=>ty_match_tt, ls_match LIKE LINE OF lt_matches_act, lv_offs TYPE i, lo_syntax TYPE REF TO zcl_abapgit_syntax_xml. CREATE OBJECT lo_syntax. lt_matches_act = lo_syntax->parse_line( iv_line ). SORT lt_matches_act BY offset. cl_abap_unit_assert=>assert_equals( exp = mt_after_parse act = lt_matches_act msg = | Error during parsing: { iv_line }| ). lo_syntax->order_matches( EXPORTING iv_line = iv_line CHANGING ct_matches = lt_matches_act ). cl_abap_unit_assert=>assert_equals( exp = mt_after_order act = lt_matches_act msg = | Error during ordering: { iv_line }| ). lo_syntax->extend_matches( EXPORTING iv_line = iv_line CHANGING ct_matches = lt_matches_act ). cl_abap_unit_assert=>assert_equals( exp = mt_after_extend act = lt_matches_act msg = | Error during extending: { iv_line }| ). " Check consistency lv_offs = 0. LOOP AT lt_matches_act INTO ls_match. IF ls_match-offset <> lv_offs. cl_abap_unit_assert=>assert_equals( exp = lv_offs act = ls_match-offset msg = | Error during consistency check: { sy-tabix }| ). ENDIF. lv_offs = lv_offs + ls_match-length. ENDLOOP. ENDMETHOD. METHOD generate_parse. DATA ls_match TYPE zcl_abapgit_syntax_xml=>ty_match. ls_match-token = iv_token. ls_match-offset = iv_offset. ls_match-length = iv_length. APPEND ls_match TO mt_after_parse. ENDMETHOD. METHOD generate_order. DATA ls_match TYPE zcl_abapgit_syntax_xml=>ty_match. ls_match-token = iv_token. ls_match-offset = iv_offset. ls_match-length = iv_length. ls_match-text_tag = iv_text_tag. APPEND ls_match TO mt_after_order. ENDMETHOD. METHOD generate_extend. DATA ls_match TYPE zcl_abapgit_syntax_xml=>ty_match. ls_match-token = iv_token. ls_match-offset = iv_offset. ls_match-length = iv_length. ls_match-text_tag = iv_text_tag. APPEND ls_match TO mt_after_extend. ENDMETHOD. ******************************************************** * Test parsing and ordering of tags in xml * ******************************************************** METHOD test_xml_01. DATA lv_line TYPE string. lv_line = 'Text'. " Generate table with expected values after parsing generate_parse( iv_token = 'X' iv_offset = 0 iv_length = 1 ). generate_parse( iv_token = 'X' iv_offset = 4 iv_length = 1 ). generate_parse( iv_token = 'X' iv_offset = 9 iv_length = 1 ). generate_parse( iv_token = 'X' iv_offset = 14 iv_length = 1 ). " Generate table with expected values after ordering generate_order( iv_token = 'X' iv_offset = 0 iv_length = 5 iv_text_tag = '<' ). generate_order( iv_token = 'X' iv_offset = 9 iv_length = 6 iv_text_tag = '<' ). " Generate table with expected values after extending generate_extend( iv_token = 'X' iv_offset = 0 iv_length = 5 iv_text_tag = '<' ). generate_extend( iv_token = '.' iv_offset = 5 iv_length = 4 iv_text_tag = '' ). generate_extend( iv_token = 'X' iv_offset = 9 iv_length = 6 iv_text_tag = '<' ). do_test( lv_line ). ENDMETHOD. METHOD test_xml_02. DATA lv_line TYPE string. lv_line = ''. " Generate table with expected values after parsing generate_parse( iv_token = 'X' iv_offset = 0 iv_length = 1 ). generate_parse( iv_token = 'X' iv_offset = 5 iv_length = 1 ). " Generate table with expected values after ordering generate_order( iv_token = 'X' iv_offset = 0 iv_length = 6 iv_text_tag = '<' ). " Generate table with expected values after extending generate_extend( iv_token = 'X' iv_offset = 0 iv_length = 6 iv_text_tag = '<' ). do_test( lv_line ). ENDMETHOD. METHOD test_xml_03. DATA lv_line TYPE string. lv_line = ''. " Generate table with expected values after parsing generate_parse( iv_token = 'X' iv_offset = 0 iv_length = 1 ). generate_parse( iv_token = 'A' iv_offset = 4 iv_length = 10 ). generate_parse( iv_token = 'V' iv_offset = 15 iv_length = 7 ). generate_parse( iv_token = 'X' iv_offset = 23 iv_length = 1 ). " Generate table with expected values after ordering generate_order( iv_token = 'X' iv_offset = 0 iv_length = 4 iv_text_tag = '<' ). generate_order( iv_token = 'A' iv_offset = 4 iv_length = 10 iv_text_tag = '' ). generate_order( iv_token = 'V' iv_offset = 15 iv_length = 7 iv_text_tag = '' ). generate_order( iv_token = 'X' iv_offset = 22 iv_length = 2 iv_text_tag = '>' ). " Generate table with expected values after extending generate_extend( iv_token = 'X' iv_offset = 0 iv_length = 4 iv_text_tag = '<' ). generate_extend( iv_token = 'A' iv_offset = 4 iv_length = 10 iv_text_tag = '' ). generate_extend( iv_token = '.' iv_offset = 14 iv_length = 1 iv_text_tag = '' ). generate_extend( iv_token = 'V' iv_offset = 15 iv_length = 7 iv_text_tag = '' ). generate_extend( iv_token = 'X' iv_offset = 22 iv_length = 2 iv_text_tag = '>' ). do_test( lv_line ). ENDMETHOD. METHOD test_xml_04. DATA lv_line TYPE string. lv_line = ''. " Generate table with expected values after parsing generate_parse( iv_token = 'X' iv_offset = 0 iv_length = 1 ). generate_parse( iv_token = 'A' iv_offset = 5 iv_length = 8 ). generate_parse( iv_token = 'V' iv_offset = 14 iv_length = 5 ). generate_parse( iv_token = 'X' iv_offset = 20 iv_length = 1 ). " Generate table with expected values after ordering generate_order( iv_token = 'X' iv_offset = 0 iv_length = 5 iv_text_tag = '<' ). generate_order( iv_token = 'A' iv_offset = 5 iv_length = 8 iv_text_tag = '' ). generate_order( iv_token = 'V' iv_offset = 14 iv_length = 5 iv_text_tag = '' ). generate_order( iv_token = 'X' iv_offset = 19 iv_length = 2 iv_text_tag = '>' ). " Generate table with expected values after extending generate_extend( iv_token = 'X' iv_offset = 0 iv_length = 5 iv_text_tag = '<' ). generate_extend( iv_token = 'A' iv_offset = 5 iv_length = 8 iv_text_tag = '' ). generate_extend( iv_token = '.' iv_offset = 13 iv_length = 1 iv_text_tag = '' ). generate_extend( iv_token = 'V' iv_offset = 14 iv_length = 5 iv_text_tag = '' ). generate_extend( iv_token = 'X' iv_offset = 19 iv_length = 2 iv_text_tag = '>' ). do_test( lv_line ). ENDMETHOD. METHOD test_xml_05. DATA lv_line TYPE string. lv_line = '"text"'. " Generate table with expected values after parsing generate_parse( iv_token = 'X' iv_offset = 0 iv_length = 1 ). generate_parse( iv_token = 'A' iv_offset = 7 iv_length = 6 ). generate_parse( iv_token = 'V' iv_offset = 14 iv_length = 4 ). generate_parse( iv_token = 'A' iv_offset = 18 iv_length = 6 ). generate_parse( iv_token = 'V' iv_offset = 25 iv_length = 4 ). generate_parse( iv_token = 'X' iv_offset = 29 iv_length = 1 ). generate_parse( iv_token = 'V' iv_offset = 30 iv_length = 6 ). generate_parse( iv_token = 'X' iv_offset = 36 iv_length = 1 ). generate_parse( iv_token = 'X' iv_offset = 44 iv_length = 1 ). " Generate table with expected values after ordering generate_order( iv_token = 'X' iv_offset = 0 iv_length = 7 iv_text_tag = '<' ). generate_order( iv_token = 'A' iv_offset = 7 iv_length = 6 iv_text_tag = '' ). generate_order( iv_token = 'V' iv_offset = 14 iv_length = 4 iv_text_tag = '' ). generate_order( iv_token = 'A' iv_offset = 18 iv_length = 6 iv_text_tag = '' ). generate_order( iv_token = 'V' iv_offset = 25 iv_length = 4 iv_text_tag = '' ). generate_order( iv_token = 'X' iv_offset = 29 iv_length = 1 iv_text_tag = '>' ). generate_order( iv_token = 'X' iv_offset = 36 iv_length = 9 iv_text_tag = '<' ). " Generate table with expected values after extending generate_extend( iv_token = 'X' iv_offset = 0 iv_length = 7 iv_text_tag = '<' ). generate_extend( iv_token = 'A' iv_offset = 7 iv_length = 6 iv_text_tag = '' ). generate_extend( iv_token = '.' iv_offset = 13 iv_length = 1 iv_text_tag = '' ). generate_extend( iv_token = 'V' iv_offset = 14 iv_length = 4 iv_text_tag = '' ). generate_extend( iv_token = 'A' iv_offset = 18 iv_length = 6 iv_text_tag = '' ). generate_extend( iv_token = '.' iv_offset = 24 iv_length = 1 iv_text_tag = '' ). generate_extend( iv_token = 'V' iv_offset = 25 iv_length = 4 iv_text_tag = '' ). generate_extend( iv_token = 'X' iv_offset = 29 iv_length = 1 iv_text_tag = '>' ). generate_extend( iv_token = '.' iv_offset = 30 iv_length = 6 iv_text_tag = '' ). generate_extend( iv_token = 'X' iv_offset = 36 iv_length = 9 iv_text_tag = '<' ). do_test( lv_line ). ENDMETHOD. METHOD test_xml_06. DATA lv_line TYPE string. "unclosed tag lv_line = ' "/>'. " Generate table with expected values after parsing generate_parse( iv_token = 'X' iv_offset = 0 iv_length = 1 ). generate_parse( iv_token = 'A' iv_offset = 4 iv_length = 10 ). generate_parse( iv_token = 'V' iv_offset = 15 iv_length = 7 ). generate_parse( iv_token = 'X' iv_offset = 23 iv_length = 1 ). " Generate table with expected values after ordering generate_order( iv_token = 'X' iv_offset = 0 iv_length = 4 iv_text_tag = '<' ). generate_order( iv_token = 'A' iv_offset = 4 iv_length = 10 iv_text_tag = '' ). generate_order( iv_token = 'V' iv_offset = 15 iv_length = 7 iv_text_tag = '' ). generate_order( iv_token = 'X' iv_offset = 22 iv_length = 2 iv_text_tag = '>' ). " Generate table with expected values after extending generate_extend( iv_token = 'X' iv_offset = 0 iv_length = 4 iv_text_tag = '<' ). generate_extend( iv_token = 'A' iv_offset = 4 iv_length = 10 iv_text_tag = '' ). generate_extend( iv_token = '.' iv_offset = 14 iv_length = 1 iv_text_tag = '' ). generate_extend( iv_token = 'V' iv_offset = 15 iv_length = 7 iv_text_tag = '' ). generate_extend( iv_token = 'X' iv_offset = 22 iv_length = 2 iv_text_tag = '>' ). do_test( lv_line ). ENDMETHOD. METHOD test_xml_08. "invalid XML characters in a string DATA lv_line TYPE string. "attribute at beginning of line lv_line = 'attribute=''>" '''. " Generate table with expected values after parsing generate_parse( iv_token = 'A' iv_offset = 0 iv_length = 9 ). generate_parse( iv_token = 'V' iv_offset = 10 iv_length = 5 ). " Generate table with expected values after ordering generate_order( iv_token = 'A' iv_offset = 0 iv_length = 9 iv_text_tag = '' ). generate_order( iv_token = 'V' iv_offset = 10 iv_length = 5 iv_text_tag = '' ). " Generate table with expected values after extending generate_extend( iv_token = 'A' iv_offset = 0 iv_length = 9 iv_text_tag = '' ). generate_extend( iv_token = '.' iv_offset = 9 iv_length = 1 iv_text_tag = '' ). generate_extend( iv_token = 'V' iv_offset = 10 iv_length = 5 iv_text_tag = '' ). do_test( lv_line ). ENDMETHOD. ENDCLASS.