CLASS ltc_departure_planner DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}departure_planner. METHODS setup. METHODS stores_depot FOR TESTING. METHODS ignores_duplicate FOR TESTING. METHODS next_departure_ok FOR TESTING. METHODS next_departure_none FOR TESTING. METHODS stop_list_ok FOR TESTING. METHODS empty_input_ok FOR TESTING. ENDCLASS. CLASS ltc_departure_planner IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}departure_planner( ). ENDMETHOD. METHOD stores_depot. DATA lt_input TYPE {{p}}departure_planner=>tt_departures. lt_input = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' ) ). mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ). cl_abap_unit_assert=>assert_equals( exp = 1 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_equals( exp = 'D1' act = ls_next-depot ). ENDMETHOD. METHOD ignores_duplicate. DATA lt_input TYPE {{p}}departure_planner=>tt_departures. lt_input = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' ) ). mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ). mo_cut->add_depot( iv_depot = 'D2' it_departures = lt_input ). cl_abap_unit_assert=>assert_equals( exp = 1 act = mo_cut->count( ) ). ENDMETHOD. METHOD next_departure_ok. DATA lt_input TYPE {{p}}departure_planner=>tt_departures. lt_input = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' ) ( stop = 'A100' line = 'L20' depart = '083000' ) ). mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ). DATA ls_next TYPE {{p}}departure_planner=>ty_departure. ls_next = mo_cut->next_departure( iv_stop = 'A100' iv_from = '080001' ). cl_abap_unit_assert=>assert_equals( exp = 'L20' act = ls_next-line ). ENDMETHOD. METHOD next_departure_none. DATA lt_input TYPE {{p}}departure_planner=>tt_departures. lt_input = VALUE #( ( stop = 'A100' line = 'L10' depart = '080000' ) ). mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ). DATA ls_next TYPE {{p}}departure_planner=>ty_departure. ls_next = mo_cut->next_departure( iv_stop = 'A100' iv_from = '090000' ). cl_abap_unit_assert=>assert_initial( act = ls_next-stop ). ENDMETHOD. METHOD stop_list_ok. DATA lt_input TYPE {{p}}departure_planner=>tt_departures. lt_input = VALUE #( ( stop = 'A100' line = 'L20' depart = '083000' ) ( stop = 'A100' line = 'L10' depart = '080000' ) ). mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ). DATA lt_stop TYPE {{p}}departure_planner=>tt_departures. lt_stop = mo_cut->departures_at_stop( 'A100' ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_stop ) ). cl_abap_unit_assert=>assert_equals( exp = '080000' act = lt_stop[ 1 ]-depart ). ENDMETHOD. METHOD empty_input_ok. DATA lt_input TYPE {{p}}departure_planner=>tt_departures. mo_cut->add_depot( iv_depot = 'D1' it_departures = lt_input ). cl_abap_unit_assert=>assert_equals( exp = 0 act = mo_cut->count( ) ). ENDMETHOD. ENDCLASS.