html event abstraction, phase 2 (action utils usage unification) (#3902)

* action utils improvements

* page unifications

* linter
This commit is contained in:
Alexander Tsybulsky 2020-09-19 12:02:01 +03:00 committed by GitHub
parent c264588ab2
commit 9574dca828
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 238 additions and 185 deletions

View File

@ -52,18 +52,24 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DB_EDIT IMPLEMENTATION.
METHOD dbcontent_decode. METHOD dbcontent_decode.
DATA: lt_fields TYPE tihttpnvp, DATA lt_fields TYPE tihttpnvp.
lv_string TYPE string.
lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
it_post_data = it_postdata
iv_upper_cased = abap_true ).
lv_string = zcl_abapgit_utils=>translate_postdata( it_postdata ). zcl_abapgit_html_action_utils=>get_field(
EXPORTING
lv_string = cl_http_utility=>unescape_url( lv_string ). iv_name = 'TYPE'
it_field = lt_fields
rs_content = zcl_abapgit_html_action_utils=>dbkey_decode( lv_string ). CHANGING
cg_field = rs_content-type ).
lt_fields = zcl_abapgit_html_action_utils=>parse_fields_upper_case_name( lv_string ). zcl_abapgit_html_action_utils=>get_field(
EXPORTING
iv_name = 'VALUE'
it_field = lt_fields
CHANGING
cg_field = rs_content-value ).
zcl_abapgit_html_action_utils=>get_field( zcl_abapgit_html_action_utils=>get_field(
EXPORTING EXPORTING
iv_name = 'XMLDATA' iv_name = 'XMLDATA'

View File

@ -93,7 +93,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_ADDONLINE IMPLEMENTATION.
DATA lt_form TYPE tihttpnvp. DATA lt_form TYPE tihttpnvp.
DATA ls_field LIKE LINE OF lt_form. DATA ls_field LIKE LINE OF lt_form.
lt_form = zcl_abapgit_html_action_utils=>parse_post_data( it_post_data ). lt_form = zcl_abapgit_html_action_utils=>parse_post_form_data( it_post_data ).
CREATE OBJECT ro_form_data. CREATE OBJECT ro_form_data.
LOOP AT lt_form INTO ls_field. LOOP AT lt_form INTO ls_field.

View File

@ -245,15 +245,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_BOVERVIEW IMPLEMENTATION.
METHOD decode_merge. METHOD decode_merge.
DATA: lv_string TYPE string, DATA lt_fields TYPE tihttpnvp.
lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields. FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
lv_string = zcl_abapgit_utils=>translate_postdata( it_postdata ). lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( it_postdata ).
lt_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_string ).
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'source'. READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'source'.
ASSERT sy-subrc = 0. ASSERT sy-subrc = 0.

View File

@ -177,19 +177,15 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION.
METHOD parse_commit_request. METHOD parse_commit_request.
CONSTANTS: lc_replace TYPE string VALUE '<<new>>'. DATA lt_fields TYPE tihttpnvp.
DATA: lv_string TYPE string,
lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS <lv_body> TYPE string. FIELD-SYMBOLS <lv_body> TYPE string.
CLEAR eg_fields. CLEAR eg_fields.
CONCATENATE LINES OF it_postdata INTO lv_string. lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN lv_string WITH lc_replace. it_post_data = it_postdata
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_newline IN lv_string WITH lc_replace. iv_upper_cased = abap_true ).
lt_fields = zcl_abapgit_html_action_utils=>parse_fields_upper_case_name( lv_string ).
zcl_abapgit_html_action_utils=>get_field( zcl_abapgit_html_action_utils=>get_field(
EXPORTING EXPORTING
@ -230,7 +226,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION.
ASSIGN COMPONENT 'BODY' OF STRUCTURE eg_fields TO <lv_body>. ASSIGN COMPONENT 'BODY' OF STRUCTURE eg_fields TO <lv_body>.
ASSERT <lv_body> IS ASSIGNED. ASSERT <lv_body> IS ASSIGNED.
REPLACE ALL OCCURRENCES OF lc_replace IN <lv_body> WITH zif_abapgit_definitions=>c_newline. REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN <lv_body> WITH zif_abapgit_definitions=>c_newline.
ENDMETHOD. ENDMETHOD.

View File

@ -112,36 +112,35 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_MERGE_RES IMPLEMENTATION.
METHOD apply_merged_content. METHOD apply_merged_content.
CONSTANTS: lc_replace TYPE string VALUE '<<new>>'. DATA:
BEGIN OF ls_filedata,
DATA: BEGIN OF ls_filedata,
merge_content TYPE string, merge_content TYPE string,
END OF ls_filedata. END OF ls_filedata,
DATA: lv_string TYPE string,
lt_fields TYPE tihttpnvp, lt_fields TYPE tihttpnvp,
lv_new_file_content TYPE xstring. lv_new_file_content TYPE xstring.
FIELD-SYMBOLS: <lv_postdata_line> LIKE LINE OF it_postdata, FIELD-SYMBOLS:
<ls_conflict> TYPE zif_abapgit_definitions=>ty_merge_conflict. <ls_conflict> TYPE zif_abapgit_definitions=>ty_merge_conflict.
LOOP AT it_postdata ASSIGNING <lv_postdata_line>. lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
lv_string = |{ lv_string }{ <lv_postdata_line> }|. it_post_data = it_postdata
ENDLOOP. iv_upper_cased = abap_true ).
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN lv_string WITH lc_replace.
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_newline IN lv_string WITH lc_replace.
lt_fields = zcl_abapgit_html_action_utils=>parse_fields_upper_case_name( lv_string ). zcl_abapgit_html_action_utils=>get_field(
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'MERGE_CONTENT' EXPORTING
iv_name = 'MERGE_CONTENT'
it_field = lt_fields it_field = lt_fields
CHANGING cg_field = ls_filedata ). CHANGING
ls_filedata-merge_content = cl_http_utility=>unescape_url( escaped = ls_filedata-merge_content ). cg_field = ls_filedata ).
REPLACE ALL OCCURRENCES OF lc_replace IN ls_filedata-merge_content WITH zif_abapgit_definitions=>c_newline.
REPLACE ALL OCCURRENCES
OF zif_abapgit_definitions=>c_crlf IN ls_filedata-merge_content WITH zif_abapgit_definitions=>c_newline.
lv_new_file_content = zcl_abapgit_convert=>string_to_xstring_utf8( ls_filedata-merge_content ). lv_new_file_content = zcl_abapgit_convert=>string_to_xstring_utf8( ls_filedata-merge_content ).
READ TABLE mt_conflicts ASSIGNING <ls_conflict> INDEX mv_current_conflict_index. READ TABLE mt_conflicts ASSIGNING <ls_conflict> INDEX mv_current_conflict_index.
<ls_conflict>-result_sha1 = zcl_abapgit_hash=>sha1( iv_type = zif_abapgit_definitions=>c_type-blob <ls_conflict>-result_sha1 = zcl_abapgit_hash=>sha1(
iv_type = zif_abapgit_definitions=>c_type-blob
iv_data = lv_new_file_content ). iv_data = lv_new_file_content ).
<ls_conflict>-result_data = lv_new_file_content. <ls_conflict>-result_data = lv_new_file_content.
mo_merge->resolve_conflict( <ls_conflict> ). mo_merge->resolve_conflict( <ls_conflict> ).

