CLASS {{p}}lift_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS make_plan IMPORTING iv_crane TYPE string DEFAULT 'K-7' iv_load TYPE decfloat34 DEFAULT 1000 iv_capacity TYPE decfloat34 DEFAULT 1000 iv_wind TYPE decfloat34 DEFAULT 20 RETURNING VALUE(rs_plan) TYPE {{p}}lift_check=>ty_lift_plan. METHODS check_plan IMPORTING iv_crane TYPE string DEFAULT 'K-7' iv_load TYPE decfloat34 DEFAULT 1000 iv_capacity TYPE decfloat34 DEFAULT 1000 iv_wind TYPE decfloat34 DEFAULT 20 EXPORTING ev_text TYPE string. METHODS msg_001_text FOR TESTING. METHODS msg_002_text FOR TESTING. METHODS msg_003_text FOR TESTING. METHODS msg_004_text FOR TESTING. METHODS msg_005_text FOR TESTING. METHODS no_crane_raises FOR TESTING. METHODS overload_raises FOR TESTING. METHODS wind_raises FOR TESTING. METHODS crane_rule_first FOR TESTING. METHODS wind_limit_ok FOR TESTING. METHODS valid_plan_passes FOR TESTING. ENDCLASS. CLASS {{p}}lift_hidden IMPLEMENTATION. METHOD make_plan. rs_plan = VALUE #( plan_id = 'L-100' crane_id = iv_crane load_kg = iv_load capacity_kg = iv_capacity wind_kmh = iv_wind ). ENDMETHOD. METHOD check_plan. CLEAR ev_text. DATA(ls_plan) = make_plan( iv_crane = iv_crane iv_load = iv_load iv_capacity = iv_capacity iv_wind = iv_wind ). DATA(lo_check) = NEW {{p}}lift_check( ). TRY. lo_check->check_lift_plan( ls_plan ). CATCH {{p}}cx_crane_error INTO DATA(lo_error). ev_text = lo_error->get_message_text( ). ENDTRY. ENDMETHOD. METHOD msg_001_text. DATA lv_text TYPE string. MESSAGE ID '{{P}}MSG_CRANE' TYPE 'E' NUMBER '001' WITH 'L-100' INTO lv_text. cl_abap_unit_assert=>assert_equals( exp = 'Lift plan L-100 has no crane' act = lv_text ). ENDMETHOD. METHOD msg_002_text. DATA lv_text TYPE string. MESSAGE ID '{{P}}MSG_CRANE' TYPE 'E' NUMBER '002' WITH 'L-100' 'K-7' INTO lv_text. cl_abap_unit_assert=>assert_equals( exp = 'Lift plan L-100 is too heavy for crane K-7' act = lv_text ). ENDMETHOD. METHOD msg_003_text. DATA lv_text TYPE string. MESSAGE ID '{{P}}MSG_CRANE' TYPE 'E' NUMBER '003' WITH 'L-100' INTO lv_text. cl_abap_unit_assert=>assert_equals( exp = 'Lift plan L-100 is blocked because of wind' act = lv_text ). ENDMETHOD. METHOD msg_004_text. DATA lv_text TYPE string. MESSAGE ID '{{P}}MSG_CRANE' TYPE 'W' NUMBER '004' WITH 'L-100' INTO lv_text. cl_abap_unit_assert=>assert_equals( exp = 'Lift plan L-100 is near the load limit' act = lv_text ). ENDMETHOD. METHOD msg_005_text. DATA lv_text TYPE string. MESSAGE ID '{{P}}MSG_CRANE' TYPE 'I' NUMBER '005' WITH 'L-100' INTO lv_text. cl_abap_unit_assert=>assert_equals( exp = 'Lift plan L-100 is approved' act = lv_text ). ENDMETHOD. METHOD no_crane_raises. check_plan( EXPORTING iv_crane = '' IMPORTING ev_text = DATA(lv_text) ). cl_abap_unit_assert=>assert_equals( exp = 'Lift plan L-100 has no crane' act = lv_text ). ENDMETHOD. METHOD overload_raises. check_plan( EXPORTING iv_load = 1200 iv_capacity = 1000 IMPORTING ev_text = DATA(lv_text) ). cl_abap_unit_assert=>assert_equals( exp = 'Lift plan L-100 is too heavy for crane K-7' act = lv_text ). ENDMETHOD. METHOD wind_raises. check_plan( EXPORTING iv_wind = 75 IMPORTING ev_text = DATA(lv_text) ). cl_abap_unit_assert=>assert_equals( exp = 'Lift plan L-100 is blocked because of wind' act = lv_text ). ENDMETHOD. METHOD crane_rule_first. check_plan( EXPORTING iv_crane = '' iv_load = 1200 iv_capacity = 1000 iv_wind = 90 IMPORTING ev_text = DATA(lv_text) ). cl_abap_unit_assert=>assert_equals( exp = 'Lift plan L-100 has no crane' act = lv_text ). ENDMETHOD. METHOD wind_limit_ok. check_plan( EXPORTING iv_wind = 60 IMPORTING ev_text = DATA(lv_text) ). cl_abap_unit_assert=>assert_equals( exp = '' act = lv_text ). ENDMETHOD. METHOD valid_plan_passes. check_plan( EXPORTING iv_crane = 'K-9' iv_load = 900 iv_capacity = 1000 iv_wind = 10 IMPORTING ev_text = DATA(lv_text) ). cl_abap_unit_assert=>assert_equals( exp = '' act = lv_text ). ENDMETHOD. ENDCLASS.