unit test (#211)

* fixes

* examples

* unit test

* unit tests

* abaplint fix

* unit test

* fix downport

* abaplint fix
This commit is contained in:
oblomov 2023-05-03 20:58:03 +02:00
parent f37a67e64e
commit 65ff5e1ca2
6 changed files with 234 additions and 119 deletions

View File

@ -76,7 +76,7 @@ CLASS z2ui5_cl_app_demo_03 IMPLEMENTATION.
icon = '{ICON}'
info = '{INFO}'
press = client->_event( 'TEST' )
type = `Navigation`
" type = `Navigation`
selected = `{SELECTED}`
).

View File

@ -35,44 +35,6 @@ CLASS z2ui5_cl_app_demo_47 IMPLEMENTATION.
time = sy-uzeit.
dec1 = -1 / 3.
* /ui2/cl_json=>serialize(
* EXPORTING
* data = time
** compress =
** name =
** pretty_name =
** type_descr =
** assoc_arrays =
** ts_as_iso8601 =
** expand_includes =
** assoc_arrays_opt =
** numc_as_string =
** name_mappings =
** conversion_exits =
** format_output =
** hex_as_base64 =
* RECEIVING
* r_json = data(lv_json)
* ).
*
* data(lv_test) = conv string( lv_json ).
* lv_test = lv_test+1.
* lv_test = shift_right( val = lv_test sub = `"` ).
*
* /ui2/cl_json=>deserialize(
* EXPORTING
* json = lv_test
** jsonx =
** pretty_name =
** assoc_arrays =
** assoc_arrays_opt =
** name_mappings =
* conversion_exits = abap_true
** hex_as_base64 =
* CHANGING
* data = time2
* ).
ENDIF.
CASE client->get( )-event.

View File

