diff --git a/src/zcl_abapgit_file_status.clas.testclasses.abap b/src/zcl_abapgit_file_status.clas.testclasses.abap index b042513f4..241fb5a23 100644 --- a/src/zcl_abapgit_file_status.clas.testclasses.abap +++ b/src/zcl_abapgit_file_status.clas.testclasses.abap @@ -1,30 +1,3 @@ -CLASS ltcl_file_status DEFINITION DEFERRED. -CLASS zcl_abapgit_file_status DEFINITION LOCAL FRIENDS ltcl_file_status. - -DEFINE _append_state. - APPEND INITIAL LINE TO lt_state ASSIGNING . - -path = '/'. - -filename = &1. - -sha1 = &2. -END-OF-DEFINITION. - -DEFINE _append_local. - APPEND INITIAL LINE TO lt_local ASSIGNING . - -item-obj_type = &1. - -item-obj_name = &2. - -item-devclass = '$Z$'. - -file-path = '/'. - -file-filename = &3. - -file-sha1 = &4. -END-OF-DEFINITION. - -DEFINE _append_remote. - APPEND INITIAL LINE TO lt_remote ASSIGNING . - -path = '/'. - -filename = &1. - -sha1 = &2. -END-OF-DEFINITION. - DEFINE _append_result. APPEND INITIAL LINE TO mt_results ASSIGNING . -obj_type = &1. @@ -37,114 +10,6 @@ DEFINE _append_result. -filename = &8. END-OF-DEFINITION. -CLASS ltcl_file_status DEFINITION FOR TESTING RISK LEVEL HARMLESS - DURATION SHORT FINAL. - - PRIVATE SECTION. - DATA: mt_results TYPE zif_abapgit_definitions=>ty_results_tt. - - METHODS: calculate_status FOR TESTING RAISING zcx_abapgit_exception. - -ENDCLASS. - -CLASS ltcl_file_status IMPLEMENTATION. - - METHOD calculate_status. - - DATA: lt_local TYPE zif_abapgit_definitions=>ty_files_item_tt, - lt_remote TYPE zif_abapgit_definitions=>ty_files_tt, - lt_state TYPE zif_abapgit_definitions=>ty_file_signatures_tt, - lt_results_exp TYPE zif_abapgit_definitions=>ty_results_tt, - lo_dot TYPE REF TO zcl_abapgit_dot_abapgit. - - FIELD-SYMBOLS: LIKE LINE OF lt_local, - LIKE LINE OF lt_remote, - LIKE LINE OF mt_results, - LIKE LINE OF lt_state. - - - "STATE FILE SHA1 - _append_state '$$zclass1.clas.xml' 'C1_F1'. - " class1 testclasses is new locally, abap is new remotely - " class2 is completely new remotely - _append_state '$$zdoma1.doma.xml' 'D1'. - _append_state '$$zdoma2.doma.xml' 'D2'. - _append_state '$$zdoma3.doma.xml' 'D3'. - " doma4 is new locally - " doma5 is new remotely - _append_state '$$zdoma6.doma.xml' 'D6'. - " doma7 is not in state - emulate brocken cache - " doma8 is not in state - emulate brocken cache - _append_state '$$zdoma9.doma.xml' 'D9'. - _append_state 'num01.doma.xml' 'NUM01'. " another from different package - _append_state 'xfeld.doma.xml' 'XFELD'. " from different package - - "LOCAL TYPE NAME FILE SHA1 - _append_local 'CLAS' '$$ZCLASS1' '$$zclass1.clas.testclasses.abap' 'C1_F3'. - _append_local 'CLAS' '$$ZCLASS1' '$$zclass1.clas.xml' 'C1_F1'. - _append_local 'DOMA' '$$ZDOMA1' '$$zdoma1.doma.xml' 'D1'. - _append_local 'DOMA' '$$ZDOMA2' '$$zdoma2.doma.xml' 'D2_CHANGED_L'. - _append_local 'DOMA' '$$ZDOMA3' '$$zdoma3.doma.xml' 'D3'. - _append_local 'DOMA' '$$ZDOMA4' '$$zdoma4.doma.xml' 'D4'. - _append_local 'DOMA' '$$ZDOMA6' '$$zdoma6.doma.xml' 'D6_CHANGED_L'. - _append_local 'DOMA' '$$ZDOMA7' '$$zdoma7.doma.xml' 'D7'. - _append_local 'DOMA' '$$ZDOMA8' '$$zdoma8.doma.xml' 'D8'. - " dome9 was deleted from local system. Can be found by existing state - - "REMOTE FILE SHA1 - _append_remote 'textfile.txt' 'T1'. - _append_remote '$$zclass1.clas.abap' 'C1_F2'. " Must be before xml for tougher test - _append_remote '$$zclass1.clas.xml' 'C1_F1'. - _append_remote '$$zclass2.clas.abap' 'C1_F2'. " Must be before xml for tougher test - _append_remote '$$zclass2.clas.xml' 'C1_F1'. - _append_remote '$$zdoma1.doma.xml' 'D1'. - _append_remote '$$zdoma2.doma.xml' 'D2'. - _append_remote '$$zdoma3.doma.xml' 'D3_CHANGED_R'. - _append_remote '$$zdoma5.doma.xml' 'D5'. - _append_remote '$$zdoma6.doma.xml' 'D6_CHANGED_R'. - _append_remote '$$zdoma7.doma.xml' 'D7'. - _append_remote '$$zdoma8.doma.xml' 'D8_CHANGED_R'. " This one is changed - _append_remote '$$zdoma9.doma.xml' 'D9'. " This one is deleted locally - _append_remote 'xfeld.doma.xml' 'XFELD'. " Object from different package - _append_remote 'num01.doma.xml' 'NUM01_CHANGED'. " Changed object from different package - - "EXP RESULT TYPE NAME MATCH LST RST PKG PATH FILE - _append_result '' '' ' ' ' ' 'A' '' '/' 'textfile.txt'. - _append_result 'CLAS' '$$ZCLASS1' ' ' ' ' 'A' '$Z$' '/' '$$zclass1.clas.abap'. - _append_result 'CLAS' '$$ZCLASS1' ' ' 'A' ' ' '$Z$' '/' '$$zclass1.clas.testclasses.abap'. - _append_result 'CLAS' '$$ZCLASS1' 'X' ' ' ' ' '$Z$' '/' '$$zclass1.clas.xml'. - _append_result 'CLAS' '$$ZCLASS2' ' ' ' ' 'A' '' '/' '$$zclass2.clas.abap'. - _append_result 'CLAS' '$$ZCLASS2' ' ' ' ' 'A' '' '/' '$$zclass2.clas.xml'. - _append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/' '$$zdoma1.doma.xml'. - _append_result 'DOMA' '$$ZDOMA2' ' ' 'M' ' ' '$Z$' '/' '$$zdoma2.doma.xml'. - _append_result 'DOMA' '$$ZDOMA3' ' ' ' ' 'M' '$Z$' '/' '$$zdoma3.doma.xml'. - _append_result 'DOMA' '$$ZDOMA4' ' ' 'A' ' ' '$Z$' '/' '$$zdoma4.doma.xml'. - _append_result 'DOMA' '$$ZDOMA5' ' ' ' ' 'A' '' '/' '$$zdoma5.doma.xml'. - _append_result 'DOMA' '$$ZDOMA6' ' ' 'M' 'M' '$Z$' '/' '$$zdoma6.doma.xml'. - _append_result 'DOMA' '$$ZDOMA7' 'X' ' ' ' ' '$Z$' '/' '$$zdoma7.doma.xml'. - _append_result 'DOMA' '$$ZDOMA8' ' ' 'M' 'M' '$Z$' '/' '$$zdoma8.doma.xml'. - _append_result 'DOMA' '$$ZDOMA9' ' ' 'D' ' ' '' '/' '$$zdoma9.doma.xml'. - _append_result 'DOMA' 'NUM01' ' ' ' ' 'M' 'SUTI' '/' 'num01.doma.xml'. - _append_result 'DOMA' 'XFELD' 'X' ' ' ' ' 'SUTI' '/' 'xfeld.doma.xml'. - lt_results_exp = mt_results. - - lo_dot = zcl_abapgit_dot_abapgit=>build_default( ). - - mt_results = zcl_abapgit_file_status=>calculate_status( - iv_devclass = '$Z$' - io_dot = lo_dot - it_local = lt_local - it_remote = lt_remote - it_cur_state = lt_state ). - - cl_abap_unit_assert=>assert_equals( - act = mt_results - exp = lt_results_exp ). - - ENDMETHOD. - -ENDCLASS. - CLASS ltcl_run_checks DEFINITION DEFERRED. CLASS zcl_abapgit_file_status DEFINITION LOCAL FRIENDS ltcl_run_checks. @@ -315,33 +180,147 @@ CLASS ltcl_run_checks IMPLEMENTATION. ENDCLASS. -CLASS ltcl_status_helper DEFINITION DEFERRED. -CLASS zcl_abapgit_file_status DEFINITION LOCAL FRIENDS ltcl_status_helper. - -CLASS ltcl_status_helper DEFINITION. +CLASS lcl_status_result DEFINITION. PUBLIC SECTION. METHODS: + constructor + IMPORTING + it_results TYPE zif_abapgit_definitions=>ty_results_tt, + get_line + IMPORTING + iv_line TYPE i + RETURNING + VALUE(rs_data) TYPE zif_abapgit_definitions=>ty_result, + assert_lines + IMPORTING + iv_lines TYPE i. + + PRIVATE SECTION. + DATA: mt_results TYPE zif_abapgit_definitions=>ty_results_tt. + +ENDCLASS. + +CLASS lcl_status_result IMPLEMENTATION. + + METHOD constructor. + + mt_results = it_results. + + ENDMETHOD. + + METHOD get_line. + + READ TABLE mt_results INDEX iv_line INTO rs_data. + cl_abap_unit_assert=>assert_subrc( ). + + ENDMETHOD. + + METHOD assert_lines. + + cl_abap_unit_assert=>assert_equals( + act = lines( mt_results ) + exp = iv_lines ). + + ENDMETHOD. + +ENDCLASS. + +CLASS lcl_status_helper DEFINITION DEFERRED. +CLASS zcl_abapgit_file_status DEFINITION LOCAL FRIENDS lcl_status_helper. + +CLASS lcl_status_helper DEFINITION FOR TESTING. + + PUBLIC SECTION. + INTERFACES: + zif_abapgit_tadir. + + METHODS: + constructor, + add_tadir + IMPORTING + iv_obj_type TYPE tadir-object + iv_obj_name TYPE tadir-obj_name + iv_devclass TYPE tadir-devclass, add_remote IMPORTING iv_path TYPE string DEFAULT '/' iv_filename TYPE string iv_sha1 TYPE zif_abapgit_definitions=>ty_sha1, - add_local, + add_local + IMPORTING + iv_path TYPE string DEFAULT '/' + iv_filename TYPE string + iv_sha1 TYPE zif_abapgit_definitions=>ty_sha1 + iv_obj_type TYPE tadir-object + iv_obj_name TYPE tadir-obj_name + iv_devclass TYPE devclass DEFAULT '$Z$', add_state, run - RETURNING VALUE(rt_results) TYPE zif_abapgit_definitions=>ty_results_tt - RAISING zcx_abapgit_exception. + IMPORTING + iv_devclass TYPE devclass DEFAULT '$Z$' + RETURNING + VALUE(ro_result) TYPE REF TO lcl_status_result + RAISING + zcx_abapgit_exception. PRIVATE SECTION. - DATA: mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt, - mt_remote TYPE zif_abapgit_definitions=>ty_files_tt, - mt_state TYPE zif_abapgit_definitions=>ty_file_signatures_tt. + TYPES: BEGIN OF ty_tadir, + obj_type TYPE tadir-object, + obj_name TYPE tadir-obj_name, + devclass TYPE tadir-devclass, + END OF ty_tadir. + + DATA: + mt_tadir TYPE STANDARD TABLE OF ty_tadir WITH DEFAULT KEY, + mt_local TYPE zif_abapgit_definitions=>ty_files_item_tt, + mt_remote TYPE zif_abapgit_definitions=>ty_files_tt, + mt_state TYPE zif_abapgit_definitions=>ty_file_signatures_tt. ENDCLASS. -CLASS ltcl_status_helper IMPLEMENTATION. +CLASS lcl_status_helper IMPLEMENTATION. + + METHOD constructor. + + zcl_abapgit_injector=>set_tadir( me ). + + ENDMETHOD. + + METHOD add_tadir. + + FIELD-SYMBOLS: LIKE LINE OF mt_tadir. + + APPEND INITIAL LINE TO mt_tadir ASSIGNING . + -obj_type = iv_obj_type. + -obj_name = iv_obj_name. + -devclass = iv_devclass. + + ENDMETHOD. + + METHOD zif_abapgit_tadir~get_object_package. + + DATA: ls_tadir LIKE LINE OF mt_tadir. + + IF lines( mt_tadir ) > 0. + READ TABLE mt_tadir INTO ls_tadir WITH KEY + obj_type = iv_object + obj_name = iv_obj_name. + cl_abap_unit_assert=>assert_subrc( ). + + rv_devclass = ls_tadir-devclass. + ENDIF. + + ENDMETHOD. + + METHOD zif_abapgit_tadir~read. + cl_abap_unit_assert=>fail( ). + ENDMETHOD. + + METHOD zif_abapgit_tadir~read_single. + cl_abap_unit_assert=>fail( ). + ENDMETHOD. METHOD add_remote. @@ -358,7 +337,14 @@ CLASS ltcl_status_helper IMPLEMENTATION. FIELD-SYMBOLS: LIKE LINE OF mt_local. -* todo + APPEND INITIAL LINE TO mt_local ASSIGNING . + -item-obj_type = iv_obj_type. + -item-obj_name = iv_obj_name. + -item-devclass = iv_devclass. + -file-path = iv_path. + -file-filename = iv_filename. + -file-sha1 = iv_sha1. + ENDMETHOD. METHOD add_state. @@ -369,17 +355,23 @@ CLASS ltcl_status_helper IMPLEMENTATION. METHOD run. - DATA: lo_dot TYPE REF TO zcl_abapgit_dot_abapgit. + DATA: lt_results TYPE zif_abapgit_definitions=>ty_results_tt, + lo_dot TYPE REF TO zcl_abapgit_dot_abapgit. + lo_dot = zcl_abapgit_dot_abapgit=>build_default( ). - rt_results = zcl_abapgit_file_status=>calculate_status( - iv_devclass = '$Z$' + lt_results = zcl_abapgit_file_status=>calculate_status( + iv_devclass = iv_devclass io_dot = lo_dot it_local = mt_local it_remote = mt_remote it_cur_state = mt_state ). + CREATE OBJECT ro_result + EXPORTING + it_results = lt_results. + ENDMETHOD. ENDCLASS. @@ -392,13 +384,16 @@ CLASS ltcl_calculate_status DEFINITION FOR TESTING RISK LEVEL HARMLESS PRIVATE SECTION. DATA: - mt_results TYPE zif_abapgit_definitions=>ty_results_tt, - ms_result LIKE LINE OF mt_results, - mo_helper TYPE REF TO ltcl_status_helper. + mo_helper TYPE REF TO lcl_status_helper, + mo_result TYPE REF TO lcl_status_result. METHODS: setup, - test1 FOR TESTING RAISING zcx_abapgit_exception. + only_remote FOR TESTING RAISING zcx_abapgit_exception, + only_local FOR TESTING RAISING zcx_abapgit_exception, + match FOR TESTING RAISING zcx_abapgit_exception, + diff FOR TESTING RAISING zcx_abapgit_exception, + local_outside_main FOR TESTING RAISING zcx_abapgit_exception. ENDCLASS. @@ -410,23 +405,106 @@ CLASS ltcl_calculate_status IMPLEMENTATION. ENDMETHOD. - METHOD test1. + METHOD only_remote. mo_helper->add_remote( iv_filename = '$$zdoma1.doma.xml' iv_sha1 = 'D1' ). - mt_results = mo_helper->run( ). + mo_result = mo_helper->run( ). + + mo_result->assert_lines( 1 ). cl_abap_unit_assert=>assert_equals( - act = lines( mt_results ) - exp = 1 ). + act = mo_result->get_line( 1 )-rstate + exp = zif_abapgit_definitions=>gc_state-added ). - READ TABLE mt_results INDEX 1 INTO ms_result. - cl_abap_unit_assert=>assert_subrc( ). + ENDMETHOD. + + METHOD only_local. + + mo_helper->add_local( + iv_obj_type = 'DOMA' + iv_obj_name = '$$ZDOMA1' + iv_filename = '$$zdoma1.doma.xml' + iv_sha1 = 'D1' ). + + mo_result = mo_helper->run( ). + + mo_result->assert_lines( 1 ). cl_abap_unit_assert=>assert_equals( - act = ms_result-rstate + act = mo_result->get_line( 1 )-lstate + exp = zif_abapgit_definitions=>gc_state-added ). + + ENDMETHOD. + + METHOD match. + + mo_helper->add_local( + iv_obj_type = 'DOMA' + iv_obj_name = '$$ZDOMA1' + iv_filename = '$$zdoma1.doma.xml' + iv_sha1 = 'D1' ). + + mo_helper->add_remote( + iv_filename = '$$zdoma1.doma.xml' + iv_sha1 = 'D1' ). + + mo_result = mo_helper->run( ). + + mo_result->assert_lines( 1 ). + + cl_abap_unit_assert=>assert_equals( + act = mo_result->get_line( 1 )-match + exp = abap_true ). + + ENDMETHOD. + + METHOD diff. + + mo_helper->add_local( + iv_obj_type = 'DOMA' + iv_obj_name = '$$ZDOMA1' + iv_filename = '$$zdoma1.doma.xml' + iv_sha1 = '12345' ). + + mo_helper->add_remote( + iv_filename = '$$zdoma1.doma.xml' + iv_sha1 = '54321' ). + + mo_result = mo_helper->run( ). + + mo_result->assert_lines( 1 ). + + cl_abap_unit_assert=>assert_equals( + act = mo_result->get_line( 1 )-lstate + exp = zif_abapgit_definitions=>gc_state-modified ). + + cl_abap_unit_assert=>assert_equals( + act = mo_result->get_line( 1 )-rstate + exp = zif_abapgit_definitions=>gc_state-modified ). + + ENDMETHOD. + + METHOD local_outside_main. + + mo_helper->add_tadir( + iv_obj_type = 'DOMA' + iv_obj_name = '$$ZDOMA1' + iv_devclass = '$OUTSIDE$' ). + + mo_helper->add_remote( + iv_filename = '$$zdoma1.doma.xml' + iv_sha1 = '54321' ). + + mo_result = mo_helper->run( ). + + mo_result->assert_lines( 1 ). + +* it should appear as not existing locally + cl_abap_unit_assert=>assert_equals( + act = mo_result->get_line( 1 )-rstate exp = zif_abapgit_definitions=>gc_state-added ). ENDMETHOD.