#521 preperations

* add FOLDER_LOGIC to dot abapgit
* refactor folder logic to separate class
* move lcl_sap_package=>check to file_status class
* DDLS fix exists method
This commit is contained in:
larshp 2017-02-14 11:21:43 +00:00
parent 0662e44dc6
commit aab96d313b
11 changed files with 294 additions and 211 deletions

View File

@ -4,6 +4,7 @@
<DATA>
<MASTER_LANGUAGE>E</MASTER_LANGUAGE>
<STARTING_FOLDER>/src/</STARTING_FOLDER>
<FOLDER_LOGIC>PREFIX</FOLDER_LOGIC>
<IGNORE>
<item>/.travis.yml</item>
<item>/CONTRIBUTING.md</item>

View File

@ -48,6 +48,7 @@ INCLUDE zabapgit_persistence_old.
INCLUDE zabapgit_persistence.
INCLUDE zabapgit_dot_abapgit.
INCLUDE zabapgit_sap_package.
INCLUDE zabapgit_folder_logic.
INCLUDE zabapgit_stage.
INCLUDE zabapgit_git_helpers.

View File

@ -4,6 +4,11 @@
CLASS ltcl_dot_abapgit DEFINITION DEFERRED.
CONSTANTS: BEGIN OF c_folder_logic,
prefix TYPE string VALUE 'PREFIX',
full TYPE string VALUE 'FULL',
END OF c_folder_logic.
CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
PUBLIC SECTION.
@ -32,6 +37,8 @@ CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
iv_filename TYPE string,
get_starting_folder
RETURNING VALUE(rv_path) TYPE string,
get_folder_logic
RETURNING VALUE(rv_logic) TYPE string,
* set_starting_folder
* IMPORTING iv_path TYPE string,
get_master_language
@ -46,6 +53,7 @@ CLASS lcl_dot_abapgit DEFINITION CREATE PRIVATE FINAL FRIENDS ltcl_dot_abapgit.
TYPES: BEGIN OF ty_dot_abapgit,
master_language TYPE spras,
starting_folder TYPE string,
folder_logic TYPE string,
ignore TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
END OF ty_dot_abapgit.
@ -105,6 +113,8 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
ls_data-master_language = iv_master_language.
ls_data-starting_folder = '/'.
ls_data-folder_logic = c_folder_logic-prefix.
APPEND '/.gitignore' TO ls_data-ignore.
APPEND '/LICENSE' TO ls_data-ignore.
APPEND '/README.md' TO ls_data-ignore.
@ -118,6 +128,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
ENDMETHOD.
METHOD to_xml.
CALL TRANSFORMATION id
SOURCE data = is_data
RESULT XML rv_xml.
@ -129,6 +140,7 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
IN rv_xml
WITH '<?xml version="1.0" encoding="utf-8"?>'.
ASSERT sy-subrc = 0.
ENDMETHOD.
METHOD from_xml.
@ -145,6 +157,12 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
OPTIONS value_handling = 'accept_data_loss'
SOURCE XML lv_xml
RESULT data = rs_data ##NO_TEXT.
* downward compatibility
IF rs_data-folder_logic IS INITIAL.
rs_data-folder_logic = c_folder_logic-prefix.
ENDIF.
ENDMETHOD.
METHOD add_ignore.
@ -198,6 +216,10 @@ CLASS lcl_dot_abapgit IMPLEMENTATION.
rv_path = ms_data-starting_folder.
ENDMETHOD.
METHOD get_folder_logic.
rv_logic = ms_data-folder_logic.
ENDMETHOD.
* METHOD set_starting_folder.
* ms_data-starting_folder = iv_path.
* ENDMETHOD.

View File

