lcl_convert to global class #1061

This commit is contained in:
larshp 2018-01-06 07:16:58 +00:00
parent 41634c0535
commit 641025f907
13 changed files with 289 additions and 262 deletions

View File

@ -0,0 +1,168 @@
CLASS zcl_abapgit_convert DEFINITION
PUBLIC
CREATE PUBLIC .
PUBLIC SECTION.
CLASS-METHODS bitbyte_to_int
IMPORTING
!iv_bits TYPE clike
RETURNING
VALUE(rv_int) TYPE i .
CLASS-METHODS x_to_bitbyte
IMPORTING
!iv_x TYPE x
RETURNING
VALUE(rv_bitbyte) TYPE zif_abapgit_definitions=>ty_bitbyte .
CLASS-METHODS string_to_xstring_utf8
IMPORTING
!iv_string TYPE string
RETURNING
VALUE(rv_xstring) TYPE xstring .
CLASS-METHODS xstring_to_string_utf8
IMPORTING
!iv_data TYPE xstring
RETURNING
VALUE(rv_string) TYPE string .
CLASS-METHODS xstring_to_int
IMPORTING
!iv_xstring TYPE xstring
RETURNING
VALUE(rv_i) TYPE i
RAISING
zcx_abapgit_exception .
CLASS-METHODS int_to_xstring4
IMPORTING
!iv_i TYPE i
RETURNING
VALUE(rv_xstring) TYPE xstring .
CLASS-METHODS split_string
IMPORTING
!iv_string TYPE string
RETURNING
VALUE(rt_lines) TYPE string_table .
ENDCLASS.
CLASS ZCL_ABAPGIT_CONVERT IMPLEMENTATION.
METHOD bitbyte_to_int.
DATA: lv_bits TYPE string.
lv_bits = iv_bits.
rv_int = 0.
WHILE strlen( lv_bits ) > 0.
rv_int = rv_int * 2.
IF lv_bits(1) = '1'.
rv_int = rv_int + 1.
ENDIF.
lv_bits = lv_bits+1.
ENDWHILE.
ENDMETHOD. "bitbyte_to_int
METHOD int_to_xstring4.
* returns xstring of length 4 containing the integer value iv_i
DATA: lv_x TYPE x LENGTH 4.
lv_x = iv_i.
rv_xstring = lv_x.
ENDMETHOD. "int_to_xstring
METHOD split_string.
FIND FIRST OCCURRENCE OF cl_abap_char_utilities=>cr_lf IN iv_string.
" Convert string into table depending on separator type CR_LF vs. LF
IF sy-subrc = 0.
SPLIT iv_string AT cl_abap_char_utilities=>cr_lf INTO TABLE rt_lines.
ELSE.
SPLIT iv_string AT cl_abap_char_utilities=>newline INTO TABLE rt_lines.
ENDIF.
ENDMETHOD. "split_string
METHOD string_to_xstring_utf8.
DATA: lo_obj TYPE REF TO cl_abap_conv_out_ce.
TRY.
lo_obj = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
lo_obj->convert( EXPORTING data = iv_string
IMPORTING buffer = rv_xstring ).
CATCH cx_parameter_invalid_range
cx_sy_codepage_converter_init
cx_sy_conversion_codepage
cx_parameter_invalid_type. "#EC NO_HANDLER
ENDTRY.
ENDMETHOD. "string_to_xstring_utf8
METHOD xstring_to_int.
DATA: lv_xstring TYPE xstring,
lv_x TYPE x.
lv_xstring = iv_xstring.
WHILE xstrlen( lv_xstring ) > 0.
lv_x = lv_xstring(1).
rv_i = rv_i * 256 + lv_x.
lv_xstring = lv_xstring+1.
ENDWHILE.
ENDMETHOD. "xstring_to_int
METHOD xstring_to_string_utf8.
DATA: lv_len TYPE i,
lo_obj TYPE REF TO cl_abap_conv_in_ce.
TRY.
lo_obj = cl_abap_conv_in_ce=>create(
input = iv_data
encoding = 'UTF-8' ).
lv_len = xstrlen( iv_data ).
lo_obj->read( EXPORTING n = lv_len
IMPORTING data = rv_string ).
CATCH cx_parameter_invalid_range
cx_sy_codepage_converter_init
cx_sy_conversion_codepage
cx_parameter_invalid_type. "#EC NO_HANDLER
ENDTRY.
ENDMETHOD. "xstring_to_string_utf8
METHOD x_to_bitbyte.
DATA: lv_b TYPE n.
CLEAR rv_bitbyte.
DO 8 TIMES.
GET BIT sy-index OF iv_x INTO lv_b.
CONCATENATE rv_bitbyte lv_b INTO rv_bitbyte.
ENDDO.
ENDMETHOD. "x_to_bitbyte
ENDCLASS.

