mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
String map improvements (#3696)
* string map freeze and UT * linter * linter Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
b34f5c36b5
commit
c6b4cb1a70
|
@ -9,54 +9,58 @@ CLASS zcl_abapgit_string_map DEFINITION
|
|||
BEGIN OF ty_entry,
|
||||
k TYPE string,
|
||||
v TYPE string,
|
||||
END OF ty_entry,
|
||||
tty_entries TYPE STANDARD TABLE OF ty_entry WITH KEY k,
|
||||
END OF ty_entry.
|
||||
TYPES:
|
||||
tty_entries TYPE STANDARD TABLE OF ty_entry WITH KEY k.
|
||||
TYPES:
|
||||
tts_entries TYPE SORTED TABLE OF ty_entry WITH UNIQUE KEY k.
|
||||
|
||||
CLASS-METHODS create
|
||||
RETURNING
|
||||
VALUE(ro_instance) TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
METHODS get
|
||||
IMPORTING
|
||||
iv_key TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_val) TYPE string.
|
||||
|
||||
METHODS has
|
||||
IMPORTING
|
||||
iv_key TYPE string
|
||||
RETURNING
|
||||
VALUE(rv_has) TYPE abap_bool.
|
||||
|
||||
METHODS set
|
||||
IMPORTING
|
||||
iv_key TYPE string
|
||||
iv_val TYPE string OPTIONAL.
|
||||
|
||||
iv_val TYPE string OPTIONAL
|
||||
RETURNING
|
||||
VALUE(ro_map) TYPE REF TO zcl_abapgit_string_map
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
METHODS size
|
||||
RETURNING
|
||||
VALUE(rv_size) TYPE i.
|
||||
|
||||
METHODS is_empty
|
||||
RETURNING
|
||||
VALUE(rv_yes) TYPE abap_bool.
|
||||
|
||||
METHODS delete
|
||||
IMPORTING
|
||||
iv_key TYPE string.
|
||||
|
||||
METHODS clear.
|
||||
|
||||
iv_key TYPE string
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
METHODS clear
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
METHODS to_abap
|
||||
CHANGING
|
||||
!cs_container TYPE any
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
METHODS freeze.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
DATA mt_entries TYPE tts_entries.
|
||||
DATA mv_read_only TYPE abap_bool.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
@ -66,6 +70,9 @@ CLASS ZCL_ABAPGIT_STRING_MAP IMPLEMENTATION.
|
|||
|
||||
|
||||
METHOD clear.
|
||||
IF mv_read_only = abap_true.
|
||||
zcx_abapgit_exception=>raise( 'Cannot clear. This string map is immutable' ).
|
||||
ENDIF.
|
||||
CLEAR mt_entries.
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -77,11 +84,20 @@ CLASS ZCL_ABAPGIT_STRING_MAP IMPLEMENTATION.
|
|||
|
||||
METHOD delete.
|
||||
|
||||
IF mv_read_only = abap_true.
|
||||
zcx_abapgit_exception=>raise( 'Cannot delete. This string map is immutable' ).
|
||||
ENDIF.
|
||||
|
||||
DELETE mt_entries WHERE k = iv_key.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD freeze.
|
||||
mv_read_only = abap_true.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get.
|
||||
|
||||
FIELD-SYMBOLS <ls_entry> LIKE LINE OF mt_entries.
|
||||
|
@ -111,6 +127,10 @@ CLASS ZCL_ABAPGIT_STRING_MAP IMPLEMENTATION.
|
|||
DATA ls_entry LIKE LINE OF mt_entries.
|
||||
FIELD-SYMBOLS <ls_entry> LIKE LINE OF mt_entries.
|
||||
|
||||
IF mv_read_only = abap_true.
|
||||
zcx_abapgit_exception=>raise( 'Cannot set. This string map is immutable' ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE mt_entries ASSIGNING <ls_entry> WITH KEY k = iv_key.
|
||||
IF sy-subrc IS INITIAL.
|
||||
<ls_entry>-v = iv_val.
|
||||
|
@ -120,6 +140,8 @@ CLASS ZCL_ABAPGIT_STRING_MAP IMPLEMENTATION.
|
|||
INSERT ls_entry INTO TABLE mt_entries.
|
||||
ENDIF.
|
||||
|
||||
ro_map = me.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
94
src/utils/zcl_abapgit_string_map.clas.testclasses.abap
Normal file
94
src/utils/zcl_abapgit_string_map.clas.testclasses.abap
Normal file
|
@ -0,0 +1,94 @@
|
|||
CLASS ltcl_sm_test DEFINITION
|
||||
FINAL
|
||||
FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
METHODS simple FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS freeze FOR TESTING RAISING zcx_abapgit_exception.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_sm_test IMPLEMENTATION.
|
||||
|
||||
METHOD simple.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_cut = zcl_abapgit_string_map=>create( ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( )
|
||||
exp = abap_true ).
|
||||
|
||||
lo_cut->set(
|
||||
iv_key = 'A'
|
||||
iv_val = '1' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( )
|
||||
exp = abap_false ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->has( 'A' )
|
||||
exp = abap_true ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->get( 'A' )
|
||||
exp = '1' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->has( 'B' )
|
||||
exp = abap_false ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->get( 'B' )
|
||||
exp = '' ).
|
||||
|
||||
lo_cut->delete( 'A' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->is_empty( )
|
||||
exp = abap_true ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->has( 'A' )
|
||||
exp = abap_false ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lo_cut->get( 'A' )
|
||||
exp = '' ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD freeze.
|
||||
|
||||
DATA lo_cut TYPE REF TO zcl_abapgit_string_map.
|
||||
|
||||
lo_cut = zcl_abapgit_string_map=>create( ).
|
||||
lo_cut->set(
|
||||
iv_key = 'A'
|
||||
iv_val = '1' )->freeze( ).
|
||||
|
||||
TRY.
|
||||
lo_cut->set(
|
||||
iv_key = 'B'
|
||||
iv_val = '2' ).
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
CATCH zcx_abapgit_exception.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lo_cut->delete( 'A' ).
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
CATCH zcx_abapgit_exception.
|
||||
ENDTRY.
|
||||
|
||||
TRY.
|
||||
lo_cut->clear( ).
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
CATCH zcx_abapgit_exception.
|
||||
ENDTRY.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
|
@ -10,6 +10,7 @@
|
|||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
|
|
Loading…
Reference in New Issue
Block a user