CLASS {{p}}laundry_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PUBLIC SECTION. INTERFACES {{p}}if_laundry_fee. PRIVATE SECTION. METHODS reason_codes FOR TESTING. METHODS item_codes FOR TESTING. METHODS service_codes FOR TESTING. METHODS price_table FOR TESTING. METHODS factor_table FOR TESTING. METHODS limit_values FOR TESTING. METHODS char_type_lengths FOR TESTING. METHODS amount_type FOR TESTING. METHODS order_line_type FOR TESTING. METHODS methods_callable FOR TESTING. ENDCLASS. CLASS {{p}}laundry_hidden IMPLEMENTATION. METHOD {{p}}if_laundry_fee~check_item. rv_reason = {{p}}if_laundry_fee=>c_reason-ok. ENDMETHOD. METHOD {{p}}if_laundry_fee~calculate_fee. rv_fee = {{p}}if_laundry_fee=>c_min_fee. ENDMETHOD. METHOD {{p}}if_laundry_fee~calculate_order. rv_total = {{p}}if_laundry_fee=>c_min_fee. ENDMETHOD. METHOD reason_codes. DATA lv_reason TYPE {{p}}if_laundry_fee=>ty_reason. lv_reason = 'OK'. cl_abap_unit_assert=>assert_equals( exp = lv_reason act = {{p}}if_laundry_fee=>c_reason-ok ). lv_reason = 'ITEM'. cl_abap_unit_assert=>assert_equals( exp = lv_reason act = {{p}}if_laundry_fee=>c_reason-item ). lv_reason = 'SERVICE'. cl_abap_unit_assert=>assert_equals( exp = lv_reason act = {{p}}if_laundry_fee=>c_reason-service ). lv_reason = 'QTY'. cl_abap_unit_assert=>assert_equals( exp = lv_reason act = {{p}}if_laundry_fee=>c_reason-qty ). ENDMETHOD. METHOD item_codes. DATA lv_item TYPE {{p}}if_laundry_fee=>ty_item. lv_item = 'SHIRT'. cl_abap_unit_assert=>assert_equals( exp = lv_item act = {{p}}if_laundry_fee=>c_item-shirt ). lv_item = 'TROUS'. cl_abap_unit_assert=>assert_equals( exp = lv_item act = {{p}}if_laundry_fee=>c_item-trousers ). lv_item = 'SUIT'. cl_abap_unit_assert=>assert_equals( exp = lv_item act = {{p}}if_laundry_fee=>c_item-suit ). lv_item = 'COAT'. cl_abap_unit_assert=>assert_equals( exp = lv_item act = {{p}}if_laundry_fee=>c_item-coat ). lv_item = 'DRESS'. cl_abap_unit_assert=>assert_equals( exp = lv_item act = {{p}}if_laundry_fee=>c_item-dress ). lv_item = 'CURTAIN'. cl_abap_unit_assert=>assert_equals( exp = lv_item act = {{p}}if_laundry_fee=>c_item-curtain ). ENDMETHOD. METHOD service_codes. DATA lv_service TYPE {{p}}if_laundry_fee=>ty_service. lv_service = 'WASH'. cl_abap_unit_assert=>assert_equals( exp = lv_service act = {{p}}if_laundry_fee=>c_service-wash ). lv_service = 'DRYC'. cl_abap_unit_assert=>assert_equals( exp = lv_service act = {{p}}if_laundry_fee=>c_service-dryc ). lv_service = 'IRON'. cl_abap_unit_assert=>assert_equals( exp = lv_service act = {{p}}if_laundry_fee=>c_service-iron ). lv_service = 'MEND'. cl_abap_unit_assert=>assert_equals( exp = lv_service act = {{p}}if_laundry_fee=>c_service-mend ). ENDMETHOD. METHOD price_table. DATA lv_price TYPE {{p}}if_laundry_fee=>ty_amount. lv_price = '3.50'. cl_abap_unit_assert=>assert_equals( exp = lv_price act = {{p}}if_laundry_fee=>c_price-shirt ). lv_price = '5.00'. cl_abap_unit_assert=>assert_equals( exp = lv_price act = {{p}}if_laundry_fee=>c_price-trousers ). lv_price = '12.00'. cl_abap_unit_assert=>assert_equals( exp = lv_price act = {{p}}if_laundry_fee=>c_price-suit ). lv_price = '14.50'. cl_abap_unit_assert=>assert_equals( exp = lv_price act = {{p}}if_laundry_fee=>c_price-coat ). lv_price = '8.00'. cl_abap_unit_assert=>assert_equals( exp = lv_price act = {{p}}if_laundry_fee=>c_price-dress ). lv_price = '9.50'. cl_abap_unit_assert=>assert_equals( exp = lv_price act = {{p}}if_laundry_fee=>c_price-curtain ). ENDMETHOD. METHOD factor_table. DATA lv_factor TYPE i. lv_factor = 100. cl_abap_unit_assert=>assert_equals( exp = lv_factor act = {{p}}if_laundry_fee=>c_factor-wash ). lv_factor = 180. cl_abap_unit_assert=>assert_equals( exp = lv_factor act = {{p}}if_laundry_fee=>c_factor-dryc ). lv_factor = 40. cl_abap_unit_assert=>assert_equals( exp = lv_factor act = {{p}}if_laundry_fee=>c_factor-iron ). lv_factor = 220. cl_abap_unit_assert=>assert_equals( exp = lv_factor act = {{p}}if_laundry_fee=>c_factor-mend ). ENDMETHOD. METHOD limit_values. DATA lv_qty TYPE {{p}}if_laundry_fee=>ty_quantity. DATA lv_int TYPE i. DATA lv_fee TYPE {{p}}if_laundry_fee=>ty_amount. lv_qty = 99. cl_abap_unit_assert=>assert_equals( exp = lv_qty act = {{p}}if_laundry_fee=>c_max_qty ). lv_qty = 10. cl_abap_unit_assert=>assert_equals( exp = lv_qty act = {{p}}if_laundry_fee=>c_bulk_min_qty ). lv_int = 10. cl_abap_unit_assert=>assert_equals( exp = lv_int act = {{p}}if_laundry_fee=>c_bulk_discount ). lv_int = 25. cl_abap_unit_assert=>assert_equals( exp = lv_int act = {{p}}if_laundry_fee=>c_express_surcharge ). lv_fee = '5.00'. cl_abap_unit_assert=>assert_equals( exp = lv_fee act = {{p}}if_laundry_fee=>c_min_fee ). ENDMETHOD. METHOD char_type_lengths. DATA lv_item TYPE {{p}}if_laundry_fee=>ty_item. DATA lv_item_ref TYPE c LENGTH 7. DATA lv_service TYPE {{p}}if_laundry_fee=>ty_service. DATA lv_service_ref TYPE c LENGTH 4. DATA lv_reason TYPE {{p}}if_laundry_fee=>ty_reason. DATA lv_reason_ref TYPE c LENGTH 10. DATA lv_flag TYPE {{p}}if_laundry_fee=>ty_flag. DATA lv_flag_ref TYPE abap_bool. DATA(lo_item) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_item ) ). DATA(lo_item_ref) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_item_ref ) ). cl_abap_unit_assert=>assert_equals( exp = lo_item_ref->length act = lo_item->length ). cl_abap_unit_assert=>assert_equals( exp = lo_item_ref->type_kind act = lo_item->type_kind ). DATA(lo_service) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_service ) ). DATA(lo_service_ref) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_service_ref ) ). cl_abap_unit_assert=>assert_equals( exp = lo_service_ref->length act = lo_service->length ). cl_abap_unit_assert=>assert_equals( exp = lo_service_ref->type_kind act = lo_service->type_kind ). DATA(lo_reason) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_reason ) ). DATA(lo_reason_ref) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_reason_ref ) ). cl_abap_unit_assert=>assert_equals( exp = lo_reason_ref->length act = lo_reason->length ). cl_abap_unit_assert=>assert_equals( exp = lo_reason_ref->type_kind act = lo_reason->type_kind ). DATA(lo_flag) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_flag ) ). DATA(lo_flag_ref) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_flag_ref ) ). cl_abap_unit_assert=>assert_equals( exp = lo_flag_ref->length act = lo_flag->length ). cl_abap_unit_assert=>assert_equals( exp = lo_flag_ref->type_kind act = lo_flag->type_kind ). ENDMETHOD. METHOD amount_type. DATA lv_amount TYPE {{p}}if_laundry_fee=>ty_amount. DATA lv_amount_ref TYPE p LENGTH 8 DECIMALS 2. DATA(lo_amount) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_amount ) ). DATA(lo_amount_ref) = CAST cl_abap_elemdescr( cl_abap_typedescr=>describe_by_data( lv_amount_ref ) ). cl_abap_unit_assert=>assert_equals( exp = lo_amount_ref->type_kind act = lo_amount->type_kind ). cl_abap_unit_assert=>assert_equals( exp = lo_amount_ref->length act = lo_amount->length ). cl_abap_unit_assert=>assert_equals( exp = lo_amount_ref->decimals act = lo_amount->decimals ). ENDMETHOD. METHOD order_line_type. DATA ls_line TYPE {{p}}if_laundry_fee=>ty_order_line. DATA lt_lines TYPE {{p}}if_laundry_fee=>tt_order_line. ls_line-item = {{p}}if_laundry_fee=>c_item-shirt. ls_line-service = {{p}}if_laundry_fee=>c_service-wash. ls_line-quantity = 3. ls_line-express = abap_true. APPEND ls_line TO lt_lines. cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_lines ) ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_laundry_fee=>c_item-shirt act = lt_lines[ 1 ]-item ). cl_abap_unit_assert=>assert_equals( exp = 3 act = lt_lines[ 1 ]-quantity ). ENDMETHOD. METHOD methods_callable. DATA lo_cut TYPE REF TO {{p}}if_laundry_fee. DATA lt_lines TYPE {{p}}if_laundry_fee=>tt_order_line. lo_cut = NEW {{p}}laundry_hidden( ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_laundry_fee=>c_reason-ok act = lo_cut->check_item( iv_item = {{p}}if_laundry_fee=>c_item-shirt iv_service = {{p}}if_laundry_fee=>c_service-wash iv_quantity = 2 ) ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_laundry_fee=>c_min_fee act = lo_cut->calculate_fee( iv_item = {{p}}if_laundry_fee=>c_item-shirt iv_service = {{p}}if_laundry_fee=>c_service-wash iv_quantity = 2 iv_express = abap_false ) ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_laundry_fee=>c_min_fee act = lo_cut->calculate_order( lt_lines ) ). ENDMETHOD. ENDCLASS.