View File

@ -0,0 +1,66 @@
*----------------------------------------------------------------------*
* CLASS ltcl_convert DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS ltcl_convert DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
PRIVATE SECTION.
METHODS convert_int FOR TESTING RAISING zcx_abapgit_exception.
METHODS split_string FOR TESTING.
ENDCLASS. "ltcl_convert DEFINITION
*----------------------------------------------------------------------*
* CLASS ltcl_convert IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS ltcl_convert IMPLEMENTATION.
METHOD convert_int.
DATA: lv_xstring TYPE xstring,
lv_input TYPE i,
lv_result TYPE i.
DO 1000 TIMES.
lv_input = sy-index.
lv_xstring = zcl_abapgit_convert=>int_to_xstring4( lv_input ).
lv_result = zcl_abapgit_convert=>xstring_to_int( lv_xstring ).
cl_abap_unit_assert=>assert_equals(
exp = lv_input
act = lv_result ).
ENDDO.
ENDMETHOD. "convert_int
METHOD split_string.
DATA: lt_act TYPE string_table,
lt_exp TYPE string_table.
APPEND 'ABC' TO lt_exp.
APPEND '123' TO lt_exp.
" Case 1. String separated by CRLF
lt_act = zcl_abapgit_convert=>split_string( 'ABC' && cl_abap_char_utilities=>cr_lf && '123' ).
cl_abap_unit_assert=>assert_equals( exp = lt_exp
act = lt_act
msg = ' Error during string split: CRLF' ).
CLEAR: lt_act.
" Case 2. String separated by LF
lt_act = zcl_abapgit_convert=>split_string( 'ABC' && cl_abap_char_utilities=>newline && '123' ).
cl_abap_unit_assert=>assert_equals( exp = lt_exp
act = lt_act
msg = ' Error during string split: LF' ).
ENDMETHOD. "split_string.
ENDCLASS. "ltcl_convert IMPLEMENTATION

View File

@ -0,0 +1,19 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>ZCL_ABAPGIT_CONVERT</CLSNAME>
<VERSION>1</VERSION>
<LANGU>E</LANGU>
<DESCRIPT>Convert</DESCRIPT>
<EXPOSURE>2</EXPOSURE>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -94,7 +94,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
ls_data TYPE ty_dot_abapgit. ls_data TYPE ty_dot_abapgit.
lv_xml = lcl_convert=>xstring_to_string_utf8( iv_xstr ). lv_xml = zcl_abapgit_convert=>xstring_to_string_utf8( iv_xstr ).
ls_data = from_xml( lv_xml ). ls_data = from_xml( lv_xml ).
@ -110,7 +110,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
lv_xml = to_xml( ms_data ). lv_xml = to_xml( ms_data ).
rv_xstr = lcl_convert=>string_to_xstring_utf8( lv_xml ). rv_xstr = zcl_abapgit_convert=>string_to_xstring_utf8( lv_xml ).
ENDMETHOD. ENDMETHOD.

View File