View File

@ -318,13 +318,12 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_PATCH IMPLEMENTATION.
METHOD apply_patch_from_form_fields. METHOD apply_patch_from_form_fields.
DATA: lv_string TYPE string, DATA:
lt_fields TYPE tihttpnvp, lt_fields TYPE tihttpnvp,
lv_add TYPE string, lv_add TYPE string,
lv_remove TYPE string. lv_remove TYPE string.
lv_string = zcl_abapgit_utils=>translate_postdata( it_postdata ). lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( it_postdata ).
lt_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_string ).
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = c_patch_action-add zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = c_patch_action-add
it_field = lt_fields it_field = lt_fields

View File

@ -54,11 +54,6 @@ CLASS zcl_abapgit_gui_page_repo_sett DEFINITION
!it_post_fields TYPE tihttpnvp !it_post_fields TYPE tihttpnvp
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
METHODS parse_post
IMPORTING
!it_postdata TYPE cnht_post_data_tab
RETURNING
VALUE(rt_post_fields) TYPE tihttpnvp .
METHODS render_dot_abapgit_reqs METHODS render_dot_abapgit_reqs
IMPORTING IMPORTING
ii_html TYPE REF TO zif_abapgit_html ii_html TYPE REF TO zif_abapgit_html
@ -90,16 +85,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD parse_post.
DATA lv_serialized_post_data TYPE string.
lv_serialized_post_data = zcl_abapgit_utils=>translate_postdata( it_postdata ).
rt_post_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_serialized_post_data ).
ENDMETHOD.
METHOD render_content. METHOD render_content.
CREATE OBJECT ri_html TYPE zcl_abapgit_html. CREATE OBJECT ri_html TYPE zcl_abapgit_html.
@ -352,7 +337,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_SETT IMPLEMENTATION.
DATA: lt_post_fields TYPE tihttpnvp, DATA: lt_post_fields TYPE tihttpnvp,
lv_msg TYPE string. lv_msg TYPE string.
lt_post_fields = parse_post( it_postdata ). lt_post_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( it_postdata ).
save_dot_abap( lt_post_fields ). save_dot_abap( lt_post_fields ).
save_remotes( lt_post_fields ). save_remotes( lt_post_fields ).

