mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00

* APACK definition * Rework News Use APACK version for news and remove restriction for repository to set available for all with APACK * Remove APACK for abapGit * TODO mark for version constant use * Move is_abapgit_repo to zcl_abapgit_url Co-authored-by: Lars Hvam <larshp@hotmail.com>
295 lines
10 KiB
ABAP
295 lines
10 KiB
ABAP
**********************************************************************
|
|
* Helper classed
|
|
|
|
CLASS lcl_string_buffer DEFINITION FINAL.
|
|
PUBLIC SECTION.
|
|
DATA mt_buffer TYPE string_table.
|
|
METHODS add
|
|
IMPORTING
|
|
iv_str TYPE string.
|
|
ENDCLASS.
|
|
|
|
CLASS lcl_string_buffer IMPLEMENTATION.
|
|
METHOD add.
|
|
APPEND iv_str TO mt_buffer.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|
|
|
|
CLASS lcl_log_entries DEFINITION FINAL.
|
|
PUBLIC SECTION.
|
|
DATA mt_log_entries TYPE zcl_abapgit_news=>tt_log.
|
|
METHODS add
|
|
IMPORTING
|
|
iv_str TYPE string.
|
|
ENDCLASS.
|
|
|
|
CLASS lcl_log_entries IMPLEMENTATION.
|
|
METHOD add.
|
|
DATA ls_log LIKE LINE OF mt_log_entries.
|
|
DATA lv_pos_to_cur_str TYPE string.
|
|
|
|
SPLIT iv_str AT '/' INTO
|
|
ls_log-version
|
|
ls_log-is_header
|
|
ls_log-is_important
|
|
lv_pos_to_cur_str
|
|
ls_log-text.
|
|
|
|
CONDENSE ls_log-version.
|
|
CONDENSE ls_log-is_header.
|
|
CONDENSE ls_log-is_important.
|
|
CONDENSE ls_log-text.
|
|
ls_log-pos_to_cur = lv_pos_to_cur_str.
|
|
|
|
APPEND ls_log TO mt_log_entries.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|
|
|
|
**********************************************************************
|
|
|
|
CLASS ltcl_news DEFINITION DEFERRED.
|
|
CLASS zcl_abapgit_news DEFINITION LOCAL FRIENDS ltcl_news.
|
|
|
|
*----------------------------------------------------------------------*
|
|
* CLASS ltcl_news DEFINITION
|
|
*----------------------------------------------------------------------*
|
|
* Definition of test class for news announcement
|
|
*----------------------------------------------------------------------*
|
|
CLASS ltcl_news DEFINITION FINAL FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
|
|
|
|
PRIVATE SECTION.
|
|
|
|
METHODS:
|
|
version_to_numeric FOR TESTING,
|
|
compare_versions FOR TESTING,
|
|
normalize_version FOR TESTING,
|
|
parse_line FOR TESTING,
|
|
parse FOR TESTING.
|
|
|
|
ENDCLASS.
|
|
|
|
*----------------------------------------------------------------------*
|
|
* CLASS ltcl_news IMPLEMENTATION
|
|
*----------------------------------------------------------------------*
|
|
* Implementation of test class for news announcement
|
|
*----------------------------------------------------------------------*
|
|
CLASS ltcl_news IMPLEMENTATION.
|
|
|
|
METHOD version_to_numeric.
|
|
|
|
DATA: lv_version_exp TYPE i VALUE 1023010,
|
|
lv_version_act TYPE i.
|
|
|
|
lv_version_act = zcl_abapgit_news=>version_to_numeric( '1.23.10' ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_version_exp
|
|
act = lv_version_act
|
|
msg = ' Error during conversion of version to numeric value' ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD compare_versions.
|
|
|
|
DATA lv_result TYPE i.
|
|
|
|
" Case 1: version A > version B
|
|
lv_result = zcl_abapgit_news=>compare_versions( iv_a = '1.28.10'
|
|
iv_b = '1.23.10' ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 1
|
|
act = lv_result
|
|
msg = ' Error during comparison of versions. Case: A > B' ).
|
|
|
|
CLEAR: lv_result.
|
|
|
|
" Case 2: version A < version B
|
|
lv_result = zcl_abapgit_news=>compare_versions( iv_a = '1.28.10'
|
|
iv_b = '2.23.10' ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = -1
|
|
act = lv_result
|
|
msg = ' Error during comparison of versions. Case: A < B' ).
|
|
|
|
CLEAR: lv_result.
|
|
|
|
" Case 3: version A = version B
|
|
lv_result = zcl_abapgit_news=>compare_versions( iv_a = '1.28.10'
|
|
iv_b = '1.28.10' ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0
|
|
act = lv_result
|
|
msg = ' Error during comparison of versions. Case: A = B' ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD normalize_version.
|
|
|
|
cl_abap_unit_assert=>assert_equals(
|
|
act = zcl_abapgit_news=>normalize_version( '1.28.10' )
|
|
exp = '1.28.10' ).
|
|
|
|
cl_abap_unit_assert=>assert_equals(
|
|
act = zcl_abapgit_news=>normalize_version( 'v1.28.10' )
|
|
exp = '1.28.10' ).
|
|
|
|
cl_abap_unit_assert=>assert_equals(
|
|
act = zcl_abapgit_news=>normalize_version( 'b1.28.10' )
|
|
exp = '' ).
|
|
|
|
cl_abap_unit_assert=>assert_equals(
|
|
act = zcl_abapgit_news=>normalize_version( 'x.y.z' )
|
|
exp = '' ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD parse_line.
|
|
|
|
DATA: ls_log TYPE zcl_abapgit_news=>ty_log.
|
|
|
|
ls_log = zcl_abapgit_news=>parse_line(
|
|
iv_line = '======'
|
|
iv_current_version = '1.26.01' ).
|
|
cl_abap_unit_assert=>assert_initial( ls_log ).
|
|
|
|
ls_log = zcl_abapgit_news=>parse_line(
|
|
iv_line = ''
|
|
iv_current_version = '1.26.01' ).
|
|
cl_abap_unit_assert=>assert_initial( ls_log ).
|
|
|
|
ls_log = zcl_abapgit_news=>parse_line(
|
|
iv_line = '------'
|
|
iv_current_version = '1.26.01' ).
|
|
cl_abap_unit_assert=>assert_initial( ls_log ).
|
|
|
|
CLEAR ls_log.
|
|
ls_log = zcl_abapgit_news=>parse_line(
|
|
iv_line = '2017-02-13 v1.28.0'
|
|
iv_current_version = '1.26.01' ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-version
|
|
exp = '1.28.0' ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-is_header
|
|
exp = abap_true ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-pos_to_cur
|
|
exp = 1 ).
|
|
|
|
CLEAR ls_log.
|
|
ls_log = zcl_abapgit_news=>parse_line(
|
|
iv_line = '2017-02-13 v1.26.0'
|
|
iv_current_version = '1.26.01' ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-version
|
|
exp = '1.26.0' ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-is_header
|
|
exp = abap_true ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-pos_to_cur
|
|
exp = -1 ).
|
|
|
|
CLEAR ls_log.
|
|
ls_log = zcl_abapgit_news=>parse_line(
|
|
iv_line = 'news'
|
|
iv_current_version = '1.26.01' ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-version
|
|
exp = '' ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-is_header
|
|
exp = abap_false ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-pos_to_cur
|
|
exp = 0 ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-is_important
|
|
exp = abap_false ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-text
|
|
exp = 'news' ).
|
|
|
|
CLEAR ls_log.
|
|
ls_log = zcl_abapgit_news=>parse_line(
|
|
iv_line = ' ! important news'
|
|
iv_current_version = '1.26.01' ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-version
|
|
exp = '' ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-is_header
|
|
exp = abap_false ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-pos_to_cur
|
|
exp = 0 ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-is_important
|
|
exp = abap_true ).
|
|
cl_abap_unit_assert=>assert_equals( act = ls_log-text
|
|
exp = ' ! important news' ).
|
|
|
|
ENDMETHOD.
|
|
|
|
METHOD parse.
|
|
|
|
DATA lt_log_act TYPE zcl_abapgit_news=>tt_log.
|
|
DATA lo_src_text_buf TYPE REF TO lcl_string_buffer.
|
|
DATA lo_log_entries TYPE REF TO lcl_log_entries.
|
|
|
|
" Generate test data
|
|
CREATE OBJECT lo_src_text_buf.
|
|
lo_src_text_buf->add( '======' ).
|
|
lo_src_text_buf->add( '------' ).
|
|
lo_src_text_buf->add( ` ` ).
|
|
lo_src_text_buf->add( 'abapGit changelog' ).
|
|
lo_src_text_buf->add( '2017-02-13 v1.28.0' ).
|
|
lo_src_text_buf->add( '------------------' ).
|
|
lo_src_text_buf->add( '+ Staging page redesigned' ).
|
|
lo_src_text_buf->add( '! Support for core data services' ).
|
|
lo_src_text_buf->add( ` ` ).
|
|
lo_src_text_buf->add( '2017-01-25 v1.27.0' ).
|
|
lo_src_text_buf->add( '------------------' ).
|
|
lo_src_text_buf->add( '+ Two factor authentication with github.com' ).
|
|
lo_src_text_buf->add( '2017-01-25 v1.26.0' ).
|
|
|
|
" Case 1
|
|
" Generate expected results
|
|
CREATE OBJECT lo_log_entries.
|
|
" VERSION HEAD IMP POS TEXT
|
|
lo_log_entries->add( '1.28.0 /X / /1 /2017-02-13 v1.28.0' ).
|
|
lo_log_entries->add( '1.28.0 / / /0 /+ Staging page redesigned' ).
|
|
lo_log_entries->add( '1.28.0 / /X /0 /! Support for core data services' ).
|
|
lo_log_entries->add( '1.27.0 /X / /1 /2017-01-25 v1.27.0' ).
|
|
lo_log_entries->add( '1.27.0 / / /0 /+ Two factor authentication with github.com' ).
|
|
|
|
lt_log_act = zcl_abapgit_news=>parse(
|
|
it_lines = lo_src_text_buf->mt_buffer
|
|
iv_current_version = '1.26.01' ).
|
|
cl_abap_unit_assert=>assert_equals(
|
|
exp = lo_log_entries->mt_log_entries
|
|
act = lt_log_act
|
|
msg = ' Error during parsing: Case 1.' ).
|
|
|
|
|
|
" Case 2 (exect version match)
|
|
CREATE OBJECT lo_log_entries.
|
|
" VERSION HEAD IMP UPD TEXT
|
|
lo_log_entries->add( '1.28.0 /X / /1 /2017-02-13 v1.28.0' ).
|
|
lo_log_entries->add( '1.28.0 / / /0 /+ Staging page redesigned' ).
|
|
lo_log_entries->add( '1.28.0 / /X /0 /! Support for core data services' ).
|
|
|
|
lt_log_act = zcl_abapgit_news=>parse(
|
|
it_lines = lo_src_text_buf->mt_buffer
|
|
iv_current_version = '1.27.00' ).
|
|
cl_abap_unit_assert=>assert_equals(
|
|
exp = lo_log_entries->mt_log_entries
|
|
act = lt_log_act
|
|
msg = ' Error during parsing: Case 2.' ).
|
|
|
|
" Case 3 (display tail)
|
|
CREATE OBJECT lo_log_entries.
|
|
" VERSION HEAD IMP UPD TEXT
|
|
lo_log_entries->add( '1.28.0 /X / /0 /2017-02-13 v1.28.0' ).
|
|
lo_log_entries->add( '1.28.0 / / /0 /+ Staging page redesigned' ).
|
|
lo_log_entries->add( '1.28.0 / /X /0 /! Support for core data services' ).
|
|
lo_log_entries->add( '1.27.0 /X / /-1 /2017-01-25 v1.27.0' ).
|
|
lo_log_entries->add( '1.27.0 / / /0 /+ Two factor authentication with github.com' ).
|
|
lo_log_entries->add( '1.26.0 /X / /-1 /2017-01-25 v1.26.0' ).
|
|
|
|
lt_log_act = zcl_abapgit_news=>parse(
|
|
it_lines = lo_src_text_buf->mt_buffer
|
|
iv_current_version = '1.28.00' ).
|
|
cl_abap_unit_assert=>assert_equals(
|
|
exp = lo_log_entries->mt_log_entries
|
|
act = lt_log_act
|
|
msg = ' Error during parsing: Case 3.' ).
|
|
|
|
ENDMETHOD.
|
|
|
|
ENDCLASS.
|