Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions src/z_ui2_json.clas.abap
Original file line number Diff line number Diff line change
Expand Up @@ -2139,6 +2139,8 @@ ENDMETHOD.
ENDIF.
ELSEIF type_descr->kind EQ type_descr->kind_elem.
eat_bool data.
ELSEIF type_descr->kind EQ type_descr->kind_struct OR type_descr->kind EQ type_descr->kind_table.
eat_null data.
ELSE.
eat_bool sdummy.
throw_error.
Expand Down
11 changes: 11 additions & 0 deletions src/z_ui2_json.clas.locals_imp.abap
Original file line number Diff line number Diff line change
Expand Up @@ -353,3 +353,14 @@ DEFINE eat_char.
throw_error.
ENDIF.
END-OF-DEFINITION.

DEFINE eat_null.
mark = offset.
while_offset_cs `nul`.
match = offset - mark.
IF json+mark(match) EQ `null` ##NO_TEXT.
CLEAR &1.
ELSE.
throw_error.
ENDIF.
END-OF-DEFINITION.
119 changes: 119 additions & 0 deletions src/z_ui2_json.clas.testclasses.abap
Original file line number Diff line number Diff line change
Expand Up @@ -263,6 +263,13 @@ INHERITING FROM z_ui2_json.
METHODS: serialize_formatted FOR TESTING.
METHODS: serialize_cycle_reference FOR TESTING.

"! deserialize a null value for a table field in strict mode
METHODS deserialize_strict_table_null FOR TESTING.
"! deserialize a null value for a structure field in strict mode
METHODS deserialize_strict_struct_null FOR TESTING.
"! deserialize a null value for a string field in strict mode
METHODS deserialize_strict_string_null FOR TESTING.

ENDCLASS. "abap_unit_testclass
* ----------------------------------------------------------------------
CLASS abap_unit_testclass IMPLEMENTATION.
Expand Down Expand Up @@ -2868,4 +2875,116 @@ CLASS abap_unit_testclass IMPLEMENTATION.
assoc_arrays_opt = abap_true ).
ENDMETHOD.

METHOD deserialize_strict_table_null.

TYPES: BEGIN OF ty_test,
tab1 TYPE STANDARD TABLE OF string WITH EMPTY KEY,
BEGIN OF struc1,
field1 TYPE string,
END OF struc1,
string1 TYPE string,
END OF ty_test.

DATA s_test2 TYPE ty_test.

DATA lo_json TYPE t_json.
CREATE OBJECT lo_json
EXPORTING
strict_mode = abap_true
pretty_name = pretty_mode-camel_case.

lo_json->deserialize_int(
EXPORTING
json = '{"tab1":null,"struc1":{"field1":"hugo"},"string1":"u__u"}'
CHANGING
data = s_test2
).

cl_abap_unit_assert=>assert_initial(
act = s_test2-tab1 ).

cl_abap_unit_assert=>assert_equals(
exp = 'hugo'
act = s_test2-struc1-field1 ).

cl_abap_unit_assert=>assert_equals(
exp = 'u__u'
act = s_test2-string1 ).

ENDMETHOD.

METHOD deserialize_strict_struct_null.

TYPES: BEGIN OF ty_test,
tab1 TYPE STANDARD TABLE OF string WITH EMPTY KEY,
BEGIN OF struc1,
field1 TYPE string,
END OF struc1,
string1 TYPE string,
END OF ty_test.

DATA s_test2 TYPE ty_test.

DATA lo_json TYPE t_json.
CREATE OBJECT lo_json
EXPORTING
strict_mode = abap_true
pretty_name = pretty_mode-camel_case.

lo_json->deserialize_int(
EXPORTING
json = '{"tab1":["hugo"],"struc1":null,"string1":"u__u"}'
CHANGING
data = s_test2
).

cl_abap_unit_assert=>assert_equals(
exp = `hugo`
act = s_test2-tab1[ 1 ] ).

cl_abap_unit_assert=>assert_initial(
act = s_test2-struc1 ).

cl_abap_unit_assert=>assert_equals(
exp = 'u__u'
act = s_test2-string1 ).
ENDMETHOD.

METHOD deserialize_strict_string_null.

TYPES: BEGIN OF ty_test2,
tab1 TYPE STANDARD TABLE OF string WITH EMPTY KEY,
BEGIN OF struc1,
field1 TYPE string,
END OF struc1,
string1 TYPE string,
END OF ty_test2.

DATA s_test2 TYPE ty_test2.

DATA lo_json TYPE t_json.
CREATE OBJECT lo_json
EXPORTING
strict_mode = abap_true
pretty_name = pretty_mode-camel_case.

lo_json->deserialize_int(
EXPORTING
json = '{"tab1":["hugo"],"struc1":{"field1":"hugo"},"string1":null}'
CHANGING
data = s_test2
).

cl_abap_unit_assert=>assert_equals(
exp = `hugo`
act = s_test2-tab1[ 1 ] ).

cl_abap_unit_assert=>assert_equals(
exp = 'hugo'
act = s_test2-struc1-field1 ).

cl_abap_unit_assert=>assert_initial(
act = s_test2-string1 ).
ENDMETHOD.

ENDCLASS. "abap_unit_testclass