CLASS ltcl_test_app DEFINITION FOR TESTING. PUBLIC SECTION. INTERFACES if_serializable_object. TYPES: BEGIN OF ty_row, title TYPE string, value TYPE string, descr TYPE string, icon TYPE string, info TYPE string, selected TYPE abap_bool, checkbox TYPE abap_bool, END OF ty_row. CONSTANTS sv_status TYPE string VALUE `test` ##NEEDED. CLASS-DATA sv_var TYPE string. CLASS-DATA ss_tab TYPE ty_row. CLASS-DATA st_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. CLASS-METHODS class_constructor. DATA mv_val TYPE string ##NEEDED. DATA ms_tab TYPE ty_row ##NEEDED. DATA mt_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY ##NEEDED. PROTECTED SECTION. PRIVATE SECTION. ENDCLASS. CLASS ltcl_test_app IMPLEMENTATION. METHOD class_constructor. sv_var = 1. ss_tab = VALUE #( ). st_tab = VALUE #( ). ENDMETHOD. ENDCLASS. CLASS ltcl_unit_test_abap_api DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS check_input IMPORTING val TYPE data RETURNING VALUE(result) TYPE abap_bool. METHODS test_assign FOR TESTING RAISING cx_static_check. METHODS test_eledescr_rel_name FOR TESTING RAISING cx_static_check. METHODS test_classdescr FOR TESTING RAISING cx_static_check. METHODS test_substring_after FOR TESTING RAISING cx_static_check. METHODS test_substring_before FOR TESTING RAISING cx_static_check. METHODS test_string_shift FOR TESTING RAISING cx_static_check. METHODS test_string_replace FOR TESTING RAISING cx_static_check. METHODS test_raise_error FOR TESTING RAISING cx_static_check. METHODS test_xsdbool FOR TESTING RAISING cx_static_check. METHODS test_xsdbool_nested FOR TESTING RAISING cx_static_check. ENDCLASS. CLASS ltcl_unit_test DEFINITION FINAL FOR TESTING DURATION MEDIUM RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS test_create FOR TESTING RAISING cx_static_check. METHODS test_boolean_abap_2_json FOR TESTING RAISING cx_static_check. METHODS test_boolean_check FOR TESTING RAISING cx_static_check. METHODS test_c_trim FOR TESTING RAISING cx_static_check. METHODS test_c_trim_lower FOR TESTING RAISING cx_static_check. METHODS test_c_trim_upper FOR TESTING RAISING cx_static_check. METHODS test_c_replace_assign_struc FOR TESTING RAISING cx_static_check. METHODS test_time_get_timestampl FOR TESTING RAISING cx_static_check. METHODS test_time_substract_seconds FOR TESTING RAISING cx_static_check. METHODS test_func_get_uuid_32 FOR TESTING RAISING cx_static_check. METHODS test_func_get_uuid_22 FOR TESTING RAISING cx_static_check. METHODS test_func_get_user_tech FOR TESTING RAISING cx_static_check. METHODS test_rtti_get_classname_by_ref FOR TESTING RAISING cx_static_check. METHODS test_rtti_get_type_name FOR TESTING RAISING cx_static_check. METHODS test_rtti_get_type_kind FOR TESTING RAISING cx_static_check. METHODS test_rtti_check_type_kind FOR TESTING RAISING cx_static_check. METHODS test_rtti_get_t_attri_by_obj FOR TESTING RAISING cx_static_check. METHODS test_rtti_get_t_comp_by_struc FOR TESTING RAISING cx_static_check. METHODS test_trans_json_any_2__w_tab FOR TESTING RAISING cx_static_check. METHODS test_trans_json_any_2__w_struc FOR TESTING RAISING cx_static_check. METHODS test_trans_json_2_any__w_dref FOR TESTING RAISING cx_static_check. METHODS test_trans_ref_tab_2_tab FOR TESTING RAISING cx_static_check. METHODS test_trans_xml_any_2__w_obj FOR TESTING RAISING cx_static_check. METHODS test_trans_xml_any_2__w_data FOR TESTING RAISING cx_static_check. METHODS test_trans_xml_2_any__w_obj FOR TESTING RAISING cx_static_check. METHODS test_trans_xml_2_any__w_data FOR TESTING RAISING cx_static_check. METHODS test_url_param_create_url FOR TESTING RAISING cx_static_check. METHODS test_url_param_get FOR TESTING RAISING cx_static_check. METHODS test_url_param_get_tab FOR TESTING RAISING cx_static_check. METHODS test_url_param_set FOR TESTING RAISING cx_static_check. METHODS test_x_check_raise FOR TESTING RAISING cx_static_check. METHODS test_x_check_raise_not FOR TESTING RAISING cx_static_check. METHODS test_x_raise FOR TESTING RAISING cx_static_check. ENDCLASS. CLASS ltcl_unit_test_abap_api IMPLEMENTATION. METHOD test_assign. DATA(lo_app) = NEW ltcl_test_app( ). lo_app->mv_val = `ABC`. FIELD-SYMBOLS TYPE any. DATA(lv_assign) = `LO_APP->` && 'MV_VAL'. ASSIGN (lv_assign) TO . cl_abap_unit_assert=>assert_equals( act = exp = `ABC` ). ENDMETHOD. METHOD test_classdescr. DATA(lo_app) = NEW ltcl_test_app( ). DATA(lt_attri) = CAST cl_abap_classdescr( cl_abap_objectdescr=>describe_by_object_ref( lo_app ) )->attributes. DATA(lv_test) = lt_attri[ name = `MS_TAB` ]. lv_test = lt_attri[ name = `MT_TAB` ]. lv_test = lt_attri[ name = `MV_VAL` ]. lv_test = lt_attri[ name = `SS_TAB` ]. lv_test = lt_attri[ name = `ST_TAB` ]. lv_test = lt_attri[ name = `SV_STATUS` ]. lv_test = lt_attri[ name = `SV_VAR` ]. ENDMETHOD. METHOD test_eledescr_rel_name. DATA(lo_ele) = CAST cl_abap_elemdescr( cl_abap_elemdescr=>describe_by_data( abap_true ) ). cl_abap_unit_assert=>assert_equals( act = lo_ele->get_relative_name( ) exp = `ABAP_BOOL` ). ENDMETHOD. METHOD test_substring_after. cl_abap_unit_assert=>assert_equals( act = substring_after( val = 'this is a string' sub = 'a' ) exp = ` string` ). ENDMETHOD. METHOD test_substring_before. cl_abap_unit_assert=>assert_equals( act = substring_before( val = 'this is a string' sub = 'a' ) exp = `this is ` ). ENDMETHOD. METHOD test_string_shift. cl_abap_unit_assert=>assert_equals( act = shift_left( shift_right( val = ` string ` sub = ` ` ) ) exp = `string` ). ENDMETHOD. METHOD test_string_replace. DATA(lv_search) = replace( val = `one two three` sub = `two` with = 'ABC' occ = 0 ) ##NEEDED. cl_abap_unit_assert=>assert_equals( act = replace( val = `one two three` sub = `two` with = 'ABC' occ = 0 ) exp = `one ABC three` ). ENDMETHOD. METHOD test_raise_error. TRY. IF 1 = 1. RAISE EXCEPTION TYPE z2ui5_cx_util_error. ENDIF. cl_abap_unit_assert=>fail( ). CATCH z2ui5_cx_util_error INTO DATA(lx). cl_abap_unit_assert=>assert_bound( lx ). ENDTRY. ENDMETHOD. METHOD test_xsdbool. DATA(lv_xsdbool) = xsdbool( 1 = 1 ). IF lv_xsdbool = abap_false. cl_abap_unit_assert=>assert_equals( act = lv_xsdbool exp = abap_false ). ENDIF. IF xsdbool( 1 = 1 ) = abap_false. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_xsdbool_nested. DATA(lv_xsdbool) = check_input( xsdbool( 1 = 1 ) ). IF lv_xsdbool = abap_false. cl_abap_unit_assert=>assert_equals( act = lv_xsdbool exp = abap_false ). ENDIF. IF check_input( abap_false ). cl_abap_unit_assert=>fail( ). ENDIF. IF check_input( xsdbool( 1 = 1 ) ) = abap_false. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD check_input. result = val. ENDMETHOD. ENDCLASS. CLASS ltcl_unit_test IMPLEMENTATION. METHOD test_boolean_check. DATA(lv_bool) = xsdbool( 1 = 1 ). cl_abap_unit_assert=>assert_equals( act = z2ui5_cl_util_func=>boolean_check( lv_bool ) exp = abap_true ). lv_bool = xsdbool( 1 = 2 ). cl_abap_unit_assert=>assert_equals( act = z2ui5_cl_util_func=>boolean_check( lv_bool ) exp = abap_true ). cl_abap_unit_assert=>assert_equals( act = z2ui5_cl_util_func=>boolean_check( abap_true ) exp = abap_true ). cl_abap_unit_assert=>assert_equals( act = z2ui5_cl_util_func=>boolean_check( abap_false ) exp = abap_true ). ENDMETHOD. METHOD test_create. DATA(lo_test) = NEW z2ui5_cl_util_func( ) ##NEEDED. ENDMETHOD. METHOD test_rtti_get_classname_by_ref. DATA(lo_test) = NEW z2ui5_cl_util_func( ). DATA(lv_name) = z2ui5_cl_util_func=>rtti_get_classname_by_ref( lo_test ). cl_abap_unit_assert=>assert_equals( exp = `Z2UI5_CL_UTIL_FUNC` act = lv_name ). DATA(lo_test2) = NEW ltcl_test_app( ). DATA(lv_name2) = z2ui5_cl_util_func=>rtti_get_classname_by_ref( lo_test2 ). cl_abap_unit_assert=>assert_equals( exp = `LTCL_TEST_APP` act = lv_name2 ). ENDMETHOD. METHOD test_boolean_abap_2_json. cl_abap_unit_assert=>assert_equals( exp = `false` act = z2ui5_cl_util_func=>boolean_abap_2_json( abap_false ) ). IF `{ABCD}` <> z2ui5_cl_util_func=>boolean_abap_2_json( `{ABCD}` ). cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_time_get_timestampl. DATA(lv_time) = z2ui5_cl_util_func=>time_get_timestampl( ). DATA(lv_time2) = z2ui5_cl_util_func=>time_substract_seconds( time = lv_time seconds = 60 * 60 * 4 ). IF lv_time IS INITIAL OR lv_time2 IS INITIAL. cl_abap_unit_assert=>fail( ). ENDIF. IF lv_time < lv_time2. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_time_substract_seconds. DATA(lv_time) = z2ui5_cl_util_func=>time_get_timestampl( ). DATA(lv_time2) = z2ui5_cl_util_func=>time_get_timestampl( ). IF lv_time IS INITIAL OR lv_time2 IS INITIAL. cl_abap_unit_assert=>fail( ). ENDIF. IF lv_time2 < lv_time. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_c_trim. IF z2ui5_cl_util_func=>c_trim( ` JsadfHHs ` ) <> `JsadfHHs`. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_c_trim_lower. IF z2ui5_cl_util_func=>c_trim_lower( ` JsadfHHs ` ) <> `jsadfhhs`. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_c_trim_upper. IF z2ui5_cl_util_func=>c_trim_upper( ` JsadfHHs ` ) <> `JSADFHHS`. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_func_get_uuid_32. DATA(lv_uuid) = z2ui5_cl_util_func=>func_get_uuid_32( ). IF lv_uuid IS INITIAL. cl_abap_unit_assert=>fail( ). ENDIF. IF strlen( lv_uuid ) <> 32. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_func_get_uuid_22. DATA(lv_uuid) = z2ui5_cl_util_func=>func_get_uuid_22( ). IF lv_uuid IS INITIAL. cl_abap_unit_assert=>fail( ). ENDIF. IF strlen( lv_uuid ) <> 22. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_func_get_user_tech. DATA(lv_uname) = z2ui5_cl_util_func=>func_get_user_tech( ). IF sy-uname <> lv_uname OR lv_uname IS INITIAL. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_x_raise. TRY. z2ui5_cl_util_func=>x_raise( ). cl_abap_unit_assert=>fail( ). CATCH cx_root. ENDTRY. ENDMETHOD. METHOD test_x_check_raise. TRY. z2ui5_cl_util_func=>x_check_raise( when = xsdbool( 1 = 1 ) ). cl_abap_unit_assert=>fail( ). CATCH cx_root. ENDTRY. TRY. z2ui5_cl_util_func=>x_check_raise( when = xsdbool( 1 = 3 ) ). CATCH cx_root. cl_abap_unit_assert=>fail( ). ENDTRY. ENDMETHOD. METHOD test_trans_json_any_2__w_tab. TYPES: BEGIN OF ty_row, title TYPE string, value TYPE string, selected TYPE abap_bool, END OF ty_row. TYPES ty_t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. DATA(lt_tab) = VALUE ty_t_tab( ( title = 'Test' value = 'this is a description' selected = abap_true ) ( title = 'Test2' value = 'this is a new descr' selected = abap_false ) ). DATA(lv_tab_json) = z2ui5_cl_util_func=>trans_json_any_2( lt_tab ). DATA(lv_result) = `[{"TITLE":"Test","VALUE":"this is a description","SELECTED":true},{"TITLE":"Test2","VALUE":"this is a new descr","SELECTED":false}]`. IF lv_result <> lv_tab_json. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_trans_json_2_any__w_dref. DATA(lv_test) = `{ ` && ` "EDIT": { ` && ` "DATE": "2023-08-26", ` && ` "DEC1": -0.3333, ` && ` "DEC2": 0, ` && ` "DEC_SUM": -0.3333, ` && ` "INT1": 0, ` && ` "INT2": 0, ` && ` "INT_SUM": 0, ` && ` "TIME": "12:51:55" ` && ` }, ` && ` "oScroll": [], ` && ` "OMESSAGEMANAGER": [], ` && ` "ID": "0242B09497911EEE90CFA16736E6EEF8", ` && ` "ARGUMENTS": [{ ` && ` "EVENT": "BACK", ` && ` "METHOD": "UPDATE", ` && ` "CHECK_VIEW_DESTROY": false ` && ` }] ` && ` } `. DATA mr_data TYPE REF TO data. z2ui5_cl_util_func=>trans_json_2_any( EXPORTING val = lv_test CHANGING data = mr_data ). FIELD-SYMBOLS TYPE any. ASSIGN (`MR_DATA->EDIT->TIME->*`) TO . cl_abap_unit_assert=>assert_equals( act = exp = `12:51:55` ). ENDMETHOD. METHOD test_trans_json_any_2__w_struc. TYPES: BEGIN OF ty_row, title TYPE string, value TYPE string, selected TYPE abap_bool, END OF ty_row. TYPES ty_t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. DATA(lt_tab2) = VALUE ty_t_tab( ) ##NEEDED. DATA(ls_row) = VALUE ty_row( ). ls_row-title = `test`. DATA(lv_json) = z2ui5_cl_util_func=>trans_json_any_2( ls_row ). IF lv_json IS INITIAL. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_trans_ref_tab_2_tab. TYPES: BEGIN OF ty_row, title TYPE string, value TYPE string, selected TYPE abap_bool, END OF ty_row. TYPES ty_t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY. DATA(lv_result) = `[{"TITLE":"Test","VALUE":"this is a description","SELECTED":true},{"TITLE":"Test2","VALUE":"this is a new descr","SELECTED":false}]`. DATA lo_data TYPE REF TO data. /ui2/cl_json=>deserialize( EXPORTING json = lv_result CHANGING data = lo_data ). DATA(lt_tab2) = VALUE ty_t_tab( ). z2ui5_cl_util_func=>trans_ref_tab_2_tab( EXPORTING ir_tab_from = lo_data IMPORTING t_result = lt_tab2 ). DATA(lt_tab) = VALUE ty_t_tab( ( title = 'Test' value = 'this is a description' selected = abap_true ) ( title = 'Test2' value = 'this is a new descr' selected = abap_false ) ). IF lt_tab <> lt_tab2. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_url_param_create_url. DATA(lt_param) = z2ui5_cl_util_func=>url_param_get_tab( `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ). DATA(lv_url) = z2ui5_cl_util_func=>url_param_create_url( lt_param ). IF lv_url <> `sap-client=100&app_start=z2ui5_cl_app_hello_world`. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_url_param_get. DATA(lv_param) = z2ui5_cl_util_func=>url_param_get( val = `app_start` url = `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ). IF lv_param <> `z2ui5_cl_app_hello_world`. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_url_param_get_tab. DATA(lt_param) = z2ui5_cl_util_func=>url_param_get_tab( `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ). IF lt_param[ n = `sap-client` ]-v <> `100`. cl_abap_unit_assert=>fail( ). ENDIF. IF lt_param[ n = `app_start` ]-v <> `z2ui5_cl_app_hello_world`. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_url_param_set. DATA(lv_param) = z2ui5_cl_util_func=>url_param_set( name = `app_start` value = `z2ui5_cl_app_hello_world2` url = `https://url.com/rvice_for_ui?sap-client=100&app_start=z2ui5_cl_app_hello_world` ). IF lv_param <> `sap-client=100&app_start=z2ui5_cl_app_hello_world2`. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_x_check_raise_not. TRY. z2ui5_cl_util_func=>x_check_raise( when = xsdbool( 1 = 2 ) ). CATCH z2ui5_cx_util_error. cl_abap_unit_assert=>fail( ). ENDTRY. ENDMETHOD. METHOD test_rtti_get_type_name. DATA(lv_xsdbool) = VALUE xsdboolean( ). DATA(lv_name) = z2ui5_cl_util_func=>rtti_get_type_name( lv_xsdbool ). cl_abap_unit_assert=>assert_equals( act = lv_name exp = `XSDBOOLEAN` ). ENDMETHOD. METHOD test_rtti_get_type_kind. DATA(lv_string) = VALUE string( ). DATA(lv_type_kind) = z2ui5_cl_util_func=>rtti_get_type_kind( lv_string ). cl_abap_unit_assert=>assert_equals( act = lv_type_kind exp = cl_abap_typedescr=>typekind_string ). DATA lr_string TYPE REF TO string. CREATE DATA lr_string. lv_type_kind = z2ui5_cl_util_func=>rtti_get_type_kind( lr_string ). cl_abap_unit_assert=>assert_equals( act = lv_type_kind exp = cl_abap_typedescr=>typekind_dref ). ENDMETHOD. METHOD test_rtti_check_type_kind. DATA(lv_string) = VALUE string( ). cl_abap_unit_assert=>assert_equals( act = z2ui5_cl_util_func=>rtti_check_type_kind_dref( lv_string ) exp = abap_false ). DATA lr_string TYPE REF TO string. CREATE DATA lr_string. cl_abap_unit_assert=>assert_equals( act = z2ui5_cl_util_func=>rtti_check_type_kind_dref( lr_string ) exp = abap_true ). ENDMETHOD. METHOD test_rtti_get_t_attri_by_obj. DATA(lo_obj) = NEW ltcl_test_app( ). DATA(lt_attri) = z2ui5_cl_util_func=>rtti_get_t_attri_by_object( lo_obj ). IF lines( lt_attri ) <> 7. cl_abap_unit_assert=>fail( ). ENDIF. IF NOT line_exists( lt_attri[ name = `MS_TAB` ] ). cl_abap_unit_assert=>fail( ). ENDIF. IF NOT line_exists( lt_attri[ name = `SS_TAB` type_kind = `v` ] ). cl_abap_unit_assert=>fail( ). ENDIF. IF NOT line_exists( lt_attri[ name = `SV_VAR` type_kind = `g` is_class = abap_true ] ). cl_abap_unit_assert=>fail( ). ENDIF. IF NOT line_exists( lt_attri[ name = `SV_STATUS` type_kind = `g` is_class = abap_true is_constant = `X` ] ). cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_rtti_get_t_comp_by_struc. TYPES: BEGIN OF ty_row, title TYPE string, value TYPE string, descr TYPE string, icon TYPE string, info TYPE string, selected TYPE abap_bool, checkbox TYPE abap_bool, END OF ty_row. DATA(ls_row) = VALUE ty_row( ). DATA(lt_comp) = z2ui5_cl_util_func=>rtti_get_t_comp_by_struc( ls_row ). IF lines( lt_comp ) <> 7. cl_abap_unit_assert=>fail( ). ENDIF. IF NOT line_exists( lt_comp[ name = `TITLE` ] ). cl_abap_unit_assert=>fail( ). ENDIF. IF NOT line_exists( lt_comp[ name = `VALUE` ] ). cl_abap_unit_assert=>fail( ). ENDIF. IF NOT line_exists( lt_comp[ name = `SELECTED` ] ). cl_abap_unit_assert=>fail( ). ENDIF. IF NOT line_exists( lt_comp[ name = `CHECKBOX` ] ). cl_abap_unit_assert=>fail( ). ENDIF. DATA(ls_title) = lt_comp[ 1 ]. IF ls_title-type->type_kind <> `g`. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_trans_xml_any_2__w_obj. DATA(lo_obj) = NEW ltcl_test_app( ). DATA(lv_xml) = z2ui5_cl_util_func=>trans_xml_any_2( lo_obj ). IF lv_xml IS INITIAL. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_trans_xml_2_any__w_obj. DATA(lo_obj) = NEW ltcl_test_app( ). DATA(lv_xml) = z2ui5_cl_util_func=>trans_xml_any_2( lo_obj ). CLEAR lo_obj. z2ui5_cl_util_func=>trans_xml_2_any( EXPORTING xml = lv_xml IMPORTING any = lo_obj ). IF lo_obj IS NOT BOUND. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_trans_xml_any_2__w_data. TYPES: BEGIN OF ty_row, title TYPE string, value TYPE string, descr TYPE string, icon TYPE string, info TYPE string, selected TYPE abap_bool, checkbox TYPE abap_bool, END OF ty_row. DATA(ls_row) = VALUE ty_row( ). ls_row-value = `test`. DATA(lv_xml) = z2ui5_cl_util_func=>trans_xml_any_2( ls_row ). IF lv_xml IS INITIAL. cl_abap_unit_assert=>fail( ). ENDIF. ENDMETHOD. METHOD test_trans_xml_2_any__w_data. TYPES: BEGIN OF ty_row, title TYPE string, value TYPE string, descr TYPE string, icon TYPE string, info TYPE string, selected TYPE abap_bool, checkbox TYPE abap_bool, END OF ty_row. DATA(ls_row) = VALUE ty_row( ). DATA(ls_row2) = VALUE ty_row( ). ls_row-value = `test`. DATA(lv_xml) = z2ui5_cl_util_func=>trans_xml_any_2( ls_row ). z2ui5_cl_util_func=>trans_xml_2_any( EXPORTING xml = lv_xml IMPORTING any = ls_row2 ). cl_abap_unit_assert=>assert_equals( act = ls_row exp = ls_row2 ). ENDMETHOD. METHOD test_c_replace_assign_struc. DATA(lv_result) = z2ui5_cl_util_func=>c_replace_assign_struc( `MO_APP->MS_STRUC->*`). cl_abap_unit_assert=>assert_equals( act = lv_result exp = 'MO_APP->MS_STRUC->' ). DATA(lv_result2) = z2ui5_cl_util_func=>c_replace_assign_struc( `MO_APP->MS_STRUC-MS_STRUC->*`). cl_abap_unit_assert=>assert_equals( act = lv_result2 exp = 'MO_APP->MS_STRUC-MS_STRUC->' ). DATA(lv_result3) = z2ui5_cl_util_func=>c_replace_assign_struc( `*MO_APP->*MS_STRUC->*`). cl_abap_unit_assert=>assert_equals( act = lv_result3 exp = `*MO_APP->*MS_STRUC->` ). DATA(lv_result4) = z2ui5_cl_util_func=>c_replace_assign_struc( `*MO_APP->*MS_STRUC`). cl_abap_unit_assert=>assert_equals( act = lv_result4 exp = `*MO_APP->*MS_STRUC-` ). ENDMETHOD. ENDCLASS.