Fix coverage with several contract classes; table annotation and file path checks; clean task dir on write
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
@@ -0,0 +1,15 @@
|
||||
CLASS {{p}}cx_ferry_error DEFINITION PUBLIC INHERITING FROM cx_static_check FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
DATA reason TYPE {{p}}if_ferry_reason=>ty_reason READ-ONLY.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING iv_reason TYPE {{p}}if_ferry_reason=>ty_reason.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}cx_ferry_error IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
super->constructor( ).
|
||||
reason = iv_reason.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,92 @@
|
||||
CLASS {{p}}ferry_load_check DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_plate TYPE c LENGTH 10.
|
||||
TYPES ty_category TYPE c LENGTH 1.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_vehicle,
|
||||
plate TYPE ty_plate,
|
||||
category TYPE ty_category,
|
||||
weight_kg TYPE i,
|
||||
length_cm TYPE i,
|
||||
height_cm TYPE i,
|
||||
hazard TYPE abap_bool,
|
||||
END OF ty_vehicle.
|
||||
|
||||
METHODS check_vehicle
|
||||
IMPORTING is_vehicle TYPE ty_vehicle
|
||||
RAISING {{p}}cx_ferry_error.
|
||||
|
||||
METHODS check_loading
|
||||
IMPORTING is_vehicle TYPE ty_vehicle
|
||||
iv_free_weight TYPE i
|
||||
iv_free_length TYPE i
|
||||
iv_max_height TYPE i
|
||||
RAISING {{p}}cx_ferry_error.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS raise_reason
|
||||
IMPORTING iv_reason TYPE {{p}}if_ferry_reason=>ty_reason
|
||||
RAISING {{p}}cx_ferry_error.
|
||||
|
||||
METHODS is_plate_valid
|
||||
IMPORTING iv_plate TYPE ty_plate
|
||||
RETURNING VALUE(rv_valid) TYPE abap_bool.
|
||||
|
||||
METHODS is_category_valid
|
||||
IMPORTING iv_category TYPE ty_category
|
||||
RETURNING VALUE(rv_valid) TYPE abap_bool.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}ferry_load_check IMPLEMENTATION.
|
||||
METHOD check_vehicle.
|
||||
IF is_plate_valid( is_vehicle-plate ) = abap_false.
|
||||
raise_reason( {{p}}if_ferry_reason=>c_reason-plate ).
|
||||
ENDIF.
|
||||
IF is_category_valid( is_vehicle-category ) = abap_false.
|
||||
raise_reason( {{p}}if_ferry_reason=>c_reason-category ).
|
||||
ENDIF.
|
||||
IF is_vehicle-weight_kg <= 0.
|
||||
raise_reason( {{p}}if_ferry_reason=>c_reason-weight ).
|
||||
ENDIF.
|
||||
IF is_vehicle-length_cm <= 0 OR is_vehicle-height_cm <= 0.
|
||||
raise_reason( {{p}}if_ferry_reason=>c_reason-size ).
|
||||
ENDIF.
|
||||
IF is_vehicle-hazard = abap_true AND is_vehicle-category <> 'T'.
|
||||
raise_reason( {{p}}if_ferry_reason=>c_reason-hazard ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_loading.
|
||||
check_vehicle( is_vehicle ).
|
||||
IF is_vehicle-height_cm > iv_max_height.
|
||||
raise_reason( {{p}}if_ferry_reason=>c_reason-height ).
|
||||
ENDIF.
|
||||
IF is_vehicle-weight_kg > iv_free_weight.
|
||||
raise_reason( {{p}}if_ferry_reason=>c_reason-weight_limit ).
|
||||
ENDIF.
|
||||
IF is_vehicle-length_cm > iv_free_length.
|
||||
raise_reason( {{p}}if_ferry_reason=>c_reason-length_limit ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD raise_reason.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_ferry_error
|
||||
EXPORTING
|
||||
iv_reason = iv_reason.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_plate_valid.
|
||||
DATA lv_plate TYPE string.
|
||||
lv_plate = to_upper( iv_plate ).
|
||||
REPLACE ALL OCCURRENCES OF ` ` IN lv_plate WITH ``.
|
||||
rv_valid = xsdbool( lv_plate IS NOT INITIAL
|
||||
AND lv_plate CO 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-' ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD is_category_valid.
|
||||
rv_valid = xsdbool( iv_category = 'C' OR iv_category = 'V'
|
||||
OR iv_category = 'T' OR iv_category = 'B' ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,114 @@
|
||||
CLASS ltc_ferry_load_check DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}ferry_load_check.
|
||||
DATA mo_error TYPE REF TO {{p}}cx_ferry_error.
|
||||
METHODS setup.
|
||||
METHODS valid_car_is_ok FOR TESTING.
|
||||
METHODS empty_plate_rejected FOR TESTING.
|
||||
METHODS hazard_in_car_rejected FOR TESTING.
|
||||
METHODS weight_limit_rejected FOR TESTING.
|
||||
METHODS plate_error_wins FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_ferry_load_check IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}ferry_load_check( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_car_is_ok.
|
||||
DATA(ls_vehicle) = VALUE {{p}}ferry_load_check=>ty_vehicle(
|
||||
plate = 'B-AB 1234'
|
||||
category = 'C'
|
||||
weight_kg = 1500
|
||||
length_cm = 450
|
||||
height_cm = 150
|
||||
hazard = abap_false ).
|
||||
TRY.
|
||||
mo_cut->check_loading( is_vehicle = ls_vehicle
|
||||
iv_free_weight = 5000
|
||||
iv_free_length = 2000
|
||||
iv_max_height = 200 ).
|
||||
CATCH {{p}}cx_ferry_error INTO mo_error.
|
||||
cl_abap_unit_assert=>fail( msg = mo_error->reason ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD empty_plate_rejected.
|
||||
DATA(ls_vehicle) = VALUE {{p}}ferry_load_check=>ty_vehicle(
|
||||
plate = space
|
||||
category = 'C'
|
||||
weight_kg = 1500
|
||||
length_cm = 450
|
||||
height_cm = 150
|
||||
hazard = abap_false ).
|
||||
TRY.
|
||||
mo_cut->check_vehicle( is_vehicle = ls_vehicle ).
|
||||
cl_abap_unit_assert=>fail( msg = 'empty plate accepted' ).
|
||||
CATCH {{p}}cx_ferry_error INTO mo_error.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_ferry_reason=>c_reason-plate
|
||||
act = mo_error->reason ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD hazard_in_car_rejected.
|
||||
DATA(ls_vehicle) = VALUE {{p}}ferry_load_check=>ty_vehicle(
|
||||
plate = 'B-AB 1234'
|
||||
category = 'C'
|
||||
weight_kg = 1500
|
||||
length_cm = 450
|
||||
height_cm = 150
|
||||
hazard = abap_true ).
|
||||
TRY.
|
||||
mo_cut->check_vehicle( is_vehicle = ls_vehicle ).
|
||||
cl_abap_unit_assert=>fail( msg = 'hazard in car accepted' ).
|
||||
CATCH {{p}}cx_ferry_error INTO mo_error.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_ferry_reason=>c_reason-hazard
|
||||
act = mo_error->reason ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD weight_limit_rejected.
|
||||
DATA(ls_vehicle) = VALUE {{p}}ferry_load_check=>ty_vehicle(
|
||||
plate = 'B-AB 1234'
|
||||
category = 'C'
|
||||
weight_kg = 6000
|
||||
length_cm = 450
|
||||
height_cm = 150
|
||||
hazard = abap_false ).
|
||||
TRY.
|
||||
mo_cut->check_loading( is_vehicle = ls_vehicle
|
||||
iv_free_weight = 5000
|
||||
iv_free_length = 2000
|
||||
iv_max_height = 200 ).
|
||||
cl_abap_unit_assert=>fail( msg = 'weight limit accepted' ).
|
||||
CATCH {{p}}cx_ferry_error INTO mo_error.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_ferry_reason=>c_reason-weight_limit
|
||||
act = mo_error->reason ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD plate_error_wins.
|
||||
DATA(ls_vehicle) = VALUE {{p}}ferry_load_check=>ty_vehicle(
|
||||
plate = space
|
||||
category = 'C'
|
||||
weight_kg = 9999
|
||||
length_cm = 450
|
||||
height_cm = 150
|
||||
hazard = abap_false ).
|
||||
TRY.
|
||||
mo_cut->check_loading( is_vehicle = ls_vehicle
|
||||
iv_free_weight = 1000
|
||||
iv_free_length = 2000
|
||||
iv_max_height = 200 ).
|
||||
cl_abap_unit_assert=>fail( msg = 'empty plate accepted' ).
|
||||
CATCH {{p}}cx_ferry_error INTO mo_error.
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = {{p}}if_ferry_reason=>c_reason-plate
|
||||
act = mo_error->reason ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user