View File

@ -61,11 +61,6 @@ CLASS zcl_abapgit_gui_page_settings DEFINITION
IMPORTING IMPORTING
!it_post_fields TYPE tihttpnvp . !it_post_fields TYPE tihttpnvp .
METHODS validate_settings . METHODS validate_settings .
METHODS parse_post
IMPORTING
!it_postdata TYPE cnht_post_data_tab
RETURNING
VALUE(rt_post_fields) TYPE tihttpnvp .
METHODS persist_settings METHODS persist_settings
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
@ -124,16 +119,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD parse_post.
DATA lv_serialized_post_data TYPE string.
lv_serialized_post_data = zcl_abapgit_utils=>translate_postdata( it_postdata ).
rt_post_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_serialized_post_data ).
ENDMETHOD.
METHOD persist_settings. METHOD persist_settings.
DATA lo_settings_persistence TYPE REF TO zcl_abapgit_persist_settings. DATA lo_settings_persistence TYPE REF TO zcl_abapgit_persist_settings.
@ -719,7 +704,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_SETTINGS IMPLEMENTATION.
CASE ii_event->mv_action. CASE ii_event->mv_action.
WHEN c_action-save_settings. WHEN c_action-save_settings.
lt_post_fields = parse_post( ii_event->mt_postdata ). lt_post_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( ii_event->mt_postdata ).
post( lt_post_fields ). post( lt_post_fields ).
validate_settings( ). validate_settings( ).

View File