@ -256,13 +256,13 @@ CLASS lcl_git_transport IMPLEMENTATION.
lv_cmd_pkt = lcl_git_utils=>pkt_string( lv_line ). lv_cmd_pkt = lcl_git_utils=>pkt_string( lv_line ).
lv_buffer = lv_cmd_pkt && '0000'. lv_buffer = lv_cmd_pkt && '0000'.
lv_tmp = lcl_convert=>string_to_xstring_utf8( lv_buffer ). lv_tmp = zcl_abapgit_convert=>string_to_xstring_utf8( lv_buffer ).
CONCATENATE lv_tmp iv_pack INTO lv_xstring IN BYTE MODE. CONCATENATE lv_tmp iv_pack INTO lv_xstring IN BYTE MODE.
lv_xstring = lo_client->send_receive_close( lv_xstring ). lv_xstring = lo_client->send_receive_close( lv_xstring ).
lv_string = lcl_convert=>xstring_to_string_utf8( lv_xstring ). lv_string = zcl_abapgit_convert=>xstring_to_string_utf8( lv_xstring ).
IF NOT lv_string CP '*unpack ok*'. IF NOT lv_string CP '*unpack ok*'.
zcx_abapgit_exception=>raise( 'unpack not ok' ). zcx_abapgit_exception=>raise( 'unpack not ok' ).
ELSEIF lv_string CP '*pre-receive hook declined*'. ELSEIF lv_string CP '*pre-receive hook declined*'.
@ -368,7 +368,7 @@ CLASS lcl_git_transport IMPLEMENTATION.
&& '0009done' && zif_abapgit_definitions=>gc_newline. && '0009done' && zif_abapgit_definitions=>gc_newline.
lv_xstring = lo_client->send_receive_close( lv_xstring = lo_client->send_receive_close(
lcl_convert=>string_to_xstring_utf8( lv_buffer ) ). zcl_abapgit_convert=>string_to_xstring_utf8( lv_buffer ) ).
parse( IMPORTING ev_pack = lv_pack parse( IMPORTING ev_pack = lv_pack
CHANGING cv_data = lv_xstring ). CHANGING cv_data = lv_xstring ).
@ -494,19 +494,19 @@ CLASS lcl_git_pack IMPLEMENTATION.
lv_x = cv_data(1). lv_x = cv_data(1).
lv_bitbyte = lcl_convert=>x_to_bitbyte( lv_x ). lv_bitbyte = zcl_abapgit_convert=>x_to_bitbyte( lv_x ).
cv_data = cv_data+1. cv_data = cv_data+1.
lv_length_bits = lv_bitbyte+4. lv_length_bits = lv_bitbyte+4.
WHILE lv_bitbyte(1) <> '0'. WHILE lv_bitbyte(1) <> '0'.
lv_x = cv_data(1). lv_x = cv_data(1).
lv_bitbyte = lcl_convert=>x_to_bitbyte( lv_x ). lv_bitbyte = zcl_abapgit_convert=>x_to_bitbyte( lv_x ).
cv_data = cv_data+1. cv_data = cv_data+1.
CONCATENATE lv_bitbyte+1 lv_length_bits INTO lv_length_bits. CONCATENATE lv_bitbyte+1 lv_length_bits INTO lv_length_bits.
ENDWHILE. ENDWHILE.
ev_length = lcl_convert=>bitbyte_to_int( lv_length_bits ). ev_length = zcl_abapgit_convert=>bitbyte_to_int( lv_length_bits ).
ENDMETHOD. "get_length ENDMETHOD. "get_length
@ -530,7 +530,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
ASSERT NOT <ls_node>-sha1 IS INITIAL. ASSERT NOT <ls_node>-sha1 IS INITIAL.
CONCATENATE <ls_node>-chmod <ls_node>-name INTO lv_string SEPARATED BY space. CONCATENATE <ls_node>-chmod <ls_node>-name INTO lv_string SEPARATED BY space.
lv_xstring = lcl_convert=>string_to_xstring_utf8( lv_string ). lv_xstring = zcl_abapgit_convert=>string_to_xstring_utf8( lv_string ).
lv_hex20 = to_upper( <ls_node>-sha1 ). lv_hex20 = to_upper( <ls_node>-sha1 ).
CONCATENATE rv_data lv_xstring lc_null lv_hex20 INTO rv_data IN BYTE MODE. CONCATENATE rv_data lv_xstring lc_null lv_hex20 INTO rv_data IN BYTE MODE.
@ -582,7 +582,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
CONCATENATE lv_string zif_abapgit_definitions=>gc_newline is_commit-body INTO lv_string. CONCATENATE lv_string zif_abapgit_definitions=>gc_newline is_commit-body INTO lv_string.
rv_data = lcl_convert=>string_to_xstring_utf8( lv_string ). rv_data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_string ).
ENDMETHOD. "encode_commit ENDMETHOD. "encode_commit
@ -592,7 +592,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
lv_bitbyte TYPE zif_abapgit_definitions=>ty_bitbyte. lv_bitbyte TYPE zif_abapgit_definitions=>ty_bitbyte.
lv_bitbyte = lcl_convert=>x_to_bitbyte( iv_x ). lv_bitbyte = zcl_abapgit_convert=>x_to_bitbyte( iv_x ).
lv_char3 = lv_bitbyte+1. lv_char3 = lv_bitbyte+1.
CASE lv_char3. CASE lv_char3.
@ -623,7 +623,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
FIELD-SYMBOLS: <lv_string> LIKE LINE OF lt_string. FIELD-SYMBOLS: <lv_string> LIKE LINE OF lt_string.
lv_string = lcl_convert=>xstring_to_string_utf8( iv_data ). lv_string = zcl_abapgit_convert=>xstring_to_string_utf8( iv_data ).
SPLIT lv_string AT zif_abapgit_definitions=>gc_newline INTO TABLE lt_string. SPLIT lv_string AT zif_abapgit_definitions=>gc_newline INTO TABLE lt_string.
@ -683,13 +683,13 @@ CLASS lcl_git_pack IMPLEMENTATION.
DO. DO.
lv_x = cv_delta(1). lv_x = cv_delta(1).
cv_delta = cv_delta+1. cv_delta = cv_delta+1.
lv_bitbyte = lcl_convert=>x_to_bitbyte( lv_x ). lv_bitbyte = zcl_abapgit_convert=>x_to_bitbyte( lv_x ).
CONCATENATE lv_bitbyte+1 lv_bits INTO lv_bits. CONCATENATE lv_bitbyte+1 lv_bits INTO lv_bits.
IF lv_bitbyte(1) = '0'. IF lv_bitbyte(1) = '0'.
EXIT. " current loop EXIT. " current loop
ENDIF. ENDIF.
ENDDO. ENDDO.
ev_header = lcl_convert=>bitbyte_to_int( lv_bits ). ev_header = zcl_abapgit_convert=>bitbyte_to_int( lv_bits ).
ENDMETHOD. "delta_header ENDMETHOD. "delta_header
@ -851,7 +851,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
lv_len = lv_cursor - lv_start. lv_len = lv_cursor - lv_start.
lv_xstring = iv_data+lv_start(lv_len). lv_xstring = iv_data+lv_start(lv_len).
lv_string = lcl_convert=>xstring_to_string_utf8( lv_xstring ). lv_string = zcl_abapgit_convert=>xstring_to_string_utf8( lv_xstring ).
SPLIT lv_string AT space INTO lv_chmod lv_name. SPLIT lv_string AT space INTO lv_chmod lv_name.
lv_offset = lv_cursor + 1. lv_offset = lv_cursor + 1.
@ -942,7 +942,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
* number of objects * number of objects
lv_xstring = lv_data(4). lv_xstring = lv_data(4).
lv_objects = lcl_convert=>xstring_to_int( lv_xstring ). lv_objects = zcl_abapgit_convert=>xstring_to_int( lv_xstring ).
lv_data = lv_data+4. lv_data = lv_data+4.
@ -1050,7 +1050,7 @@ CLASS lcl_git_pack IMPLEMENTATION.
CONCATENATE rv_data c_version INTO rv_data IN BYTE MODE. CONCATENATE rv_data c_version INTO rv_data IN BYTE MODE.
lv_xstring = lcl_convert=>int_to_xstring4( lines( it_objects ) ). lv_xstring = zcl_abapgit_convert=>int_to_xstring4( lines( it_objects ) ).
CONCATENATE rv_data lv_xstring INTO rv_data IN BYTE MODE. CONCATENATE rv_data lv_xstring INTO rv_data IN BYTE MODE.
lv_objects_total = lines( it_objects ). lv_objects_total = lines( it_objects ).

