Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

RTTI + unit test msg #551

Merged
merged 4 commits into from Feb 4, 2023
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.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions package.json
Expand Up @@ -12,8 +12,8 @@
"license": "MIT",
"dependencies": {
"@abaplint/cli": "^2.95.9",
"@abaplint/runtime": "^2.4.1",
"@abaplint/runtime": "^2.4.6",
"@abaplint/database-sqlite": "^2.4.0",
"@abaplint/transpiler-cli": "^2.4.1"
"@abaplint/transpiler-cli": "^2.4.6"
}
}
34 changes: 32 additions & 2 deletions src/rtti/cl_abap_typedescr.clas.abap
Expand Up @@ -88,6 +88,11 @@ CLASS cl_abap_typedescr DEFINITION PUBLIC.

PRIVATE SECTION.
CLASS-DATA gv_counter TYPE n LENGTH 10.

CLASS-METHODS
describe_by_dashes
IMPORTING p_name TYPE clike
RETURNING VALUE(type) TYPE REF TO cl_abap_typedescr.
ENDCLASS.

CLASS cl_abap_typedescr IMPLEMENTATION.
Expand All @@ -100,10 +105,35 @@ CLASS cl_abap_typedescr IMPLEMENTATION.
ASSERT 1 = 'todo'.
ENDMETHOD.

METHOD describe_by_dashes.
DATA lt_parts TYPE STANDARD TABLE OF string.
DATA lv_part LIKE LINE OF lt_parts.
DATA lo_current TYPE REF TO cl_abap_typedescr.
DATA lo_struct TYPE REF TO cl_abap_structdescr.

SPLIT p_name AT '-' INTO TABLE lt_parts.

LOOP AT lt_parts INTO lv_part.
IF lo_current IS INITIAL.
lo_current = describe_by_name( lv_part ).
ELSEIF lo_current->kind = kind_struct.
lo_struct ?= lo_current.
lo_current = lo_struct->get_component_type( lv_part ).
ENDIF.
ENDLOOP.

type = lo_current.
ENDMETHOD.

METHOD describe_by_name.
DATA ref TYPE REF TO data.
DATA ref TYPE REF TO data.
DATA objectdescr TYPE REF TO cl_abap_objectdescr.
DATA oo_type TYPE string.
DATA oo_type TYPE string.

IF p_name CA '-'.
type = describe_by_dashes( p_name ).
RETURN.
ENDIF.

WRITE '@KERNEL oo_type.set(abap.Classes[p_name.get().toUpperCase()]?.INTERNAL_TYPE || "");'.

Expand Down
13 changes: 13 additions & 0 deletions src/rtti/cl_abap_typedescr.clas.testclasses.abap
Expand Up @@ -51,6 +51,7 @@ CLASS ltcl_test DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
METHODS contant_field_absolute FOR TESTING.
METHODS structure_field_absolute FOR TESTING.
METHODS unnamed_type FOR TESTING.
METHODS describe_by_dashed FOR TESTING.

ENDCLASS.

Expand Down Expand Up @@ -422,4 +423,16 @@ CLASS ltcl_test IMPLEMENTATION.

ENDMETHOD.

METHOD describe_by_dashed.

DATA lo_descr TYPE REF TO cl_abap_typedescr.

lo_descr = cl_abap_typedescr=>describe_by_name( 'T100-ARBGB' ).

cl_abap_unit_assert=>assert_equals(
act = lo_descr->type_kind
exp = cl_abap_typedescr=>typekind_char ).

ENDMETHOD.

ENDCLASS.
14 changes: 12 additions & 2 deletions src/unit/cl_abap_unit_assert.clas.abap
Expand Up @@ -304,18 +304,28 @@ CLASS cl_abap_unit_assert IMPLEMENTATION.
ENDMETHOD.

METHOD assert_not_initial.
DATA lv_msg TYPE string.
IF act IS INITIAL.
lv_msg = msg.
IF lv_msg IS INITIAL.
lv_msg = |Expected non initial value|.
ENDIF.
RAISE EXCEPTION TYPE kernel_cx_assert
EXPORTING
msg = |Expected non initial value|.
msg = lv_msg.
ENDIF.
ENDMETHOD.

METHOD assert_initial.
DATA lv_msg TYPE string.
IF act IS NOT INITIAL.
lv_msg = msg.
IF lv_msg IS INITIAL.
lv_msg = |Expected initial value|.
ENDIF.
RAISE EXCEPTION TYPE kernel_cx_assert
EXPORTING
msg = |Expected initial value|.
msg = lv_msg.
ENDIF.
ENDMETHOD.

Expand Down