From 96dd95c4a183040d5834da525aec0a0b4e4bec99 Mon Sep 17 00:00:00 2001 From: Alexandr Zhuravlev Date: Tue, 17 Jan 2023 14:43:27 +0300 Subject: [PATCH 1/7] feat():Add logic to allow CHECK in begin of routines --- src/checks/zcl_aoc_check_02.clas.abap | 113 ++++++++++++++++++++++++++ 1 file changed, 113 insertions(+) diff --git a/src/checks/zcl_aoc_check_02.clas.abap b/src/checks/zcl_aoc_check_02.clas.abap index ecb004d7..79a38fc9 100644 --- a/src/checks/zcl_aoc_check_02.clas.abap +++ b/src/checks/zcl_aoc_check_02.clas.abap @@ -19,6 +19,13 @@ CLASS zcl_aoc_check_02 DEFINITION PROTECTED SECTION. DATA mv_check TYPE flag. DATA mv_exit TYPE flag. + + methods _IS_CHECK_ALLOW + importing + !IO_SCAN type ref to ZCL_AOC_SCAN + !IV_STATEMENT_INDEX type I + returning + value(RV_RESULT) type ABAP_BOOL . PRIVATE SECTION. ENDCLASS. @@ -65,6 +72,12 @@ CLASS zcl_aoc_check_02 IMPLEMENTATION. EXIT. " current loop ENDLOOP. IF sy-subrc <> 0. + IF lv_error = '002' AND _is_check_allow( + io_scan = io_scan + iv_statement_index = lv_index + ) IS NOT INITIAL. + CONTINUE. + ENDIF. lv_line = io_scan->statement_row( lv_index ). lv_include = io_scan->get_include( -level ). @@ -142,4 +155,104 @@ CLASS zcl_aoc_check_02 IMPLEMENTATION. ASSERT sy-subrc = 0. ENDMETHOD. + + + METHOD _is_check_allow. +************************************************************************ +* Copyright (c) 2023 by Alexandr Zhuravlev +* MIT License +* https://github.com/alezhu/abapOpenChecks/ + +*Rule +* +*Only use RETURN to exit procedures + +*Exception !!!!!! +* +*An exception to the rule to only use RETURN to exit procedures are +*CHECK statements that are located at the beginning of a procedure and +*that check the prerequisites for the execution of the procedure there. +* +*Using the CHECK statement in such a way does not impair the legibility +*and is thus allowed. +************************************************************************ + + DATA(lps_check) = REF #( io_scan->statements[ iv_statement_index ] ). + DATA(lv_struct_index) = lps_check->struc. + "Search Routine parent + WHILE lv_struct_index > 0. + DATA(lps_struct) = REF #( io_scan->structures[ lv_struct_index ] ). + IF lps_struct->type = scan_struc_type-routine. + EXIT. + ENDIF. + lv_struct_index = lps_struct->back. +* clear lps_struct. + ENDWHILE. + IF lps_struct IS NOT BOUND. + RETURN. + ENDIF. + + "Check all statements from routine start to current CHECK + "and skip available statements + DATA(lv_from) = SWITCH i( lps_struct->type + WHEN scan_struc_type-routine THEN lps_struct->stmnt_from + 1 " +1 skips METHOD/FORM/FUNCTION etc + ELSE lps_struct->stmnt_from + ). + LOOP AT io_scan->statements REFERENCE INTO DATA(lps_statement) + FROM lv_from + TO iv_statement_index - 1. " -1 skips current CHECK + + CASE lps_statement->type. + WHEN scan_stmnt_type-include + OR scan_stmnt_type-include_miss + OR scan_stmnt_type-type_pools + OR scan_stmnt_type-type_pools_miss + OR scan_stmnt_type-macro_definition + OR scan_stmnt_type-comment + OR scan_stmnt_type-comment_in_stmnt + OR scan_stmnt_type-pragma + OR scan_stmnt_type-abap_doc + OR scan_stmnt_type-empty. + "Skip allow + WHEN scan_stmnt_type-standard + OR scan_stmnt_type-unknown. + DATA(lv_keyword) = io_scan->statement_keyword( sy-tabix ). + CASE lv_keyword. + WHEN 'TYPES' + OR 'DATA' + OR 'CONSTANTS' + OR 'STATICS' + OR 'TABLES' + OR 'FIELD-SYMBOLS'. + WHEN 'CLEAR' + OR 'FREE' + OR 'REFRESH'. + WHEN 'ASSERT' + OR 'CHECK' + OR 'RETURN' + OR 'LEAVE' + OR 'RAISE' + OR 'EXIT'. + WHEN 'BREAK-POINT' + OR 'LOG-POINT'. + WHEN 'DESCRIBE' + OR 'GET' + OR 'INCLUDE' + OR 'ASSIGN'. + WHEN 'IF' + OR 'ENDIF'. + WHEN 'DEFINE' + OR 'END-OF-DEFINITION'. + WHEN OTHERS. + "CHECK not allow after others + RETURN. + ENDCASE. + WHEN OTHERS. + "CHECK not allow after such statement type + RETURN. + ENDCASE. + ENDLOOP. + + rv_result = abap_true. + ENDMETHOD. ENDCLASS. From 9954a8047f710213b542894fb806ed32d21ce49d Mon Sep 17 00:00:00 2001 From: Alexandr Zhuravlev Date: Tue, 17 Jan 2023 14:44:26 +0300 Subject: [PATCH 2/7] test():Add test for CHECK in begin of routine Also fix some old tests --- .../zcl_aoc_check_02.clas.testclasses.abap | 56 ++++++++++++++++++- 1 file changed, 54 insertions(+), 2 deletions(-) diff --git a/src/checks/zcl_aoc_check_02.clas.testclasses.abap b/src/checks/zcl_aoc_check_02.clas.testclasses.abap index 53bb01ce..1b719036 100644 --- a/src/checks/zcl_aoc_check_02.clas.testclasses.abap +++ b/src/checks/zcl_aoc_check_02.clas.testclasses.abap @@ -26,6 +26,7 @@ CLASS ltcl_test DEFINITION FOR TESTING test002_02 FOR TESTING, test002_03 FOR TESTING, test002_04 FOR TESTING. + METHODS test002_05 FOR TESTING. ENDCLASS. "lcl_Test @@ -104,13 +105,13 @@ CLASS ltcl_test IMPLEMENTATION. METHOD test002_01. * =========== + _code 'cl_class=>method( ).'. _code 'CHECK 1 = 2.'. ms_result = zcl_aoc_unit_test=>check( mt_code ). cl_abap_unit_assert=>assert_equals( exp = '002' act = ms_result-code ). - ENDMETHOD. "test1 METHOD test002_02. @@ -142,7 +143,7 @@ CLASS ltcl_test IMPLEMENTATION. METHOD test002_04. * =========== - _code 'WHILE 1 = 2'. + _code 'WHILE 1 = 2.'. _code ' CHECK 1 = 2. '. _code 'ENDWHILE. '. @@ -152,4 +153,55 @@ CLASS ltcl_test IMPLEMENTATION. ENDMETHOD. "test001_04 + METHOD test002_05. +* =========== + + _code 'CLASS LCL_FOO DEFINITION.'. + _code ' PUBLIC SECTION.'. + _code ' METHODS test.'. + _code 'ENDCLASS.'. + _code 'CLASS LCL_FOO IMPLEMENTATION.'. + _code 'METHOD test.'. + _code ' TYPE-POOLS SCAN.'. + _code ' TYPES:'. + _code ' BEGIN OF ts_struct,'. + _code ' date TYPE d,'. + _code ' END OF ts_struct.'. + _code ' CONSTANTS cv_value type string value `test`.'. + _code ' STATICS lv_index type i.'. + _code ' DATA ls_struct TYPE ts_struct'. + _code ' DATA lt_table LIKE STANDARD TABLE OF LS_STRUCT'. + _code ' FIELD-SYMBOLS TYPE any.'. + _code ' TABLES t100.'. + _code ' DEFINE macro.'. + _code ' READ TABLE lt_table INTO &1 INDEX &2.'. + _code ' END-OF-DEFINITION.'. + _code '*******************************'. + _code '" Test comment'. + _code ' CLEAR lv_index.'. + _code ' FREE lt_table.'. + _code ' REFRESH lt_table.'. + _code ' ASSERT 1 = 2.'. + _code ' BREAK-POINT.'. + _code ' BREAK-POINT ID Z.'. + _code ' LOG-POINT ID Z.'. + _code ' DESCRIBE FIELD lv_index LENGTH DATA(lv_length) IN BYTE MODE.'. + _code ' GET TIME.'. + _code ' INCLUDE zdummy IF FOUND.'. + _code ' ASSIGN ls_struct TO .'. + _code ' IF IS NOT ASSIGNED.'. + _code ' RAISE EXCEPTION TYPE CX_STATIC_CHECK.'. + _code ' LEAVE PROGRAM.'. + _code ' RETURN.'. + _code ' ENDIF.'. + _code ''. + _code ' CHECK IS ASSIGNED.'. + _code ''. + _code 'ENDMETHOD.'. + _code 'ENDCLASS.'. + + ms_result = zcl_aoc_unit_test=>check( mt_code ). + cl_abap_unit_assert=>assert_initial( ms_result ). + ENDMETHOD. "test002_05 + ENDCLASS. "lcl_Test From 1f9fb5004790cbfabd171d4c2f79a05a8b318907 Mon Sep 17 00:00:00 2001 From: Alexandr Zhuravlev Date: Tue, 17 Jan 2023 14:45:06 +0300 Subject: [PATCH 3/7] docs():Change documentation about check_02 exception --- docs/_checks/02.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/docs/_checks/02.md b/docs/_checks/02.md index cada9fb1..e9a4b955 100644 --- a/docs/_checks/02.md +++ b/docs/_checks/02.md @@ -15,8 +15,19 @@ Note: this check is also part of SAP standard in "Extended Program Check" -> "Pr ### CHECK See [https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapcheck_processing_blocks.htm](https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abapcheck_processing_blocks.htm) + +> #### **Rule** ([see](https://help.sap.com/doc/abapdocu_750_index_htm/7.50/en-US/abenexit_procedure_guidl.htm#@@ITOC@@ABENEXIT_PROCEDURE_GUIDL_2)) +> Only use RETURN to exit procedures +> +> ##### **Exception** +> An exception to the rule to only use RETURN to exit procedures are CHECK statements that are located at the beginning of a procedure and that check the prerequisites for the execution of the procedure there. Using the CHECK statement in such a way does not impair the legibility and is thus allowed. However, this exception does not apply to other positions within a procedure and outside loops. + [https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#check-vs-return](https://github.com/SAP/styleguides/blob/master/clean-abap/CleanABAP.md#check-vs-return) + + + + Note: this check is also part of SAP standard in "Extended Program Check" -> "Programming Guidelines". ### Configuration From 95d397f1dd77755170aa30e1e32f1ae40ba5fa14 Mon Sep 17 00:00:00 2001 From: Alexandr Zhuravlev Date: Tue, 17 Jan 2023 15:03:18 +0300 Subject: [PATCH 4/7] Update src/checks/zcl_aoc_check_02.clas.abap Remove commented Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> --- src/checks/zcl_aoc_check_02.clas.abap | 1 - 1 file changed, 1 deletion(-) diff --git a/src/checks/zcl_aoc_check_02.clas.abap b/src/checks/zcl_aoc_check_02.clas.abap index 79a38fc9..c01f015e 100644 --- a/src/checks/zcl_aoc_check_02.clas.abap +++ b/src/checks/zcl_aoc_check_02.clas.abap @@ -186,7 +186,6 @@ CLASS zcl_aoc_check_02 IMPLEMENTATION. EXIT. ENDIF. lv_struct_index = lps_struct->back. -* clear lps_struct. ENDWHILE. IF lps_struct IS NOT BOUND. RETURN. From b352814e42f09b2d9d8fb4e225b8cd4b315e4811 Mon Sep 17 00:00:00 2001 From: Alexandr Zhuravlev Date: Tue, 17 Jan 2023 15:05:40 +0300 Subject: [PATCH 5/7] refactor():Tabs to spaces --- .../zcl_aoc_check_02.clas.testclasses.abap | 90 +++++++++---------- 1 file changed, 45 insertions(+), 45 deletions(-) diff --git a/src/checks/zcl_aoc_check_02.clas.testclasses.abap b/src/checks/zcl_aoc_check_02.clas.testclasses.abap index 1b719036..38f3504f 100644 --- a/src/checks/zcl_aoc_check_02.clas.testclasses.abap +++ b/src/checks/zcl_aoc_check_02.clas.testclasses.abap @@ -156,51 +156,51 @@ CLASS ltcl_test IMPLEMENTATION. METHOD test002_05. * =========== - _code 'CLASS LCL_FOO DEFINITION.'. - _code ' PUBLIC SECTION.'. - _code ' METHODS test.'. - _code 'ENDCLASS.'. - _code 'CLASS LCL_FOO IMPLEMENTATION.'. - _code 'METHOD test.'. - _code ' TYPE-POOLS SCAN.'. - _code ' TYPES:'. - _code ' BEGIN OF ts_struct,'. - _code ' date TYPE d,'. - _code ' END OF ts_struct.'. - _code ' CONSTANTS cv_value type string value `test`.'. - _code ' STATICS lv_index type i.'. - _code ' DATA ls_struct TYPE ts_struct'. - _code ' DATA lt_table LIKE STANDARD TABLE OF LS_STRUCT'. - _code ' FIELD-SYMBOLS TYPE any.'. - _code ' TABLES t100.'. - _code ' DEFINE macro.'. - _code ' READ TABLE lt_table INTO &1 INDEX &2.'. - _code ' END-OF-DEFINITION.'. - _code '*******************************'. - _code '" Test comment'. - _code ' CLEAR lv_index.'. - _code ' FREE lt_table.'. - _code ' REFRESH lt_table.'. - _code ' ASSERT 1 = 2.'. - _code ' BREAK-POINT.'. - _code ' BREAK-POINT ID Z.'. - _code ' LOG-POINT ID Z.'. - _code ' DESCRIBE FIELD lv_index LENGTH DATA(lv_length) IN BYTE MODE.'. - _code ' GET TIME.'. - _code ' INCLUDE zdummy IF FOUND.'. - _code ' ASSIGN ls_struct TO .'. - _code ' IF IS NOT ASSIGNED.'. - _code ' RAISE EXCEPTION TYPE CX_STATIC_CHECK.'. - _code ' LEAVE PROGRAM.'. - _code ' RETURN.'. - _code ' ENDIF.'. - _code ''. - _code ' CHECK IS ASSIGNED.'. - _code ''. - _code 'ENDMETHOD.'. - _code 'ENDCLASS.'. - - ms_result = zcl_aoc_unit_test=>check( mt_code ). + _code 'CLASS LCL_FOO DEFINITION.'. + _code ' PUBLIC SECTION.'. + _code ' METHODS test.'. + _code 'ENDCLASS.'. + _code 'CLASS LCL_FOO IMPLEMENTATION.'. + _code 'METHOD test.'. + _code ' TYPE-POOLS SCAN.'. + _code ' TYPES:'. + _code ' BEGIN OF ts_struct,'. + _code ' date TYPE d,'. + _code ' END OF ts_struct.'. + _code ' CONSTANTS cv_value type string value `test`.'. + _code ' STATICS lv_index type i.'. + _code ' DATA ls_struct TYPE ts_struct'. + _code ' DATA lt_table LIKE STANDARD TABLE OF LS_STRUCT'. + _code ' FIELD-SYMBOLS TYPE any.'. + _code ' TABLES t100.'. + _code ' DEFINE macro.'. + _code ' READ TABLE lt_table INTO &1 INDEX &2.'. + _code ' END-OF-DEFINITION.'. + _code '*******************************'. + _code '" Test comment'. + _code ' CLEAR lv_index.'. + _code ' FREE lt_table.'. + _code ' REFRESH lt_table.'. + _code ' ASSERT 1 = 2.'. + _code ' BREAK-POINT.'. + _code ' BREAK-POINT ID Z.'. + _code ' LOG-POINT ID Z.'. + _code ' DESCRIBE FIELD lv_index LENGTH DATA(lv_length) IN BYTE MODE.'. + _code ' GET TIME.'. + _code ' INCLUDE zdummy IF FOUND.'. + _code ' ASSIGN ls_struct TO .'. + _code ' IF IS NOT ASSIGNED.'. + _code ' RAISE EXCEPTION TYPE CX_STATIC_CHECK.'. + _code ' LEAVE PROGRAM.'. + _code ' RETURN.'. + _code ' ENDIF.'. + _code ''. + _code ' CHECK IS ASSIGNED.'. + _code ''. + _code 'ENDMETHOD.'. + _code 'ENDCLASS.'. + + ms_result = zcl_aoc_unit_test=>check( mt_code ). cl_abap_unit_assert=>assert_initial( ms_result ). ENDMETHOD. "test002_05 From 36ce9d1cf4e336c63179e73a639d88059f6d63bc Mon Sep 17 00:00:00 2001 From: Alexandr Zhuravlev Date: Tue, 17 Jan 2023 15:08:28 +0300 Subject: [PATCH 6/7] Update src/checks/zcl_aoc_check_02.clas.abap Co-authored-by: abaplint[bot] <24845621+abaplint[bot]@users.noreply.github.com> --- src/checks/zcl_aoc_check_02.clas.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/checks/zcl_aoc_check_02.clas.abap b/src/checks/zcl_aoc_check_02.clas.abap index c01f015e..092d233e 100644 --- a/src/checks/zcl_aoc_check_02.clas.abap +++ b/src/checks/zcl_aoc_check_02.clas.abap @@ -196,7 +196,7 @@ CLASS zcl_aoc_check_02 IMPLEMENTATION. DATA(lv_from) = SWITCH i( lps_struct->type WHEN scan_struc_type-routine THEN lps_struct->stmnt_from + 1 " +1 skips METHOD/FORM/FUNCTION etc ELSE lps_struct->stmnt_from - ). + ). LOOP AT io_scan->statements REFERENCE INTO DATA(lps_statement) FROM lv_from TO iv_statement_index - 1. " -1 skips current CHECK From 58d51c9e22b9c716044d1dc1b5970d6adeb17508 Mon Sep 17 00:00:00 2001 From: Alexandr Zhuravlev Date: Thu, 26 Jan 2023 12:51:34 +0300 Subject: [PATCH 7/7] refactor():Fix abaplint problems --- src/checks/zcl_aoc_check_02.clas.abap | 100 +++++++++--------- .../zcl_aoc_check_02.clas.testclasses.abap | 6 +- 2 files changed, 53 insertions(+), 53 deletions(-) diff --git a/src/checks/zcl_aoc_check_02.clas.abap b/src/checks/zcl_aoc_check_02.clas.abap index 092d233e..47f58447 100644 --- a/src/checks/zcl_aoc_check_02.clas.abap +++ b/src/checks/zcl_aoc_check_02.clas.abap @@ -20,12 +20,12 @@ CLASS zcl_aoc_check_02 DEFINITION DATA mv_check TYPE flag. DATA mv_exit TYPE flag. - methods _IS_CHECK_ALLOW - importing - !IO_SCAN type ref to ZCL_AOC_SCAN - !IV_STATEMENT_INDEX type I - returning - value(RV_RESULT) type ABAP_BOOL . + METHODS _is_check_allow + IMPORTING + !io_scan TYPE REF TO zcl_aoc_scan + !iv_statement_index TYPE i + RETURNING + VALUE(rv_result) TYPE abap_bool . PRIVATE SECTION. ENDCLASS. @@ -177,71 +177,71 @@ CLASS zcl_aoc_check_02 IMPLEMENTATION. *and is thus allowed. ************************************************************************ - DATA(lps_check) = REF #( io_scan->statements[ iv_statement_index ] ). - DATA(lv_struct_index) = lps_check->struc. + DATA(lp_s_check) = REF #( io_scan->statements[ iv_statement_index ] ). + DATA(lv_struct_index) = lp_s_check->struc. "Search Routine parent WHILE lv_struct_index > 0. - DATA(lps_struct) = REF #( io_scan->structures[ lv_struct_index ] ). - IF lps_struct->type = scan_struc_type-routine. + DATA(lp_s_struct) = REF #( io_scan->structures[ lv_struct_index ] ). + IF lp_s_struct->type = scan_struc_type-routine. EXIT. ENDIF. - lv_struct_index = lps_struct->back. + lv_struct_index = lp_s_struct->back. ENDWHILE. - IF lps_struct IS NOT BOUND. + IF lp_s_struct IS NOT BOUND. RETURN. ENDIF. "Check all statements from routine start to current CHECK "and skip available statements - DATA(lv_from) = SWITCH i( lps_struct->type - WHEN scan_struc_type-routine THEN lps_struct->stmnt_from + 1 " +1 skips METHOD/FORM/FUNCTION etc - ELSE lps_struct->stmnt_from - ). - LOOP AT io_scan->statements REFERENCE INTO DATA(lps_statement) - FROM lv_from - TO iv_statement_index - 1. " -1 skips current CHECK - - CASE lps_statement->type. + DATA(lv_from) = SWITCH i( lp_s_struct->type + WHEN scan_struc_type-routine THEN lp_s_struct->stmnt_from + 1 " +1 skips METHOD/FORM/FUNCTION etc + ELSE lp_s_struct->stmnt_from ). + LOOP AT io_scan->statements REFERENCE INTO DATA(lp_s_statement) + FROM lv_from + TO iv_statement_index - 1. " -1 skips current CHECK + + CASE lp_s_statement->type. WHEN scan_stmnt_type-include - OR scan_stmnt_type-include_miss - OR scan_stmnt_type-type_pools - OR scan_stmnt_type-type_pools_miss - OR scan_stmnt_type-macro_definition - OR scan_stmnt_type-comment - OR scan_stmnt_type-comment_in_stmnt - OR scan_stmnt_type-pragma - OR scan_stmnt_type-abap_doc - OR scan_stmnt_type-empty. + OR scan_stmnt_type-include_miss + OR scan_stmnt_type-type_pools + OR scan_stmnt_type-type_pools_miss + OR scan_stmnt_type-comment + OR scan_stmnt_type-comment_in_stmnt + OR scan_stmnt_type-pragma + OR scan_stmnt_type-abap_doc + OR scan_stmnt_type-macro_definition + OR scan_stmnt_type-empty. "Skip allow + CONTINUE. WHEN scan_stmnt_type-standard - OR scan_stmnt_type-unknown. + OR scan_stmnt_type-unknown. DATA(lv_keyword) = io_scan->statement_keyword( sy-tabix ). CASE lv_keyword. WHEN 'TYPES' - OR 'DATA' - OR 'CONSTANTS' - OR 'STATICS' - OR 'TABLES' - OR 'FIELD-SYMBOLS'. + OR 'DATA' + OR 'STATICS' + OR 'TABLES' + OR 'CONSTANTS' + OR 'FIELD-SYMBOLS'. WHEN 'CLEAR' - OR 'FREE' - OR 'REFRESH'. + OR 'FREE' + OR 'REFRESH'. WHEN 'ASSERT' - OR 'CHECK' - OR 'RETURN' - OR 'LEAVE' - OR 'RAISE' - OR 'EXIT'. + OR 'CHECK' + OR 'LEAVE' + OR 'RAISE' + OR 'RETURN' + OR 'EXIT'. WHEN 'BREAK-POINT' - OR 'LOG-POINT'. + OR 'LOG-POINT'. WHEN 'DESCRIBE' - OR 'GET' - OR 'INCLUDE' - OR 'ASSIGN'. + OR 'GET' + OR 'INCLUDE' + OR 'ASSIGN'. WHEN 'IF' - OR 'ENDIF'. + OR 'ENDIF'. WHEN 'DEFINE' - OR 'END-OF-DEFINITION'. + OR 'END-OF-DEFINITION'. WHEN OTHERS. "CHECK not allow after others RETURN. @@ -254,4 +254,4 @@ CLASS zcl_aoc_check_02 IMPLEMENTATION. rv_result = abap_true. ENDMETHOD. -ENDCLASS. +ENDCLASS. \ No newline at end of file diff --git a/src/checks/zcl_aoc_check_02.clas.testclasses.abap b/src/checks/zcl_aoc_check_02.clas.testclasses.abap index 38f3504f..fb0ab0e3 100644 --- a/src/checks/zcl_aoc_check_02.clas.testclasses.abap +++ b/src/checks/zcl_aoc_check_02.clas.testclasses.abap @@ -154,7 +154,7 @@ CLASS ltcl_test IMPLEMENTATION. ENDMETHOD. "test001_04 METHOD test002_05. -* =========== +* =========== _code 'CLASS LCL_FOO DEFINITION.'. _code ' PUBLIC SECTION.'. @@ -199,9 +199,9 @@ CLASS ltcl_test IMPLEMENTATION. _code ''. _code 'ENDMETHOD.'. _code 'ENDCLASS.'. - + ms_result = zcl_aoc_unit_test=>check( mt_code ). cl_abap_unit_assert=>assert_initial( ms_result ). ENDMETHOD. "test002_05 -ENDCLASS. "lcl_Test +ENDCLASS. "lcl_Test \ No newline at end of file