mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
Merge branch 'main' into HTTP
This commit is contained in:
commit
1ad6d92a38
14
package.json
14
package.json
|
@ -23,14 +23,14 @@
|
|||
]
|
||||
},
|
||||
"devDependencies": {
|
||||
"@abaplint/cli": "^2.113.31",
|
||||
"@abaplint/cli": "^2.113.82",
|
||||
"@abaplint/database-sqlite": "^2.10.20",
|
||||
"@abaplint/runtime": "^2.10.20",
|
||||
"express": "^4.21.1",
|
||||
"@abaplint/transpiler-cli": "^2.10.20",
|
||||
"globals": "^15.11.0",
|
||||
"@abaplint/runtime": "^2.10.23",
|
||||
"express": "^4.21.2",
|
||||
"@abaplint/transpiler-cli": "^2.10.23",
|
||||
"globals": "^15.13.0",
|
||||
"abapmerge": "^0.16.6",
|
||||
"c8": "^10.1.2",
|
||||
"eslint": "^9.13.0"
|
||||
"c8": "^10.1.3",
|
||||
"eslint": "^9.17.0"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,8 @@ CLASS lcl_environment IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~get_basis_release.
|
||||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~get_available_user_sessions.
|
||||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~get_system_language_filter.
|
||||
ENDMETHOD.
|
||||
METHOD zif_abapgit_environment~is_merged.
|
||||
|
|
162
src/env/zcl_abapgit_environment.clas.abap
vendored
162
src/env/zcl_abapgit_environment.clas.abap
vendored
|
@ -81,6 +81,26 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~get_available_user_sessions.
|
||||
|
||||
DATA:
|
||||
lv_act_sessions TYPE i,
|
||||
lv_max_sessions TYPE i,
|
||||
lv_subrc TYPE sy-subrc.
|
||||
|
||||
CALL FUNCTION 'TH_USER_INFO'
|
||||
IMPORTING
|
||||
act_sessions = lv_act_sessions
|
||||
max_sessions = lv_max_sessions
|
||||
rc = lv_subrc.
|
||||
|
||||
IF lv_subrc = 0.
|
||||
rv_sessions = lv_max_sessions - lv_act_sessions.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~get_basis_release.
|
||||
|
||||
SELECT SINGLE release extrelease FROM cvers INTO (rs_result-release, rs_result-sp)
|
||||
|
@ -89,6 +109,78 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~get_system_language_filter.
|
||||
DATA lv_translation_detective_lang TYPE spras.
|
||||
DATA lv_pseudo_translation_language TYPE spras.
|
||||
FIELD-SYMBOLS <ls_system_language_filter> LIKE LINE OF rt_system_language_filter.
|
||||
|
||||
" Translation Object Detective
|
||||
" https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html
|
||||
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
|
||||
EXPORTING
|
||||
input = '1Q'
|
||||
IMPORTING
|
||||
output = lv_translation_detective_lang
|
||||
EXCEPTIONS
|
||||
unknown_language = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
" The language for Translation Object Detective was not setup
|
||||
ENDIF.
|
||||
IF NOT lv_translation_detective_lang IS INITIAL.
|
||||
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
|
||||
<ls_system_language_filter>-sign = 'E'.
|
||||
<ls_system_language_filter>-option = 'EQ'.
|
||||
<ls_system_language_filter>-low = lv_translation_detective_lang.
|
||||
ENDIF.
|
||||
" 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments
|
||||
" https://launchpad.support.sap.com/#/notes/1943470
|
||||
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
|
||||
EXPORTING
|
||||
input = '2Q'
|
||||
IMPORTING
|
||||
output = lv_pseudo_translation_language
|
||||
EXCEPTIONS
|
||||
unknown_language = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
" The language for Pseudo Translation was not setup
|
||||
ENDIF.
|
||||
IF NOT lv_pseudo_translation_language IS INITIAL.
|
||||
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
|
||||
<ls_system_language_filter>-sign = 'E'.
|
||||
<ls_system_language_filter>-option = 'EQ'.
|
||||
<ls_system_language_filter>-low = lv_pseudo_translation_language.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~init_parallel_processing.
|
||||
|
||||
DATA: lv_group TYPE rzlli_apcl.
|
||||
|
||||
lv_group = iv_group.
|
||||
|
||||
" SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called
|
||||
" multiple times in same session
|
||||
CALL FUNCTION 'SPBT_INITIALIZE'
|
||||
EXPORTING
|
||||
group_name = lv_group
|
||||
IMPORTING
|
||||
free_pbt_wps = rv_free_work_processes
|
||||
EXCEPTIONS
|
||||
invalid_group_name = 1
|
||||
internal_error = 2
|
||||
pbt_env_already_initialized = 3
|
||||
currently_no_resources_avail = 4
|
||||
no_pbt_resources_found = 5
|
||||
cant_init_different_pbt_groups = 6
|
||||
OTHERS = 7 ##FM_SUBRC_OK.
|
||||
" If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD zif_abapgit_environment~is_merged.
|
||||
DATA lr_marker TYPE REF TO data ##NEEDED.
|
||||
|
||||
|
@ -155,50 +247,6 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_environment~get_system_language_filter.
|
||||
DATA lv_translation_detective_lang TYPE spras.
|
||||
DATA lv_pseudo_translation_language TYPE spras.
|
||||
FIELD-SYMBOLS <ls_system_language_filter> LIKE LINE OF rt_system_language_filter.
|
||||
|
||||
" Translation Object Detective
|
||||
" https://help.sap.com/docs/ABAP_PLATFORM_NEW/ceb25152cb0d4adba664cebea2bf4670/88a3d3cbccf64601975acabaccdfde45.html
|
||||
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
|
||||
EXPORTING
|
||||
input = '1Q'
|
||||
IMPORTING
|
||||
output = lv_translation_detective_lang
|
||||
EXCEPTIONS
|
||||
unknown_language = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
" The language for Translation Object Detective was not setup
|
||||
ENDIF.
|
||||
IF NOT lv_translation_detective_lang IS INITIAL.
|
||||
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
|
||||
<ls_system_language_filter>-sign = 'E'.
|
||||
<ls_system_language_filter>-option = 'EQ'.
|
||||
<ls_system_language_filter>-low = lv_translation_detective_lang.
|
||||
ENDIF.
|
||||
" 1943470 - Using technical language key 2Q to create pseudo-translations of ABAP developments
|
||||
" https://launchpad.support.sap.com/#/notes/1943470
|
||||
CALL FUNCTION 'CONVERSION_EXIT_ISOLA_INPUT'
|
||||
EXPORTING
|
||||
input = '2Q'
|
||||
IMPORTING
|
||||
output = lv_pseudo_translation_language
|
||||
EXCEPTIONS
|
||||
unknown_language = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
" The language for Pseudo Translation was not setup
|
||||
ENDIF.
|
||||
IF NOT lv_pseudo_translation_language IS INITIAL.
|
||||
APPEND INITIAL LINE TO rt_system_language_filter ASSIGNING <ls_system_language_filter>.
|
||||
<ls_system_language_filter>-sign = 'E'.
|
||||
<ls_system_language_filter>-option = 'EQ'.
|
||||
<ls_system_language_filter>-low = lv_pseudo_translation_language.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_environment~is_variant_maintenance.
|
||||
|
||||
|
@ -212,30 +260,4 @@ CLASS zcl_abapgit_environment IMPLEMENTATION.
|
|||
rv_is_variant_maintenance = boolc( lines( lt_variscreens ) > 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_environment~init_parallel_processing.
|
||||
|
||||
DATA: lv_group TYPE rzlli_apcl.
|
||||
|
||||
lv_group = iv_group.
|
||||
|
||||
" SPBT_INITIALIZE gives error PBT_ENV_ALREADY_INITIALIZED if called
|
||||
" multiple times in same session
|
||||
CALL FUNCTION 'SPBT_INITIALIZE'
|
||||
EXPORTING
|
||||
group_name = lv_group
|
||||
IMPORTING
|
||||
free_pbt_wps = rv_free_work_processes
|
||||
EXCEPTIONS
|
||||
invalid_group_name = 1
|
||||
internal_error = 2
|
||||
pbt_env_already_initialized = 3
|
||||
currently_no_resources_avail = 4
|
||||
no_pbt_resources_found = 5
|
||||
cant_init_different_pbt_groups = 6
|
||||
OTHERS = 7 ##FM_SUBRC_OK.
|
||||
" If SPBT_INITIALIZE fails, check transactions RZ12, SM50, SM21, SARFC
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
|
3
src/env/zif_abapgit_environment.intf.abap
vendored
3
src/env/zif_abapgit_environment.intf.abap
vendored
|
@ -39,5 +39,8 @@ INTERFACE zif_abapgit_environment
|
|||
iv_group TYPE clike
|
||||
RETURNING
|
||||
VALUE(rv_free_work_processes) TYPE i.
|
||||
METHODS get_available_user_sessions
|
||||
RETURNING
|
||||
VALUE(rv_sessions) TYPE i.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
|
|
@ -280,6 +280,7 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
|
|||
|
||||
METHOD determine_max_processes.
|
||||
DATA: li_exit TYPE REF TO zif_abapgit_exit.
|
||||
DATA lv_available_sessions TYPE i.
|
||||
|
||||
IF iv_force_sequential = abap_true.
|
||||
rv_processes = 1.
|
||||
|
@ -319,6 +320,17 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
|
|||
|
||||
ASSERT rv_processes >= 1. " check exit above
|
||||
|
||||
" Avoid going over the maximum available user sessions
|
||||
IF sy-batch IS INITIAL.
|
||||
lv_available_sessions = zcl_abapgit_factory=>get_environment( )->get_available_user_sessions( ).
|
||||
|
||||
IF rv_processes > lv_available_sessions AND lv_available_sessions <> 0.
|
||||
rv_processes = lv_available_sessions.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ASSERT rv_processes >= 1.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
|
@ -70,12 +70,16 @@ CLASS ltd_environment DEFINITION FINAL FOR TESTING
|
|||
set_is_merged
|
||||
IMPORTING iv_is_merged TYPE abap_bool,
|
||||
|
||||
set_available_sessions
|
||||
IMPORTING iv_available_sessions TYPE i,
|
||||
|
||||
set_free_work_processes
|
||||
IMPORTING iv_free_work_processes TYPE i.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA:
|
||||
mv_is_merged TYPE abap_bool,
|
||||
mv_available_sessions TYPE i,
|
||||
mv_free_work_processes TYPE i.
|
||||
|
||||
ENDCLASS.
|
||||
|
@ -89,6 +93,10 @@ CLASS ltd_environment IMPLEMENTATION.
|
|||
METHOD zif_abapgit_environment~get_basis_release.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_environment~get_available_user_sessions.
|
||||
rv_sessions = mv_available_sessions.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD zif_abapgit_environment~get_system_language_filter.
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -116,11 +124,16 @@ CLASS ltd_environment IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
METHOD set_is_merged.
|
||||
me->mv_is_merged = iv_is_merged.
|
||||
mv_is_merged = iv_is_merged.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD set_available_sessions.
|
||||
mv_available_sessions = iv_available_sessions.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_free_work_processes.
|
||||
me->mv_free_work_processes = iv_free_work_processes.
|
||||
mv_free_work_processes = iv_free_work_processes.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
@ -255,6 +268,7 @@ CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LE
|
|||
determine_max_processes_no_pp FOR TESTING RAISING zcx_abapgit_exception,
|
||||
determine_max_processes_merged FOR TESTING RAISING zcx_abapgit_exception,
|
||||
determine_max_processes_exit FOR TESTING RAISING zcx_abapgit_exception,
|
||||
determine_max_processes_capped FOR TESTING RAISING zcx_abapgit_exception,
|
||||
force FOR TESTING RAISING zcx_abapgit_exception,
|
||||
|
||||
teardown,
|
||||
|
@ -267,6 +281,10 @@ CLASS ltcl_determine_max_processes DEFINITION FOR TESTING DURATION SHORT RISK LE
|
|||
IMPORTING
|
||||
iv_is_merged TYPE abap_bool,
|
||||
|
||||
given_available_sessions
|
||||
IMPORTING
|
||||
iv_available_sessions TYPE i,
|
||||
|
||||
given_free_work_processes
|
||||
IMPORTING
|
||||
iv_free_work_processes TYPE i,
|
||||
|
@ -390,6 +408,19 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD determine_max_processes_capped.
|
||||
|
||||
given_parallel_proc_disabled( abap_false ).
|
||||
given_is_merged( abap_false ).
|
||||
given_free_work_processes( 50 ). " big system
|
||||
given_available_sessions( 10 ). " but user session is capped
|
||||
|
||||
when_determine_max_processes( ).
|
||||
|
||||
then_we_shd_have_n_processes( 10 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD force.
|
||||
|
||||
|
@ -413,6 +444,12 @@ CLASS ltcl_determine_max_processes IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD given_available_sessions.
|
||||
|
||||
mo_environment_double->set_available_sessions( iv_available_sessions ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD given_free_work_processes.
|
||||
|
||||
|
|
|
@ -48,6 +48,7 @@ CLASS zcl_abapgit_html DEFINITION
|
|||
within_style TYPE abap_bool,
|
||||
within_js TYPE abap_bool,
|
||||
within_textarea TYPE abap_bool,
|
||||
within_pre TYPE abap_bool,
|
||||
indent TYPE i,
|
||||
indent_str TYPE string,
|
||||
END OF ty_indent_context .
|
||||
|
@ -59,6 +60,8 @@ CLASS zcl_abapgit_html DEFINITION
|
|||
script_close TYPE abap_bool,
|
||||
textarea_open TYPE abap_bool,
|
||||
textarea_close TYPE abap_bool,
|
||||
pre_open TYPE abap_bool,
|
||||
pre_close TYPE abap_bool,
|
||||
tag_close TYPE abap_bool,
|
||||
curly_close TYPE abap_bool,
|
||||
openings TYPE i,
|
||||
|
@ -85,7 +88,7 @@ ENDCLASS.
|
|||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
|
||||
CLASS zcl_abapgit_html IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD checkbox.
|
||||
|
@ -120,10 +123,6 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_debug_mode.
|
||||
gv_debug_mode = iv_mode.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD create.
|
||||
CREATE OBJECT ri_instance TYPE zcl_abapgit_html.
|
||||
IF iv_initial_chunk IS NOT INITIAL.
|
||||
|
@ -181,6 +180,17 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
|
|||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
" No indent for pre tags
|
||||
IF ls_study-pre_open = abap_true.
|
||||
cs_context-within_pre = abap_true.
|
||||
RETURN.
|
||||
ELSEIF ls_study-pre_close = abap_true.
|
||||
cs_context-within_pre = abap_false.
|
||||
RETURN.
|
||||
ELSEIF cs_context-within_pre = abap_true.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
" First closing tag - shift back exceptionally
|
||||
IF ( ls_study-script_close = abap_true
|
||||
OR ls_study-style_close = abap_true
|
||||
|
@ -239,6 +249,11 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD set_debug_mode.
|
||||
gv_debug_mode = iv_mode.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD study_line.
|
||||
|
||||
DATA: lv_line TYPE string,
|
||||
|
@ -309,6 +324,16 @@ CLASS ZCL_ABAPGIT_HTML IMPLEMENTATION.
|
|||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
" Pre (same assumptions as above)
|
||||
IF is_context-within_pre = abap_true AND lv_len >= 5 AND lv_line(5) = '</PRE'.
|
||||
rs_result-pre_close = abap_true.
|
||||
ELSEIF is_context-within_pre = abap_false AND lv_len >= 4 AND lv_line(4) = '<PRE'.
|
||||
FIND FIRST OCCURRENCE OF '</PRE' IN lv_line.
|
||||
IF sy-subrc > 0. " Not found
|
||||
rs_result-pre_open = abap_true.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
|
@ -34,6 +34,8 @@ CLASS ltcl_html DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|||
indent3 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
indent4 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
indent5 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
indent6 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
indent7 FOR TESTING RAISING zcx_abapgit_exception,
|
||||
style1 FOR TESTING RAISING zcx_abapgit_exception.
|
||||
|
||||
METHODS:
|
||||
|
@ -130,6 +132,59 @@ CLASS ltcl_html IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD indent6.
|
||||
|
||||
" Content of textarea must not be indented
|
||||
DATA lv_exp TYPE string.
|
||||
|
||||
mo_html->add( '<td>' ).
|
||||
mo_html->add( '<textarea name="body" rows="10" cols="72">' ).
|
||||
mo_html->add( 'Some default' ).
|
||||
mo_html->add( 'content' ).
|
||||
mo_html->add( '</textarea>' ).
|
||||
mo_html->add( '</td>' ).
|
||||
|
||||
lv_exp = '<td>' && cl_abap_char_utilities=>newline &&
|
||||
'<textarea name="body" rows="10" cols="72">' && cl_abap_char_utilities=>newline &&
|
||||
'Some default' && cl_abap_char_utilities=>newline &&
|
||||
'content' && cl_abap_char_utilities=>newline &&
|
||||
'</textarea>' && cl_abap_char_utilities=>newline &&
|
||||
'</td>'.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_html->render( )
|
||||
exp = lv_exp ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD indent7.
|
||||
|
||||
" Content of pre tag must not be indented
|
||||
DATA lv_exp TYPE string.
|
||||
|
||||
mo_html->add( '<td>' ).
|
||||
mo_html->add( '<pre>' ).
|
||||
mo_html->add( 'Do not change' ).
|
||||
mo_html->add( ' the indent' ).
|
||||
mo_html->add( ' here' ).
|
||||
mo_html->add( '</pre>' ).
|
||||
mo_html->add( '</td>' ).
|
||||
|
||||
lv_exp = '<td>' && cl_abap_char_utilities=>newline &&
|
||||
'<pre>' && cl_abap_char_utilities=>newline &&
|
||||
'Do not change' && cl_abap_char_utilities=>newline &&
|
||||
' the indent' && cl_abap_char_utilities=>newline &&
|
||||
' here' && cl_abap_char_utilities=>newline &&
|
||||
'</pre>' && cl_abap_char_utilities=>newline &&
|
||||
'</td>'.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_html->render( )
|
||||
exp = lv_exp ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD style1.
|
||||
|
||||
DATA lv_exp TYPE string.
|
||||
|
|
|
@ -85,7 +85,7 @@ CLASS zcl_abapgit_convert DEFINITION
|
|||
VALUE(rv_xstr) TYPE xstring .
|
||||
CLASS-METHODS xstring_to_bintab
|
||||
IMPORTING
|
||||
!iv_xstr TYPE xstring
|
||||
!iv_xstr TYPE xsequence
|
||||
EXPORTING
|
||||
!ev_size TYPE i
|
||||
!et_bintab TYPE STANDARD TABLE .
|
||||
|
@ -144,6 +144,7 @@ ENDCLASS.
|
|||
|
||||
CLASS zcl_abapgit_convert IMPLEMENTATION.
|
||||
|
||||
|
||||
METHOD base64_to_xstring.
|
||||
|
||||
rv_xstr = cl_http_utility=>decode_x_base64( iv_base64 ).
|
||||
|
@ -207,32 +208,6 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD language_sap1_to_bcp47.
|
||||
DATA lv_converter_instance TYPE REF TO object.
|
||||
DATA lv_converter_class_name TYPE string VALUE `CL_AFF_LANGUAGE_CONVERTER`.
|
||||
|
||||
TRY.
|
||||
CALL METHOD (lv_converter_class_name)=>create_instance
|
||||
RECEIVING
|
||||
result = lv_converter_instance.
|
||||
|
||||
TRY.
|
||||
CALL METHOD lv_converter_instance->(`IF_AFF_LANGUAGE_CONVERTER~SAP1_TO_BCP47`)
|
||||
EXPORTING
|
||||
language = im_lang_sap1
|
||||
RECEIVING
|
||||
result = re_lang_bcp47.
|
||||
CATCH cx_static_check.
|
||||
RAISE no_assignment.
|
||||
ENDTRY.
|
||||
CATCH cx_sy_dyn_call_error.
|
||||
TRY.
|
||||
re_lang_bcp47 = lcl_bcp47_language_table=>sap1_to_bcp47( im_lang_sap1 ).
|
||||
CATCH zcx_abapgit_exception.
|
||||
RAISE no_assignment.
|
||||
ENDTRY.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD language_bcp47_to_sap1.
|
||||
DATA lv_converter_instance TYPE REF TO object.
|
||||
|
@ -289,6 +264,35 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD language_sap1_to_bcp47.
|
||||
DATA lv_converter_instance TYPE REF TO object.
|
||||
DATA lv_converter_class_name TYPE string VALUE `CL_AFF_LANGUAGE_CONVERTER`.
|
||||
|
||||
TRY.
|
||||
CALL METHOD (lv_converter_class_name)=>create_instance
|
||||
RECEIVING
|
||||
result = lv_converter_instance.
|
||||
|
||||
TRY.
|
||||
CALL METHOD lv_converter_instance->(`IF_AFF_LANGUAGE_CONVERTER~SAP1_TO_BCP47`)
|
||||
EXPORTING
|
||||
language = im_lang_sap1
|
||||
RECEIVING
|
||||
result = re_lang_bcp47.
|
||||
CATCH cx_static_check.
|
||||
RAISE no_assignment.
|
||||
ENDTRY.
|
||||
CATCH cx_sy_dyn_call_error.
|
||||
TRY.
|
||||
re_lang_bcp47 = lcl_bcp47_language_table=>sap1_to_bcp47( im_lang_sap1 ).
|
||||
CATCH zcx_abapgit_exception.
|
||||
RAISE no_assignment.
|
||||
ENDTRY.
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD language_sap1_to_sap2.
|
||||
|
||||
TRY.
|
||||
|
@ -381,6 +385,42 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD uccp.
|
||||
|
||||
DATA lv_class TYPE string.
|
||||
DATA lv_xstr TYPE xstring.
|
||||
DATA lo_instance TYPE REF TO object.
|
||||
|
||||
lv_class = 'CL_ABAP_CONV_IN_CE'.
|
||||
|
||||
TRY.
|
||||
CALL METHOD (lv_class)=>uccp
|
||||
EXPORTING
|
||||
uccp = iv_uccp
|
||||
RECEIVING
|
||||
char = rv_char.
|
||||
CATCH cx_sy_dyn_call_illegal_class.
|
||||
lv_xstr = iv_uccp.
|
||||
|
||||
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
|
||||
EXPORTING
|
||||
codepage = 'UTF-16'
|
||||
RECEIVING
|
||||
instance = lo_instance.
|
||||
|
||||
* convert endianness
|
||||
CONCATENATE lv_xstr+1(1) lv_xstr(1) INTO lv_xstr IN BYTE MODE.
|
||||
|
||||
CALL METHOD lo_instance->('IF_ABAP_CONV_IN~CONVERT')
|
||||
EXPORTING
|
||||
source = lv_xstr
|
||||
RECEIVING
|
||||
result = rv_char.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD xstring_remove_bom.
|
||||
|
||||
rv_xstr = iv_xstr.
|
||||
|
@ -405,10 +445,13 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
|
||||
FIELD-SYMBOLS <lg_line> TYPE any.
|
||||
|
||||
|
||||
CLEAR et_bintab.
|
||||
ev_size = xstrlen( iv_xstr ).
|
||||
|
||||
IF iv_xstr IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
APPEND INITIAL LINE TO et_bintab ASSIGNING <lg_line>.
|
||||
lv_struct = boolc(
|
||||
cl_abap_typedescr=>describe_by_data( <lg_line> )->type_kind = cl_abap_typedescr=>typekind_struct1 ).
|
||||
|
@ -418,7 +461,9 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
<lg_line> = iv_xstr.
|
||||
|
||||
lv_length = cl_abap_typedescr=>describe_by_data( <lg_line> )->length.
|
||||
lv_iterations = ev_size DIV lv_length.
|
||||
ASSERT lv_length > 0.
|
||||
|
||||
lv_iterations = ( ev_size - 1 ) DIV lv_length.
|
||||
|
||||
DO lv_iterations TIMES.
|
||||
lv_offset = sy-index * lv_length.
|
||||
|
@ -493,39 +538,4 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
|
|||
GET BIT 8 OF iv_x INTO rv_bitbyte+7(1).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD uccp.
|
||||
|
||||
DATA lv_class TYPE string.
|
||||
DATA lv_xstr TYPE xstring.
|
||||
DATA lo_instance TYPE REF TO object.
|
||||
|
||||
lv_class = 'CL_ABAP_CONV_IN_CE'.
|
||||
|
||||
TRY.
|
||||
CALL METHOD (lv_class)=>uccp
|
||||
EXPORTING
|
||||
uccp = iv_uccp
|
||||
RECEIVING
|
||||
char = rv_char.
|
||||
CATCH cx_sy_dyn_call_illegal_class.
|
||||
lv_xstr = iv_uccp.
|
||||
|
||||
CALL METHOD ('CL_ABAP_CONV_CODEPAGE')=>create_in
|
||||
EXPORTING
|
||||
codepage = 'UTF-16'
|
||||
RECEIVING
|
||||
instance = lo_instance.
|
||||
|
||||
* convert endianness
|
||||
CONCATENATE lv_xstr+1(1) lv_xstr(1) INTO lv_xstr IN BYTE MODE.
|
||||
|
||||
CALL METHOD lo_instance->('IF_ABAP_CONV_IN~CONVERT')
|
||||
EXPORTING
|
||||
source = lv_xstr
|
||||
RECEIVING
|
||||
result = rv_char.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
|
|
|
@ -19,6 +19,9 @@ CLASS ltcl_convert DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FIN
|
|||
METHODS string_to_xstring FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS xstring_to_bintab FOR TESTING.
|
||||
METHODS xstring_to_bintab_with_field FOR TESTING.
|
||||
METHODS xstring_to_bintab_initial FOR TESTING.
|
||||
METHODS xstring_to_bintab_long FOR TESTING.
|
||||
METHODS xstring_to_bintab_exact FOR TESTING.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -74,6 +77,89 @@ CLASS ltcl_convert IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD xstring_to_bintab_initial.
|
||||
|
||||
DATA lt_bintab TYPE TABLE OF w3mime.
|
||||
DATA lv_size TYPE i.
|
||||
DATA lv_xstr TYPE xstring.
|
||||
|
||||
zcl_abapgit_convert=>xstring_to_bintab(
|
||||
EXPORTING
|
||||
iv_xstr = lv_xstr
|
||||
IMPORTING
|
||||
ev_size = lv_size
|
||||
et_bintab = lt_bintab ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_size
|
||||
exp = 0 ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lines( lt_bintab )
|
||||
exp = 0 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD xstring_to_bintab_long.
|
||||
|
||||
DATA lt_bintab TYPE TABLE OF w3mime. " x(255)
|
||||
DATA lv_bin LIKE LINE OF lt_bintab.
|
||||
DATA lv_size TYPE i.
|
||||
DATA lv_xstr TYPE xstring.
|
||||
|
||||
lv_xstr = repeat(
|
||||
val = '1122334455'
|
||||
occ = 200 ).
|
||||
|
||||
zcl_abapgit_convert=>xstring_to_bintab(
|
||||
EXPORTING
|
||||
iv_xstr = lv_xstr
|
||||
IMPORTING
|
||||
ev_size = lv_size
|
||||
et_bintab = lt_bintab ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_size
|
||||
exp = 1000 ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lines( lt_bintab )
|
||||
exp = 4 ).
|
||||
|
||||
READ TABLE lt_bintab INTO lv_bin INDEX 4.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_bin-line+230(10)
|
||||
exp = '11223344550000000000' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD xstring_to_bintab_exact.
|
||||
|
||||
TYPES ty_line TYPE x LENGTH 5.
|
||||
DATA lv_xdata TYPE x LENGTH 10.
|
||||
DATA lt_bintab TYPE TABLE OF ty_line.
|
||||
DATA lv_size TYPE i.
|
||||
|
||||
lv_xdata = '1122334455FFEEDDCCBB'.
|
||||
|
||||
" must not dump if content fits exactly into bintab
|
||||
zcl_abapgit_convert=>xstring_to_bintab(
|
||||
EXPORTING
|
||||
iv_xstr = lv_xdata
|
||||
IMPORTING
|
||||
ev_size = lv_size
|
||||
et_bintab = lt_bintab ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lv_size
|
||||
exp = 10 ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lines( lt_bintab )
|
||||
exp = 2 ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD string_to_xstring.
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user