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,133 @@
CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO {{p}}departure_planner.
METHODS setup.
METHODS empty_planner FOR TESTING.
METHODS add_counts FOR TESTING.
METHODS duplicate_ignored FOR TESTING.
METHODS duplicate_in_one_call FOR TESTING.
METHODS next_earliest FOR TESTING.
METHODS next_from_exact_time FOR TESTING.
METHODS next_after_last FOR TESTING.
METHODS next_unknown_stop FOR TESTING.
METHODS stop_list_sorted FOR TESTING.
METHODS stop_list_unknown FOR TESTING.
METHODS add_empty_no_change FOR TESTING.
METHODS departures_d1
RETURNING VALUE(rt_departures) TYPE {{p}}departure_planner=>tt_departures.
METHODS departures_d2
RETURNING VALUE(rt_departures) TYPE {{p}}departure_planner=>tt_departures.
ENDCLASS.
CLASS {{p}}t02_hidden IMPLEMENTATION.
METHOD setup.
mo_cut = NEW {{p}}departure_planner( ).
ENDMETHOD.
METHOD departures_d1.
rt_departures = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' )
( stop = 'A100' line = 'L20' depart = '083000' )
( stop = 'B200' line = 'L10' depart = '090000' ) ).
ENDMETHOD.
METHOD departures_d2.
rt_departures = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' )
( stop = 'A100' line = 'L15' depart = '081500' )
( stop = 'A100' line = 'L30' depart = '081500' )
( stop = 'C300' line = 'L30' depart = '070000' ) ).
ENDMETHOD.
METHOD empty_planner.
cl_abap_unit_assert=>assert_equals( exp = 0 act = mo_cut->count( ) ).
DATA ls_next TYPE {{p}}departure_planner=>ty_departure.
ls_next = mo_cut->next_departure( iv_stop = 'A100' iv_from = '000000' ).
cl_abap_unit_assert=>assert_initial( act = ls_next-stop ).
cl_abap_unit_assert=>assert_equals( exp = 0
act = lines( mo_cut->departures_at_stop( 'A100' ) ) ).
ENDMETHOD.
METHOD add_counts.
mo_cut->add_depot( iv_depot = 'D1' it_departures = departures_d1( ) ).
cl_abap_unit_assert=>assert_equals( exp = 3 act = mo_cut->count( ) ).
ENDMETHOD.
METHOD duplicate_ignored.
mo_cut->add_depot( iv_depot = 'D1' it_departures = departures_d1( ) ).
mo_cut->add_depot( iv_depot = 'D2' it_departures = departures_d2( ) ).
cl_abap_unit_assert=>assert_equals( exp = 6 act = mo_cut->count( ) ).
DATA lt_stop TYPE {{p}}departure_planner=>tt_departures.
lt_stop = mo_cut->departures_at_stop( 'A100' ).
DATA ls_row TYPE {{p}}departure_planner=>ty_departure.
READ TABLE lt_stop INTO ls_row WITH KEY line = 'L10' depart = '080000'.
cl_abap_unit_assert=>assert_equals( exp = 'D1' act = ls_row-depot ).
ENDMETHOD.
METHOD duplicate_in_one_call.
DATA lt_input TYPE {{p}}departure_planner=>tt_departures.
lt_input = departures_d1( ).
DATA ls_first TYPE {{p}}departure_planner=>ty_departure.
ls_first = lt_input[ 1 ].
APPEND ls_first TO lt_input.
mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ).
cl_abap_unit_assert=>assert_equals( exp = 3 act = mo_cut->count( ) ).
ENDMETHOD.
METHOD next_earliest.
mo_cut->add_depot( iv_depot = 'D1' it_departures = departures_d1( ) ).
DATA ls_next TYPE {{p}}departure_planner=>ty_departure.
ls_next = mo_cut->next_departure( iv_stop = 'A100' iv_from = '000000' ).
cl_abap_unit_assert=>assert_equals( exp = 'L10' act = ls_next-line ).
cl_abap_unit_assert=>assert_equals( exp = '080000' act = ls_next-depart ).
cl_abap_unit_assert=>assert_equals( exp = 'D1' act = ls_next-depot ).
ENDMETHOD.
METHOD next_from_exact_time.
mo_cut->add_depot( iv_depot = 'D1' it_departures = departures_d1( ) ).
DATA ls_next TYPE {{p}}departure_planner=>ty_departure.
ls_next = mo_cut->next_departure( iv_stop = 'A100' iv_from = '083000' ).
cl_abap_unit_assert=>assert_equals( exp = 'L20' act = ls_next-line ).
cl_abap_unit_assert=>assert_equals( exp = '083000' act = ls_next-depart ).
ENDMETHOD.
METHOD next_after_last.
mo_cut->add_depot( iv_depot = 'D1' it_departures = departures_d1( ) ).
DATA ls_next TYPE {{p}}departure_planner=>ty_departure.
ls_next = mo_cut->next_departure( iv_stop = 'A100' iv_from = '083001' ).
cl_abap_unit_assert=>assert_initial( act = ls_next-stop ).
ENDMETHOD.
METHOD next_unknown_stop.
mo_cut->add_depot( iv_depot = 'D1' it_departures = departures_d1( ) ).
DATA ls_next TYPE {{p}}departure_planner=>ty_departure.
ls_next = mo_cut->next_departure( iv_stop = 'Z999' iv_from = '000000' ).
cl_abap_unit_assert=>assert_initial( act = ls_next-stop ).
ENDMETHOD.
METHOD stop_list_sorted.
mo_cut->add_depot( iv_depot = 'D1' it_departures = departures_d1( ) ).
mo_cut->add_depot( iv_depot = 'D2' it_departures = departures_d2( ) ).
DATA lt_stop TYPE {{p}}departure_planner=>tt_departures.
lt_stop = mo_cut->departures_at_stop( 'A100' ).
cl_abap_unit_assert=>assert_equals( exp = 4 act = lines( lt_stop ) ).
cl_abap_unit_assert=>assert_equals( exp = '080000' act = lt_stop[ 1 ]-depart ).
cl_abap_unit_assert=>assert_equals( exp = '081500' act = lt_stop[ 2 ]-depart ).
cl_abap_unit_assert=>assert_equals( exp = 'L15' act = lt_stop[ 2 ]-line ).
cl_abap_unit_assert=>assert_equals( exp = 'L30' act = lt_stop[ 3 ]-line ).
cl_abap_unit_assert=>assert_equals( exp = '083000' act = lt_stop[ 4 ]-depart ).
ENDMETHOD.
METHOD stop_list_unknown.
mo_cut->add_depot( iv_depot = 'D1' it_departures = departures_d1( ) ).
cl_abap_unit_assert=>assert_equals( exp = 0
act = lines( mo_cut->departures_at_stop( 'Z999' ) ) ).
ENDMETHOD.
METHOD add_empty_no_change.
mo_cut->add_depot( iv_depot = 'D1' it_departures = departures_d1( ) ).
DATA lt_empty TYPE {{p}}departure_planner=>tt_departures.
mo_cut->add_depot( iv_depot = 'D2' it_departures = lt_empty ).
cl_abap_unit_assert=>assert_equals( exp = 3 act = mo_cut->count( ) ).
ENDMETHOD.
ENDCLASS.