View File

@ -347,7 +347,7 @@ CLASS lcl_http_digest IMPLEMENTATION.
lv_hash TYPE xstring. lv_hash TYPE xstring.
lv_xstr = lcl_convert=>string_to_xstring_utf8( iv_data ). lv_xstr = zcl_abapgit_convert=>string_to_xstring_utf8( iv_data ).
CALL FUNCTION 'CALCULATE_HASH_FOR_RAW' CALL FUNCTION 'CALCULATE_HASH_FOR_RAW'
EXPORTING EXPORTING

View File

@ -151,8 +151,8 @@ CLASS lcl_news IMPLEMENTATION.
RETURN. " Internal format of program version is not correct -> abort parsing RETURN. " Internal format of program version is not correct -> abort parsing
ENDIF. ENDIF.
lv_string = lcl_convert=>xstring_to_string_utf8( iv_rawdata ). lv_string = zcl_abapgit_convert=>xstring_to_string_utf8( iv_rawdata ).
lt_lines = lcl_convert=>split_string( lv_string ). lt_lines = zcl_abapgit_convert=>split_string( lv_string ).
mt_log = parse( it_lines = lt_lines iv_current_version = mv_current_version ). mt_log = parse( it_lines = lt_lines iv_current_version = mv_current_version ).
READ TABLE mt_log INTO ls_log_line INDEX 1. READ TABLE mt_log INTO ls_log_line INDEX 1.

