mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
version: method parse_version_from_source is unused? (#6100)
This commit is contained in:
parent
4ea5286719
commit
110da66989
|
@ -38,14 +38,6 @@ CLASS zcl_abapgit_version DEFINITION
|
||||||
VALUE(rv_version) TYPE string
|
VALUE(rv_version) TYPE string
|
||||||
RAISING
|
RAISING
|
||||||
zcx_abapgit_exception.
|
zcx_abapgit_exception.
|
||||||
CLASS-METHODS parse_version_from_source
|
|
||||||
IMPORTING
|
|
||||||
it_source TYPE string_table
|
|
||||||
iv_component_name TYPE csequence
|
|
||||||
RETURNING
|
|
||||||
VALUE(rv_version) TYPE string
|
|
||||||
RAISING
|
|
||||||
zcx_abapgit_exception.
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
|
|
||||||
|
@ -281,94 +273,4 @@ CLASS zcl_abapgit_version IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
METHOD parse_version_from_source.
|
|
||||||
TYPES: ty_statement TYPE c LENGTH 40.
|
|
||||||
CONSTANTS: BEGIN OF c_token_types,
|
|
||||||
identifier TYPE stokes-type VALUE 'I',
|
|
||||||
literal TYPE stokes-type VALUE 'S',
|
|
||||||
END OF c_token_types.
|
|
||||||
DATA: lt_keyword_filter TYPE STANDARD TABLE OF ty_statement,
|
|
||||||
lt_statements TYPE sstmnt_tab,
|
|
||||||
lt_tokens TYPE stokes_tab,
|
|
||||||
lt_structures TYPE sstruc_tab,
|
|
||||||
lv_found_token_index TYPE i,
|
|
||||||
lv_component_name TYPE string,
|
|
||||||
lv_version_length TYPE i.
|
|
||||||
FIELD-SYMBOLS: <ls_structure> TYPE sstruc,
|
|
||||||
<ls_statement> TYPE sstmnt,
|
|
||||||
<ls_token> TYPE stokes.
|
|
||||||
|
|
||||||
IF iv_component_name CA '-'.
|
|
||||||
zcx_abapgit_exception=>raise( 'Structured version constants are not supported' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
lv_component_name = condense( to_upper( iv_component_name ) ).
|
|
||||||
|
|
||||||
APPEND 'CONSTANTS' TO lt_keyword_filter.
|
|
||||||
|
|
||||||
SCAN ABAP-SOURCE it_source
|
|
||||||
KEYWORDS FROM lt_keyword_filter
|
|
||||||
STATEMENTS INTO lt_statements
|
|
||||||
TOKENS INTO lt_tokens
|
|
||||||
STRUCTURES INTO lt_structures.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
zcx_abapgit_exception=>raise( 'Source code could not be parsed to extract version (syntax error?)' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_structures ASSIGNING <ls_structure> WITH KEY type = 'P'.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
zcx_abapgit_exception=>raise( 'Could not find top level structure to parse version constant' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
LOOP AT lt_statements FROM <ls_structure>-stmnt_from TO <ls_structure>-stmnt_to ASSIGNING <ls_statement>.
|
|
||||||
LOOP AT lt_tokens FROM <ls_statement>-from TO <ls_statement>-to
|
|
||||||
TRANSPORTING NO FIELDS
|
|
||||||
WHERE type = c_token_types-identifier AND str = lv_component_name.
|
|
||||||
lv_found_token_index = sy-tabix.
|
|
||||||
EXIT.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
LOOP AT lt_tokens FROM lv_found_token_index TO <ls_statement>-to
|
|
||||||
TRANSPORTING NO FIELDS
|
|
||||||
WHERE type = c_token_types-identifier AND str = 'VALUE'.
|
|
||||||
lv_found_token_index = sy-tabix.
|
|
||||||
EXIT.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
IF lv_found_token_index + 1 > <ls_statement>-to.
|
|
||||||
zcx_abapgit_exception=>raise( 'Internal error parsing version constant' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_tokens INDEX lv_found_token_index + 1 ASSIGNING <ls_token>.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
zcx_abapgit_exception=>raise( 'Internal error parsing version constant' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CASE <ls_token>-type.
|
|
||||||
WHEN c_token_types-identifier.
|
|
||||||
rv_version = <ls_token>-str.
|
|
||||||
IF rv_version(1) CA sy-abcde.
|
|
||||||
zcx_abapgit_exception=>raise(
|
|
||||||
'References to other constants are not supported in version constant value' ).
|
|
||||||
ENDIF.
|
|
||||||
WHEN c_token_types-literal.
|
|
||||||
rv_version = <ls_token>-str.
|
|
||||||
IF rv_version CP '`*`' OR rv_version CP `'*'`.
|
|
||||||
lv_version_length = strlen( rv_version ).
|
|
||||||
rv_version = substring(
|
|
||||||
val = rv_version
|
|
||||||
off = 1
|
|
||||||
len = lv_version_length - 2 ).
|
|
||||||
ENDIF.
|
|
||||||
ENDCASE.
|
|
||||||
|
|
||||||
CONDENSE rv_version.
|
|
||||||
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
zcx_abapgit_exception=>raise( |Could not parse version constant { iv_component_name }| ).
|
|
||||||
ENDMETHOD.
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
|
@ -82,269 +82,3 @@ CLASS ltcl_version IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
CLASS ltcl_version_parse DEFINITION FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
||||||
PUBLIC SECTION.
|
|
||||||
METHODS:
|
|
||||||
abapgit_version FOR TESTING,
|
|
||||||
interface1 FOR TESTING,
|
|
||||||
interface2 FOR TESTING,
|
|
||||||
class1 FOR TESTING,
|
|
||||||
class_private FOR TESTING,
|
|
||||||
structured_constant FOR TESTING,
|
|
||||||
int4 FOR TESTING,
|
|
||||||
decfloat34 FOR TESTING,
|
|
||||||
syntax_error FOR TESTING,
|
|
||||||
class_data FOR TESTING,
|
|
||||||
ampersand FOR TESTING,
|
|
||||||
constant_reference FOR TESTING,
|
|
||||||
missing_constant FOR TESTING.
|
|
||||||
PRIVATE SECTION.
|
|
||||||
DATA:
|
|
||||||
mt_given_source TYPE string_table,
|
|
||||||
mv_given_component_name TYPE string,
|
|
||||||
mv_parsed_version TYPE string,
|
|
||||||
mo_raised_exception TYPE REF TO zcx_abapgit_exception.
|
|
||||||
METHODS:
|
|
||||||
given_the_source IMPORTING it_source TYPE string_table,
|
|
||||||
given_the_component_name IMPORTING iv_component_name TYPE string,
|
|
||||||
when_parse_is_called,
|
|
||||||
then_should_raise_exception,
|
|
||||||
then_version_should_equal IMPORTING iv_version TYPE string,
|
|
||||||
teardown.
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
||||||
CLASS ltcl_version_parse IMPLEMENTATION.
|
|
||||||
METHOD abapgit_version.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
|
|
||||||
TRY.
|
|
||||||
CALL METHOD cl_abap_unit_assert=>('SKIP')
|
|
||||||
EXPORTING
|
|
||||||
msg = 'Test method not supported in standalone version'.
|
|
||||||
CATCH cx_sy_dyn_call_illegal_method. " NW <= 752
|
|
||||||
RETURN.
|
|
||||||
ENDTRY.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ REPORT 'ZIF_ABAPGIT_VERSION===========IU' INTO lt_source STATE 'A'.
|
|
||||||
cl_abap_unit_assert=>assert_subrc( ).
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'C_ABAP_VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_version_should_equal( zif_abapgit_version=>c_abap_version ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD interface1.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ' version TYPE string VALUE `1.2.3`.' TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_version_should_equal( '1.2.3' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD interface2.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS version TYPE string VALUE `1.2.3`.' TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_version_should_equal( '1.2.3' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD class1.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'CLASS version DEFINITION CREATE PRIVATE PUBLIC.' TO lt_source.
|
|
||||||
APPEND ' PUBLIC SECTION.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ' version TYPE string VALUE `1.2.3`.' TO lt_source.
|
|
||||||
APPEND 'ENDCLASS.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_version_should_equal( '1.2.3' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD class_private.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'CLASS version DEFINITION CREATE PRIVATE PUBLIC.' TO lt_source.
|
|
||||||
APPEND ' PRIVATE SECTION.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ' version TYPE string VALUE `1.2.3`.' TO lt_source.
|
|
||||||
APPEND 'ENDCLASS.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_version_should_equal( '1.2.3' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD structured_constant.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ' BEGIN OF structure,' TO lt_source.
|
|
||||||
APPEND ' BEGIN OF inner_structure,' TO lt_source.
|
|
||||||
APPEND ' version TYPE string VALUE `1.0.0`,' TO lt_source.
|
|
||||||
APPEND ' text TYPE string VALUE `inner`,' TO lt_source.
|
|
||||||
APPEND ' END OF inner_structre,' TO lt_source.
|
|
||||||
APPEND ' outer_text TYPE string VALUE `outer`,' TO lt_source.
|
|
||||||
APPEND ' END OF structure.' TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'STRUCTURE-INNER_STRUCTURE-VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_should_raise_exception( ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD int4.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version DEFINITION CREATE PRIVATE PUBLIC.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ' version TYPE i VALUE 6.' TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_version_should_equal( '6' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD decfloat34.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version DEFINITION CREATE PRIVATE PUBLIC.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ` version TYPE decfloat34 VALUE '3.14'.` TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_version_should_equal( '3.14' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD syntax_error.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ' version TYPE string VAL `1.2.3`.' TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_should_raise_exception( ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD class_data.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version.' TO lt_source.
|
|
||||||
APPEND ' CLASS-DATA:' TO lt_source.
|
|
||||||
APPEND ' version TYPE string VALUE `1.2.3`.' TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_should_raise_exception( ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD ampersand.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ' version TYPE string VALUE `1` &' TO lt_source.
|
|
||||||
APPEND ' `.2` & `.3`.' TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_version_should_equal( '1.2.3' ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD constant_reference.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ' actual_version TYPE string VALUE `1.2.3`,' TO lt_source.
|
|
||||||
APPEND ' version TYPE string VALUE actual_version.' TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'VERSION' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_should_raise_exception( ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD missing_constant.
|
|
||||||
DATA: lt_source TYPE string_table.
|
|
||||||
|
|
||||||
APPEND 'INTERFACE version.' TO lt_source.
|
|
||||||
APPEND ' CONSTANTS:' TO lt_source.
|
|
||||||
APPEND ' version TYPE string VALUE `1.2.3`.' TO lt_source.
|
|
||||||
APPEND 'ENDINTERFACE.' TO lt_source.
|
|
||||||
|
|
||||||
given_the_source( lt_source ).
|
|
||||||
given_the_component_name( 'SOME_MISSING_CONSTANT' ).
|
|
||||||
when_parse_is_called( ).
|
|
||||||
then_should_raise_exception( ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD given_the_source.
|
|
||||||
mt_given_source = it_source.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD given_the_component_name.
|
|
||||||
mv_given_component_name = iv_component_name.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD when_parse_is_called.
|
|
||||||
TRY.
|
|
||||||
mv_parsed_version = zcl_abapgit_version=>parse_version_from_source(
|
|
||||||
it_source = mt_given_source
|
|
||||||
iv_component_name = mv_given_component_name ).
|
|
||||||
CATCH zcx_abapgit_exception INTO mo_raised_exception ##NO_HANDLER.
|
|
||||||
ENDTRY.
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD then_should_raise_exception.
|
|
||||||
cl_abap_unit_assert=>assert_bound( mo_raised_exception ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD then_version_should_equal.
|
|
||||||
cl_abap_unit_assert=>assert_equals(
|
|
||||||
exp = iv_version
|
|
||||||
act = mv_parsed_version ).
|
|
||||||
ENDMETHOD.
|
|
||||||
|
|
||||||
METHOD teardown.
|
|
||||||
CLEAR mt_given_source.
|
|
||||||
CLEAR mv_given_component_name.
|
|
||||||
CLEAR mv_parsed_version.
|
|
||||||
FREE mo_raised_exception.
|
|
||||||
ENDMETHOD.
|
|
||||||
ENDCLASS.
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user