Merge branch 'main' into mbtools/server_group

This commit is contained in:
Lars Hvam 2024-12-27 10:53:35 +01:00 committed by GitHub
commit 965819ad70
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 160 additions and 64 deletions

View File

@ -85,7 +85,7 @@ CLASS zcl_abapgit_convert DEFINITION
VALUE(rv_xstr) TYPE xstring . VALUE(rv_xstr) TYPE xstring .
CLASS-METHODS xstring_to_bintab CLASS-METHODS xstring_to_bintab
IMPORTING IMPORTING
!iv_xstr TYPE xstring !iv_xstr TYPE xsequence
EXPORTING EXPORTING
!ev_size TYPE i !ev_size TYPE i
!et_bintab TYPE STANDARD TABLE . !et_bintab TYPE STANDARD TABLE .
@ -144,6 +144,7 @@ ENDCLASS.
CLASS zcl_abapgit_convert IMPLEMENTATION. CLASS zcl_abapgit_convert IMPLEMENTATION.
METHOD base64_to_xstring. METHOD base64_to_xstring.
rv_xstr = cl_http_utility=>decode_x_base64( iv_base64 ). rv_xstr = cl_http_utility=>decode_x_base64( iv_base64 ).
@ -207,32 +208,6 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
ENDMETHOD. 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. METHOD language_bcp47_to_sap1.
DATA lv_converter_instance TYPE REF TO object. DATA lv_converter_instance TYPE REF TO object.
@ -289,6 +264,35 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
ENDTRY. ENDTRY.
ENDMETHOD. 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. METHOD language_sap1_to_sap2.
TRY. TRY.
@ -381,6 +385,42 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
ENDMETHOD. 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. METHOD xstring_remove_bom.
rv_xstr = iv_xstr. rv_xstr = iv_xstr.
@ -405,10 +445,13 @@ CLASS zcl_abapgit_convert IMPLEMENTATION.
FIELD-SYMBOLS <lg_line> TYPE any. FIELD-SYMBOLS <lg_line> TYPE any.
CLEAR et_bintab. CLEAR et_bintab.
ev_size = xstrlen( iv_xstr ). ev_size = xstrlen( iv_xstr ).
IF iv_xstr IS INITIAL.
RETURN.
ENDIF.
APPEND INITIAL LINE TO et_bintab ASSIGNING <lg_line>. APPEND INITIAL LINE TO et_bintab ASSIGNING <lg_line>.
lv_struct = boolc( lv_struct = boolc(
cl_abap_typedescr=>describe_by_data( <lg_line> )->type_kind = cl_abap_typedescr=>typekind_struct1 ). 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. <lg_line> = iv_xstr.
lv_length = cl_abap_typedescr=>describe_by_data( <lg_line> )->length. 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. DO lv_iterations TIMES.
lv_offset = sy-index * lv_length. 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). GET BIT 8 OF iv_x INTO rv_bitbyte+7(1).
ENDMETHOD. 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. ENDCLASS.

View File

@ -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 string_to_xstring FOR TESTING RAISING zcx_abapgit_exception.
METHODS xstring_to_bintab FOR TESTING. METHODS xstring_to_bintab FOR TESTING.
METHODS xstring_to_bintab_with_field 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. ENDCLASS.
@ -74,6 +77,89 @@ CLASS ltcl_convert IMPLEMENTATION.
ENDMETHOD. 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. METHOD string_to_xstring.