@ -587,16 +587,16 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
METHOD stage_selected. METHOD stage_selected.
DATA: lv_string TYPE string, DATA:
lt_fields TYPE tihttpnvp, lt_fields TYPE tihttpnvp,
ls_file TYPE zif_abapgit_definitions=>ty_file. ls_file TYPE zif_abapgit_definitions=>ty_file.
FIELD-SYMBOLS: <ls_file> LIKE LINE OF ms_files-local, FIELD-SYMBOLS:
<ls_file> LIKE LINE OF ms_files-local,
<ls_status> LIKE LINE OF ms_files-status, <ls_status> LIKE LINE OF ms_files-status,
<ls_item> LIKE LINE OF lt_fields. <ls_item> LIKE LINE OF lt_fields.
lv_string = zcl_abapgit_utils=>translate_postdata( it_postdata ). lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( it_postdata ).
lt_fields = zcl_abapgit_html_action_utils=>parse_fields( lv_string ).
IF lines( lt_fields ) = 0. IF lines( lt_fields ) = 0.
zcx_abapgit_exception=>raise( 'process_stage_list: empty list' ). zcx_abapgit_exception=>raise( 'process_stage_list: empty list' ).
@ -687,7 +687,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION.
WHEN c_action-stage_filter. WHEN c_action-stage_filter.
lt_fields = zcl_abapgit_html_action_utils=>parse_fields( concat_lines_of( table = ii_event->mt_postdata ) ). lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( ii_event->mt_postdata ).
zcl_abapgit_html_action_utils=>get_field( zcl_abapgit_html_action_utils=>get_field(
EXPORTING EXPORTING

View File

@ -153,19 +153,15 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_TAG IMPLEMENTATION.
METHOD parse_tag_request. METHOD parse_tag_request.
CONSTANTS: lc_replace TYPE string VALUE '<<new>>'. DATA lt_fields TYPE tihttpnvp.
DATA: lv_string TYPE string,
lt_fields TYPE tihttpnvp.
FIELD-SYMBOLS <lv_body> TYPE string. FIELD-SYMBOLS <lv_body> TYPE string.
CLEAR eg_fields. CLEAR eg_fields.
lv_string = zcl_abapgit_utils=>translate_postdata( it_postdata ). lt_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN lv_string WITH lc_replace. it_post_data = it_postdata
REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_newline IN lv_string WITH lc_replace. iv_upper_cased = abap_true ).
lt_fields = zcl_abapgit_html_action_utils=>parse_fields_upper_case_name( lv_string ).
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'SHA1' zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'SHA1'
it_field = lt_fields it_field = lt_fields
@ -188,7 +184,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_TAG IMPLEMENTATION.
ASSIGN COMPONENT 'BODY' OF STRUCTURE eg_fields TO <lv_body>. ASSIGN COMPONENT 'BODY' OF STRUCTURE eg_fields TO <lv_body>.
ASSERT <lv_body> IS ASSIGNED. ASSERT <lv_body> IS ASSIGNED.
REPLACE ALL OCCURRENCES OF lc_replace IN <lv_body> WITH zif_abapgit_definitions=>c_newline. REPLACE ALL OCCURRENCES OF zif_abapgit_definitions=>c_crlf IN <lv_body> WITH zif_abapgit_definitions=>c_newline.
ENDMETHOD. ENDMETHOD.

View File

@ -4,9 +4,10 @@ CLASS zcl_abapgit_html_action_utils DEFINITION
PUBLIC SECTION. PUBLIC SECTION.
CLASS-METHODS parse_post_data CLASS-METHODS parse_post_form_data
IMPORTING IMPORTING
!it_post_data TYPE cnht_post_data_tab !it_post_data TYPE cnht_post_data_tab
!iv_upper_cased TYPE abap_bool DEFAULT abap_false
RETURNING RETURNING
VALUE(rt_fields) TYPE tihttpnvp . VALUE(rt_fields) TYPE tihttpnvp .
CLASS-METHODS parse_fields CLASS-METHODS parse_fields
@ -19,6 +20,12 @@ CLASS zcl_abapgit_html_action_utils DEFINITION
!iv_string TYPE clike !iv_string TYPE clike
RETURNING RETURNING
VALUE(rt_fields) TYPE tihttpnvp . VALUE(rt_fields) TYPE tihttpnvp .
CLASS-METHODS translate_postdata
IMPORTING
!it_postdata TYPE cnht_post_data_tab
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS get_field CLASS-METHODS get_field
IMPORTING IMPORTING
!iv_name TYPE string !iv_name TYPE string
@ -330,27 +337,33 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
METHOD parse_fields. METHOD parse_fields.
DATA: lt_substrings TYPE STANDARD TABLE OF string WITH DEFAULT KEY, DATA:
lt_substrings TYPE string_table,
ls_field LIKE LINE OF rt_fields. ls_field LIKE LINE OF rt_fields.
FIELD-SYMBOLS: <lv_substring> LIKE LINE OF lt_substrings. FIELD-SYMBOLS <lv_substring> LIKE LINE OF lt_substrings.
SPLIT iv_string AT '&' INTO TABLE lt_substrings. SPLIT iv_string AT '&' INTO TABLE lt_substrings.
LOOP AT lt_substrings ASSIGNING <lv_substring>. LOOP AT lt_substrings ASSIGNING <lv_substring>.
CLEAR: ls_field. CLEAR ls_field.
ls_field-name = substring_before( val = <lv_substring> ls_field-name = substring_before(
val = <lv_substring>
sub = '=' ). sub = '=' ).
ls_field-name = unescape( ls_field-name ). ls_field-name = unescape( ls_field-name ).
ls_field-value = substring_after( val = <lv_substring> ls_field-value = substring_after(
val = <lv_substring>
sub = '=' ). sub = '=' ).
ls_field-value = unescape( ls_field-value ). ls_field-value = unescape( ls_field-value ).
INSERT ls_field INTO TABLE rt_fields. IF ls_field IS INITIAL. " Not a field with proper structure
CONTINUE.
ENDIF.
APPEND ls_field TO rt_fields.
ENDLOOP. ENDLOOP.
@ -365,12 +378,16 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD parse_post_data. METHOD parse_post_form_data.
DATA lv_serialized_post_data TYPE string. DATA lv_serialized_post_data TYPE string.
CONCATENATE LINES OF it_post_data INTO lv_serialized_post_data. lv_serialized_post_data = translate_postdata( it_post_data ).
IF iv_upper_cased = abap_true.
rt_fields = parse_fields_upper_case_name( lv_serialized_post_data ).
ELSE.
rt_fields = parse_fields( lv_serialized_post_data ). rt_fields = parse_fields( lv_serialized_post_data ).
ENDIF.
ENDMETHOD. ENDMETHOD.
@ -391,6 +408,33 @@ CLASS ZCL_ABAPGIT_HTML_ACTION_UTILS IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD translate_postdata.
DATA: lt_post_data TYPE cnht_post_data_tab,
ls_last_line TYPE cnht_post_data_line,
lv_last_line_index TYPE i.
IF it_postdata IS INITIAL.
RETURN. "Nothing to do
ENDIF.
lt_post_data = it_postdata.
"Save the last line for separate merge, because we don't need its trailing spaces
WHILE ls_last_line IS INITIAL.
lv_last_line_index = lines( lt_post_data ).
READ TABLE lt_post_data INTO ls_last_line INDEX lv_last_line_index.
DELETE lt_post_data INDEX lv_last_line_index.
ENDWHILE.
CONCATENATE LINES OF lt_post_data INTO rv_string
IN CHARACTER MODE RESPECTING BLANKS.
CONCATENATE rv_string ls_last_line INTO rv_string
IN CHARACTER MODE.
ENDMETHOD.
METHOD unescape. METHOD unescape.
* do not use cl_http_utility as it does strange things with the encoding * do not use cl_http_utility as it does strange things with the encoding
rv_string = iv_string. rv_string = iv_string.

View File

@ -9,6 +9,8 @@ CLASS ltcl_html_action_utils DEFINITION FOR TESTING RISK LEVEL HARMLESS
METHODS parse_fields_advanced_case FOR TESTING. METHODS parse_fields_advanced_case FOR TESTING.
METHODS parse_fields_unescape FOR TESTING. METHODS parse_fields_unescape FOR TESTING.
METHODS parse_fields_german_umlauts FOR TESTING. METHODS parse_fields_german_umlauts FOR TESTING.
METHODS parse_fields_wrong_format FOR TESTING.
METHODS parse_post_form_data FOR TESTING.
PRIVATE SECTION. PRIVATE SECTION.
@ -36,6 +38,9 @@ CLASS ltcl_html_action_utils DEFINITION FOR TESTING RISK LEVEL HARMLESS
iv_index TYPE i iv_index TYPE i
iv_name TYPE string iv_name TYPE string
iv_value TYPE string. iv_value TYPE string.
METHODS _then_field_count_should_be
IMPORTING
iv_count TYPE i.
CLASS-METHODS _hex_to_char CLASS-METHODS _hex_to_char
IMPORTING IMPORTING
@ -65,12 +70,18 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
ls_answer-value = 'TEST'. ls_answer-value = 'TEST'.
APPEND ls_answer TO lt_fields. APPEND ls_answer TO lt_fields.
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'NAME' zcl_abapgit_html_action_utils=>get_field(
EXPORTING
iv_name = 'NAME'
it_field = lt_fields it_field = lt_fields
CHANGING cg_field = ls_field-value ). CHANGING
zcl_abapgit_html_action_utils=>get_field( EXPORTING iv_name = 'NAME' cg_field = ls_field-value ).
zcl_abapgit_html_action_utils=>get_field(
EXPORTING
iv_name = 'NAME'
it_field = lt_fields it_field = lt_fields
CHANGING cg_field = ls_field ). CHANGING
cg_field = ls_field ).
ls_answer-name = 'TEST'. ls_answer-name = 'TEST'.
ls_answer-value = 'TEST'. ls_answer-value = 'TEST'.
@ -208,22 +219,33 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
FIELD-SYMBOLS: <ls_parsed_field> LIKE LINE OF mt_parsed_fields. FIELD-SYMBOLS: <ls_parsed_field> LIKE LINE OF mt_parsed_fields.
READ TABLE mt_parsed_fields ASSIGNING <ls_parsed_field> READ TABLE mt_parsed_fields ASSIGNING <ls_parsed_field> INDEX iv_index.
INDEX iv_index.
cl_abap_unit_assert=>assert_subrc( exp = 0 cl_abap_unit_assert=>assert_subrc(
exp = 0
msg = |No parsed field found at index { iv_index }| ). msg = |No parsed field found at index { iv_index }| ).
cl_abap_unit_assert=>assert_equals( act = <ls_parsed_field>-name cl_abap_unit_assert=>assert_equals(
act = <ls_parsed_field>-name
exp = iv_name exp = iv_name
msg = |Name at index { iv_index } should be { iv_name }| ). msg = |Name at index { iv_index } should be { iv_name }| ).
cl_abap_unit_assert=>assert_equals( act = <ls_parsed_field>-value cl_abap_unit_assert=>assert_equals(
act = <ls_parsed_field>-value
exp = iv_value exp = iv_value
msg = |Value at index { iv_index } should be { iv_value }| ). msg = |Value at index { iv_index } should be { iv_value }| ).
ENDMETHOD. ENDMETHOD.
METHOD _then_field_count_should_be.
cl_abap_unit_assert=>assert_equals(
act = lines( mt_parsed_fields )
exp = iv_count
msg = |Field count { lines( mt_parsed_fields ) } should be { iv_count }| ).
ENDMETHOD.
METHOD _hex_to_char. METHOD _hex_to_char.
DATA lo_conv TYPE REF TO cl_abap_conv_in_ce. DATA lo_conv TYPE REF TO cl_abap_conv_in_ce.
@ -233,4 +255,62 @@ CLASS ltcl_html_action_utils IMPLEMENTATION.
ENDMETHOD. ENDMETHOD.
METHOD parse_fields_wrong_format.
_given_string_is( `some_query_string_without_param_structure` ).
_when_fields_are_parsed( ).
_then_field_count_should_be( 0 ).
_given_string_is( `some_query_string_without_param_structure&a=b` ).
_when_fields_are_parsed( ).
_then_field_count_should_be( 1 ).
_then_fields_should_be(
iv_index = 1
iv_name = 'A'
iv_value = 'b' ).
ENDMETHOD.
METHOD parse_post_form_data.
DATA lt_post_data TYPE cnht_post_data_tab.
DATA lv_line LIKE LINE OF lt_post_data.
DATA lv_long_name LIKE LINE OF lt_post_data.
DATA lv_size TYPE i.
DESCRIBE FIELD lv_line LENGTH lv_size IN CHARACTER MODE.
lv_long_name = repeat(
val = 'x'
occ = lv_size - 4 ).
lv_line = 'a=b&' && lv_long_name.
APPEND lv_line TO lt_post_data.
APPEND '=y' TO lt_post_data.
mt_parsed_fields = zcl_abapgit_html_action_utils=>parse_post_form_data( lt_post_data ).
_then_field_count_should_be( 2 ).
_then_fields_should_be(
iv_index = 1
iv_name = 'a'
iv_value = 'b' ).
_then_fields_should_be(
iv_index = 2
iv_name = |{ lv_long_name }|
iv_value = 'y' ).
mt_parsed_fields = zcl_abapgit_html_action_utils=>parse_post_form_data(
it_post_data = lt_post_data
iv_upper_cased = abap_true ).
_then_field_count_should_be( 2 ).
_then_fields_should_be(
iv_index = 1
iv_name = 'A'
iv_value = 'b' ).
_then_fields_should_be(
iv_index = 2
iv_name = |{ to_upper( lv_long_name ) }|
iv_value = 'y' ).
ENDMETHOD.
ENDCLASS. ENDCLASS.