View File

@ -413,7 +413,7 @@ CLASS lcl_object_wapa IMPLEMENTATION.
DATA: lv_string TYPE string. DATA: lv_string TYPE string.
lv_string = lcl_convert=>xstring_to_string_utf8( iv_content ). lv_string = zcl_abapgit_convert=>xstring_to_string_utf8( iv_content ).
SPLIT lv_string AT zif_abapgit_definitions=>gc_newline INTO TABLE rt_content. SPLIT lv_string AT zif_abapgit_definitions=>gc_newline INTO TABLE rt_content.
@ -438,7 +438,7 @@ CLASS lcl_object_wapa IMPLEMENTATION.
CONCATENATE LINES OF lt_content INTO lv_string SEPARATED BY zif_abapgit_definitions=>gc_newline RESPECTING BLANKS. CONCATENATE LINES OF lt_content INTO lv_string SEPARATED BY zif_abapgit_definitions=>gc_newline RESPECTING BLANKS.
rv_content = lcl_convert=>string_to_xstring_utf8( lv_string ). rv_content = zcl_abapgit_convert=>string_to_xstring_utf8( lv_string ).
ENDMETHOD. ENDMETHOD.

View File

@ -347,7 +347,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
read_file( EXPORTING iv_filename = lv_filename read_file( EXPORTING iv_filename = lv_filename
IMPORTING ev_data = lv_data ). IMPORTING ev_data = lv_data ).
rv_string = lcl_convert=>xstring_to_string_utf8( lv_data ). rv_string = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
ENDMETHOD. "read_string ENDMETHOD. "read_string
@ -369,7 +369,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
RETURN. RETURN.
ENDIF. ENDIF.
lv_abap = lcl_convert=>xstring_to_string_utf8( lv_data ). lv_abap = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
SPLIT lv_abap AT zif_abapgit_definitions=>gc_newline INTO TABLE rt_abap. SPLIT lv_abap AT zif_abapgit_definitions=>gc_newline INTO TABLE rt_abap.
@ -388,7 +388,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
ls_file-path = '/'. ls_file-path = '/'.
ls_file-filename = filename( iv_extra = iv_extra ls_file-filename = filename( iv_extra = iv_extra
iv_ext = 'abap' ). "#EC NOTEXT iv_ext = 'abap' ). "#EC NOTEXT
ls_file-data = lcl_convert=>string_to_xstring_utf8( lv_source ). ls_file-data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_source ).
APPEND ls_file TO mt_files. APPEND ls_file TO mt_files.
@ -402,7 +402,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
ls_file-path = '/'. ls_file-path = '/'.
ls_file-filename = filename( iv_extra = iv_extra ls_file-filename = filename( iv_extra = iv_extra
iv_ext = iv_ext ). "#EC NOTEXT iv_ext = iv_ext ). "#EC NOTEXT
ls_file-data = lcl_convert=>string_to_xstring_utf8( iv_string ). ls_file-data = zcl_abapgit_convert=>string_to_xstring_utf8( iv_string ).
APPEND ls_file TO mt_files. APPEND ls_file TO mt_files.
@ -427,7 +427,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
WITH '<?xml version="1.0" encoding="utf-8"?>'. WITH '<?xml version="1.0" encoding="utf-8"?>'.
ASSERT sy-subrc = 0. ASSERT sy-subrc = 0.
ls_file-data = lcl_convert=>string_to_xstring_utf8( lv_xml ). ls_file-data = zcl_abapgit_convert=>string_to_xstring_utf8( lv_xml ).
APPEND ls_file TO mt_files. APPEND ls_file TO mt_files.
@ -445,7 +445,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
read_file( EXPORTING iv_filename = lv_filename read_file( EXPORTING iv_filename = lv_filename
IMPORTING ev_data = lv_data ). IMPORTING ev_data = lv_data ).
lv_xml = lcl_convert=>xstring_to_string_utf8( lv_data ). lv_xml = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
CREATE OBJECT ro_xml CREATE OBJECT ro_xml
EXPORTING EXPORTING

View File

@ -590,7 +590,7 @@ CLASS lcl_objects IMPLEMENTATION.
IF sy-subrc = 0. IF sy-subrc = 0.
CREATE OBJECT lo_remote_version CREATE OBJECT lo_remote_version
EXPORTING EXPORTING
iv_xml = lcl_convert=>xstring_to_string_utf8( ls_remote_file-data ). iv_xml = zcl_abapgit_convert=>xstring_to_string_utf8( ls_remote_file-data ).
lo_comparison_result = io_object->compare_to_remote_version( lo_remote_version ). lo_comparison_result = io_object->compare_to_remote_version( lo_remote_version ).
lo_comparison_result->show_confirmation_dialog( ). lo_comparison_result->show_confirmation_dialog( ).

View File

@ -170,7 +170,7 @@ CLASS lcl_tadir IMPLEMENTATION.
no_authority = 4 no_authority = 4
OTHERS = 5 ). OTHERS = 5 ).
IF sy-subrc = 0. IF sy-subrc = 0.
rv_hash = lcl_hash=>sha1_raw( lcl_convert=>string_to_xstring_utf8( lv_url ) ). rv_hash = lcl_hash=>sha1_raw( zcl_abapgit_convert=>string_to_xstring_utf8( lv_url ) ).
ENDIF. ENDIF.
ENDMETHOD. ENDMETHOD.

