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.