From e07edcd18ffbfdcc63c5915d7e20b488002c1b75 Mon Sep 17 00:00:00 2001 From: Marc Bernard <59966492+mbtools@users.noreply.github.com> Date: Fri, 16 Feb 2024 09:31:29 +0100 Subject: [PATCH] Improve form validation of text fields (#6813) --- .../lib/zcl_abapgit_html_form_utils.clas.abap | 20 ++++++--- ...pgit_html_form_utils.clas.testclasses.abap | 45 +++++++++++++++++++ 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/src/ui/lib/zcl_abapgit_html_form_utils.clas.abap b/src/ui/lib/zcl_abapgit_html_form_utils.clas.abap index 0257be5c2..b5d734366 100644 --- a/src/ui/lib/zcl_abapgit_html_form_utils.clas.abap +++ b/src/ui/lib/zcl_abapgit_html_form_utils.clas.abap @@ -267,15 +267,21 @@ CLASS zcl_abapgit_html_form_utils IMPLEMENTATION. ENDIF. CASE -type. WHEN zif_abapgit_html_form=>c_field_type-text. - IF -min <> cl_abap_math=>min_int4 AND strlen( lv_value ) < -min. + IF -min = -max AND strlen( lv_value ) <> -min. ro_validation_log->set( iv_key = -name - iv_val = |{ -label } must not be shorter than { -min } characters| ). - ENDIF. - IF -max <> cl_abap_math=>max_int4 AND strlen( lv_value ) > -max. - ro_validation_log->set( - iv_key = -name - iv_val = |{ -label } must not be longer than { -max } characters| ). + iv_val = |{ -label } must be exactly { -min } characters long| ). + ELSE. + IF -min <> cl_abap_math=>min_int4 AND strlen( lv_value ) < -min. + ro_validation_log->set( + iv_key = -name + iv_val = |{ -label } must not be shorter than { -min } characters| ). + ENDIF. + IF -max <> cl_abap_math=>max_int4 AND strlen( lv_value ) > -max. + ro_validation_log->set( + iv_key = -name + iv_val = |{ -label } must not be longer than { -max } characters| ). + ENDIF. ENDIF. WHEN zif_abapgit_html_form=>c_field_type-number. TRY. diff --git a/src/ui/lib/zcl_abapgit_html_form_utils.clas.testclasses.abap b/src/ui/lib/zcl_abapgit_html_form_utils.clas.testclasses.abap index dd450dee4..32029b5bd 100644 --- a/src/ui/lib/zcl_abapgit_html_form_utils.clas.testclasses.abap +++ b/src/ui/lib/zcl_abapgit_html_form_utils.clas.testclasses.abap @@ -120,6 +120,7 @@ CLASS ltcl_test_form DEFINITION METHODS validate1 FOR TESTING RAISING zcx_abapgit_exception. METHODS validate2 FOR TESTING RAISING zcx_abapgit_exception. METHODS validate3 FOR TESTING RAISING zcx_abapgit_exception. + METHODS validate4 FOR TESTING RAISING zcx_abapgit_exception. METHODS normalize FOR TESTING RAISING zcx_abapgit_exception. METHODS is_empty FOR TESTING RAISING zcx_abapgit_exception. METHODS exit_clean FOR TESTING RAISING zcx_abapgit_exception. @@ -321,6 +322,50 @@ CLASS ltcl_test_form IMPLEMENTATION. ENDMETHOD. + METHOD validate4. + + DATA lo_cut TYPE REF TO zcl_abapgit_html_form_utils. + DATA lo_form TYPE REF TO zcl_abapgit_html_form. + DATA lo_form_data TYPE REF TO zcl_abapgit_string_map. + DATA lo_log TYPE REF TO zcl_abapgit_string_map. + + " New form + lo_form = zcl_abapgit_html_form=>create( ). + lo_form_data = zcl_abapgit_string_map=>create( ). + + lo_form->text( + iv_name = 'field5' + iv_min = 5 + iv_max = 5 + iv_label = 'Field name 5' ). + + lo_cut = zcl_abapgit_html_form_utils=>create( lo_form ). + + lo_form_data->set( + iv_key = 'field5' + iv_val = 'xy' ). + + lo_log = lo_cut->validate( lo_form_data ). + + cl_abap_unit_assert=>assert_equals( + act = lo_log->size( ) + exp = 1 ). + cl_abap_unit_assert=>assert_char_cp( + act = lo_log->get( 'field5' ) + exp = '*must be exactly*' ). + + lo_form_data->set( + iv_key = 'field5' + iv_val = 'abcde' ). + + lo_log = lo_cut->validate( lo_form_data ). + + cl_abap_unit_assert=>assert_equals( + act = lo_log->size( ) + exp = 0 ). + + ENDMETHOD. + METHOD normalize. DATA lo_cut TYPE REF TO zcl_abapgit_html_form_utils.