View File

@ -41,72 +41,6 @@ END-OF-DEFINITION.
* todo, should the tests be in the same include as the classes * todo, should the tests be in the same include as the classes
* they are testing? * they are testing?
*----------------------------------------------------------------------*
* CLASS ltcl_convert DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS ltcl_convert DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
PRIVATE SECTION.
METHODS convert_int FOR TESTING RAISING zcx_abapgit_exception.
METHODS split_string FOR TESTING.
ENDCLASS. "ltcl_convert DEFINITION
*----------------------------------------------------------------------*
* CLASS ltcl_convert IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS ltcl_convert IMPLEMENTATION.
METHOD convert_int.
DATA: lv_xstring TYPE xstring,
lv_input TYPE i,
lv_result TYPE i.
DO 1000 TIMES.
lv_input = sy-index.
lv_xstring = lcl_convert=>int_to_xstring4( lv_input ).
lv_result = lcl_convert=>xstring_to_int( lv_xstring ).
cl_abap_unit_assert=>assert_equals(
exp = lv_input
act = lv_result ).
ENDDO.
ENDMETHOD. "convert_int
METHOD split_string.
DATA: lt_act TYPE string_table,
lt_exp TYPE string_table.
APPEND 'ABC' TO lt_exp.
APPEND '123' TO lt_exp.
" Case 1. String separated by CRLF
lt_act = lcl_convert=>split_string( 'ABC' && cl_abap_char_utilities=>cr_lf && '123' ).
cl_abap_unit_assert=>assert_equals( exp = lt_exp
act = lt_act
msg = ' Error during string split: CRLF' ).
CLEAR: lt_act.
" Case 2. String separated by LF
lt_act = lcl_convert=>split_string( 'ABC' && cl_abap_char_utilities=>newline && '123' ).
cl_abap_unit_assert=>assert_equals( exp = lt_exp
act = lt_act
msg = ' Error during string split: LF' ).
ENDMETHOD. "split_string.
ENDCLASS. "ltcl_convert IMPLEMENTATION
CLASS ltcl_critical_tests DEFINITION FINAL FOR TESTING. CLASS ltcl_critical_tests DEFINITION FINAL FOR TESTING.
PUBLIC SECTION. PUBLIC SECTION.
@ -298,8 +232,8 @@ CLASS ltcl_diff IMPLEMENTATION.
CONCATENATE LINES OF mt_new INTO lv_new SEPARATED BY zif_abapgit_definitions=>gc_newline. CONCATENATE LINES OF mt_new INTO lv_new SEPARATED BY zif_abapgit_definitions=>gc_newline.
CONCATENATE LINES OF mt_old INTO lv_old SEPARATED BY zif_abapgit_definitions=>gc_newline. CONCATENATE LINES OF mt_old INTO lv_old SEPARATED BY zif_abapgit_definitions=>gc_newline.
lv_xnew = lcl_convert=>string_to_xstring_utf8( lv_new ). lv_xnew = zcl_abapgit_convert=>string_to_xstring_utf8( lv_new ).
lv_xold = lcl_convert=>string_to_xstring_utf8( lv_old ). lv_xold = zcl_abapgit_convert=>string_to_xstring_utf8( lv_old ).
CREATE OBJECT lo_diff CREATE OBJECT lo_diff
EXPORTING EXPORTING
@ -977,7 +911,7 @@ CLASS ltcl_git_pack_decode_commit IMPLEMENTATION.
DATA: lv_xstr TYPE xstring. DATA: lv_xstr TYPE xstring.
lv_xstr = lcl_convert=>string_to_xstring_utf8( mv_str ). lv_xstr = zcl_abapgit_convert=>string_to_xstring_utf8( mv_str ).
ms_raw = lcl_git_pack=>decode_commit( lv_xstr ). ms_raw = lcl_git_pack=>decode_commit( lv_xstr ).

