abapGit/src/zcl_abapgit_news.clas.testclasses.abap
Alexander Tsybulsky 1be907bd73
remove DEFINE from zcl_abapgit_news (#3194)
* remove DEFINE from zcl_abapgit_news

* linter fix

Co-authored-by: Lars Hvam <larshp@hotmail.com>
2020-02-02 09:48:07 +01:00

331 lines
11 KiB
ABAP

CLASS ltcl_relevant DEFINITION DEFERRED.
CLASS zcl_abapgit_news DEFINITION LOCAL FRIENDS ltcl_relevant.
CLASS ltcl_relevant DEFINITION FINAL FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PRIVATE SECTION.
METHODS:
test01 FOR TESTING,
test02 FOR TESTING,
test03 FOR TESTING.
ENDCLASS.
CLASS ltcl_relevant IMPLEMENTATION.
METHOD test01.
DATA: lv_relevant TYPE abap_bool.
lv_relevant = zcl_abapgit_news=>is_relevant( 'https://github.com/larshp/abapGit.git' ).
cl_abap_unit_assert=>assert_equals(
act = lv_relevant
exp = abap_true ).
ENDMETHOD.
METHOD test02.
DATA: lv_relevant TYPE abap_bool.
lv_relevant = zcl_abapgit_news=>is_relevant( 'https://github.com/larshp/abapGit' ).
cl_abap_unit_assert=>assert_equals(
act = lv_relevant
exp = abap_true ).
ENDMETHOD.
METHOD test03.
DATA: lv_relevant TYPE abap_bool.
lv_relevant = zcl_abapgit_news=>is_relevant( 'https://github.com/larshp/something' ).
cl_abap_unit_assert=>assert_equals(
act = lv_relevant
exp = abap_false ).
ENDMETHOD.
ENDCLASS.
**********************************************************************
* 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.