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:
Kral
2026-10-03 08:44:35 +02:00
parent fb576b0954
commit 03ab36149e
388 changed files with 28620 additions and 339 deletions

View File

@@ -0,0 +1,93 @@
CLASS {{p}}bag_drop DEFINITION PUBLIC FINAL CREATE PUBLIC.
PUBLIC SECTION.
TYPES:
ty_tag TYPE c LENGTH 10,
ty_weight TYPE p LENGTH 5 DECIMALS 2,
ty_size TYPE i,
ty_count TYPE i,
ty_minutes TYPE i.
METHODS accept_bag
IMPORTING
iv_tag TYPE ty_tag
iv_weight TYPE ty_weight
iv_length TYPE ty_size
iv_width TYPE ty_size
iv_height TYPE ty_size
iv_bags_checked TYPE ty_count
iv_min_to_dep TYPE ty_minutes
RAISING
{{p}}cx_bag_tag
{{p}}cx_bag_weight
{{p}}cx_bag_size
{{p}}cx_bag_limit
{{p}}cx_bag_late.
PRIVATE SECTION.
CONSTANTS:
c_max_weight TYPE ty_weight VALUE 23,
c_max_size TYPE ty_size VALUE 158,
c_max_bags TYPE ty_count VALUE 2,
c_min_minutes TYPE ty_minutes VALUE 40.
METHODS check_tag
IMPORTING iv_tag TYPE ty_tag
RAISING {{p}}cx_bag_tag.
METHODS check_weight
IMPORTING iv_weight TYPE ty_weight
RAISING {{p}}cx_bag_weight.
METHODS check_size
IMPORTING iv_length TYPE ty_size
iv_width TYPE ty_size
iv_height TYPE ty_size
RAISING {{p}}cx_bag_size.
METHODS check_bag_count
IMPORTING iv_bags_checked TYPE ty_count
RAISING {{p}}cx_bag_limit.
METHODS check_departure
IMPORTING iv_min_to_dep TYPE ty_minutes
RAISING {{p}}cx_bag_late.
ENDCLASS.
CLASS {{p}}bag_drop IMPLEMENTATION.
METHOD accept_bag.
check_tag( iv_tag ).
check_weight( iv_weight ).
check_size( iv_length = iv_length
iv_width = iv_width
iv_height = iv_height ).
check_bag_count( iv_bags_checked ).
check_departure( iv_min_to_dep ).
ENDMETHOD.
METHOD check_tag.
IF iv_tag CN '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'.
RAISE EXCEPTION TYPE {{p}}cx_bag_tag.
ENDIF.
ENDMETHOD.
METHOD check_weight.
IF iv_weight > c_max_weight.
RAISE EXCEPTION TYPE {{p}}cx_bag_weight.
ENDIF.
ENDMETHOD.
METHOD check_size.
IF iv_length + iv_width + iv_height > c_max_size.
RAISE EXCEPTION TYPE {{p}}cx_bag_size.
ENDIF.
ENDMETHOD.
METHOD check_bag_count.
IF iv_bags_checked >= c_max_bags.
RAISE EXCEPTION TYPE {{p}}cx_bag_limit.
ENDIF.
ENDMETHOD.
METHOD check_departure.
IF iv_min_to_dep < c_min_minutes.
RAISE EXCEPTION TYPE {{p}}cx_bag_late.
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,218 @@
CLASS ltc_bag_drop DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}bag_drop.
METHODS setup.
METHODS accepts_valid_bag FOR TESTING.
METHODS rejects_bad_tag FOR TESTING.
METHODS accepts_max_weight FOR TESTING.
METHODS rejects_overweight FOR TESTING.
METHODS accepts_max_size FOR TESTING.
METHODS rejects_oversize FOR TESTING.
METHODS accepts_one_bag FOR TESTING.
METHODS rejects_third_bag FOR TESTING.
METHODS accepts_40_minutes FOR TESTING.
METHODS rejects_39_minutes FOR TESTING.
METHODS tag_checked_first FOR TESTING.
ENDCLASS.
CLASS ltc_bag_drop IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}bag_drop( ).
ENDMETHOD.
METHOD accepts_valid_bag.
TRY.
mo_cut->accept_bag( iv_tag = 'AB12345678'
iv_weight = 20
iv_length = 55
iv_width = 40
iv_height = 20
iv_bags_checked = 0
iv_min_to_dep = 90 ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'A valid bag was rejected' ).
ENDTRY.
ENDMETHOD.
METHOD rejects_bad_tag.
DATA lv_tag TYPE {{p}}bag_drop=>ty_tag.
DATA lo_tag TYPE REF TO {{p}}cx_bag_tag.
TRY.
mo_cut->accept_bag( iv_tag = lv_tag
iv_weight = 20
iv_length = 55
iv_width = 40
iv_height = 20
iv_bags_checked = 0
iv_min_to_dep = 90 ).
cl_abap_unit_assert=>fail( msg = 'An empty tag was accepted' ).
CATCH {{p}}cx_bag_tag INTO lo_tag.
cl_abap_unit_assert=>assert_equals( exp = `Invalid bag tag` act = lo_tag->mv_text ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'Wrong exception type' ).
ENDTRY.
TRY.
mo_cut->accept_bag( iv_tag = 'AB-2345678'
iv_weight = 20
iv_length = 55
iv_width = 40
iv_height = 20
iv_bags_checked = 0
iv_min_to_dep = 90 ).
cl_abap_unit_assert=>fail( msg = 'A bag with a bad tag was accepted' ).
CATCH {{p}}cx_bag_tag INTO lo_tag.
cl_abap_unit_assert=>assert_equals( exp = `Invalid bag tag` act = lo_tag->mv_text ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'Wrong exception type' ).
ENDTRY.
ENDMETHOD.
METHOD accepts_max_weight.
TRY.
mo_cut->accept_bag( iv_tag = 'AB12345678'
iv_weight = 23
iv_length = 55
iv_width = 40
iv_height = 20
iv_bags_checked = 0
iv_min_to_dep = 90 ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'A bag at the weight limit was rejected' ).
ENDTRY.
ENDMETHOD.
METHOD rejects_overweight.
DATA lv_weight TYPE {{p}}bag_drop=>ty_weight.
DATA lo_weight TYPE REF TO {{p}}cx_bag_weight.
lv_weight = '23.01'.
TRY.
mo_cut->accept_bag( iv_tag = 'AB12345678'
iv_weight = lv_weight
iv_length = 55
iv_width = 40
iv_height = 20
iv_bags_checked = 0
iv_min_to_dep = 90 ).
cl_abap_unit_assert=>fail( msg = 'An overweight bag was accepted' ).
CATCH {{p}}cx_bag_weight INTO lo_weight.
cl_abap_unit_assert=>assert_equals( exp = `Bag is too heavy` act = lo_weight->mv_text ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'Wrong exception type' ).
ENDTRY.
ENDMETHOD.
METHOD accepts_max_size.
TRY.
mo_cut->accept_bag( iv_tag = 'AB12345678'
iv_weight = 20
iv_length = 70
iv_width = 50
iv_height = 38
iv_bags_checked = 0
iv_min_to_dep = 90 ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'A bag at the size limit was rejected' ).
ENDTRY.
ENDMETHOD.
METHOD rejects_oversize.
DATA lo_size TYPE REF TO {{p}}cx_bag_size.
TRY.
mo_cut->accept_bag( iv_tag = 'AB12345678'
iv_weight = 20
iv_length = 70
iv_width = 50
iv_height = 39
iv_bags_checked = 0
iv_min_to_dep = 90 ).
cl_abap_unit_assert=>fail( msg = 'An oversize bag was accepted' ).
CATCH {{p}}cx_bag_size INTO lo_size.
cl_abap_unit_assert=>assert_equals( exp = `Bag is too large` act = lo_size->mv_text ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'Wrong exception type' ).
ENDTRY.
ENDMETHOD.
METHOD accepts_one_bag.
TRY.
mo_cut->accept_bag( iv_tag = 'AB12345678'
iv_weight = 20
iv_length = 55
iv_width = 40
iv_height = 20
iv_bags_checked = 1
iv_min_to_dep = 90 ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'A second bag was rejected' ).
ENDTRY.
ENDMETHOD.
METHOD rejects_third_bag.
DATA lo_limit TYPE REF TO {{p}}cx_bag_limit.
TRY.
mo_cut->accept_bag( iv_tag = 'AB12345678'
iv_weight = 20
iv_length = 55
iv_width = 40
iv_height = 20
iv_bags_checked = 2
iv_min_to_dep = 90 ).
cl_abap_unit_assert=>fail( msg = 'A third bag was accepted' ).
CATCH {{p}}cx_bag_limit INTO lo_limit.
cl_abap_unit_assert=>assert_equals( exp = `Bag limit reached` act = lo_limit->mv_text ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'Wrong exception type' ).
ENDTRY.
ENDMETHOD.
METHOD accepts_40_minutes.
TRY.
mo_cut->accept_bag( iv_tag = 'AB12345678'
iv_weight = 20
iv_length = 55
iv_width = 40
iv_height = 20
iv_bags_checked = 0
iv_min_to_dep = 40 ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'A bag at the time limit was rejected' ).
ENDTRY.
ENDMETHOD.
METHOD rejects_39_minutes.
DATA lo_late TYPE REF TO {{p}}cx_bag_late.
TRY.
mo_cut->accept_bag( iv_tag = 'AB12345678'
iv_weight = 20
iv_length = 55
iv_width = 40
iv_height = 20
iv_bags_checked = 0
iv_min_to_dep = 39 ).
cl_abap_unit_assert=>fail( msg = 'A late bag was accepted' ).
CATCH {{p}}cx_bag_late INTO lo_late.
cl_abap_unit_assert=>assert_equals( exp = `Check-in closed` act = lo_late->mv_text ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'Wrong exception type' ).
ENDTRY.
ENDMETHOD.
METHOD tag_checked_first.
DATA lo_tag TYPE REF TO {{p}}cx_bag_tag.
TRY.
mo_cut->accept_bag( iv_tag = 'ab12345678'
iv_weight = 30
iv_length = 200
iv_width = 100
iv_height = 100
iv_bags_checked = 5
iv_min_to_dep = 10 ).
cl_abap_unit_assert=>fail( msg = 'A bag with a bad tag was accepted' ).
CATCH {{p}}cx_bag_tag INTO lo_tag.
cl_abap_unit_assert=>assert_equals( exp = `Invalid bag tag` act = lo_tag->mv_text ).
CATCH cx_root.
cl_abap_unit_assert=>fail( msg = 'Wrong exception type' ).
ENDTRY.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,13 @@
CLASS {{p}}cx_bag_late DEFINITION PUBLIC FINAL CREATE PUBLIC INHERITING FROM cx_static_check.
PUBLIC SECTION.
DATA mv_text TYPE string READ-ONLY.
METHODS constructor.
ENDCLASS.
CLASS {{p}}cx_bag_late IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
mv_text = 'Check-in closed'.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,13 @@
CLASS {{p}}cx_bag_limit DEFINITION PUBLIC FINAL CREATE PUBLIC INHERITING FROM cx_static_check.
PUBLIC SECTION.
DATA mv_text TYPE string READ-ONLY.
METHODS constructor.
ENDCLASS.
CLASS {{p}}cx_bag_limit IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
mv_text = 'Bag limit reached'.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,13 @@
CLASS {{p}}cx_bag_size DEFINITION PUBLIC FINAL CREATE PUBLIC INHERITING FROM cx_static_check.
PUBLIC SECTION.
DATA mv_text TYPE string READ-ONLY.
METHODS constructor.
ENDCLASS.
CLASS {{p}}cx_bag_size IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
mv_text = 'Bag is too large'.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,13 @@
CLASS {{p}}cx_bag_tag DEFINITION PUBLIC FINAL CREATE PUBLIC INHERITING FROM cx_static_check.
PUBLIC SECTION.
DATA mv_text TYPE string READ-ONLY.
METHODS constructor.
ENDCLASS.
CLASS {{p}}cx_bag_tag IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
mv_text = 'Invalid bag tag'.
ENDMETHOD.
ENDCLASS.

View File

@@ -0,0 +1,13 @@
CLASS {{p}}cx_bag_weight DEFINITION PUBLIC FINAL CREATE PUBLIC INHERITING FROM cx_static_check.
PUBLIC SECTION.
DATA mv_text TYPE string READ-ONLY.
METHODS constructor.
ENDCLASS.
CLASS {{p}}cx_bag_weight IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
mv_text = 'Bag is too heavy'.
ENDMETHOD.
ENDCLASS.