CLASS {{p}}game_stru_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. TYPES: BEGIN OF ty_comp, name TYPE string, type TYPE REF TO cl_abap_datadescr, END OF ty_comp, ty_comps TYPE STANDARD TABLE OF ty_comp WITH DEFAULT KEY. CLASS-DATA go_line TYPE REF TO cl_abap_structdescr. CLASS-METHODS class_setup. CLASS-METHODS flat_components RETURNING VALUE(rt_comp) TYPE ty_comps. METHODS structure_exists FOR TESTING. METHODS field_count FOR TESTING. METHODS field_names FOR TESTING. METHODS text_lengths FOR TESTING. METHODS numc_field FOR TESTING. METHODS packed_decimals FOR TESTING. METHODS type_kinds FOR TESTING. METHODS stamp_structure FOR TESTING. METHODS stamp_at_end FOR TESTING. ENDCLASS. CLASS {{p}}game_stru_hidden IMPLEMENTATION. METHOD class_setup. go_line = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name( '{{P}}GAME_ROUND' ) ). ENDMETHOD. METHOD flat_components. DATA(lt_comp) = go_line->get_components( ). LOOP AT lt_comp INTO DATA(ls_comp). TRY. DATA(lo_sub) = CAST cl_abap_structdescr( ls_comp-type ). DATA(lt_sub) = lo_sub->get_components( ). LOOP AT lt_sub INTO DATA(ls_sub). APPEND VALUE #( name = ls_sub-name type = ls_sub-type ) TO rt_comp. ENDLOOP. CATCH cx_sy_move_cast_error. APPEND VALUE #( name = ls_comp-name type = ls_comp-type ) TO rt_comp. ENDTRY. ENDLOOP. ENDMETHOD. METHOD structure_exists. cl_abap_unit_assert=>assert_equals( exp = abap_true act = contains( val = to_upper( go_line->absolute_name ) sub = `GAME_ROUND` ) ). ENDMETHOD. METHOD field_count. DATA(lt_comp) = flat_components( ). cl_abap_unit_assert=>assert_equals( exp = 10 act = lines( lt_comp ) ). ENDMETHOD. METHOD field_names. DATA(lt_comp) = flat_components( ). DATA(lt_exp) = VALUE string_table( ( `ROUND_ID` ) ( `PLAY_DATE` ) ( `FIELD_NO` ) ( `TEAM_NAME` ) ( `PLAYER_COUNT` ) ( `PAINTBALLS` ) ( `ROUND_FEE` ) ( `REFEREE` ) ( `LAST_EDITOR` ) ( `LAST_EDIT_ON` ) ). cl_abap_unit_assert=>assert_equals( exp = lines( lt_exp ) act = lines( lt_comp ) ). DATA(lv_index) = 0. LOOP AT lt_comp INTO DATA(ls_comp). lv_index = lv_index + 1. cl_abap_unit_assert=>assert_equals( exp = lt_exp[ lv_index ] act = to_upper( ls_comp-name ) msg = |Field { lv_index }| ). ENDLOOP. ENDMETHOD. METHOD text_lengths. DATA(lt_comp) = flat_components( ). LOOP AT lt_comp INTO DATA(ls_comp). DATA(lo_elem) = CAST cl_abap_elemdescr( ls_comp-type ). CASE to_upper( ls_comp-name ). WHEN 'ROUND_ID'. cl_abap_unit_assert=>assert_equals( exp = 20 act = lo_elem->length ). WHEN 'TEAM_NAME'. cl_abap_unit_assert=>assert_equals( exp = 40 act = lo_elem->length ). WHEN 'REFEREE'. cl_abap_unit_assert=>assert_equals( exp = 30 act = lo_elem->length ). WHEN 'LAST_EDITOR'. cl_abap_unit_assert=>assert_equals( exp = 24 act = lo_elem->length ). ENDCASE. ENDLOOP. ENDMETHOD. METHOD numc_field. DATA(lt_comp) = flat_components( ). LOOP AT lt_comp INTO DATA(ls_comp). IF to_upper( ls_comp-name ) = 'FIELD_NO'. DATA(lo_elem) = CAST cl_abap_elemdescr( ls_comp-type ). cl_abap_unit_assert=>assert_equals( exp = `N` act = CONV string( lo_elem->type_kind ) ). cl_abap_unit_assert=>assert_equals( exp = 4 act = lo_elem->length ). ENDIF. ENDLOOP. ENDMETHOD. METHOD packed_decimals. DATA(lt_comp) = flat_components( ). LOOP AT lt_comp INTO DATA(ls_comp). IF to_upper( ls_comp-name ) = 'ROUND_FEE'. DATA(lo_elem) = CAST cl_abap_elemdescr( ls_comp-type ). cl_abap_unit_assert=>assert_equals( exp = `P` act = CONV string( lo_elem->type_kind ) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lo_elem->decimals ). ENDIF. ENDLOOP. ENDMETHOD. METHOD type_kinds. DATA(lt_comp) = flat_components( ). DATA(lt_exp) = VALUE string_table( ( `C` ) ( `D` ) ( `N` ) ( `C` ) ( `I` ) ( `I` ) ( `P` ) ( `C` ) ( `C` ) ( `D` ) ). cl_abap_unit_assert=>assert_equals( exp = lines( lt_exp ) act = lines( lt_comp ) ). DATA(lv_index) = 0. LOOP AT lt_comp INTO DATA(ls_comp). lv_index = lv_index + 1. cl_abap_unit_assert=>assert_equals( exp = lt_exp[ lv_index ] act = CONV string( ls_comp-type->type_kind ) msg = |Type kind of field { lv_index }| ). ENDLOOP. ENDMETHOD. METHOD stamp_structure. DATA(lo_stamp) = CAST cl_abap_structdescr( cl_abap_typedescr=>describe_by_name( '{{P}}EDIT_STAMP' ) ). DATA(lt_comp) = lo_stamp->get_components( ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_comp ) ). cl_abap_unit_assert=>assert_equals( exp = `LAST_EDITOR` act = to_upper( lt_comp[ 1 ]-name ) ). cl_abap_unit_assert=>assert_equals( exp = `LAST_EDIT_ON` act = to_upper( lt_comp[ 2 ]-name ) ). DATA(lo_editor) = CAST cl_abap_elemdescr( lt_comp[ 1 ]-type ). cl_abap_unit_assert=>assert_equals( exp = 24 act = lo_editor->length ). DATA(lo_edit_on) = CAST cl_abap_elemdescr( lt_comp[ 2 ]-type ). cl_abap_unit_assert=>assert_equals( exp = `D` act = CONV string( lo_edit_on->type_kind ) ). ENDMETHOD. METHOD stamp_at_end. DATA(lt_comp) = flat_components( ). DATA(lv_lines) = lines( lt_comp ). cl_abap_unit_assert=>assert_equals( exp = 10 act = lv_lines ). DATA(lv_index) = lv_lines - 1. DATA(ls_editor) = lt_comp[ lv_index ]. cl_abap_unit_assert=>assert_equals( exp = `LAST_EDITOR` act = to_upper( ls_editor-name ) ). DATA(ls_edit_on) = lt_comp[ lv_lines ]. cl_abap_unit_assert=>assert_equals( exp = `LAST_EDIT_ON` act = to_upper( ls_edit_on-name ) ). ENDMETHOD. ENDCLASS.