From 4870f1219da8ed8e2f675c9006f50adf7a54e024 Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Mon, 17 Jun 2024 20:56:56 +0200 Subject: [PATCH] json: serialize xstring --- package.json | 2 +- src/json/#ui2#cl_json.clas.abap | 2 ++ src/json/#ui2#cl_json.clas.testclasses.abap | 27 +++++++++++++++++++++ 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/package.json b/package.json index 571125d8..7af2be1b 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "license": "MIT", "dependencies": { - "@abaplint/cli": "^2.108.11", + "@abaplint/cli": "^2.110.1", "@abaplint/database-sqlite": "^2.8.25", "@abaplint/runtime": "^2.8.25", "@abaplint/transpiler-cli": "^2.8.25", diff --git a/src/json/#ui2#cl_json.clas.abap b/src/json/#ui2#cl_json.clas.abap index ee224558..bdddca35 100644 --- a/src/json/#ui2#cl_json.clas.abap +++ b/src/json/#ui2#cl_json.clas.abap @@ -117,6 +117,8 @@ CLASS /ui2/cl_json IMPLEMENTATION. ELSE. r_json = '"' && escape( val = |{ data }| format = cl_abap_format=>e_json_string ) && '"'. ENDIF. + WHEN cl_abap_typedescr=>typekind_xstring. + r_json = '"' && cl_http_utility=>encode_x_base64( data ) && '"'. WHEN cl_abap_typedescr=>typekind_string. r_json = '"' && escape( val = data format = cl_abap_format=>e_json_string ) && '"'. WHEN cl_abap_typedescr=>typekind_int. diff --git a/src/json/#ui2#cl_json.clas.testclasses.abap b/src/json/#ui2#cl_json.clas.testclasses.abap index cab9794e..5efccb69 100644 --- a/src/json/#ui2#cl_json.clas.testclasses.abap +++ b/src/json/#ui2#cl_json.clas.testclasses.abap @@ -658,10 +658,37 @@ CLASS ltcl_serialize DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT F METHODS time_field FOR TESTING RAISING cx_static_check. METHODS numc_field FOR TESTING RAISING cx_static_check. METHODS numc_field2 FOR TESTING RAISING cx_static_check. + METHODS serialize_empty_xstring FOR TESTING RAISING cx_static_check. + METHODS serialize_xstring FOR TESTING RAISING cx_static_check. ENDCLASS. CLASS ltcl_serialize IMPLEMENTATION. + METHOD serialize_empty_xstring. + DATA: BEGIN OF is_metadata, + foo TYPE xstring, + END OF is_metadata. + DATA lv_json TYPE string. + lv_json = /ui2/cl_json=>serialize( is_metadata ). + + cl_abap_unit_assert=>assert_equals( + act = lv_json + exp = '{"FOO":""}' ). + ENDMETHOD. + + METHOD serialize_xstring. + DATA: BEGIN OF is_metadata, + foo TYPE xstring, + END OF is_metadata. + DATA lv_json TYPE string. + is_metadata-foo = 'AA'. + lv_json = /ui2/cl_json=>serialize( is_metadata ). + + cl_abap_unit_assert=>assert_equals( + act = lv_json + exp = '{"FOO":"qg=="}' ). + ENDMETHOD. + METHOD bool_false. DATA: BEGIN OF ls_data, foo_bar TYPE abap_bool,