CLASS {{p}}t31_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}league_table. METHODS setup. METHODS basic_league RETURNING VALUE(rt_matches) TYPE {{p}}league_table=>tt_match. METHODS empty_input_is_empty FOR TESTING. METHODS ignores_invalid_matches FOR TESTING. METHODS counts_played_and_points FOR TESTING. METHODS accumulates_goals FOR TESTING. METHODS sorts_by_points FOR TESTING. METHODS sorts_by_goal_diff FOR TESTING. METHODS sorts_by_goals_for FOR TESTING. METHODS sorts_by_team_name FOR TESTING. METHODS ties_share_rank FOR TESTING. METHODS rank_jumps_after_tie FOR TESTING. ENDCLASS. CLASS {{p}}t31_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}league_table( ). ENDMETHOD. METHOD basic_league. rt_matches = VALUE #( ( home_team = 'A' away_team = 'B' home_goals = 2 away_goals = 0 ) ( home_team = 'A' away_team = 'C' home_goals = 1 away_goals = 1 ) ( home_team = 'B' away_team = 'C' home_goals = 3 away_goals = 1 ) ( home_team = 'C' away_team = 'D' home_goals = 2 away_goals = 2 ) ( home_team = 'D' away_team = 'A' home_goals = 0 away_goals = 3 ) ). ENDMETHOD. METHOD empty_input_is_empty. DATA(lt_table) = mo_cut->evaluate( VALUE {{p}}league_table=>tt_match( ) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_table ) ). ENDMETHOD. METHOD ignores_invalid_matches. DATA(lt_matches) = VALUE {{p}}league_table=>tt_match( ( home_team = '' away_team = 'B' home_goals = 1 away_goals = 0 ) ( home_team = 'A' away_team = '' home_goals = 1 away_goals = 0 ) ( home_team = 'A' away_team = 'A' home_goals = 1 away_goals = 0 ) ( home_team = 'A' away_team = 'B' home_goals = -1 away_goals = 0 ) ( home_team = 'A' away_team = 'B' home_goals = 0 away_goals = -2 ) ). DATA(lt_table) = mo_cut->evaluate( lt_matches ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_table ) ). ENDMETHOD. METHOD counts_played_and_points. DATA(lt_table) = mo_cut->evaluate( basic_league( ) ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lines( lt_table ) ). cl_abap_unit_assert=>assert_equals( exp = 'A' act = lt_table[ 1 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 3 act = lt_table[ 1 ]-played ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_table[ 1 ]-won ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 1 ]-drawn ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lt_table[ 1 ]-lost ). cl_abap_unit_assert=>assert_equals( exp = 7 act = lt_table[ 1 ]-points ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 1 ]-rank ). ENDMETHOD. METHOD accumulates_goals. DATA(lt_table) = mo_cut->evaluate( basic_league( ) ). cl_abap_unit_assert=>assert_equals( exp = 6 act = lt_table[ 1 ]-goals_for ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 1 ]-goals_against ). cl_abap_unit_assert=>assert_equals( exp = 5 act = lt_table[ 1 ]-goal_diff ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_table[ 4 ]-goals_for ). cl_abap_unit_assert=>assert_equals( exp = 5 act = lt_table[ 4 ]-goals_against ). cl_abap_unit_assert=>assert_equals( exp = -3 act = lt_table[ 4 ]-goal_diff ). ENDMETHOD. METHOD sorts_by_points. DATA(lt_table) = mo_cut->evaluate( basic_league( ) ). cl_abap_unit_assert=>assert_equals( exp = 'A' act = lt_table[ 1 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'B' act = lt_table[ 2 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'C' act = lt_table[ 3 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'D' act = lt_table[ 4 ]-team ). ENDMETHOD. METHOD sorts_by_goal_diff. DATA(lt_matches) = VALUE {{p}}league_table=>tt_match( ( home_team = 'P' away_team = 'R' home_goals = 3 away_goals = 0 ) ( home_team = 'Q' away_team = 'S' home_goals = 1 away_goals = 0 ) ). DATA(lt_table) = mo_cut->evaluate( lt_matches ). cl_abap_unit_assert=>assert_equals( exp = 'P' act = lt_table[ 1 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'Q' act = lt_table[ 2 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'S' act = lt_table[ 3 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'R' act = lt_table[ 4 ]-team ). ENDMETHOD. METHOD sorts_by_goals_for. DATA(lt_matches) = VALUE {{p}}league_table=>tt_match( ( home_team = 'P' away_team = 'R' home_goals = 2 away_goals = 0 ) ( home_team = 'Q' away_team = 'S' home_goals = 3 away_goals = 1 ) ). DATA(lt_table) = mo_cut->evaluate( lt_matches ). cl_abap_unit_assert=>assert_equals( exp = 'Q' act = lt_table[ 1 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'P' act = lt_table[ 2 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'S' act = lt_table[ 3 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'R' act = lt_table[ 4 ]-team ). ENDMETHOD. METHOD sorts_by_team_name. DATA(lt_matches) = VALUE {{p}}league_table=>tt_match( ( home_team = 'ZEBRA' away_team = 'Y' home_goals = 1 away_goals = 0 ) ( home_team = 'ALPHA' away_team = 'X' home_goals = 1 away_goals = 0 ) ). DATA(lt_table) = mo_cut->evaluate( lt_matches ). cl_abap_unit_assert=>assert_equals( exp = 'ALPHA' act = lt_table[ 1 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'ZEBRA' act = lt_table[ 2 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'X' act = lt_table[ 3 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 'Y' act = lt_table[ 4 ]-team ). ENDMETHOD. METHOD ties_share_rank. DATA(lt_matches) = VALUE {{p}}league_table=>tt_match( ( home_team = 'E' away_team = 'F' home_goals = 1 away_goals = 1 ) ( home_team = 'G' away_team = 'H' home_goals = 1 away_goals = 1 ) ). DATA(lt_table) = mo_cut->evaluate( lt_matches ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lines( lt_table ) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 1 ]-rank ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 2 ]-rank ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 3 ]-rank ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 4 ]-rank ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 1 ]-points ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 1 ]-drawn ). ENDMETHOD. METHOD rank_jumps_after_tie. DATA(lt_matches) = VALUE {{p}}league_table=>tt_match( ( home_team = 'A' away_team = 'B' home_goals = 1 away_goals = 0 ) ( home_team = 'C' away_team = 'D' home_goals = 1 away_goals = 1 ) ). DATA(lt_table) = mo_cut->evaluate( lt_matches ). cl_abap_unit_assert=>assert_equals( exp = 'A' act = lt_table[ 1 ]-team ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_table[ 1 ]-rank ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_table[ 2 ]-rank ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_table[ 3 ]-rank ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lt_table[ 4 ]-rank ). cl_abap_unit_assert=>assert_equals( exp = 'B' act = lt_table[ 4 ]-team ). ENDMETHOD. ENDCLASS.