CLASS {{p}}t_print_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS a4_mono_price FOR TESTING. METHODS a4_color_price FOR TESTING. METHODS a3_a5_price FOR TESTING. METHODS volume_discount_5 FOR TESTING. METHODS volume_discount_10 FOR TESTING. METHODS minimum_charge FOR TESTING. METHODS copies_multiply FOR TESTING. METHODS rejects_zero_pages FOR TESTING. METHODS rejects_zero_copies FOR TESTING. METHODS rejects_unknown_values FOR TESTING. METHODS rejects_over_limit FOR TESTING. METHODS first_error_wins FOR TESTING. ENDCLASS. CLASS {{p}}t_print_hidden IMPLEMENTATION. METHOD a4_mono_price. DATA lv_cents TYPE i. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. DATA(lv_price) = lo_cut->calculate_price( iv_pages = 100 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ). lv_cents = lv_price * 100. cl_abap_unit_assert=>assert_equals( exp = 500 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD a4_color_price. DATA lv_cents TYPE i. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. DATA(lv_price) = lo_cut->calculate_price( iv_pages = 100 iv_copies = 1 iv_paper = 'A4' iv_color = 'C' iv_dept = 'SALE' ). lv_cents = lv_price * 100. cl_abap_unit_assert=>assert_equals( exp = 2000 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD a3_a5_price. DATA lv_cents TYPE i. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. DATA(lv_price) = lo_cut->calculate_price( iv_pages = 100 iv_copies = 1 iv_paper = 'A3' iv_color = 'M' iv_dept = 'PROD' ). lv_cents = lv_price * 100. cl_abap_unit_assert=>assert_equals( exp = 900 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. TRY. DATA(lv_a5) = lo_cut->calculate_price( iv_pages = 100 iv_copies = 1 iv_paper = 'A5' iv_color = 'M' iv_dept = 'HR' ). lv_cents = lv_a5 * 100. cl_abap_unit_assert=>assert_equals( exp = 300 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD volume_discount_5. DATA lv_cents TYPE i. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. DATA(lv_price) = lo_cut->calculate_price( iv_pages = 600 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'IT' ). lv_cents = lv_price * 100. cl_abap_unit_assert=>assert_equals( exp = 2850 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. TRY. DATA(lv_500) = lo_cut->calculate_price( iv_pages = 500 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'IT' ). lv_cents = lv_500 * 100. cl_abap_unit_assert=>assert_equals( exp = 2375 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD volume_discount_10. DATA lv_cents TYPE i. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. DATA(lv_price) = lo_cut->calculate_price( iv_pages = 1000 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ). lv_cents = lv_price * 100. cl_abap_unit_assert=>assert_equals( exp = 4500 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD minimum_charge. DATA lv_cents TYPE i. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. DATA(lv_price) = lo_cut->calculate_price( iv_pages = 10 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ). lv_cents = lv_price * 100. cl_abap_unit_assert=>assert_equals( exp = 100 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD copies_multiply. DATA lv_cents TYPE i. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. DATA(lv_price) = lo_cut->calculate_price( iv_pages = 200 iv_copies = 2 iv_paper = 'A3' iv_color = 'C' iv_dept = 'PROD' ). lv_cents = lv_price * 100. cl_abap_unit_assert=>assert_equals( exp = 14400 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD rejects_zero_pages. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. lo_cut->calculate_price( iv_pages = 0 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_print_job_error INTO DATA(lo_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_print_job_error=>c_reason-pages act = lo_error->mv_reason ). ENDTRY. ENDMETHOD. METHOD rejects_zero_copies. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. lo_cut->calculate_price( iv_pages = 100 iv_copies = 0 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_print_job_error INTO DATA(lo_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_print_job_error=>c_reason-copies act = lo_error->mv_reason ). ENDTRY. ENDMETHOD. METHOD rejects_unknown_values. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. lo_cut->calculate_price( iv_pages = 100 iv_copies = 1 iv_paper = 'B5' iv_color = 'M' iv_dept = 'SALE' ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_print_job_error INTO DATA(lo_paper). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_print_job_error=>c_reason-paper act = lo_paper->mv_reason ). ENDTRY. TRY. lo_cut->calculate_price( iv_pages = 100 iv_copies = 1 iv_paper = 'A4' iv_color = 'X' iv_dept = 'SALE' ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_print_job_error INTO DATA(lo_color). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_print_job_error=>c_reason-color act = lo_color->mv_reason ). ENDTRY. TRY. lo_cut->calculate_price( iv_pages = 100 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'XYZ' ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_print_job_error INTO DATA(lo_dept). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_print_job_error=>c_reason-dept act = lo_dept->mv_reason ). ENDTRY. ENDMETHOD. METHOD rejects_over_limit. DATA lv_cents TYPE i. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. lo_cut->calculate_price( iv_pages = 3000 iv_copies = 2 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_print_limit INTO DATA(lo_error). cl_abap_unit_assert=>assert_equals( exp = 6000 act = lo_error->mv_pages ). ENDTRY. TRY. DATA(lv_price) = lo_cut->calculate_price( iv_pages = 5000 iv_copies = 1 iv_paper = 'A4' iv_color = 'M' iv_dept = 'SALE' ). lv_cents = lv_price * 100. cl_abap_unit_assert=>assert_equals( exp = 22500 act = lv_cents ). CATCH cx_root. cl_abap_unit_assert=>fail( msg = 'unexpected exception' ). ENDTRY. ENDMETHOD. METHOD first_error_wins. DATA(lo_cut) = NEW {{p}}print_job_pricer( ). TRY. lo_cut->calculate_price( iv_pages = 0 iv_copies = 0 iv_paper = 'B5' iv_color = 'X' iv_dept = 'XYZ' ). cl_abap_unit_assert=>fail( msg = 'exception expected' ). CATCH {{p}}cx_print_job_error INTO DATA(lo_error). cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_print_job_error=>c_reason-pages act = lo_error->mv_reason ). ENDTRY. ENDMETHOD. ENDCLASS.