@ -6,9 +6,10 @@
* CLASS lcl_file_status DEFINITION
*----------------------------------------------------------------------*
CLASS ltcl_file_status DEFINITION DEFERRED.
CLASS ltcl_file_status2 DEFINITION DEFERRED.
CLASS lcl_file_status DEFINITION FINAL
FRIENDS ltcl_file_status.
FRIENDS ltcl_file_status ltcl_file_status2.
PUBLIC SECTION.
@ -20,14 +21,18 @@ CLASS lcl_file_status DEFINITION FINAL
PRIVATE SECTION.
CLASS-METHODS calculate_status
IMPORTING iv_devclass TYPE devclass
it_local TYPE ty_files_item_tt
it_remote TYPE ty_files_tt
it_cur_state TYPE ty_file_signatures_tt
RETURNING VALUE(rt_results) TYPE ty_results_tt.
CLASS-METHODS:
calculate_status
IMPORTING iv_devclass TYPE devclass
it_local TYPE ty_files_item_tt
it_remote TYPE ty_files_tt
it_cur_state TYPE ty_file_signatures_tt
RETURNING VALUE(rt_results) TYPE ty_results_tt,
run_checks
IMPORTING io_log TYPE REF TO lcl_log
it_results TYPE ty_results_tt
iv_start TYPE string
iv_top TYPE devclass,
build_existing
IMPORTING is_local TYPE ty_file_item
is_remote TYPE ty_file
@ -54,6 +59,89 @@ ENDCLASS. "lcl_file_status DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_file_status IMPLEMENTATION.
METHOD run_checks.
DATA: lv_path TYPE string,
ls_item TYPE ty_item,
ls_file TYPE ty_file_signature,
lt_res_sort LIKE it_results,
lt_item_idx LIKE it_results.
FIELD-SYMBOLS: <ls_res1> LIKE LINE OF it_results,
<ls_res2> LIKE LINE OF it_results.
IF io_log IS INITIAL.
RETURN.
ENDIF.
" Collect object indexe
lt_res_sort = it_results.
SORT lt_res_sort BY obj_type ASCENDING obj_name ASCENDING.
LOOP AT it_results ASSIGNING <ls_res1> WHERE NOT obj_type IS INITIAL.
IF NOT ( <ls_res1>-obj_type = ls_item-obj_type
AND <ls_res1>-obj_name = ls_item-obj_name ).
APPEND INITIAL LINE TO lt_item_idx ASSIGNING <ls_res2>.
<ls_res2>-obj_type = <ls_res1>-obj_type.
<ls_res2>-obj_name = <ls_res1>-obj_name.
<ls_res2>-path = <ls_res1>-path.
MOVE-CORRESPONDING <ls_res1> TO ls_item.
ENDIF.
ENDLOOP.
" Check files for one object is in the same folder
LOOP AT it_results ASSIGNING <ls_res1> WHERE NOT obj_type IS INITIAL.
READ TABLE lt_item_idx ASSIGNING <ls_res2>
WITH KEY obj_type = <ls_res1>-obj_type obj_name = <ls_res1>-obj_name
BINARY SEARCH. " Sorted above
IF sy-subrc <> 0 OR <ls_res1>-path <> <ls_res2>-path. " All paths are same
io_log->add( iv_msgv1 = 'Files for object'
iv_msgv2 = <ls_res1>-obj_type
iv_msgv3 = <ls_res1>-obj_name
iv_msgv4 = 'are not placed in the same folder'
iv_rc = '1' ) ##no_text.
ENDIF.
ENDLOOP.
" Check that objects are created in package corresponding to folder
LOOP AT it_results ASSIGNING <ls_res1>
WHERE NOT package IS INITIAL AND NOT path IS INITIAL.
lv_path = lcl_folder_logic=>class_to_path( iv_top = iv_top
iv_start = iv_start
iv_package = <ls_res1>-package ).
IF lv_path <> <ls_res1>-path.
io_log->add( iv_msgv1 = 'Package and path does not match for object,'
iv_msgv2 = <ls_res1>-obj_type
iv_msgv3 = <ls_res1>-obj_name
iv_rc = '2' ) ##no_text.
ENDIF.
ENDLOOP.
" Check for multiple files with same filename
SORT lt_res_sort BY filename ASCENDING.
LOOP AT lt_res_sort ASSIGNING <ls_res1>.
IF <ls_res1>-filename IS NOT INITIAL AND <ls_res1>-filename = ls_file-filename.
io_log->add( iv_msgv1 = 'Multiple files with same filename,'
iv_msgv2 = <ls_res1>-filename
iv_rc = '3' ) ##no_text.
ENDIF.
IF <ls_res1>-filename IS INITIAL.
io_log->add( iv_msgv1 = 'Filename is empty for object'
iv_msgv2 = <ls_res1>-obj_type
iv_msgv3 = <ls_res1>-obj_name
iv_rc = '4' ) ##no_text.
ENDIF.
MOVE-CORRESPONDING <ls_res1> TO ls_file.
ENDLOOP.
ENDMETHOD. "check
METHOD status.
DATA: lv_index LIKE sy-tabix,
@ -82,7 +170,7 @@ CLASS lcl_file_status IMPLEMENTATION.
ENDIF.
ENDLOOP.
lcl_sap_package=>check(
run_checks(
io_log = io_log
it_results = rt_results
iv_start = lo_dot_abapgit->get_starting_folder( )

View File

@ -0,0 +1,98 @@
*&---------------------------------------------------------------------*
*& Include ZABAPGIT_FOLDER_LOGIC
*&---------------------------------------------------------------------*
CLASS lcl_folder_logic DEFINITION.
PUBLIC SECTION.
CLASS-METHODS:
class_to_path
IMPORTING
iv_top TYPE devclass
iv_start TYPE string
iv_package TYPE devclass
RETURNING
VALUE(rv_path) TYPE string.
CLASS-METHODS
path_to_package
IMPORTING iv_top TYPE devclass
iv_start TYPE string
iv_path TYPE string
RETURNING VALUE(rv_package) TYPE devclass
RAISING lcx_exception.
ENDCLASS.
CLASS lcl_folder_logic IMPLEMENTATION.
METHOD path_to_package.
DATA: lv_length TYPE i,
lv_parent TYPE devclass,
lv_new TYPE string,
lv_path TYPE string.
lv_length = strlen( iv_start ).
lv_path = iv_path+lv_length.
lv_parent = iv_top.
rv_package = iv_top.
WHILE lv_path CA '/'.
SPLIT lv_path AT '/' INTO lv_new lv_path.
CONCATENATE rv_package '_' lv_new INTO rv_package.
TRANSLATE rv_package TO UPPER CASE.
IF lcl_sap_package=>exists( rv_package ) = abap_false.
lcl_sap_package=>create_child( iv_parent = lv_parent
iv_child = rv_package ).
ENDIF.
lv_parent = rv_package.
ENDWHILE.
ENDMETHOD.
METHOD class_to_path.
DATA: lv_len TYPE i,
lv_path TYPE string,
lv_parentcl TYPE tdevc-parentcl.
IF iv_top = iv_package.
rv_path = iv_start.
ELSE.
SELECT SINGLE parentcl FROM tdevc INTO lv_parentcl
WHERE devclass = iv_package. "#EC CI_SUBRC "#EC CI_GENBUFF
ASSERT sy-subrc = 0.
IF lv_parentcl IS INITIAL.
rv_path = 'error' ##no_text.
ELSE.
lv_len = strlen( lv_parentcl ).
lv_path = iv_package+lv_len.
IF strlen( lv_path ) = 0.
RETURN. " prevent dump
ENDIF.
IF lv_path(1) = '_'.
lv_path = lv_path+1.
ENDIF.
TRANSLATE lv_path TO LOWER CASE.
CONCATENATE lv_path '/' INTO lv_path.
rv_path = class_to_path( iv_top = iv_top
iv_start = iv_start
iv_package = lv_parentcl ).
CONCATENATE rv_path lv_path INTO rv_path.
ENDIF.
ENDIF.
ENDMETHOD. "class_to_path
ENDCLASS.

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
<asx:values>
<PROGDIR>
<NAME>ZABAPGIT_FOLDER_LOGIC</NAME>
<STATE>A</STATE>
<VARCL>X</VARCL>
<SUBC>I</SUBC>
<RLOAD>E</RLOAD>
<UCCHECK>X</UCCHECK>
</PROGDIR>
<TPOOL>
<item>
<ID>R</ID>
<ENTRY>Include ZABAPGIT_FOLDER_LOGIC</ENTRY>
<LENGTH>29</LENGTH>
</item>
</TPOOL>
</asx:values>
</asx:abap>
</abapGit>

View File

@ -39,8 +39,31 @@ CLASS lcl_object_ddls IMPLEMENTATION.
ENDMETHOD. "lif_object~get_metadata
METHOD lif_object~exists.
* todo
rv_bool = abap_true.
DATA: lv_state TYPE objstate,
li_ddl TYPE REF TO object.
CALL METHOD ('CL_DD_DDL_HANDLER_FACTORY')=>('CREATE')
RECEIVING
handler = li_ddl.
TRY.
CALL METHOD li_ddl->('IF_DD_DDL_HANDLER~READ')
EXPORTING
name = ms_item-obj_name
get_state = 'A'
IMPORTING
got_state = lv_state.
IF lv_state IS INITIAL.
rv_bool = abap_false.
ELSE.
rv_bool = abap_true.
ENDIF.
CATCH cx_root.
rv_bool = abap_false.
ENDTRY.
ENDMETHOD. "lif_object~exists
METHOD lif_object~jump.

View File

@ -1729,14 +1729,6 @@ CLASS lcl_objects DEFINITION FINAL.
IMPORTING it_results TYPE ty_results_tt
RETURNING VALUE(rt_results) TYPE ty_results_tt.
CLASS-METHODS
path_to_package
IMPORTING iv_top TYPE devclass
iv_start TYPE string
iv_path TYPE string
RETURNING VALUE(rv_package) TYPE devclass
RAISING lcx_exception.
CLASS-METHODS class_name
IMPORTING is_item TYPE ty_item
RETURNING VALUE(rv_class_name) TYPE string.

View File

@ -223,35 +223,6 @@ CLASS lcl_objects IMPLEMENTATION.
ENDMETHOD. "exists
METHOD path_to_package.
DATA: lv_length TYPE i,
lv_parent TYPE devclass,
lv_new TYPE string,
lv_path TYPE string.
lv_length = strlen( iv_start ).
lv_path = iv_path+lv_length.
lv_parent = iv_top.
rv_package = iv_top.
WHILE lv_path CA '/'.
SPLIT lv_path AT '/' INTO lv_new lv_path.
CONCATENATE rv_package '_' lv_new INTO rv_package.
TRANSLATE rv_package TO UPPER CASE.
IF lcl_sap_package=>exists( rv_package ) = abap_false.
lcl_sap_package=>create_child( iv_parent = lv_parent
iv_child = rv_package ).
ENDIF.
lv_parent = rv_package.
ENDWHILE.
ENDMETHOD.
METHOD class_name.
CONCATENATE 'LCL_OBJECT_' is_item-obj_type INTO rv_class_name. "#EC NOTEXT
@ -624,7 +595,7 @@ CLASS lcl_objects IMPLEMENTATION.
* handle namespaces
REPLACE ALL OCCURRENCES OF '#' IN ls_item-obj_name WITH '/'.
lv_package = path_to_package(
lv_package = lcl_folder_logic=>path_to_package(
iv_top = io_repo->get_package( )
iv_start = io_repo->get_dot_abapgit( )->get_starting_folder( )
iv_path = <ls_result>-path ).

View File

@ -13,11 +13,6 @@ CLASS lcl_sap_package DEFINITION FINAL.
TYPES: ty_devclass_tt TYPE STANDARD TABLE OF devclass WITH DEFAULT KEY.
CLASS-METHODS:
check
IMPORTING io_log TYPE REF TO lcl_log
it_results TYPE ty_results_tt
iv_start TYPE string
iv_top TYPE devclass,
list_subpackages IMPORTING iv_package TYPE devclass
RETURNING VALUE(rt_list) TYPE ty_devclass_tt,
list_superpackages IMPORTING iv_package TYPE devclass
@ -37,16 +32,6 @@ CLASS lcl_sap_package DEFINITION FINAL.
IMPORTING iv_package TYPE devclass
RETURNING VALUE(rv_bool) TYPE abap_bool.
PRIVATE SECTION.
CLASS-METHODS:
class_to_path
IMPORTING
iv_top TYPE devclass
iv_start TYPE string
iv_package TYPE devclass
RETURNING
VALUE(rv_path) TYPE string.
ENDCLASS. "lcl_package DEFINITION
*----------------------------------------------------------------------*
@ -56,129 +41,6 @@ ENDCLASS. "lcl_package DEFINITION
*----------------------------------------------------------------------*
CLASS lcl_sap_package IMPLEMENTATION.
METHOD class_to_path.
DATA: lv_len TYPE i,
lv_path TYPE string,
lv_parentcl TYPE tdevc-parentcl.
IF iv_top = iv_package.
rv_path = iv_start.
ELSE.
SELECT SINGLE parentcl FROM tdevc INTO lv_parentcl
WHERE devclass = iv_package. "#EC CI_SUBRC "#EC CI_GENBUFF
ASSERT sy-subrc = 0.
IF lv_parentcl IS INITIAL.
rv_path = 'error' ##no_text.
ELSE.
lv_len = strlen( lv_parentcl ).
lv_path = iv_package+lv_len.
IF strlen( lv_path ) = 0.
RETURN. " prevent dump
ENDIF.
IF lv_path(1) = '_'.
lv_path = lv_path+1.
ENDIF.
TRANSLATE lv_path TO LOWER CASE.
CONCATENATE lv_path '/' INTO lv_path.
rv_path = class_to_path( iv_top = iv_top
iv_start = iv_start
iv_package = lv_parentcl ).
CONCATENATE rv_path lv_path INTO rv_path.
ENDIF.
ENDIF.
ENDMETHOD. "class_to_path
METHOD check.
DATA: lv_path TYPE string,
ls_item TYPE ty_item,
ls_file TYPE ty_file_signature,
lt_res_sort LIKE it_results,
lt_item_idx LIKE it_results.
FIELD-SYMBOLS: <ls_res1> LIKE LINE OF it_results,
<ls_res2> LIKE LINE OF it_results.
IF io_log IS INITIAL.
RETURN.
ENDIF.
" Collect object indexe
lt_res_sort = it_results.
SORT lt_res_sort BY obj_type ASCENDING obj_name ASCENDING.
LOOP AT it_results ASSIGNING <ls_res1> WHERE NOT obj_type IS INITIAL.
IF NOT ( <ls_res1>-obj_type = ls_item-obj_type
AND <ls_res1>-obj_name = ls_item-obj_name ).
APPEND INITIAL LINE TO lt_item_idx ASSIGNING <ls_res2>.
<ls_res2>-obj_type = <ls_res1>-obj_type.
<ls_res2>-obj_name = <ls_res1>-obj_name.
<ls_res2>-path = <ls_res1>-path.
MOVE-CORRESPONDING <ls_res1> TO ls_item.
ENDIF.
ENDLOOP.
" Check files for one object is in the same folder
LOOP AT it_results ASSIGNING <ls_res1> WHERE NOT obj_type IS INITIAL.
READ TABLE lt_item_idx ASSIGNING <ls_res2>
WITH KEY obj_type = <ls_res1>-obj_type obj_name = <ls_res1>-obj_name
BINARY SEARCH. " Sorted above
IF sy-subrc <> 0 OR <ls_res1>-path <> <ls_res2>-path. " All paths are same
io_log->add( iv_msgv1 = 'Files for object'
iv_msgv2 = <ls_res1>-obj_type
iv_msgv3 = <ls_res1>-obj_name
iv_msgv4 = 'are not placed in the same folder'
iv_rc = '1' ) ##no_text.
ENDIF.
ENDLOOP.
" Check that objects are created in package corresponding to folder
LOOP AT it_results ASSIGNING <ls_res1>
WHERE NOT package IS INITIAL AND NOT path IS INITIAL.
lv_path = class_to_path( iv_top = iv_top
iv_start = iv_start
iv_package = <ls_res1>-package ).
IF lv_path <> <ls_res1>-path.
io_log->add( iv_msgv1 = 'Package and path does not match for object,'
iv_msgv2 = <ls_res1>-obj_type
iv_msgv3 = <ls_res1>-obj_name
iv_rc = '2' ) ##no_text.
ENDIF.
ENDLOOP.
" Check for multiple files with same filename
SORT lt_res_sort BY filename ASCENDING.
LOOP AT lt_res_sort ASSIGNING <ls_res1>.
IF <ls_res1>-filename IS NOT INITIAL AND <ls_res1>-filename = ls_file-filename.
io_log->add( iv_msgv1 = 'Multiple files with same filename,'
iv_msgv2 = <ls_res1>-filename
iv_rc = '3' ) ##no_text.
ENDIF.
IF <ls_res1>-filename IS INITIAL.
io_log->add( iv_msgv1 = 'Filename is empty for object'
iv_msgv2 = <ls_res1>-obj_type
iv_msgv3 = <ls_res1>-obj_name
iv_rc = '4' ) ##no_text.
ENDIF.
MOVE-CORRESPONDING <ls_res1> TO ls_file.
ENDLOOP.
ENDMETHOD. "check
METHOD exists.
cl_package_factory=>load_package(

View File

@ -1956,7 +1956,7 @@ CLASS ltcl_file_status IMPLEMENTATION.
ENDCLASS. "ltcl_file_status
CLASS ltcl_sap_package DEFINITION
CLASS ltcl_file_status2 DEFINITION
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
INHERITING FROM cl_aunit_assert.
@ -1965,7 +1965,7 @@ CLASS ltcl_sap_package DEFINITION
ENDCLASS. "ltcl_sap_package
CLASS ltcl_sap_package IMPLEMENTATION.
CLASS ltcl_file_status2 IMPLEMENTATION.
METHOD check.
@ -1984,10 +1984,10 @@ CLASS ltcl_sap_package IMPLEMENTATION.
_append_result 'DOMA' 'ZDOMA1' 'X' ' ' ' ' '$Z$' '/' 'zdoma1.doma.xml'.
_append_result 'DOMA' 'ZDOMA2' ' ' 'M' ' ' '$Z$' '/' 'zdoma2.doma.xml'.
lcl_sap_package=>check( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
lcl_file_status=>run_checks( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
assert_equals( act = lo_log->count( ) exp = 0 ).
@ -2002,10 +2002,10 @@ CLASS ltcl_sap_package IMPLEMENTATION.
_append_result 'DOMA' 'ZDOMA1' 'X' ' ' ' ' '$Z$' '/' 'zdoma1.doma.xml'.
_append_result 'DOMA' 'ZDOMA2' ' ' 'M' ' ' '$Z$' '/' 'zdoma2.doma.xml'.
lcl_sap_package=>check( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
lcl_file_status=>run_checks( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
" This one is not pure - incorrect path also triggers path vs package check
assert_equals( act = lo_log->count( ) exp = 2 ).
@ -2022,10 +2022,10 @@ CLASS ltcl_sap_package IMPLEMENTATION.
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/sub' '$$zdoma1.doma.xml'.
_append_result 'DOMA' '$$ZDOMA2' ' ' 'M' ' ' '$Z$' '/' '$$zdoma2.doma.xml'.
lcl_sap_package=>check( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
lcl_file_status=>run_checks( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
assert_equals( act = lo_log->count( ) exp = 1 ).
assert_equals( act = lo_log->has_rc( '2' ) exp = abap_true ).
@ -2041,10 +2041,10 @@ CLASS ltcl_sap_package IMPLEMENTATION.
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/' '$$zdoma1.doma.xml'.
_append_result 'DOMA' '$$ZDOMA2' ' ' 'M' ' ' '$Z$' '/' '$$zdoma1.doma.xml'.
lcl_sap_package=>check( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
lcl_file_status=>run_checks( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
assert_equals( act = lo_log->count( ) exp = 1 ).
assert_equals( act = lo_log->has_rc( '3' ) exp = abap_true ).
@ -2059,13 +2059,16 @@ CLASS ltcl_sap_package IMPLEMENTATION.
_append_result 'CLAS' '$$ZCLASS1' 'X' ' ' ' ' '$Z$' '/' '$$zclass1.clas.xml'.
_append_result 'DOMA' '$$ZDOMA1' 'X' ' ' ' ' '$Z$' '/' ''.
lcl_sap_package=>check( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
lcl_file_status=>run_checks( io_log = lo_log
it_results = lt_results
iv_start = '/'
iv_top = '$Z$' ).
assert_equals( act = lo_log->count( ) exp = 1 ).
assert_equals( act = lo_log->has_rc( '4' ) exp = abap_true ).
assert_equals( act = lo_log->count( )
exp = 1 ).
assert_equals( act = lo_log->has_rc( '4' )
exp = abap_true ).
ENDMETHOD. " check.