View File

@ -79,166 +79,6 @@ CLASS lcl_state IMPLEMENTATION.
ENDCLASS. ENDCLASS.
*----------------------------------------------------------------------*
* CLASS lcl_convert DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_convert DEFINITION FINAL.
PUBLIC SECTION.
CLASS-METHODS bitbyte_to_int
IMPORTING iv_bits TYPE clike
RETURNING VALUE(rv_int) TYPE i.
CLASS-METHODS x_to_bitbyte
IMPORTING iv_x TYPE x
RETURNING VALUE(rv_bitbyte) TYPE zif_abapgit_definitions=>ty_bitbyte.
CLASS-METHODS string_to_xstring_utf8
IMPORTING iv_string TYPE string
RETURNING VALUE(rv_xstring) TYPE xstring.
CLASS-METHODS xstring_to_string_utf8
IMPORTING iv_data TYPE xstring
RETURNING VALUE(rv_string) TYPE string.
CLASS-METHODS xstring_to_int
IMPORTING iv_xstring TYPE xstring
RETURNING VALUE(rv_i) TYPE i
RAISING zcx_abapgit_exception.
CLASS-METHODS int_to_xstring4
IMPORTING iv_i TYPE i
RETURNING VALUE(rv_xstring) TYPE xstring.
CLASS-METHODS split_string
IMPORTING iv_string TYPE string
RETURNING VALUE(rt_lines) TYPE string_table.
ENDCLASS. "lcl_convert DEFINITION
*----------------------------------------------------------------------*
* CLASS lcl_convert IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS lcl_convert IMPLEMENTATION.
METHOD int_to_xstring4.
* returns xstring of length 4 containing the integer value iv_i
DATA: lv_x TYPE x LENGTH 4.
lv_x = iv_i.
rv_xstring = lv_x.
ENDMETHOD. "int_to_xstring
METHOD xstring_to_int.
DATA: lv_xstring TYPE xstring,
lv_x TYPE x.
lv_xstring = iv_xstring.
WHILE xstrlen( lv_xstring ) > 0.
lv_x = lv_xstring(1).
rv_i = rv_i * 256 + lv_x.
lv_xstring = lv_xstring+1.
ENDWHILE.
ENDMETHOD. "xstring_to_int
METHOD xstring_to_string_utf8.
DATA: lv_len TYPE i,
lo_obj TYPE REF TO cl_abap_conv_in_ce.
TRY.
lo_obj = cl_abap_conv_in_ce=>create(
input = iv_data
encoding = 'UTF-8' ).
lv_len = xstrlen( iv_data ).
lo_obj->read( EXPORTING n = lv_len
IMPORTING data = rv_string ).
CATCH cx_parameter_invalid_range
cx_sy_codepage_converter_init
cx_sy_conversion_codepage
cx_parameter_invalid_type. "#EC NO_HANDLER
ENDTRY.
ENDMETHOD. "xstring_to_string_utf8
METHOD string_to_xstring_utf8.
DATA: lo_obj TYPE REF TO cl_abap_conv_out_ce.
TRY.
lo_obj = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
lo_obj->convert( EXPORTING data = iv_string
IMPORTING buffer = rv_xstring ).
CATCH cx_parameter_invalid_range
cx_sy_codepage_converter_init
cx_sy_conversion_codepage
cx_parameter_invalid_type. "#EC NO_HANDLER
ENDTRY.
ENDMETHOD. "string_to_xstring_utf8
METHOD bitbyte_to_int.
DATA: lv_bits TYPE string.
lv_bits = iv_bits.
rv_int = 0.
WHILE strlen( lv_bits ) > 0.
rv_int = rv_int * 2.
IF lv_bits(1) = '1'.
rv_int = rv_int + 1.
ENDIF.
lv_bits = lv_bits+1.
ENDWHILE.
ENDMETHOD. "bitbyte_to_int
METHOD x_to_bitbyte.
DATA: lv_b TYPE n.
CLEAR rv_bitbyte.
DO 8 TIMES.
GET BIT sy-index OF iv_x INTO lv_b.
CONCATENATE rv_bitbyte lv_b INTO rv_bitbyte.
ENDDO.
ENDMETHOD. "x_to_bitbyte
METHOD split_string.
FIND FIRST OCCURRENCE OF cl_abap_char_utilities=>cr_lf IN iv_string.
" Convert string into table depending on separator type CR_LF vs. LF
IF sy-subrc = 0.
SPLIT iv_string AT cl_abap_char_utilities=>cr_lf INTO TABLE rt_lines.
ELSE.
SPLIT iv_string AT cl_abap_char_utilities=>newline INTO TABLE rt_lines.
ENDIF.
ENDMETHOD. "split_string
ENDCLASS. "lcl_convert IMPLEMENTATION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
* CLASS lcl_hash DEFINITION * CLASS lcl_hash DEFINITION
*----------------------------------------------------------------------* *----------------------------------------------------------------------*
@ -355,7 +195,7 @@ CLASS lcl_hash IMPLEMENTATION.
lv_char10 = lv_len. lv_char10 = lv_len.
CONDENSE lv_char10. CONDENSE lv_char10.
CONCATENATE iv_type lv_char10 INTO lv_string SEPARATED BY space. CONCATENATE iv_type lv_char10 INTO lv_string SEPARATED BY space.
lv_xstring = lcl_convert=>string_to_xstring_utf8( lv_string ). lv_xstring = zcl_abapgit_convert=>string_to_xstring_utf8( lv_string ).
lv_string = lv_xstring. lv_string = lv_xstring.
CONCATENATE lv_string '00' INTO lv_string. CONCATENATE lv_string '00' INTO lv_string.
@ -584,8 +424,8 @@ CLASS lcl_diff IMPLEMENTATION.
lv_old TYPE string. lv_old TYPE string.
lv_new = lcl_convert=>xstring_to_string_utf8( iv_new ). lv_new = zcl_abapgit_convert=>xstring_to_string_utf8( iv_new ).
lv_old = lcl_convert=>xstring_to_string_utf8( iv_old ). lv_old = zcl_abapgit_convert=>xstring_to_string_utf8( iv_old ).
SPLIT lv_new AT zif_abapgit_definitions=>gc_newline INTO TABLE et_new. SPLIT lv_new AT zif_abapgit_definitions=>gc_newline INTO TABLE et_new.
SPLIT lv_old AT zif_abapgit_definitions=>gc_newline INTO TABLE et_old. SPLIT lv_old AT zif_abapgit_definitions=>gc_newline INTO TABLE et_old.