View File

@ -19,18 +19,29 @@ CLASS zcl_abapgit_utils DEFINITION
!ev_time TYPE zif_abapgit_definitions=>ty_commit-time !ev_time TYPE zif_abapgit_definitions=>ty_commit-time
RAISING RAISING
zcx_abapgit_exception . zcx_abapgit_exception .
CLASS-METHODS translate_postdata
IMPORTING
!it_postdata TYPE cnht_post_data_tab
RETURNING
VALUE(rv_string) TYPE string .
PROTECTED SECTION. PROTECTED SECTION.
PRIVATE SECTION. PRIVATE SECTION.
ENDCLASS. ENDCLASS.
CLASS zcl_abapgit_utils IMPLEMENTATION. CLASS ZCL_ABAPGIT_UTILS IMPLEMENTATION.
METHOD extract_author_data.
" unix time stamps are in same time zone, so ignore the zone
FIND REGEX zif_abapgit_definitions=>c_author_regex IN iv_author
SUBMATCHES
ev_author
ev_email
ev_time.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error author regex value='{ iv_author }'| ).
ENDIF.
ENDMETHOD.
METHOD is_binary. METHOD is_binary.
@ -61,48 +72,4 @@ CLASS zcl_abapgit_utils IMPLEMENTATION.
ENDDO. ENDDO.
ENDMETHOD. ENDMETHOD.
METHOD extract_author_data.
" unix time stamps are in same time zone, so ignore the zone
FIND REGEX zif_abapgit_definitions=>c_author_regex IN iv_author
SUBMATCHES
ev_author
ev_email
ev_time.
IF sy-subrc <> 0.
zcx_abapgit_exception=>raise( |Error author regex value='{ iv_author }'| ).
ENDIF.
ENDMETHOD.
METHOD translate_postdata.
DATA: lt_post_data TYPE cnht_post_data_tab,
ls_last_line TYPE cnht_post_data_line,
lv_last_line_index TYPE i.
IF it_postdata IS INITIAL.
"Nothing to do
RETURN.
ENDIF.
lt_post_data = it_postdata.
"Save the last line for separate merge, because we don't need its trailing spaces
WHILE ls_last_line IS INITIAL.
lv_last_line_index = lines( lt_post_data ).
READ TABLE lt_post_data INTO ls_last_line INDEX lv_last_line_index.
DELETE lt_post_data INDEX lv_last_line_index.
ENDWHILE.
CONCATENATE LINES OF lt_post_data INTO rv_string
IN CHARACTER MODE RESPECTING BLANKS.
CONCATENATE rv_string ls_last_line INTO rv_string
IN CHARACTER MODE.
ENDMETHOD.
ENDCLASS. ENDCLASS.