From 787bc605b078bfef8783093f608c3405f95b0ae9 Mon Sep 17 00:00:00 2001
From: Marc Bernard <59966492+mbtools@users.noreply.github.com>
Date: Thu, 23 Jun 2022 07:12:25 +0200
Subject: [PATCH] Propagate codepage conversion errors (#5638)
---
src/git/zcl_abapgit_git_pack.clas.abap | 10 +++++--
.../core/zcl_abapgit_objects_files.clas.abap | 12 ++++++--
...bapgit_objects_files.clas.testclasses.abap | 12 ++++++--
src/objects/zcl_abapgit_object_wapa.clas.abap | 3 +-
.../zcl_abapgit_repo.clas.testclasses.abap | 3 +-
.../zcl_abapgit_syntax_highlighter.clas.abap | 5 +++-
.../zcl_abapgit_gui_asset_manager.clas.abap | 6 ++--
...it_gui_css_processor.clas.testclasses.abap | 7 +++--
...t_gui_html_processor.clas.testclasses.abap | 2 +-
.../zcl_abapgit_gui_page_sett_info.clas.abap | 5 +++-
.../zcl_abapgit_html_action_utils.clas.abap | 6 +++-
src/utils/zcl_abapgit_convert.clas.abap | 28 ++++++++++++-----
.../zcl_abapgit_convert.clas.testclasses.abap | 20 +++++++++++--
src/utils/zcl_abapgit_diff.clas.abap | 8 +++--
.../zcl_abapgit_diff.clas.testclasses.abap | 30 ++++++++++---------
src/utils/zcl_abapgit_utils.clas.abap | 16 ++++++----
.../zcl_abapgit_utils.clas.testclasses.abap | 12 +++++---
src/xml/zcl_abapgit_xml.clas.abap | 6 +++-
src/zcl_abapgit_news.clas.abap | 4 ++-
.../zcl_abapgit_zlib.clas.testclasses.abap | 2 +-
test/abap_transpile.json | 2 ++
21 files changed, 141 insertions(+), 58 deletions(-)
diff --git a/src/git/zcl_abapgit_git_pack.clas.abap b/src/git/zcl_abapgit_git_pack.clas.abap
index 905baee87..aeda2a104 100644
--- a/src/git/zcl_abapgit_git_pack.clas.abap
+++ b/src/git/zcl_abapgit_git_pack.clas.abap
@@ -71,12 +71,16 @@ CLASS zcl_abapgit_git_pack DEFINITION
IMPORTING
!it_nodes TYPE ty_nodes_tt
RETURNING
- VALUE(rv_data) TYPE xstring .
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
CLASS-METHODS encode_commit
IMPORTING
!is_commit TYPE ty_commit
RETURNING
- VALUE(rv_data) TYPE xstring .
+ VALUE(rv_data) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
CLASS-METHODS encode_tag
IMPORTING
!is_tag TYPE ty_tag
@@ -148,7 +152,7 @@ ENDCLASS.
-CLASS ZCL_ABAPGIT_GIT_PACK IMPLEMENTATION.
+CLASS zcl_abapgit_git_pack IMPLEMENTATION.
METHOD decode.
diff --git a/src/objects/core/zcl_abapgit_objects_files.clas.abap b/src/objects/core/zcl_abapgit_objects_files.clas.abap
index 72e71ca09..16b7855f0 100644
--- a/src/objects/core/zcl_abapgit_objects_files.clas.abap
+++ b/src/objects/core/zcl_abapgit_objects_files.clas.abap
@@ -12,7 +12,9 @@ CLASS zcl_abapgit_objects_files DEFINITION
IMPORTING
!iv_extra TYPE clike OPTIONAL
!iv_ext TYPE string
- !iv_string TYPE string.
+ !iv_string TYPE string
+ RAISING
+ zcx_abapgit_exception .
METHODS read_string
IMPORTING
!iv_extra TYPE clike OPTIONAL
@@ -26,7 +28,9 @@ CLASS zcl_abapgit_objects_files DEFINITION
!iv_extra TYPE clike OPTIONAL
!ii_xml TYPE REF TO zif_abapgit_xml_output
!iv_normalize TYPE abap_bool DEFAULT abap_true
- !is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL.
+ !is_metadata TYPE zif_abapgit_definitions=>ty_metadata OPTIONAL
+ RAISING
+ zcx_abapgit_exception .
METHODS read_xml
IMPORTING
!iv_extra TYPE clike OPTIONAL
@@ -45,7 +49,9 @@ CLASS zcl_abapgit_objects_files DEFINITION
METHODS add_abap
IMPORTING
!iv_extra TYPE clike OPTIONAL
- !it_abap TYPE STANDARD TABLE.
+ !it_abap TYPE STANDARD TABLE
+ RAISING
+ zcx_abapgit_exception .
METHODS add
IMPORTING
!is_file TYPE zif_abapgit_definitions=>ty_file .
diff --git a/src/objects/core/zcl_abapgit_objects_files.clas.testclasses.abap b/src/objects/core/zcl_abapgit_objects_files.clas.testclasses.abap
index 4f1d4a51b..d063d427b 100644
--- a/src/objects/core/zcl_abapgit_objects_files.clas.testclasses.abap
+++ b/src/objects/core/zcl_abapgit_objects_files.clas.testclasses.abap
@@ -4,17 +4,23 @@ CLASS ltcl_objects_files DEFINITION FOR TESTING
PRIVATE SECTION.
DATA: mo_cut TYPE REF TO zcl_abapgit_objects_files.
- METHODS setup.
+ METHODS setup
+ RAISING
+ zcx_abapgit_exception .
METHODS get_program_data
IMPORTING
iv_line_break TYPE clike
RETURNING
- VALUE(rv_result) TYPE xstring.
+ VALUE(rv_result) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
METHODS get_xml_data
RETURNING
- VALUE(rv_result) TYPE xstring.
+ VALUE(rv_result) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
METHODS get_expected_abap_source
RETURNING
diff --git a/src/objects/zcl_abapgit_object_wapa.clas.abap b/src/objects/zcl_abapgit_object_wapa.clas.abap
index a03ad5954..a2ca08f83 100644
--- a/src/objects/zcl_abapgit_object_wapa.clas.abap
+++ b/src/objects/zcl_abapgit_object_wapa.clas.abap
@@ -22,7 +22,8 @@ CLASS zcl_abapgit_object_wapa DEFINITION PUBLIC INHERITING FROM zcl_abapgit_obje
RAISING zcx_abapgit_exception,
to_page_content
IMPORTING iv_content TYPE xstring
- RETURNING VALUE(rt_content) TYPE o2pageline_table,
+ RETURNING VALUE(rt_content) TYPE o2pageline_table
+ RAISING zcx_abapgit_exception,
read_page
IMPORTING is_page TYPE o2pagattr
iv_no_files_add TYPE abap_bool OPTIONAL
diff --git a/src/repo/zcl_abapgit_repo.clas.testclasses.abap b/src/repo/zcl_abapgit_repo.clas.testclasses.abap
index ef2d100c3..04e1d9e85 100644
--- a/src/repo/zcl_abapgit_repo.clas.testclasses.abap
+++ b/src/repo/zcl_abapgit_repo.clas.testclasses.abap
@@ -13,7 +13,8 @@ CLASS ltcl_find_remote_dot_abapgit DEFINITION FINAL FOR TESTING
when_find_remote_dot_abapgit,
then_dot_abapgit_is_bound,
then_no_exception_is_raised,
- given_dot_abapgit_file,
+ given_dot_abapgit_file
+ RAISING zcx_abapgit_exception,
given_no_dot_abapgit_file,
then_dot_abapgit_is_not_bound,
given_repo_has_files
diff --git a/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap b/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap
index 6361a83b0..f05527e5b 100644
--- a/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap
+++ b/src/syntax/zcl_abapgit_syntax_highlighter.clas.abap
@@ -289,7 +289,10 @@ CLASS zcl_abapgit_syntax_highlighter IMPLEMENTATION.
WITH '⊝'.
IF strlen( rv_line ) BETWEEN 1 AND 2.
- lv_bom = zcl_abapgit_convert=>string_to_xstring( rv_line ).
+ TRY.
+ lv_bom = zcl_abapgit_convert=>string_to_xstring( rv_line ).
+ CATCH zcx_abapgit_exception ##NO_HANDLER.
+ ENDTRY.
IF lv_bom(2) = cl_abap_char_utilities=>byte_order_mark_big.
rv_line = '▪'. " UTF-16 big-endian (FE FF)
ENDIF.
diff --git a/src/ui/core/zcl_abapgit_gui_asset_manager.clas.abap b/src/ui/core/zcl_abapgit_gui_asset_manager.clas.abap
index dcd451533..d37082b37 100644
--- a/src/ui/core/zcl_abapgit_gui_asset_manager.clas.abap
+++ b/src/ui/core/zcl_abapgit_gui_asset_manager.clas.abap
@@ -18,7 +18,9 @@ CLASS zcl_abapgit_gui_asset_manager DEFINITION PUBLIC FINAL CREATE PUBLIC .
!iv_cachable TYPE abap_bool DEFAULT abap_true
!iv_mime_name TYPE wwwdatatab-objid OPTIONAL
!iv_base64 TYPE string OPTIONAL
- !iv_inline TYPE string OPTIONAL .
+ !iv_inline TYPE string OPTIONAL
+ RAISING
+ zcx_abapgit_exception.
PROTECTED SECTION.
PRIVATE SECTION.
@@ -45,7 +47,7 @@ ENDCLASS.
-CLASS ZCL_ABAPGIT_GUI_ASSET_MANAGER IMPLEMENTATION.
+CLASS zcl_abapgit_gui_asset_manager IMPLEMENTATION.
METHOD get_mime_asset.
diff --git a/src/ui/core/zcl_abapgit_gui_css_processor.clas.testclasses.abap b/src/ui/core/zcl_abapgit_gui_css_processor.clas.testclasses.abap
index 1e9386ac5..2b151c122 100644
--- a/src/ui/core/zcl_abapgit_gui_css_processor.clas.testclasses.abap
+++ b/src/ui/core/zcl_abapgit_gui_css_processor.clas.testclasses.abap
@@ -3,7 +3,8 @@ CLASS ltcl_test_base DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT A
PROTECTED SECTION.
METHODS:
add_file IMPORTING iv_url TYPE string
- iv_content TYPE string OPTIONAL.
+ iv_content TYPE string OPTIONAL
+ RAISING zcx_abapgit_exception.
DATA:
mo_asset_manager TYPE REF TO zcl_abapgit_gui_asset_manager,
mo_cut TYPE REF TO zcl_abapgit_gui_css_processor.
@@ -36,9 +37,9 @@ ENDCLASS.
CLASS ltcl_single_file DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT INHERITING FROM ltcl_test_base.
PUBLIC SECTION.
METHODS:
- test_file_exists FOR TESTING,
+ test_file_exists FOR TESTING RAISING zcx_abapgit_exception,
test_file_does_not_exist FOR TESTING,
- test_empty_file FOR TESTING,
+ test_empty_file FOR TESTING RAISING zcx_abapgit_exception,
test_no_variables FOR TESTING RAISING zcx_abapgit_exception,
test_simple_variables FOR TESTING RAISING zcx_abapgit_exception,
test_complex_variables FOR TESTING RAISING zcx_abapgit_exception,
diff --git a/src/ui/core/zcl_abapgit_gui_html_processor.clas.testclasses.abap b/src/ui/core/zcl_abapgit_gui_html_processor.clas.testclasses.abap
index 5866bb9a0..4a6a9f5f8 100644
--- a/src/ui/core/zcl_abapgit_gui_html_processor.clas.testclasses.abap
+++ b/src/ui/core/zcl_abapgit_gui_html_processor.clas.testclasses.abap
@@ -58,7 +58,7 @@ CLASS ltcl_html_processor_test DEFINITION
RETURNING
VALUE(rv_html) TYPE string.
- METHODS setup.
+ METHODS setup RAISING zcx_abapgit_exception.
METHODS process_typical FOR TESTING RAISING zcx_abapgit_exception.
METHODS process_with_preserve FOR TESTING RAISING zcx_abapgit_exception.
METHODS process_no_css FOR TESTING RAISING zcx_abapgit_exception.
diff --git a/src/ui/zcl_abapgit_gui_page_sett_info.clas.abap b/src/ui/zcl_abapgit_gui_page_sett_info.clas.abap
index e759d41f1..dfb2eb38a 100644
--- a/src/ui/zcl_abapgit_gui_page_sett_info.clas.abap
+++ b/src/ui/zcl_abapgit_gui_page_sett_info.clas.abap
@@ -380,7 +380,10 @@ CLASS zcl_abapgit_gui_page_sett_info IMPLEMENTATION.
rs_info-size = xstrlen( is_file-data ).
IF is_file-filename CP '*.abap'.
- lv_code = zcl_abapgit_convert=>xstring_to_string_utf8( is_file-data ).
+ TRY.
+ lv_code = zcl_abapgit_convert=>xstring_to_string_utf8( is_file-data ).
+ CATCH zcx_abapgit_exception ##NO_HANDLER.
+ ENDTRY.
SPLIT lv_code AT zif_abapgit_definitions=>c_newline INTO TABLE lt_code.
diff --git a/src/ui/zcl_abapgit_html_action_utils.clas.abap b/src/ui/zcl_abapgit_html_action_utils.clas.abap
index 90226b369..7e9d55cdf 100644
--- a/src/ui/zcl_abapgit_html_action_utils.clas.abap
+++ b/src/ui/zcl_abapgit_html_action_utils.clas.abap
@@ -119,7 +119,11 @@ CLASS zcl_abapgit_html_action_utils IMPLEMENTATION.
CONSTANTS lc_nbsp TYPE xstring VALUE 'C2A0'. "
- gv_non_breaking_space = zcl_abapgit_convert=>xstring_to_string_utf8( lc_nbsp ).
+ TRY.
+ gv_non_breaking_space = zcl_abapgit_convert=>xstring_to_string_utf8( lc_nbsp ).
+ CATCH zcx_abapgit_exception.
+ ASSERT 0 = 1.
+ ENDTRY.
ENDMETHOD.
diff --git a/src/utils/zcl_abapgit_convert.clas.abap b/src/utils/zcl_abapgit_convert.clas.abap
index 8f695f356..8e0892f6c 100644
--- a/src/utils/zcl_abapgit_convert.clas.abap
+++ b/src/utils/zcl_abapgit_convert.clas.abap
@@ -18,17 +18,23 @@ CLASS zcl_abapgit_convert DEFINITION
IMPORTING
!iv_string TYPE string
RETURNING
- VALUE(rv_xstring) TYPE xstring .
+ VALUE(rv_xstring) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
CLASS-METHODS xstring_to_string_utf8
IMPORTING
!iv_data TYPE xsequence
RETURNING
- VALUE(rv_string) TYPE string .
+ VALUE(rv_string) TYPE string
+ RAISING
+ zcx_abapgit_exception .
CLASS-METHODS string_to_xstring_utf8_bom
IMPORTING
!iv_string TYPE string
RETURNING
- VALUE(rv_xstring) TYPE xstring .
+ VALUE(rv_xstring) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
CLASS-METHODS xstring_to_int
IMPORTING
!iv_xstring TYPE xstring
@@ -55,7 +61,9 @@ CLASS zcl_abapgit_convert DEFINITION
IMPORTING
!iv_str TYPE string
RETURNING
- VALUE(rv_xstr) TYPE xstring .
+ VALUE(rv_xstr) TYPE xstring
+ RAISING
+ zcx_abapgit_exception .
CLASS-METHODS string_to_tab
IMPORTING
!iv_str TYPE string
@@ -82,7 +90,7 @@ ENDCLASS.
-CLASS ZCL_ABAPGIT_CONVERT IMPLEMENTATION.
+CLASS zcl_abapgit_convert IMPLEMENTATION.
METHOD base64_to_xstring.
@@ -195,6 +203,8 @@ CLASS ZCL_ABAPGIT_CONVERT IMPLEMENTATION.
METHOD string_to_xstring_utf8.
+ DATA lx_error TYPE REF TO cx_root.
+
TRY.
IF go_convert_out IS INITIAL.
go_convert_out = cl_abap_conv_out_ce=>create( encoding = 'UTF-8' ).
@@ -207,7 +217,8 @@ CLASS ZCL_ABAPGIT_CONVERT IMPLEMENTATION.
CATCH cx_parameter_invalid_range
cx_sy_codepage_converter_init
cx_sy_conversion_codepage
- cx_parameter_invalid_type. "#EC NO_HANDLER
+ cx_parameter_invalid_type INTO lx_error.
+ zcx_abapgit_exception=>raise_with_text( lx_error ).
ENDTRY.
ENDMETHOD.
@@ -271,6 +282,8 @@ CLASS ZCL_ABAPGIT_CONVERT IMPLEMENTATION.
METHOD xstring_to_string_utf8.
+ DATA lx_error TYPE REF TO cx_root.
+
TRY.
IF go_convert_in IS INITIAL.
go_convert_in = cl_abap_conv_in_ce=>create( encoding = 'UTF-8' ).
@@ -286,7 +299,8 @@ CLASS ZCL_ABAPGIT_CONVERT IMPLEMENTATION.
CATCH cx_parameter_invalid_range
cx_sy_codepage_converter_init
cx_sy_conversion_codepage
- cx_parameter_invalid_type. "#EC NO_HANDLER
+ cx_parameter_invalid_type INTO lx_error.
+ zcx_abapgit_exception=>raise_with_text( lx_error ).
ENDTRY.
ENDMETHOD.
diff --git a/src/utils/zcl_abapgit_convert.clas.testclasses.abap b/src/utils/zcl_abapgit_convert.clas.testclasses.abap
index 3203b440a..2acebabd2 100644
--- a/src/utils/zcl_abapgit_convert.clas.testclasses.abap
+++ b/src/utils/zcl_abapgit_convert.clas.testclasses.abap
@@ -9,12 +9,13 @@ CLASS ltcl_convert DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FIN
METHODS convert_int FOR TESTING RAISING zcx_abapgit_exception.
METHODS split_string FOR TESTING.
METHODS convert_bitbyte FOR TESTING RAISING zcx_abapgit_exception.
- METHODS string_to_xstring_utf8 FOR TESTING.
- METHODS xstring_to_string_utf8 FOR TESTING.
+ METHODS string_to_xstring_utf8 FOR TESTING RAISING zcx_abapgit_exception.
+ METHODS xstring_to_string_utf8 FOR TESTING RAISING zcx_abapgit_exception.
+ METHODS xstring_to_string_not_utf8 FOR TESTING RAISING zcx_abapgit_exception.
METHODS base64_to_xstring FOR TESTING.
METHODS conversion_exit_isola_output FOR TESTING.
METHODS string_to_tab FOR TESTING.
- METHODS string_to_xstring FOR TESTING.
+ METHODS string_to_xstring FOR TESTING RAISING zcx_abapgit_exception.
METHODS xstring_to_bintab FOR TESTING.
ENDCLASS.
@@ -132,6 +133,19 @@ CLASS ltcl_convert IMPLEMENTATION.
ENDMETHOD.
+ METHOD xstring_to_string_not_utf8.
+
+ DATA lv_result TYPE string.
+
+ " 0xF8-0xFF are not valid in UTF-8
+ TRY.
+ lv_result = zcl_abapgit_convert=>xstring_to_string_utf8( 'F8FF00' ).
+ cl_abap_unit_assert=>fail( ).
+ CATCH zcx_abapgit_exception ##NO_HANDLER.
+ ENDTRY.
+
+ ENDMETHOD.
+
METHOD convert_bitbyte.
DATA: lv_xstring TYPE xstring,
diff --git a/src/utils/zcl_abapgit_diff.clas.abap b/src/utils/zcl_abapgit_diff.clas.abap
index ad35b90ce..2e0aacb94 100644
--- a/src/utils/zcl_abapgit_diff.clas.abap
+++ b/src/utils/zcl_abapgit_diff.clas.abap
@@ -12,7 +12,9 @@ CLASS zcl_abapgit_diff DEFINITION
!iv_old TYPE xstring
!iv_ignore_indentation TYPE abap_bool DEFAULT abap_false
!iv_ignore_comments TYPE abap_bool DEFAULT abap_false
- !iv_ignore_case TYPE abap_bool DEFAULT abap_false.
+ !iv_ignore_case TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception.
METHODS get
RETURNING
VALUE(rt_diff) TYPE zif_abapgit_definitions=>ty_diffs_tt.
@@ -65,7 +67,9 @@ CLASS zcl_abapgit_diff DEFINITION
!iv_old TYPE xstring
EXPORTING
!et_new TYPE rswsourcet
- !et_old TYPE rswsourcet.
+ !et_old TYPE rswsourcet
+ RAISING
+ zcx_abapgit_exception.
METHODS map_beacons.
METHODS shortlist.
METHODS create_regex_set
diff --git a/src/utils/zcl_abapgit_diff.clas.testclasses.abap b/src/utils/zcl_abapgit_diff.clas.testclasses.abap
index 1a57b1c68..118118b92 100644
--- a/src/utils/zcl_abapgit_diff.clas.testclasses.abap
+++ b/src/utils/zcl_abapgit_diff.clas.testclasses.abap
@@ -25,22 +25,24 @@ CLASS ltcl_diff DEFINITION FOR TESTING
IMPORTING
!iv_ignore_indentation TYPE abap_bool DEFAULT abap_false
!iv_ignore_comments TYPE abap_bool DEFAULT abap_false
- !iv_ignore_case TYPE abap_bool DEFAULT abap_false.
+ !iv_ignore_case TYPE abap_bool DEFAULT abap_false
+ RAISING
+ zcx_abapgit_exception.
METHODS:
- diff01 FOR TESTING,
- diff02 FOR TESTING,
- diff03 FOR TESTING,
- diff04 FOR TESTING,
- diff05 FOR TESTING,
- diff06 FOR TESTING,
- diff07 FOR TESTING,
- diff08 FOR TESTING,
- diff09 FOR TESTING,
- diff10 FOR TESTING,
- diff11 FOR TESTING,
- diff12 FOR TESTING,
- diff13 FOR TESTING.
+ diff01 FOR TESTING RAISING zcx_abapgit_exception,
+ diff02 FOR TESTING RAISING zcx_abapgit_exception,
+ diff03 FOR TESTING RAISING zcx_abapgit_exception,
+ diff04 FOR TESTING RAISING zcx_abapgit_exception,
+ diff05 FOR TESTING RAISING zcx_abapgit_exception,
+ diff06 FOR TESTING RAISING zcx_abapgit_exception,
+ diff07 FOR TESTING RAISING zcx_abapgit_exception,
+ diff08 FOR TESTING RAISING zcx_abapgit_exception,
+ diff09 FOR TESTING RAISING zcx_abapgit_exception,
+ diff10 FOR TESTING RAISING zcx_abapgit_exception,
+ diff11 FOR TESTING RAISING zcx_abapgit_exception,
+ diff12 FOR TESTING RAISING zcx_abapgit_exception,
+ diff13 FOR TESTING RAISING zcx_abapgit_exception.
ENDCLASS.
diff --git a/src/utils/zcl_abapgit_utils.clas.abap b/src/utils/zcl_abapgit_utils.clas.abap
index cc74350f7..4005b678b 100644
--- a/src/utils/zcl_abapgit_utils.clas.abap
+++ b/src/utils/zcl_abapgit_utils.clas.abap
@@ -9,14 +9,14 @@ CLASS zcl_abapgit_utils DEFINITION
IMPORTING
!iv_data TYPE xstring
RETURNING
- VALUE(rv_is_binary) TYPE abap_bool .
+ VALUE(rv_is_binary) TYPE abap_bool.
CLASS-METHODS extract_author_data
IMPORTING
!iv_author TYPE string
EXPORTING
- !ev_author TYPE zif_abapgit_definitions=>ty_commit-author
- !ev_email TYPE zif_abapgit_definitions=>ty_commit-email
- !ev_time TYPE zif_abapgit_definitions=>ty_commit-time
+ !ev_author TYPE zif_abapgit_definitions=>ty_commit-author
+ !ev_email TYPE zif_abapgit_definitions=>ty_commit-email
+ !ev_time TYPE zif_abapgit_definitions=>ty_commit-time
RAISING
zcx_abapgit_exception .
CLASS-METHODS is_valid_email
@@ -79,7 +79,13 @@ CLASS zcl_abapgit_utils IMPLEMENTATION.
lv_data = iv_data(lv_xlen).
- lv_string_data = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
+ TRY.
+ lv_string_data = zcl_abapgit_convert=>xstring_to_string_utf8( lv_data ).
+ CATCH zcx_abapgit_exception.
+ " Contains data that does not convert to UTF-8 so consider it binary
+ rv_is_binary = abap_true.
+ RETURN.
+ ENDTRY.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>newline IN lv_string_data WITH space.
REPLACE ALL OCCURRENCES OF cl_abap_char_utilities=>cr_lf IN lv_string_data WITH space.
diff --git a/src/utils/zcl_abapgit_utils.clas.testclasses.abap b/src/utils/zcl_abapgit_utils.clas.testclasses.abap
index 35c1e4ca4..cc7c4c55a 100644
--- a/src/utils/zcl_abapgit_utils.clas.testclasses.abap
+++ b/src/utils/zcl_abapgit_utils.clas.testclasses.abap
@@ -120,12 +120,16 @@ CLASS ltcl_is_binary DEFINITION FINAL FOR TESTING
given_file
IMPORTING
- iv_file TYPE string,
+ iv_file TYPE string
+ RAISING zcx_abapgit_exception,
given_image,
- given_cds_metadata,
- given_cds_view_with_umlaut,
+ given_cds_metadata
+ RAISING zcx_abapgit_exception,
+ given_cds_view_with_umlaut
+ RAISING zcx_abapgit_exception,
- when_is_binary_determined,
+ when_is_binary_determined
+ RAISING zcx_abapgit_exception,
then_is_not_binary,
then_is_binary.
diff --git a/src/xml/zcl_abapgit_xml.clas.abap b/src/xml/zcl_abapgit_xml.clas.abap
index 0ec82d922..aa70e5fec 100644
--- a/src/xml/zcl_abapgit_xml.clas.abap
+++ b/src/xml/zcl_abapgit_xml.clas.abap
@@ -164,7 +164,11 @@ CLASS zcl_abapgit_xml IMPLEMENTATION.
"unicode systems always add the byte order mark to the xml, while non-unicode does not
"this code will always add the byte order mark if it is not in the xml
- lv_mark = zcl_abapgit_convert=>xstring_to_string_utf8( cl_abap_char_utilities=>byte_order_mark_utf8 ).
+ TRY.
+ lv_mark = zcl_abapgit_convert=>xstring_to_string_utf8( cl_abap_char_utilities=>byte_order_mark_utf8 ).
+ CATCH zcx_abapgit_exception ##NO_HANDLER.
+ ASSERT 0 = 1.
+ ENDTRY.
IF rv_xml(1) <> lv_mark.
CONCATENATE lv_mark rv_xml INTO rv_xml.
ENDIF.
diff --git a/src/zcl_abapgit_news.clas.abap b/src/zcl_abapgit_news.clas.abap
index 4ef755db1..aad3d8bfe 100644
--- a/src/zcl_abapgit_news.clas.abap
+++ b/src/zcl_abapgit_news.clas.abap
@@ -44,7 +44,9 @@ CLASS zcl_abapgit_news DEFINITION
IMPORTING
!iv_rawdata TYPE xstring
!iv_lastseen_version TYPE string
- !iv_current_version TYPE string .
+ !iv_current_version TYPE string
+ RAISING
+ zcx_abapgit_exception .
PROTECTED SECTION.
PRIVATE SECTION.
diff --git a/src/zlib/zcl_abapgit_zlib.clas.testclasses.abap b/src/zlib/zcl_abapgit_zlib.clas.testclasses.abap
index c6460dd30..237604502 100644
--- a/src/zlib/zcl_abapgit_zlib.clas.testclasses.abap
+++ b/src/zlib/zcl_abapgit_zlib.clas.testclasses.abap
@@ -6,7 +6,7 @@ CLASS ltcl_zlib DEFINITION FOR TESTING
PRIVATE SECTION.
METHODS:
fixed FOR TESTING RAISING cx_dynamic_check,
- dynamic FOR TESTING RAISING cx_dynamic_check,
+ dynamic FOR TESTING RAISING cx_dynamic_check zcx_abapgit_exception,
not_compressed FOR TESTING RAISING cx_dynamic_check.
ENDCLASS.
diff --git a/test/abap_transpile.json b/test/abap_transpile.json
index 97abc8144..02b70209e 100644
--- a/test/abap_transpile.json
+++ b/test/abap_transpile.json
@@ -127,6 +127,8 @@
{"object": "ZCL_ABAPGIT_ZLIB", "class": "ltcl_zlib", "method": "fixed"},
{"object": "ZCL_ABAPGIT_UTILS", "class": "ltcl_is_binary", "method": "image_is_binary", "note": "REGEX '[^[:print:]]'"},
+ {"object": "ZCL_ABAPGIT_CONVERT", "class": "ltcl_convert", "method": "xstring_to_string_not_utf8", "note": "Decode of invalid UTF8 does not fail"},
+
{"object": "ZCL_ABAPGIT_AJSON", "class": "ltcl_serializer_test", "method": "stringify_condensed", "note": "field sorting is wrong, probably sorted internal tables needed"},
{"object": "ZCL_ABAPGIT_AJSON", "class": "ltcl_serializer_test", "method": "stringify_indented"},
{"object": "ZCL_ABAPGIT_AJSON", "class": "ltcl_serializer_test", "method": "array_index", "note": "uses secondary index array_index?"},