@ -0,0 +1,102 @@
CLASS z2ui5_cl_app_demo_48 DEFINITION
PUBLIC
FINAL
CREATE PUBLIC .
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
TYPES:
BEGIN OF ty_row,
title TYPE string,
value TYPE string,
descr TYPE string,
icon TYPE string,
info TYPE string,
highlight type string,
wrapCharLimit type i,
selected TYPE abap_bool,
checkbox TYPE abap_bool,
END OF ty_row.
DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
DATA check_initialized TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS z2ui5_cl_app_demo_48 IMPLEMENTATION.
METHOD z2ui5_if_app~main.
IF check_initialized = abap_false.
check_initialized = abap_true.
t_tab = VALUE #(
( title = 'Peter' info = 'Information' descr = 'this is a description1 1234567890 1234567890' icon = 'sap-icon://badge' highlight = 'Information' wrapCharLimit = '100' )
( title = 'Peter1' info = 'Success' descr = 'this is a description2 1234567890 1234567890' icon = 'sap-icon://favorite' highlight = 'Success' wrapCharLimit = '10')
( title = 'Peter2' info = 'Warning' descr = 'this is a description3 1234567890 1234567890' icon = 'sap-icon://employee' highlight = 'Warning' wrapCharLimit = '100')
( title = 'Peter3' info = 'Error' descr = 'this is a description4 1234567890 1234567890' icon = 'sap-icon://accept' highlight = 'Error' wrapCharLimit = '10' )
( title = 'Peter4' info = 'None' descr = 'this is a description5 1234567890 1234567890' icon = 'sap-icon://activities' highlight = 'None' wrapCharLimit = '10')
( title = 'Peter5' info = 'Information' descr = 'this is a description6 1234567890 1234567890' icon = 'sap-icon://account' highlight = 'Information' wrapCharLimit = '100' )
).
ENDIF.
CASE client->get( )-event.
WHEN 'TEST'.
" DATA(lt_sel1) = t_tab.
client->popup_message_box( `Test` ).
WHEN 'SELCHANGE'.
DATA(lt_sel) = t_tab.
DELETE lt_sel WHERE selected = abap_false.
client->popup_message_box( `go to details for item ` && lt_sel[ 1 ]-title ).
WHEN 'BACK'.
client->nav_app_leave( client->get_app( client->get( )-id_prev_app_stack ) ).
ENDCASE.
DATA(page) = z2ui5_cl_xml_view=>factory( )->shell(
)->page(
title = 'abap2UI5 - List'
navbuttonpress = client->_event( 'BACK' )
shownavbutton = abap_true
)->header_content(
)->link(
text = 'Source_Code' target = '_blank'
href = z2ui5_cl_xml_view=>hlp_get_source_code_url( app = me get = client->get( ) )
)->get_parent( ).
page->list(
headertext = 'List Ouput'
items = client->_bind( t_tab )
mode = `SingleSelectMaster`
selectionchange = client->_event( 'SELCHANGE' )
)->_generic(
name = `StandardListItem`
t_prop = VALUE #(
( n = `title` v = '{TITLE}' )
( n = `description` v = '{DESCR}' )
( n = `icon` v = '{ICON}' )
( n = `iconInset` v = 'false' )
( n = `highlight` v = '{HIGHLIGHT}' )
( n = `info` v = '{INFO}' )
( n = `infoState` v = '{HIGHLIGHT}' )
( n = `infoStateInverted` v = 'true' )
( n = 'type' v = `Detail` )
( n = 'wrapping' v = `true` )
( n = 'wrapCharLimit' v = `{WRAPCHARLIMIT}` )
( n = 'selected' v = `{SELECTED}` )
( n = 'detailPress' v = client->_event( 'TEST' ) )
) ).
client->set_next( VALUE #( xml_main = page->get_root( )->xml_get( ) ) ).
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,16 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<VSEOCLASS>
<CLSNAME>Z2UI5_CL_APP_DEMO_48</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>tab - list test</DESCRIPT>
<STATE>1</STATE>
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
</VSEOCLASS>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -6,6 +6,7 @@ CLASS z2ui5_lcl_utility DEFINITION INHERITING FROM cx_no_check.
BEGIN OF ty_attri,
name TYPE string,
type_kind TYPE string,
type TYPE string,
bind_type TYPE string,
data_stringify TYPE string,
gen_type_kind TYPE string,
@ -282,7 +283,21 @@ CLASS z2ui5_lcl_utility IMPLEMENTATION.
ENDLOOP.
LOOP AT lt_attri INTO ls_attri.
APPEND CORRESPONDING #( ls_attri ) TO result.
DATA(ls_attri2) = VALUE ty_attri( ).
ls_attri2 = CORRESPONDING #( ls_attri ).
FIELD-SYMBOLS <any> TYPE any.
UNASSIGN <any>.
DATA(lv_assign) = `IO_APP->` && ls_attri-name.
ASSIGN (lv_assign) TO <any>.
DATA(lo_descr) = cl_abap_datadescr=>describe_by_data( <any> ).
CASE lo_descr->kind.
WHEN lo_descr->kind_elem.
ls_attri2-type = CAST cl_abap_elemdescr( lo_descr )->get_relative_name( ).
ENDCASE.
APPEND ls_attri2 TO result.
ENDLOOP.
ENDMETHOD.
@ -346,17 +361,15 @@ CLASS z2ui5_lcl_utility IMPLEMENTATION.
CLEAR t_result.
DATA lr_row TYPE REF TO data.
CREATE DATA lr_row LIKE LINE OF t_result.
ASSIGN lr_row->* TO FIELD-SYMBOL(<row>).
DATA(lo_descr) = cl_abap_datadescr=>describe_by_data( <row> ).
DATA(lo_struc) = CAST cl_abap_structdescr( lo_descr ).
DATA(lo_tab) = CAST cl_abap_tabledescr( cl_abap_datadescr=>describe_by_data( t_result ) ).
DATA(lo_struc) = CAST cl_abap_structdescr( lo_tab->get_table_line_type( ) ).
DATA(lt_components) = lo_struc->get_components( ).
LOOP AT <lt_from> INTO DATA(lr_from).
CLEAR <row>.
DATA lr_row TYPE REF TO data.
CREATE DATA lr_row LIKE LINE OF t_result.
ASSIGN lr_row->* TO FIELD-SYMBOL(<row>).
ASSIGN lr_from->* TO FIELD-SYMBOL(<row_ui5>).
raise( when = xsdbool( sy-subrc <> 0 ) ).
@ -1337,22 +1350,29 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
EXPORTING ir_tab_from = lo_model->get_attribute( lr_attri->name )->mr_actual
IMPORTING t_result = <attribute> ).
WHEN 'D' OR 'T' OR 'C'.
WHEN OTHERS.
DATA(lo_attri) = lo_model->get_attribute( lr_attri->name ).
FIELD-SYMBOLS <val> TYPE any.
ASSIGN lo_attri->mr_actual->* TO <val>.
CASE lr_attri->type_kind.
WHEN 'D' OR 'T'.
/ui2/cl_json=>deserialize(
EXPORTING
json = `"` && <val> && `"`
CHANGING
data = <attribute>
).
data = <attribute> ).
WHEN 'C'.
CASE lr_attri->type.
WHEN `ABAP_BOOL` OR `ABAP_BOOLEAN` OR `XSDBOOLEAN`.
<attribute> = xsdbool( <val> = `true` ).
WHEN OTHERS.
lo_attri = lo_model->get_attribute( lr_attri->name ).
ASSIGN lo_attri->mr_actual->* TO <val>.
<attribute> = <val>.
ENDCASE.
WHEN OTHERS.
<attribute> = <val>.
ENDCASE.
ENDCASE.
ENDLOOP.
@ -1467,12 +1487,8 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
IF check_gen_data = abap_true.
TRY.
DATA lr_ref2 TYPE REF TO data.
GET REFERENCE OF <attribute> INTO lr_ref2.
FIELD-SYMBOLS <field> TYPE any.
ASSIGN lr_ref2->* TO <field>.
ASSIGN lr_ref->* TO <field>.
lr_ref = CAST data( <field> ).
IF lr_attri->gen_type IS INITIAL.
FIELD-SYMBOLS <field2> TYPE any.
@ -1570,7 +1586,8 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
CONTINUE.
ENDIF.
DATA(lo_actual) = COND #( WHEN lr_attri->bind_type = cs_bind_type-one_way THEN r_view_model
DATA(lo_actual) = COND #( WHEN lr_attri->bind_type = cs_bind_type-one_way
THEN r_view_model
ELSE lo_update ).
FIELD-SYMBOLS <attribute> TYPE any.
@ -1586,33 +1603,29 @@ CLASS z2ui5_lcl_fw_handler IMPLEMENTATION.
CASE lr_attri->type_kind.
" WHEN `g` OR `D` OR `T` OR `C`.
" lo_actual->add_attribute( n = lr_attri->name
" v = z2ui5_lcl_utility=>get_abap_2_json( <attribute> )
" apos_active = abap_false ).
" WHEN `P`.
" lo_actual->add_attribute( n = lr_attri->name
" v = /ui2/cl_json=>serialize( <attribute> )
" apos_active = abap_false ).
" WHEN `I`.
" lo_actual->add_attribute( n = lr_attri->name
" " v = <attribute>
" v = CONV string( <attribute> )
" apos_active = abap_false ).
WHEN `h`.
lo_actual->add_attribute( n = lr_attri->name
v = z2ui5_lcl_utility=>trans_any_2_json( <attribute> )
apos_active = abap_false ).
WHEN OTHERS.
CASE lr_attri->type.
WHEN `ABAP_BOOL` OR `ABAP_BOOLEAN` OR `XSDBOOLEAN`.
lo_actual->add_attribute(
n = lr_attri->name
v = SWITCH #( <attribute> WHEN abap_true THEN `true` ELSE `false` )
apos_active = abap_false ).
WHEN OTHERS.
lo_actual->add_attribute(
n = lr_attri->name
v = /ui2/cl_json=>serialize( <attribute> )
apos_active = abap_false ).
ENDCASE.
ENDCASE.
ENDLOOP.

