From fd82e770bdf86417749cbc3dfeab68a26e33c030 Mon Sep 17 00:00:00 2001 From: larshp Date: Sun, 14 Jan 2018 13:53:08 +0000 Subject: [PATCH] lcl_folder_logic to global lcl_folder_logic to global --- src/zabapgit_file_status.prog.abap | 14 +- src/zabapgit_folder_logic.prog.abap | 405 +----------------- src/zabapgit_objects_impl.prog.abap | 2 +- src/zabapgit_tadir.prog.abap | 2 +- src/zcl_abapgit_folder_logic.clas.abap | 143 +++++++ ...abapgit_folder_logic.clas.testclasses.abap | 265 ++++++++++++ src/zcl_abapgit_folder_logic.clas.xml | 19 + 7 files changed, 438 insertions(+), 412 deletions(-) create mode 100644 src/zcl_abapgit_folder_logic.clas.abap create mode 100644 src/zcl_abapgit_folder_logic.clas.testclasses.abap create mode 100644 src/zcl_abapgit_folder_logic.clas.xml diff --git a/src/zabapgit_file_status.prog.abap b/src/zabapgit_file_status.prog.abap index 3b2ce0b20..adf946ad2 100644 --- a/src/zabapgit_file_status.prog.abap +++ b/src/zabapgit_file_status.prog.abap @@ -117,9 +117,10 @@ CLASS lcl_file_status IMPLEMENTATION. " Check that objects are created in package corresponding to folder LOOP AT it_results ASSIGNING WHERE NOT package IS INITIAL AND NOT path IS INITIAL. - lv_path = lcl_folder_logic=>package_to_path( iv_top = iv_top - io_dot = io_dot - iv_package = -package ). + lv_path = zcl_abapgit_folder_logic=>package_to_path( + iv_top = iv_top + io_dot = io_dot + iv_package = -package ). IF lv_path <> -path. io_log->add( iv_msg = |Package and path does not match for object, { -obj_type } { -obj_name }| @@ -281,9 +282,10 @@ CLASS lcl_file_status IMPLEMENTATION. " Try to get a unique package name for DEVC by using the path IF lv_type = 'DEVC'. ASSERT lv_name = 'PACKAGE'. - lv_name = lcl_folder_logic=>path_to_package( iv_top = iv_devclass - io_dot = io_dot - iv_path = iv_path ). + lv_name = zcl_abapgit_folder_logic=>path_to_package( + iv_top = iv_devclass + io_dot = io_dot + iv_path = iv_path ). ENDIF. CLEAR es_item. diff --git a/src/zabapgit_folder_logic.prog.abap b/src/zabapgit_folder_logic.prog.abap index 9e55d8006..b31c7dea2 100644 --- a/src/zabapgit_folder_logic.prog.abap +++ b/src/zabapgit_folder_logic.prog.abap @@ -2,407 +2,4 @@ *& Include ZABAPGIT_FOLDER_LOGIC *&---------------------------------------------------------------------* -CLASS lcl_folder_logic DEFINITION. - - PUBLIC SECTION. - CLASS-METHODS: - package_to_path - IMPORTING - iv_top TYPE devclass - io_dot TYPE REF TO zcl_abapgit_dot_abapgit - iv_package TYPE devclass - RETURNING VALUE(rv_path) TYPE string - RAISING zcx_abapgit_exception, - path_to_package - IMPORTING - iv_top TYPE devclass - io_dot TYPE REF TO zcl_abapgit_dot_abapgit - iv_path TYPE string - iv_create_if_not_exists TYPE abap_bool DEFAULT abap_true -* iv_local_path TYPE abap_bool DEFAULT abap_true - RETURNING - VALUE(rv_package) TYPE devclass - RAISING - zcx_abapgit_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_top TYPE devclass. - - lv_top = iv_top. - - lv_length = strlen( io_dot->get_starting_folder( ) ). - IF lv_length > strlen( iv_path ). - zcx_abapgit_exception=>raise( 'unexpected folder structure' ). - ENDIF. - lv_path = iv_path+lv_length. - lv_parent = lv_top. - rv_package = lv_top. - - WHILE lv_path CA '/'. - SPLIT lv_path AT '/' INTO lv_new lv_path. - - CASE io_dot->get_folder_logic( ). - WHEN zif_abapgit_dot_abapgit=>c_folder_logic-full. - rv_package = lv_new. - TRANSLATE rv_package USING '#/'. - IF iv_top(1) = '$'. - CONCATENATE '$' rv_package INTO rv_package. - ENDIF. - WHEN zif_abapgit_dot_abapgit=>c_folder_logic-prefix. - CONCATENATE rv_package '_' lv_new INTO rv_package. - WHEN OTHERS. - ASSERT 0 = 1. - ENDCASE. - - TRANSLATE rv_package TO UPPER CASE. - - IF zcl_abapgit_sap_package=>get( rv_package )->exists( ) = abap_false AND - iv_create_if_not_exists = abap_true. - - zcl_abapgit_sap_package=>get( lv_parent )->create_child( rv_package ). - ENDIF. - - lv_parent = rv_package. - ENDWHILE. - - ENDMETHOD. - - METHOD package_to_path. - - DATA: lv_len TYPE i, - lv_path TYPE string, - lv_message TYPE string, - lv_parentcl TYPE tdevc-parentcl. - - IF iv_top = iv_package. - rv_path = io_dot->get_starting_folder( ). - ELSE. - lv_parentcl = zcl_abapgit_sap_package=>get( iv_package )->read_parent( ). - - IF lv_parentcl IS INITIAL. - zcx_abapgit_exception=>raise( |error, expected parent package, { iv_package }| ). - ELSE. - CASE io_dot->get_folder_logic( ). - WHEN zif_abapgit_dot_abapgit=>c_folder_logic-full. - lv_len = 0. - IF iv_package(1) = '$'. - lv_len = 1. - ENDIF. - WHEN zif_abapgit_dot_abapgit=>c_folder_logic-prefix. - lv_len = strlen( lv_parentcl ). - - IF iv_package(lv_len) <> lv_parentcl. -* if abapGit project is installed in package ZZZ, all subpackages should be named -* ZZZ_something. This will define the folder name in the zip file to be "something", -* similarily with online projects. Alternatively change to FULL folder logic - lv_message = 'PREFIX: Unexpected package naming(' && iv_package && ')' ##no_text. - zcx_abapgit_exception=>raise( lv_message ). - ENDIF. - WHEN OTHERS. - ASSERT 0 = 1. - ENDCASE. - - lv_path = iv_package+lv_len. - IF strlen( lv_path ) = 0. - zcx_abapgit_exception=>raise( |Folder logic: length = 0, parent: { - lv_parentcl }, child: { iv_package }| ). - ENDIF. - - IF lv_path(1) = '_'. - lv_path = lv_path+1. - ENDIF. - IF strlen( lv_path ) = 0. - zcx_abapgit_exception=>raise( |Folder logic: length = 0, parent: { - lv_parentcl }, child: { iv_package }| ). - ENDIF. - - TRANSLATE lv_path USING '/#'. - TRANSLATE lv_path TO LOWER CASE. - CONCATENATE lv_path '/' INTO lv_path. - - rv_path = package_to_path( iv_top = iv_top - io_dot = io_dot - iv_package = lv_parentcl ). - - CONCATENATE rv_path lv_path INTO rv_path. - ENDIF. - ENDIF. - - ENDMETHOD. "class_to_path - -ENDCLASS. - -CLASS ltcl_folder_logic_helper DEFINITION FOR TESTING FINAL. - - PUBLIC SECTION. - CLASS-METHODS: test - IMPORTING - iv_starting TYPE string - iv_top TYPE devclass - iv_logic TYPE string - iv_package TYPE devclass - iv_path TYPE string - RAISING zcx_abapgit_exception. - -ENDCLASS. - -CLASS ltcl_folder_logic_helper IMPLEMENTATION. - - METHOD test. - - DATA: lv_path TYPE string, - lv_package TYPE devclass, - lo_dot TYPE REF TO zcl_abapgit_dot_abapgit. - - - lo_dot = zcl_abapgit_dot_abapgit=>build_default( ). - lo_dot->set_starting_folder( iv_starting ). - lo_dot->set_folder_logic( iv_logic ). - - lv_package = lcl_folder_logic=>path_to_package( - iv_top = iv_top - io_dot = lo_dot - iv_path = iv_path ). - - lv_path = lcl_folder_logic=>package_to_path( - iv_top = iv_top - io_dot = lo_dot - iv_package = iv_package ). - - cl_abap_unit_assert=>assert_equals( - act = lv_package - exp = iv_package ). - - cl_abap_unit_assert=>assert_equals( - act = lv_path - exp = iv_path ). - - ENDMETHOD. - -ENDCLASS. - -CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. - - PUBLIC SECTION. - INTERFACES: zif_abapgit_sap_package. - - PRIVATE SECTION. - CONSTANTS: lc_top TYPE devclass VALUE '$TOP', - lc_src TYPE string VALUE '/src/'. - - METHODS: - setup, - teardown, - prefix1 FOR TESTING RAISING zcx_abapgit_exception, - prefix2 FOR TESTING RAISING zcx_abapgit_exception, - prefix_error1 FOR TESTING RAISING zcx_abapgit_exception, - full1 FOR TESTING RAISING zcx_abapgit_exception, - full2 FOR TESTING RAISING zcx_abapgit_exception. - -ENDCLASS. "ltcl_convert DEFINITION - -CLASS ltcl_folder_logic IMPLEMENTATION. - - METHOD zif_abapgit_sap_package~list_subpackages. - RETURN. - ENDMETHOD. - - METHOD zif_abapgit_sap_package~list_superpackages. - RETURN. - ENDMETHOD. - - METHOD zif_abapgit_sap_package~read_parent. - rv_parentcl = '$TOP'. - ENDMETHOD. - - METHOD zif_abapgit_sap_package~create_child. - RETURN. - ENDMETHOD. - - METHOD zif_abapgit_sap_package~exists. - rv_bool = abap_true. - ENDMETHOD. - - METHOD setup. - FIELD-SYMBOLS: LIKE LINE OF zcl_abapgit_sap_package=>gt_injected. - - CLEAR zcl_abapgit_sap_package=>gt_injected. - - APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . - -package = '$TOP'. - -object = me. - - APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . - -package = '$TOP_FOO'. - -object = me. - - APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . - -package = '$FOOBAR'. - -object = me. - ENDMETHOD. - - METHOD teardown. - CLEAR zcl_abapgit_sap_package=>gt_injected. - ENDMETHOD. - - METHOD prefix1. - ltcl_folder_logic_helper=>test( - iv_starting = lc_src - iv_top = lc_top - iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix - iv_package = lc_top - iv_path = lc_src ). - ENDMETHOD. - - METHOD prefix2. - ltcl_folder_logic_helper=>test( - iv_starting = lc_src - iv_top = lc_top - iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix - iv_package = '$TOP_FOO' - iv_path = '/src/foo/' ). - ENDMETHOD. - - METHOD prefix_error1. -* PREFIX mode, top package is $TOP, so all subpackages should be named $TOP_something - TRY. - ltcl_folder_logic_helper=>test( - iv_starting = lc_src - iv_top = lc_top - iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix - iv_package = '$FOOBAR' - iv_path = '/src/' ). - cl_abap_unit_assert=>fail( 'Error expected' ). - CATCH zcx_abapgit_exception ##NO_HANDLER. - ENDTRY. - ENDMETHOD. - - METHOD full1. - ltcl_folder_logic_helper=>test( - iv_starting = lc_src - iv_top = lc_top - iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full - iv_package = lc_top - iv_path = lc_src ). - ENDMETHOD. - - METHOD full2. - ltcl_folder_logic_helper=>test( - iv_starting = lc_src - iv_top = lc_top - iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full - iv_package = '$TOP_FOO' - iv_path = '/src/top_foo/' ). - ENDMETHOD. - -ENDCLASS. - -CLASS ltcl_folder_logic_namespaces DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. - - PUBLIC SECTION. - INTERFACES: zif_abapgit_sap_package. - - PRIVATE SECTION. - CONSTANTS: lc_top TYPE devclass VALUE '/TEST/TOOLS', - lc_src TYPE string VALUE '/src/'. - - METHODS: - setup, - teardown, - prefix1 FOR TESTING RAISING zcx_abapgit_exception, - prefix2 FOR TESTING RAISING zcx_abapgit_exception, - full1 FOR TESTING RAISING zcx_abapgit_exception, - full2 FOR TESTING RAISING zcx_abapgit_exception. - -ENDCLASS. "ltcl_convert DEFINITION - -CLASS ltcl_folder_logic_namespaces IMPLEMENTATION. - - METHOD zif_abapgit_sap_package~list_subpackages. - RETURN. - ENDMETHOD. - - METHOD zif_abapgit_sap_package~list_superpackages. - RETURN. - ENDMETHOD. - - METHOD zif_abapgit_sap_package~read_parent. - rv_parentcl = lc_top. - ENDMETHOD. - - METHOD zif_abapgit_sap_package~create_child. - RETURN. - ENDMETHOD. - - METHOD zif_abapgit_sap_package~exists. - rv_bool = abap_true. - ENDMETHOD. - - METHOD setup. - FIELD-SYMBOLS: LIKE LINE OF zcl_abapgit_sap_package=>gt_injected. - - CLEAR zcl_abapgit_sap_package=>gt_injected. - - APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . - -package = '/TEST/TOOLS'. - -object = me. - - APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . - -package = '/TEST/T1'. - -object = me. - - APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . - -package = '/TEST/TOOLS_T1'. - -object = me. - ENDMETHOD. - - METHOD teardown. - CLEAR zcl_abapgit_sap_package=>gt_injected. - ENDMETHOD. - - METHOD prefix1. - ltcl_folder_logic_helper=>test( - iv_starting = lc_src - iv_top = lc_top - iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix - iv_package = lc_top - iv_path = lc_src ). - ENDMETHOD. - - METHOD prefix2. - ltcl_folder_logic_helper=>test( - iv_starting = lc_src - iv_top = lc_top - iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix - iv_package = '/TEST/TOOLS_T1' - iv_path = '/src/t1/' ). - ENDMETHOD. - - METHOD full1. - ltcl_folder_logic_helper=>test( - iv_starting = lc_src - iv_top = lc_top - iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full - iv_package = lc_top - iv_path = lc_src ). - ENDMETHOD. - - METHOD full2. - ltcl_folder_logic_helper=>test( - iv_starting = lc_src - iv_top = lc_top - iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full - iv_package = '/TEST/T1' - iv_path = '/src/#test#t1/' ). - ENDMETHOD. - -ENDCLASS. +* todo, include to be deleted diff --git a/src/zabapgit_objects_impl.prog.abap b/src/zabapgit_objects_impl.prog.abap index 7821ca418..aea402e51 100644 --- a/src/zabapgit_objects_impl.prog.abap +++ b/src/zabapgit_objects_impl.prog.abap @@ -470,7 +470,7 @@ CLASS lcl_objects IMPLEMENTATION. * handle namespaces REPLACE ALL OCCURRENCES OF '#' IN ls_item-obj_name WITH '/'. - lv_package = lcl_folder_logic=>path_to_package( + lv_package = zcl_abapgit_folder_logic=>path_to_package( iv_top = io_repo->get_package( ) io_dot = io_repo->get_dot_abapgit( ) iv_path = -path ). diff --git a/src/zabapgit_tadir.prog.abap b/src/zabapgit_tadir.prog.abap index 5fa08f7ff..7f65c77a8 100644 --- a/src/zabapgit_tadir.prog.abap +++ b/src/zabapgit_tadir.prog.abap @@ -261,7 +261,7 @@ CLASS lcl_tadir IMPLEMENTATION. ENDIF. IF NOT io_dot IS INITIAL. - lv_path = lcl_folder_logic=>package_to_path( + lv_path = zcl_abapgit_folder_logic=>package_to_path( iv_top = iv_top io_dot = io_dot iv_package = iv_package ). diff --git a/src/zcl_abapgit_folder_logic.clas.abap b/src/zcl_abapgit_folder_logic.clas.abap new file mode 100644 index 000000000..7ccb3df3b --- /dev/null +++ b/src/zcl_abapgit_folder_logic.clas.abap @@ -0,0 +1,143 @@ +CLASS zcl_abapgit_folder_logic DEFINITION + PUBLIC + CREATE PUBLIC . + + PUBLIC SECTION. + + CLASS-METHODS package_to_path + IMPORTING + !iv_top TYPE devclass + !io_dot TYPE REF TO zcl_abapgit_dot_abapgit + !iv_package TYPE devclass + RETURNING + VALUE(rv_path) TYPE string + RAISING + zcx_abapgit_exception . + CLASS-METHODS path_to_package + IMPORTING + !iv_top TYPE devclass + !io_dot TYPE REF TO zcl_abapgit_dot_abapgit + !iv_path TYPE string + !iv_create_if_not_exists TYPE abap_bool DEFAULT abap_true + RETURNING + VALUE(rv_package) TYPE devclass + RAISING + zcx_abapgit_exception . +ENDCLASS. + + + +CLASS ZCL_ABAPGIT_FOLDER_LOGIC IMPLEMENTATION. + + + METHOD package_to_path. + + DATA: lv_len TYPE i, + lv_path TYPE string, + lv_message TYPE string, + lv_parentcl TYPE tdevc-parentcl. + + IF iv_top = iv_package. + rv_path = io_dot->get_starting_folder( ). + ELSE. + lv_parentcl = zcl_abapgit_sap_package=>get( iv_package )->read_parent( ). + + IF lv_parentcl IS INITIAL. + zcx_abapgit_exception=>raise( |error, expected parent package, { iv_package }| ). + ELSE. + CASE io_dot->get_folder_logic( ). + WHEN zif_abapgit_dot_abapgit=>c_folder_logic-full. + lv_len = 0. + IF iv_package(1) = '$'. + lv_len = 1. + ENDIF. + WHEN zif_abapgit_dot_abapgit=>c_folder_logic-prefix. + lv_len = strlen( lv_parentcl ). + + IF iv_package(lv_len) <> lv_parentcl. +* if abapGit project is installed in package ZZZ, all subpackages should be named +* ZZZ_something. This will define the folder name in the zip file to be "something", +* similarily with online projects. Alternatively change to FULL folder logic + lv_message = 'PREFIX: Unexpected package naming(' && iv_package && ')' ##no_text. + zcx_abapgit_exception=>raise( lv_message ). + ENDIF. + WHEN OTHERS. + ASSERT 0 = 1. + ENDCASE. + + lv_path = iv_package+lv_len. + IF strlen( lv_path ) = 0. + zcx_abapgit_exception=>raise( |Folder logic: length = 0, parent: { + lv_parentcl }, child: { iv_package }| ). + ENDIF. + + IF lv_path(1) = '_'. + lv_path = lv_path+1. + ENDIF. + IF strlen( lv_path ) = 0. + zcx_abapgit_exception=>raise( |Folder logic: length = 0, parent: { + lv_parentcl }, child: { iv_package }| ). + ENDIF. + + TRANSLATE lv_path USING '/#'. + TRANSLATE lv_path TO LOWER CASE. + CONCATENATE lv_path '/' INTO lv_path. + + rv_path = package_to_path( iv_top = iv_top + io_dot = io_dot + iv_package = lv_parentcl ). + + CONCATENATE rv_path lv_path INTO rv_path. + ENDIF. + ENDIF. + + ENDMETHOD. "class_to_path + + + METHOD path_to_package. + + DATA: lv_length TYPE i, + lv_parent TYPE devclass, + lv_new TYPE string, + lv_path TYPE string, + lv_top TYPE devclass. + + lv_top = iv_top. + + lv_length = strlen( io_dot->get_starting_folder( ) ). + IF lv_length > strlen( iv_path ). + zcx_abapgit_exception=>raise( 'unexpected folder structure' ). + ENDIF. + lv_path = iv_path+lv_length. + lv_parent = lv_top. + rv_package = lv_top. + + WHILE lv_path CA '/'. + SPLIT lv_path AT '/' INTO lv_new lv_path. + + CASE io_dot->get_folder_logic( ). + WHEN zif_abapgit_dot_abapgit=>c_folder_logic-full. + rv_package = lv_new. + TRANSLATE rv_package USING '#/'. + IF iv_top(1) = '$'. + CONCATENATE '$' rv_package INTO rv_package. + ENDIF. + WHEN zif_abapgit_dot_abapgit=>c_folder_logic-prefix. + CONCATENATE rv_package '_' lv_new INTO rv_package. + WHEN OTHERS. + ASSERT 0 = 1. + ENDCASE. + + TRANSLATE rv_package TO UPPER CASE. + + IF zcl_abapgit_sap_package=>get( rv_package )->exists( ) = abap_false AND + iv_create_if_not_exists = abap_true. + + zcl_abapgit_sap_package=>get( lv_parent )->create_child( rv_package ). + ENDIF. + + lv_parent = rv_package. + ENDWHILE. + + ENDMETHOD. +ENDCLASS. diff --git a/src/zcl_abapgit_folder_logic.clas.testclasses.abap b/src/zcl_abapgit_folder_logic.clas.testclasses.abap new file mode 100644 index 000000000..0f0c83a17 --- /dev/null +++ b/src/zcl_abapgit_folder_logic.clas.testclasses.abap @@ -0,0 +1,265 @@ +CLASS ltcl_folder_logic_helper DEFINITION FOR TESTING FINAL. + + PUBLIC SECTION. + CLASS-METHODS: test + IMPORTING + iv_starting TYPE string + iv_top TYPE devclass + iv_logic TYPE string + iv_package TYPE devclass + iv_path TYPE string + RAISING zcx_abapgit_exception. + +ENDCLASS. + +CLASS ltcl_folder_logic_helper IMPLEMENTATION. + + METHOD test. + + DATA: lv_path TYPE string, + lv_package TYPE devclass, + lo_dot TYPE REF TO zcl_abapgit_dot_abapgit. + + + lo_dot = zcl_abapgit_dot_abapgit=>build_default( ). + lo_dot->set_starting_folder( iv_starting ). + lo_dot->set_folder_logic( iv_logic ). + + lv_package = zcl_abapgit_folder_logic=>path_to_package( + iv_top = iv_top + io_dot = lo_dot + iv_path = iv_path ). + + lv_path = zcl_abapgit_folder_logic=>package_to_path( + iv_top = iv_top + io_dot = lo_dot + iv_package = iv_package ). + + cl_abap_unit_assert=>assert_equals( + act = lv_package + exp = iv_package ). + + cl_abap_unit_assert=>assert_equals( + act = lv_path + exp = iv_path ). + + ENDMETHOD. + +ENDCLASS. + +CLASS ltcl_folder_logic DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. + + PUBLIC SECTION. + INTERFACES: zif_abapgit_sap_package. + + PRIVATE SECTION. + CONSTANTS: lc_top TYPE devclass VALUE '$TOP', + lc_src TYPE string VALUE '/src/'. + + METHODS: + setup, + teardown, + prefix1 FOR TESTING RAISING zcx_abapgit_exception, + prefix2 FOR TESTING RAISING zcx_abapgit_exception, + prefix_error1 FOR TESTING RAISING zcx_abapgit_exception, + full1 FOR TESTING RAISING zcx_abapgit_exception, + full2 FOR TESTING RAISING zcx_abapgit_exception. + +ENDCLASS. "ltcl_convert DEFINITION + +CLASS ltcl_folder_logic IMPLEMENTATION. + + METHOD zif_abapgit_sap_package~list_subpackages. + RETURN. + ENDMETHOD. + + METHOD zif_abapgit_sap_package~list_superpackages. + RETURN. + ENDMETHOD. + + METHOD zif_abapgit_sap_package~read_parent. + rv_parentcl = '$TOP'. + ENDMETHOD. + + METHOD zif_abapgit_sap_package~create_child. + RETURN. + ENDMETHOD. + + METHOD zif_abapgit_sap_package~exists. + rv_bool = abap_true. + ENDMETHOD. + + METHOD setup. + FIELD-SYMBOLS: LIKE LINE OF zcl_abapgit_sap_package=>gt_injected. + + CLEAR zcl_abapgit_sap_package=>gt_injected. + + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . + -package = '$TOP'. + -object = me. + + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . + -package = '$TOP_FOO'. + -object = me. + + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . + -package = '$FOOBAR'. + -object = me. + ENDMETHOD. + + METHOD teardown. + CLEAR zcl_abapgit_sap_package=>gt_injected. + ENDMETHOD. + + METHOD prefix1. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix + iv_package = lc_top + iv_path = lc_src ). + ENDMETHOD. + + METHOD prefix2. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix + iv_package = '$TOP_FOO' + iv_path = '/src/foo/' ). + ENDMETHOD. + + METHOD prefix_error1. +* PREFIX mode, top package is $TOP, so all subpackages should be named $TOP_something + TRY. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix + iv_package = '$FOOBAR' + iv_path = '/src/' ). + cl_abap_unit_assert=>fail( 'Error expected' ). + CATCH zcx_abapgit_exception ##NO_HANDLER. + ENDTRY. + ENDMETHOD. + + METHOD full1. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full + iv_package = lc_top + iv_path = lc_src ). + ENDMETHOD. + + METHOD full2. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full + iv_package = '$TOP_FOO' + iv_path = '/src/top_foo/' ). + ENDMETHOD. + +ENDCLASS. + +CLASS ltcl_folder_logic_namespaces DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL. + + PUBLIC SECTION. + INTERFACES: zif_abapgit_sap_package. + + PRIVATE SECTION. + CONSTANTS: lc_top TYPE devclass VALUE '/TEST/TOOLS', + lc_src TYPE string VALUE '/src/'. + + METHODS: + setup, + teardown, + prefix1 FOR TESTING RAISING zcx_abapgit_exception, + prefix2 FOR TESTING RAISING zcx_abapgit_exception, + full1 FOR TESTING RAISING zcx_abapgit_exception, + full2 FOR TESTING RAISING zcx_abapgit_exception. + +ENDCLASS. "ltcl_convert DEFINITION + +CLASS ltcl_folder_logic_namespaces IMPLEMENTATION. + + METHOD zif_abapgit_sap_package~list_subpackages. + RETURN. + ENDMETHOD. + + METHOD zif_abapgit_sap_package~list_superpackages. + RETURN. + ENDMETHOD. + + METHOD zif_abapgit_sap_package~read_parent. + rv_parentcl = lc_top. + ENDMETHOD. + + METHOD zif_abapgit_sap_package~create_child. + RETURN. + ENDMETHOD. + + METHOD zif_abapgit_sap_package~exists. + rv_bool = abap_true. + ENDMETHOD. + + METHOD setup. + FIELD-SYMBOLS: LIKE LINE OF zcl_abapgit_sap_package=>gt_injected. + + CLEAR zcl_abapgit_sap_package=>gt_injected. + + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . + -package = '/TEST/TOOLS'. + -object = me. + + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . + -package = '/TEST/T1'. + -object = me. + + APPEND INITIAL LINE TO zcl_abapgit_sap_package=>gt_injected ASSIGNING . + -package = '/TEST/TOOLS_T1'. + -object = me. + ENDMETHOD. + + METHOD teardown. + CLEAR zcl_abapgit_sap_package=>gt_injected. + ENDMETHOD. + + METHOD prefix1. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix + iv_package = lc_top + iv_path = lc_src ). + ENDMETHOD. + + METHOD prefix2. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-prefix + iv_package = '/TEST/TOOLS_T1' + iv_path = '/src/t1/' ). + ENDMETHOD. + + METHOD full1. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full + iv_package = lc_top + iv_path = lc_src ). + ENDMETHOD. + + METHOD full2. + ltcl_folder_logic_helper=>test( + iv_starting = lc_src + iv_top = lc_top + iv_logic = zif_abapgit_dot_abapgit=>c_folder_logic-full + iv_package = '/TEST/T1' + iv_path = '/src/#test#t1/' ). + ENDMETHOD. + +ENDCLASS. diff --git a/src/zcl_abapgit_folder_logic.clas.xml b/src/zcl_abapgit_folder_logic.clas.xml new file mode 100644 index 000000000..ed1a46ae2 --- /dev/null +++ b/src/zcl_abapgit_folder_logic.clas.xml @@ -0,0 +1,19 @@ + + + + + + ZCL_ABAPGIT_FOLDER_LOGIC + 1 + E + Folder logic + 2 + 1 + X + X + X + X + + + +