View File

@ -10,9 +10,41 @@ CLASS ltcl_unit_01_json DEFINITION FINAL FOR TESTING
METHODS test_json_struc FOR TESTING RAISING cx_static_check.
METHODS test_json_trans FOR TESTING RAISING cx_static_check.
METHODS test_json_trans_gen FOR TESTING RAISING cx_static_check.
METHODS test_utility FOR TESTING RAISING cx_static_check.
METHODS test_util_uuid_session FOR TESTING RAISING cx_static_check.
METHODS test_util_attri_by_ref FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_unit_04_deep_data DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA check_initialized TYPE abap_bool.
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.
CLASS-DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
CLASS-DATA sv_status TYPE string.
PRIVATE SECTION.
METHODS test_app_deep_data FOR TESTING RAISING cx_static_check.
METHODS test_app_deep_data_change FOR TESTING RAISING cx_static_check.
METHODS test_app_all FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_unit_01_json IMPLEMENTATION.
@ -137,7 +169,27 @@ CLASS ltcl_unit_01_json IMPLEMENTATION.
ENDMETHOD.
METHOD test_utility.
METHOD test_util_attri_by_ref.
DATA(lo_app) = NEW ltcl_unit_04_deep_data( ).
DATA(lt_attri) = z2ui5_lcl_utility=>get_t_attri_by_ref( lo_app ).
DATA(lt_test) = VALUE z2ui5_lcl_utility=>ty_t_attri(
( name = `Z2UI5_IF_APP~ID` type_kind = `g` type = `STRING` bind_type = `` data_stringify = `` gen_type_kind = `` gen_type = `` gen_kind = `` )
( name = `CHECK_INITIALIZED` type_kind = `C` type = `ABAP_BOOL` bind_type = `` data_stringify = `` gen_type_kind = `` gen_type = `` gen_kind = `` )
( name = `SV_STATUS` type_kind = `g` type = `STRING` bind_type = `` data_stringify = `` gen_type_kind = `` gen_type = `` gen_kind = `` )
( name = `T_TAB` type_kind = `h` type = `` bind_type = `` data_stringify = `` gen_type_kind = `` gen_type = `` gen_kind = `` )
).
IF lt_test <> lt_attri.
cl_abap_unit_assert=>fail( msg = 'utility - get t_attri table wrong' quit = 5 ).
ENDIF.
ENDMETHOD.
METHOD test_util_uuid_session.
DATA(lv_one) = z2ui5_lcl_utility=>get_uuid_session( ).
DATA(lv_two) = z2ui5_lcl_utility=>get_uuid_session( ).
@ -860,37 +912,6 @@ CLASS ltcl_unit_03_app_ajax IMPLEMENTATION.
ENDCLASS.
CLASS ltcl_unit_04_deep_data DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PUBLIC SECTION.
INTERFACES z2ui5_if_app.
DATA check_initialized TYPE abap_bool.
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.
CLASS-DATA t_tab TYPE STANDARD TABLE OF ty_row WITH EMPTY KEY.
CLASS-DATA sv_status TYPE string.
PRIVATE SECTION.
METHODS test_app_deep_data FOR TESTING RAISING cx_static_check.
METHODS test_app_deep_data_change FOR TESTING RAISING cx_static_check.
METHODS test_app_all FOR TESTING RAISING cx_static_check.
ENDCLASS.
CLASS ltcl_unit_04_deep_data IMPLEMENTATION.
@ -1107,4 +1128,5 @@ CLASS ltcl_unit_04_deep_data IMPLEMENTATION.
ENDMETHOD.
ENDCLASS.