From 621d2e66dd0f6c74c7b302c1b64a9667a7bffcbd Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Thu, 8 Oct 2020 16:36:11 +0200 Subject: [PATCH 1/8] raising the message only once --- src/checks/y_check_profile_message.clas.abap | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/checks/y_check_profile_message.clas.abap b/src/checks/y_check_profile_message.clas.abap index 6d8a176b..5dee68aa 100644 --- a/src/checks/y_check_profile_message.clas.abap +++ b/src/checks/y_check_profile_message.clas.abap @@ -8,6 +8,7 @@ CLASS y_check_profile_message DEFINITION METHODS execute_check REDEFINITION. METHODS inspect_tokens REDEFINITION. PRIVATE SECTION. + CLASS-DATA ran TYPE abap_bool. ENDCLASS. CLASS y_check_profile_message IMPLEMENTATION. @@ -32,6 +33,7 @@ CLASS y_check_profile_message IMPLEMENTATION. METHOD execute_check. + CHECK ran = abap_false. CHECK has_attributes = abap_false. DATA(check_configuration) = detect_check_configuration( VALUE #( level = 1 ) ). @@ -45,6 +47,8 @@ CLASS y_check_profile_message IMPLEMENTATION. statement_from = 1 error_priority = check_configuration-prio ). + ran = abap_true. + ENDMETHOD. From d9ef18b20902d026a268a0ddb9a9bc4b13fcbcba Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Thu, 8 Oct 2020 18:51:02 +0200 Subject: [PATCH 2/8] disabling referece to object --- src/checks/y_check_profile_message.clas.abap | 26 +++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/src/checks/y_check_profile_message.clas.abap b/src/checks/y_check_profile_message.clas.abap index 5dee68aa..3aab8ed1 100644 --- a/src/checks/y_check_profile_message.clas.abap +++ b/src/checks/y_check_profile_message.clas.abap @@ -7,6 +7,7 @@ CLASS y_check_profile_message DEFINITION PROTECTED SECTION. METHODS execute_check REDEFINITION. METHODS inspect_tokens REDEFINITION. + METHODS inform REDEFINITION. PRIVATE SECTION. CLASS-DATA ran TYPE abap_bool. ENDCLASS. @@ -25,7 +26,7 @@ CLASS y_check_profile_message IMPLEMENTATION. settings-threshold = 0. settings-apply_on_test_code = abap_true. settings-apply_on_productive_code = abap_true. - settings-prio = c_note. + settings-prio = c_info. set_check_message( 'code pal for ABAP Profile is being used.' ). ENDMETHOD. @@ -57,4 +58,27 @@ CLASS y_check_profile_message IMPLEMENTATION. ENDMETHOD. + METHOD inform. + super->inform( p_sub_obj_type = '' + p_sub_obj_name = '' + p_position = '' + p_line = '' + p_column = '' + p_errcnt = p_errcnt + p_kind = p_kind + p_test = p_test + p_code = p_code + p_suppress = p_suppress + p_param_1 = p_param_1 + p_param_2 = p_param_2 + p_param_3 = p_param_3 + p_param_4 = p_param_4 + p_inclspec = p_inclspec + p_detail = p_detail + p_checksum_1 = p_checksum_1 + p_comments = p_comments + p_finding_origins = p_finding_origins ). + ENDMETHOD. + + ENDCLASS. From 93ad596c0652969583ddebfcd63c8a27c4dd2fc3 Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Thu, 8 Oct 2020 18:54:46 +0200 Subject: [PATCH 3/8] minor fix --- src/checks/y_check_profile_message.clas.abap | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/checks/y_check_profile_message.clas.abap b/src/checks/y_check_profile_message.clas.abap index 3aab8ed1..2a899952 100644 --- a/src/checks/y_check_profile_message.clas.abap +++ b/src/checks/y_check_profile_message.clas.abap @@ -26,7 +26,7 @@ CLASS y_check_profile_message IMPLEMENTATION. settings-threshold = 0. settings-apply_on_test_code = abap_true. settings-apply_on_productive_code = abap_true. - settings-prio = c_info. + settings-prio = c_note. set_check_message( 'code pal for ABAP Profile is being used.' ). ENDMETHOD. From 6c582a7513165b528999d282a93c67429f2c7d53 Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Thu, 15 Oct 2020 13:47:16 -0300 Subject: [PATCH 4/8] Updating temporary branch * disabling coverages in test code (#166) * disabling coverages in test code * disabling apply on test code * &1 attributes reach threshold of &2 (#168) * %261 reach threshold of %262 * reach => reaching * minor fixes * Disabling "db access in ut" check when the OSQL/CDS UT framework is in use (#173) * fixes #171 * Update changelog.txt * Standardizing Messages (#174) * standardizing messages * reverting external_call_in_ut * Update changelog.txt --- changelog.txt | 2 + src/checks/y_check_branch_coverage.clas.abap | 3 +- .../y_check_call_method_usage.clas.abap | 2 +- .../y_check_check_stmnt_position.clas.abap | 2 +- src/checks/y_check_comment_usage.clas.abap | 2 +- .../y_check_cyclomatic_complexity.clas.abap | 2 +- src/checks/y_check_db_access_in_ut.clas.abap | 39 +++---- ...heck_db_access_in_ut.clas.testclasses.abap | 102 ++++++++++++++++++ .../y_check_deprecated_key_words.clas.abap | 2 +- .../y_check_is_interface_in_class.clas.abap | 2 +- src/checks/y_check_magic_number.clas.abap | 2 +- .../y_check_max_nesting_depth.clas.abap | 2 +- .../y_check_num_exec_statements.clas.abap | 2 +- .../y_check_num_output_parameter.clas.abap | 6 +- .../y_check_num_public_attributes.clas.abap | 2 +- .../y_check_number_attributes.clas.abap | 2 +- src/checks/y_check_number_events.clas.abap | 2 +- .../y_check_number_interfaces.clas.abap | 2 +- src/checks/y_check_number_methods.clas.abap | 2 +- .../y_check_procedure_coverage.clas.abap | 3 +- .../y_check_pseudo_comment_usage.clas.abap | 2 +- .../y_check_statement_coverage.clas.abap | 3 +- src/checks/y_check_test_seam_usage.clas.abap | 2 +- 23 files changed, 150 insertions(+), 40 deletions(-) diff --git a/changelog.txt b/changelog.txt index 326b70c7..7bbf0597 100644 --- a/changelog.txt +++ b/changelog.txt @@ -10,6 +10,8 @@ Legend 2020-10-10 v1.05.0 ------------------ +! check messages +- db access in ut when OSQL/CDS framework is being used ! category description + report to activate or deactivate the SCI entries + add/remove all check in profiles diff --git a/src/checks/y_check_branch_coverage.clas.abap b/src/checks/y_check_branch_coverage.clas.abap index 37bcefa4..d9368322 100644 --- a/src/checks/y_check_branch_coverage.clas.abap +++ b/src/checks/y_check_branch_coverage.clas.abap @@ -19,9 +19,10 @@ CLASS y_check_branch_coverage IMPLEMENTATION. settings-is_threshold_reversed = abap_true. settings-disable_on_prodcode_selection = abap_true. settings-disable_on_testcode_selection = abap_true. + settings-apply_on_test_code = abap_false. settings-documentation = |{ c_docs_path-checks }unit-test-coverages.md|. - set_check_message( 'Branch Coverage of &1% is under the threshold of &2%.' ). + set_check_message( 'Branch Coverage of &1% does not reach the threshold of &2%!' ). ENDMETHOD. diff --git a/src/checks/y_check_call_method_usage.clas.abap b/src/checks/y_check_call_method_usage.clas.abap index cf498fbd..ca1eb8b8 100644 --- a/src/checks/y_check_call_method_usage.clas.abap +++ b/src/checks/y_check_call_method_usage.clas.abap @@ -23,7 +23,7 @@ CLASS y_check_call_method_usage IMPLEMENTATION. settings-threshold = 0. settings-documentation = |{ c_docs_path-checks }call-method-usage.md|. - set_check_message( '"CALL METHOD" Statement should not be used!' ). + set_check_message( '"CALL METHOD" statement should not be used!' ). ENDMETHOD. diff --git a/src/checks/y_check_check_stmnt_position.clas.abap b/src/checks/y_check_check_stmnt_position.clas.abap index b4b210bf..17add468 100644 --- a/src/checks/y_check_check_stmnt_position.clas.abap +++ b/src/checks/y_check_check_stmnt_position.clas.abap @@ -33,7 +33,7 @@ CLASS Y_CHECK_CHECK_STMNT_POSITION IMPLEMENTATION. settings-threshold = 0. settings-documentation = |{ c_docs_path-checks }check-statement-position.md|. - set_check_message( '"CHECK" Statement should be the very first statement.' ). + set_check_message( '"CHECK" statement should be the very first statement!' ). ENDMETHOD. diff --git a/src/checks/y_check_comment_usage.clas.abap b/src/checks/y_check_comment_usage.clas.abap index a7171001..304ab0f0 100644 --- a/src/checks/y_check_comment_usage.clas.abap +++ b/src/checks/y_check_comment_usage.clas.abap @@ -69,7 +69,7 @@ CLASS Y_CHECK_COMMENT_USAGE IMPLEMENTATION. settings-threshold = 10. settings-documentation = |{ c_docs_path-checks }comment-usage.md|. - set_check_message( '&1 comments found! This is &2% of the productive code, exceeding threshold of &3%' ). + set_check_message( '&1 comments found! This is &2% of the productive code reaching threshold of &3%!' ). ENDMETHOD. diff --git a/src/checks/y_check_cyclomatic_complexity.clas.abap b/src/checks/y_check_cyclomatic_complexity.clas.abap index 406a1b54..ee870ac5 100644 --- a/src/checks/y_check_cyclomatic_complexity.clas.abap +++ b/src/checks/y_check_cyclomatic_complexity.clas.abap @@ -60,7 +60,7 @@ CLASS Y_CHECK_CYCLOMATIC_COMPLEXITY IMPLEMENTATION. settings-threshold = 10. settings-documentation = |{ c_docs_path-checks }cyclomatic-complexity.md|. - set_check_message( 'Cyclomatic complexity is &1, exceeding threshold of &2' ). + set_check_message( 'Cyclomatic complexity is &1 reaching threshold of &2!' ). ENDMETHOD. diff --git a/src/checks/y_check_db_access_in_ut.clas.abap b/src/checks/y_check_db_access_in_ut.clas.abap index c49dfd58..0cce332f 100644 --- a/src/checks/y_check_db_access_in_ut.clas.abap +++ b/src/checks/y_check_db_access_in_ut.clas.abap @@ -1,30 +1,18 @@ -CLASS y_check_db_access_in_ut DEFINITION - PUBLIC - INHERITING FROM y_check_base - CREATE PUBLIC . - +CLASS y_check_db_access_in_ut DEFINITION PUBLIC INHERITING FROM y_check_base CREATE PUBLIC. PUBLIC SECTION. - METHODS constructor . + METHODS constructor. PROTECTED SECTION. METHODS execute_check REDEFINITION. METHODS inspect_tokens REDEFINITION. - + METHODS has_osql_or_cds_framework RETURNING VALUE(result) TYPE abap_bool. PRIVATE SECTION. - - METHODS is_persistent_object - IMPORTING - !obj_name TYPE string - RETURNING - VALUE(result) TYPE abap_bool . - - METHODS check_if_error - IMPORTING - !index TYPE i OPTIONAL - !statement TYPE sstmnt OPTIONAL . + METHODS is_persistent_object IMPORTING obj_name TYPE string + RETURNING VALUE(result) TYPE abap_bool . + METHODS check_if_error IMPORTING index TYPE i OPTIONAL + statement TYPE sstmnt OPTIONAL . ENDCLASS. - CLASS Y_CHECK_DB_ACCESS_IN_UT IMPLEMENTATION. @@ -45,6 +33,9 @@ CLASS Y_CHECK_DB_ACCESS_IN_UT IMPLEMENTATION. METHOD execute_check. + + CHECK has_osql_or_cds_framework( ) = abap_false. + LOOP AT ref_scan_manager->get_structures( ) ASSIGNING FIELD-SYMBOL() WHERE stmnt_type EQ scan_struc_stmnt_type-method. @@ -144,4 +135,14 @@ CLASS Y_CHECK_DB_ACCESS_IN_UT IMPLEMENTATION. parameter_01 = |{ key_word }| ). ENDMETHOD. + + METHOD has_osql_or_cds_framework. + DATA(tokens) = ref_scan_manager->get_tokens( ). + + IF line_exists( tokens[ str = 'IF_OSQL_TEST_ENVIRONMENT' ] ) + OR line_exists( tokens[ str = 'IF_CDS_TEST_ENVIRONMENT' ] ). + result = abap_true. + ENDIF. + ENDMETHOD. + ENDCLASS. diff --git a/src/checks/y_check_db_access_in_ut.clas.testclasses.abap b/src/checks/y_check_db_access_in_ut.clas.testclasses.abap index f07d9cb5..fb04920b 100644 --- a/src/checks/y_check_db_access_in_ut.clas.testclasses.abap +++ b/src/checks/y_check_db_access_in_ut.clas.testclasses.abap @@ -476,3 +476,105 @@ CLASS ltc_commit IMPLEMENTATION. ENDMETHOD. ENDCLASS. + +CLASS ltc_osql_framework DEFINITION INHERITING FROM y_unit_test_base FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. + PROTECTED SECTION. + METHODS get_cut REDEFINITION. + METHODS get_code_with_issue REDEFINITION. + METHODS get_code_without_issue REDEFINITION. + METHODS get_code_with_exemption REDEFINITION. +ENDCLASS. + +CLASS ltc_osql_framework IMPLEMENTATION. + + METHOD get_cut. + result ?= NEW y_check_db_access_in_ut( ). + ENDMETHOD. + + METHOD get_code_with_issue. + result = VALUE #( + ( ' REPORT ut_test. ' ) + + ( ' CLASS lcl_classname DEFINITION FOR TESTING. ' ) + ( ' PUBLIC SECTION. ' ) + ( ' METHODS example FOR TESTING. ' ) + ( ' ENDCLASS.' ) + + ( ' CLASS lcl_classname IMPLEMENTATION. ' ) + ( ' METHOD example. ' ) + ( ' DATA tadir TYPE tadir. ' ) + ( ' SELECT SINGLE * FROM tadir INTO tadir. ' ) + ( ' ENDMETHOD. ' ) + ( ' ENDCLASS. ' ) + ). + ENDMETHOD. + + METHOD get_code_without_issue. + result = VALUE #( + ( ' REPORT ut_test. ' ) + + ( ' CLASS lcl_classname DEFINITION FOR TESTING. ' ) + ( ' PUBLIC SECTION. ' ) + ( ' METHODS scenario FOR TESTING. ' ) + ( ' PROTECTED SECTION. ' ) + ( ' METHODS given_fake_value. ' ) + ( ' METHODS when_select. ' ) + ( ' METHODS then_has_entry. ' ) + ( ' PRIVATE SECTION. ' ) + ( ' CLASS-DATA osql_test_environment TYPE REF TO if_osql_test_environment. ' ) + ( ' DATA cut TYPE tadir. ' ) + ( ' CLASS-METHODS class_setup. ' ) + ( ' CLASS-METHODS class_teardown. ' ) + ( ' ENDCLASS.' ) + + ( ' CLASS lcl_classname IMPLEMENTATION. ' ) + + ( ' METHOD class_setup. ' ) + ( | osql_test_environment = cl_osql_test_environment=>create( VALUE #( ( 'tadir' ) ) ). | ) + ( ' ENDMETHOD. ' ) + + ( ' METHOD class_teardown. ' ) + ( ' osql_test_environment->destroy( ). ' ) + ( ' ENDMETHOD. ' ) + + ( ' METHOD given_fake_value. ' ) + ( ' "osql_test_environment->insert_test_data( data ). ' ) + ( ' ENDMETHOD. ' ) + + ( ' METHOD when_select. ' ) + ( ' SELECT SINGLE * FROM tadir INTO cut. ' ) + ( ' ENDMETHOD. ' ) + + ( ' METHOD then_has_entry. ' ) + ( ' cl_aunit_assert=>assert_not_initial( cut ). ' ) + ( ' ENDMETHOD. ' ) + + ( ' METHOD scenario. ' ) + ( ' given_fake_value( ). ' ) + ( ' when_select( ). ' ) + ( ' then_has_entry( ). ' ) + ( ' ENDMETHOD. ' ) + + ( ' ENDCLASS. ' ) + ). + ENDMETHOD. + + METHOD get_code_with_exemption. + result = VALUE #( + ( ' REPORT ut_test. ' ) + + ( ' CLASS lcl_classname DEFINITION FOR TESTING. ' ) + ( ' PUBLIC SECTION. ' ) + ( ' METHODS example FOR TESTING. ' ) + ( ' ENDCLASS.' ) + + ( ' CLASS lcl_classname IMPLEMENTATION. ' ) + ( ' METHOD example. ' ) + ( ' DATA tadir TYPE tadir. ' ) + ( ' SELECT SINGLE * FROM tadir INTO tadir. "#EC DB_ACCESS_UT ' ) + ( ' ENDMETHOD. ' ) + ( ' ENDCLASS. ' ) + ). + ENDMETHOD. + +ENDCLASS. diff --git a/src/checks/y_check_deprecated_key_words.clas.abap b/src/checks/y_check_deprecated_key_words.clas.abap index eb20f3bc..55a0b5a9 100644 --- a/src/checks/y_check_deprecated_key_words.clas.abap +++ b/src/checks/y_check_deprecated_key_words.clas.abap @@ -28,7 +28,7 @@ CLASS Y_CHECK_DEPRECATED_KEY_WORDS IMPLEMENTATION. settings-threshold = 0. settings-documentation = |{ c_docs_path-checks }deprecated-key-word.md|. - set_check_message( '"&1" is deprecated' ). + set_check_message( '"&1" is deprecated!' ). ENDMETHOD. diff --git a/src/checks/y_check_is_interface_in_class.clas.abap b/src/checks/y_check_is_interface_in_class.clas.abap index 8f80e2d1..e7197e7f 100644 --- a/src/checks/y_check_is_interface_in_class.clas.abap +++ b/src/checks/y_check_is_interface_in_class.clas.abap @@ -28,7 +28,7 @@ CLASS Y_CHECK_IS_INTERFACE_IN_CLASS IMPLEMENTATION. settings-prio = c_warning. settings-documentation = |{ c_docs_path-checks }interface-in-class.md|. - set_check_message( '&1 public methods without interface' ). + set_check_message( '&1 public methods without interface!' ). ENDMETHOD. diff --git a/src/checks/y_check_magic_number.clas.abap b/src/checks/y_check_magic_number.clas.abap index a8a9f35a..8fa3a7ae 100644 --- a/src/checks/y_check_magic_number.clas.abap +++ b/src/checks/y_check_magic_number.clas.abap @@ -45,7 +45,7 @@ CLASS Y_CHECK_MAGIC_NUMBER IMPLEMENTATION. settings-apply_on_test_code = abap_false. settings-documentation = |{ c_docs_path-checks }magic-number.md|. - set_check_message( 'Magic Number Violation - &1 is a Magic Number' ). + set_check_message( 'Magic Number Violation - &1 is a Magic Number!' ). ENDMETHOD. diff --git a/src/checks/y_check_max_nesting_depth.clas.abap b/src/checks/y_check_max_nesting_depth.clas.abap index 4e07eabf..3d0f2ccf 100644 --- a/src/checks/y_check_max_nesting_depth.clas.abap +++ b/src/checks/y_check_max_nesting_depth.clas.abap @@ -54,7 +54,7 @@ CLASS Y_CHECK_MAX_NESTING_DEPTH IMPLEMENTATION. settings-pseudo_comment = '"#EC CI_NESTING' ##NO_TEXT. settings-documentation = |{ c_docs_path-checks }maximum-nesting-depth.md|. - set_check_message( 'Maximal nesting depth is &1, exceeding threshold of &2' ). + set_check_message( 'Maximal nesting depth is &1 reaching threshold of &2!' ). ENDMETHOD. diff --git a/src/checks/y_check_num_exec_statements.clas.abap b/src/checks/y_check_num_exec_statements.clas.abap index f539b688..c1c9e5e2 100644 --- a/src/checks/y_check_num_exec_statements.clas.abap +++ b/src/checks/y_check_num_exec_statements.clas.abap @@ -52,7 +52,7 @@ CLASS Y_CHECK_NUM_EXEC_STATEMENTS IMPLEMENTATION. add_obj_type( c_type_program ). - set_check_message( '&1 executable statements in method, exceeds threshold &2' ). + set_check_message( '&1 executable statements in method reaching threshold of &2!' ). ENDMETHOD. diff --git a/src/checks/y_check_num_output_parameter.clas.abap b/src/checks/y_check_num_output_parameter.clas.abap index 6b3d56a5..618c38cb 100644 --- a/src/checks/y_check_num_output_parameter.clas.abap +++ b/src/checks/y_check_num_output_parameter.clas.abap @@ -21,7 +21,7 @@ CLASS Y_CHECK_NUM_OUTPUT_PARAMETER IMPLEMENTATION. settings-threshold = 2. settings-documentation = |{ c_docs_path-checks }number-output-parameter.md|. - set_check_message( 'Too many output parameters!' ). + set_check_message( '&1 output parameters reaching threshold of &2!' ). ENDMETHOD. @@ -67,7 +67,9 @@ CLASS Y_CHECK_NUM_OUTPUT_PARAMETER IMPLEMENTATION. raise_error( statement_level = statement-level statement_index = index statement_from = statement-from + 1 - error_priority = configuration-prio ). + error_priority = configuration-prio + parameter_01 = |{ outputs_of_statement }| + parameter_02 = |{ configuration-threshold }| ). ENDMETHOD. diff --git a/src/checks/y_check_num_public_attributes.clas.abap b/src/checks/y_check_num_public_attributes.clas.abap index b7aae8ae..0b88f692 100644 --- a/src/checks/y_check_num_public_attributes.clas.abap +++ b/src/checks/y_check_num_public_attributes.clas.abap @@ -83,7 +83,7 @@ CLASS Y_CHECK_NUM_PUBLIC_ATTRIBUTES IMPLEMENTATION. settings-threshold = 1. settings-documentation = |{ c_docs_path-checks }number-public-attributes.md|. - set_check_message( '&1 public attributes. All attributes should be private by default.' ). + set_check_message( '&1 public attributes. All attributes should be private/protected by default!' ). ENDMETHOD. diff --git a/src/checks/y_check_number_attributes.clas.abap b/src/checks/y_check_number_attributes.clas.abap index b03b1fc9..7ae17806 100644 --- a/src/checks/y_check_number_attributes.clas.abap +++ b/src/checks/y_check_number_attributes.clas.abap @@ -77,7 +77,7 @@ CLASS Y_CHECK_NUMBER_ATTRIBUTES IMPLEMENTATION. settings-threshold = 12. settings-documentation = |{ c_docs_path-checks }number-attributes.md|. - set_check_message( '&1 attributes, exceeding threshold &2' ). + set_check_message( '&1 attributes reaching threshold of &2!' ). ENDMETHOD. diff --git a/src/checks/y_check_number_events.clas.abap b/src/checks/y_check_number_events.clas.abap index b2e31589..73a11c00 100644 --- a/src/checks/y_check_number_events.clas.abap +++ b/src/checks/y_check_number_events.clas.abap @@ -45,7 +45,7 @@ CLASS Y_CHECK_NUMBER_EVENTS IMPLEMENTATION. settings-pseudo_comment = '"#EC NUMBER_EVENTS' ##NO_TEXT. settings-documentation = |{ c_docs_path-checks }number-events.md|. - set_check_message( 'There are &1 events, exceeding threshold of &2' ). + set_check_message( '&1 events reaching threshold of &2!' ). ENDMETHOD. diff --git a/src/checks/y_check_number_interfaces.clas.abap b/src/checks/y_check_number_interfaces.clas.abap index 03aaf6c9..f925bf8e 100644 --- a/src/checks/y_check_number_interfaces.clas.abap +++ b/src/checks/y_check_number_interfaces.clas.abap @@ -47,7 +47,7 @@ CLASS Y_CHECK_NUMBER_INTERFACES IMPLEMENTATION. settings-threshold = 4. settings-documentation = |{ c_docs_path-checks }number-interfaces.md|. - set_check_message( 'There are &1 interfaces, exceeding threshold of &2' ). + set_check_message( '&1 interfaces reaching threshold of &2!' ). ENDMETHOD. diff --git a/src/checks/y_check_number_methods.clas.abap b/src/checks/y_check_number_methods.clas.abap index 7255754a..8ec1fe6f 100644 --- a/src/checks/y_check_number_methods.clas.abap +++ b/src/checks/y_check_number_methods.clas.abap @@ -49,7 +49,7 @@ CLASS Y_CHECK_NUMBER_METHODS IMPLEMENTATION. settings-threshold = 20. settings-documentation = |{ c_docs_path-checks }number-methods.md|. - set_check_message( '&1 methods, exceeding threshold of &2' ). + set_check_message( '&1 methods reaching threshold of &2!' ). ENDMETHOD. diff --git a/src/checks/y_check_procedure_coverage.clas.abap b/src/checks/y_check_procedure_coverage.clas.abap index 5652f6e6..537f4edd 100644 --- a/src/checks/y_check_procedure_coverage.clas.abap +++ b/src/checks/y_check_procedure_coverage.clas.abap @@ -19,9 +19,10 @@ CLASS y_check_procedure_coverage IMPLEMENTATION. settings-is_threshold_reversed = abap_true. settings-disable_on_prodcode_selection = abap_true. settings-disable_on_testcode_selection = abap_true. + settings-apply_on_test_code = abap_false. settings-documentation = |{ c_docs_path-checks }unit-test-coverages.md|. - set_check_message( 'Procedure Coverage of &1% is under the threshold of &2%.' ). + set_check_message( 'Procedure Coverage of &1% does not reach the threshold of &2%!' ). ENDMETHOD. diff --git a/src/checks/y_check_pseudo_comment_usage.clas.abap b/src/checks/y_check_pseudo_comment_usage.clas.abap index cc06e608..ee38e13d 100644 --- a/src/checks/y_check_pseudo_comment_usage.clas.abap +++ b/src/checks/y_check_pseudo_comment_usage.clas.abap @@ -61,7 +61,7 @@ CLASS Y_CHECK_PSEUDO_COMMENT_USAGE IMPLEMENTATION. settings-apply_on_productive_code = abap_true. settings-prio = c_note. - set_check_message( '&1 pseudo comments' ). + set_check_message( '&1 pseudo comments!' ). ENDMETHOD. diff --git a/src/checks/y_check_statement_coverage.clas.abap b/src/checks/y_check_statement_coverage.clas.abap index ea02ce31..b3a89211 100644 --- a/src/checks/y_check_statement_coverage.clas.abap +++ b/src/checks/y_check_statement_coverage.clas.abap @@ -19,9 +19,10 @@ CLASS y_check_statement_coverage IMPLEMENTATION. settings-is_threshold_reversed = abap_true. settings-disable_on_prodcode_selection = abap_true. settings-disable_on_testcode_selection = abap_true. + settings-apply_on_test_code = abap_false. settings-documentation = |{ c_docs_path-checks }unit-test-coverages.md|. - set_check_message( 'Statement Coverage of &1% is under the threshold of &2%.' ). + set_check_message( 'Statement Coverage of &1% does not reach the threshold of &2%!' ). ENDMETHOD. diff --git a/src/checks/y_check_test_seam_usage.clas.abap b/src/checks/y_check_test_seam_usage.clas.abap index 25038a05..cf341826 100644 --- a/src/checks/y_check_test_seam_usage.clas.abap +++ b/src/checks/y_check_test_seam_usage.clas.abap @@ -25,7 +25,7 @@ CLASS Y_CHECK_TEST_SEAM_USAGE IMPLEMENTATION. settings-threshold = 0. settings-documentation = |{ c_docs_path-checks }test-seam-usage.md|. - set_check_message( '"TEST-SEAM" Statement should no longer be used!' ). + set_check_message( '"TEST-SEAM" statement should no longer be used!' ). ENDMETHOD. From d67c529eaf4f32e625d7ab5498ba557f637d4bca Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Thu, 15 Oct 2020 13:49:22 -0300 Subject: [PATCH 5/8] Update changelog.txt --- changelog.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/changelog.txt b/changelog.txt index 7bbf0597..11f0be1a 100644 --- a/changelog.txt +++ b/changelog.txt @@ -10,6 +10,7 @@ Legend 2020-10-10 v1.05.0 ------------------ +! profile message check runs only once ! check messages - db access in ut when OSQL/CDS framework is being used ! category description From 8c28dafd98e5297fe40b89f4a7415284757ef32c Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Thu, 15 Oct 2020 13:49:32 -0300 Subject: [PATCH 6/8] Update changelog.txt --- changelog.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/changelog.txt b/changelog.txt index 11f0be1a..d576e9cd 100644 --- a/changelog.txt +++ b/changelog.txt @@ -10,7 +10,7 @@ Legend 2020-10-10 v1.05.0 ------------------ -! profile message check runs only once +* profile message check runs only once ! check messages - db access in ut when OSQL/CDS framework is being used ! category description From 9b4b04b22fb4f6679dc88f9731bce6c81c467a30 Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Thu, 15 Oct 2020 18:53:24 +0200 Subject: [PATCH 7/8] changing message text --- src/checks/y_check_profile_message.clas.abap | 33 ++++++++++++++--- src/foundation/y_check_base.clas.abap | 37 +++----------------- 2 files changed, 33 insertions(+), 37 deletions(-) diff --git a/src/checks/y_check_profile_message.clas.abap b/src/checks/y_check_profile_message.clas.abap index 2a899952..a745b76a 100644 --- a/src/checks/y_check_profile_message.clas.abap +++ b/src/checks/y_check_profile_message.clas.abap @@ -10,6 +10,9 @@ CLASS y_check_profile_message DEFINITION METHODS inform REDEFINITION. PRIVATE SECTION. CLASS-DATA ran TYPE abap_bool. + METHODS get_profiles RETURNING VALUE(result) TYPE y_if_profile_manager=>profile_assignments. + METHODS list_profiles IMPORTING profiles TYPE y_if_profile_manager=>profile_assignments + RETURNING value(result) TYPE string. ENDCLASS. CLASS y_check_profile_message IMPLEMENTATION. @@ -28,7 +31,7 @@ CLASS y_check_profile_message IMPLEMENTATION. settings-apply_on_productive_code = abap_true. settings-prio = c_note. - set_check_message( 'code pal for ABAP Profile is being used.' ). + set_check_message( '&1 Profile(s) in use: &2.' ). ENDMETHOD. @@ -43,10 +46,14 @@ CLASS y_check_profile_message IMPLEMENTATION. RETURN. ENDIF. + DATA(profiles) = get_profiles( ). + raise_error( statement_level = 1 statement_index = 1 statement_from = 1 - error_priority = check_configuration-prio ). + error_priority = check_configuration-prio + parameter_01 = |{ lines( profiles ) }| + parameter_02 = |{ list_profiles( profiles ) }| ). ran = abap_true. @@ -59,8 +66,8 @@ CLASS y_check_profile_message IMPLEMENTATION. METHOD inform. - super->inform( p_sub_obj_type = '' - p_sub_obj_name = '' + super->inform( p_sub_obj_type = 'TRAN' + p_sub_obj_name = 'Y_CODE_PAL_PROFILE' p_position = '' p_line = '' p_column = '' @@ -81,4 +88,22 @@ CLASS y_check_profile_message IMPLEMENTATION. ENDMETHOD. + METHOD get_profiles. + TRY. + result = y_profile_manager=>create( )->select_profiles( sy-uname ). + CATCH ycx_entry_not_found. + RETURN. + ENDTRY. + + ENDMETHOD. + + + METHOD list_profiles. + LOOP AT profiles ASSIGNING FIELD-SYMBOL(). + result = COND #( WHEN result IS INITIAL THEN -profile + ELSE |{ result }, { -profile }| ). + ENDLOOP. + ENDMETHOD. + + ENDCLASS. diff --git a/src/foundation/y_check_base.clas.abap b/src/foundation/y_check_base.clas.abap index e144ed31..c329218c 100644 --- a/src/foundation/y_check_base.clas.abap +++ b/src/foundation/y_check_base.clas.abap @@ -212,41 +212,12 @@ CLASS Y_CHECK_BASE IMPLEMENTATION. METHOD do_attributes_exist. - DATA profile_manager TYPE REF TO object. - DATA profiles_ref TYPE REF TO data. - FIELD-SYMBOLS TYPE ANY TABLE. - TRY. - attributes_ok = abap_false. - CREATE DATA profiles_ref TYPE STANDARD TABLE OF (`YTAB_PROFILES`) WITH DEFAULT KEY. - ASSIGN profiles_ref->* TO . - - CREATE OBJECT profile_manager TYPE (`Y_PROFILE_MANAGER`). - - DATA(ptab) = VALUE abap_parmbind_tab( ( name = 'USERNAME' - kind = cl_abap_objectdescr=>exporting - value = REF #( sy-uname ) ) - ( name = 'RESULT' - kind = cl_abap_objectdescr=>returning - value = REF #( ) ) ). - - CALL METHOD profile_manager->('Y_IF_PROFILE_MANAGER~SELECT_PROFILES') - PARAMETER-TABLE ptab. - - IF IS NOT ASSIGNED. - RETURN. - ENDIF. - - IF lines( ) > 0. - result = abap_false. - ELSE. - attributes_ok = abap_true. - result = abap_true. + DATA(profiles) = y_profile_manager=>create( )->select_profiles( sy-uname ). + IF profiles IS INITIAL. + RAISE EXCEPTION TYPE ycx_entry_not_found. ENDIF. - - CATCH cx_sy_create_data_error - cx_sy_create_object_error - ycx_entry_not_found. + CATCH ycx_entry_not_found. attributes_ok = abap_true. result = abap_true. ENDTRY. From 27cd5a61bcb75cc08ebd8d05f887191aca485b7a Mon Sep 17 00:00:00 2001 From: Lucas Borin <5233413+lucasborin@users.noreply.github.com> Date: Thu, 15 Oct 2020 19:18:00 +0200 Subject: [PATCH 8/8] check description --- src/checks/y_check_profile_message.clas.xml | 2 +- src/foundation/y_check_base.clas.abap | 37 ++++++++++++++++++--- 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/checks/y_check_profile_message.clas.xml b/src/checks/y_check_profile_message.clas.xml index cd776883..84e2a986 100644 --- a/src/checks/y_check_profile_message.clas.xml +++ b/src/checks/y_check_profile_message.clas.xml @@ -5,7 +5,7 @@ Y_CHECK_PROFILE_MESSAGE E - code pal for ABAP Profile Message + Profile Feature Notification (code pal for ABAP) 1 X X diff --git a/src/foundation/y_check_base.clas.abap b/src/foundation/y_check_base.clas.abap index c329218c..e144ed31 100644 --- a/src/foundation/y_check_base.clas.abap +++ b/src/foundation/y_check_base.clas.abap @@ -212,12 +212,41 @@ CLASS Y_CHECK_BASE IMPLEMENTATION. METHOD do_attributes_exist. + DATA profile_manager TYPE REF TO object. + DATA profiles_ref TYPE REF TO data. + FIELD-SYMBOLS TYPE ANY TABLE. + TRY. - DATA(profiles) = y_profile_manager=>create( )->select_profiles( sy-uname ). - IF profiles IS INITIAL. - RAISE EXCEPTION TYPE ycx_entry_not_found. + attributes_ok = abap_false. + CREATE DATA profiles_ref TYPE STANDARD TABLE OF (`YTAB_PROFILES`) WITH DEFAULT KEY. + ASSIGN profiles_ref->* TO . + + CREATE OBJECT profile_manager TYPE (`Y_PROFILE_MANAGER`). + + DATA(ptab) = VALUE abap_parmbind_tab( ( name = 'USERNAME' + kind = cl_abap_objectdescr=>exporting + value = REF #( sy-uname ) ) + ( name = 'RESULT' + kind = cl_abap_objectdescr=>returning + value = REF #( ) ) ). + + CALL METHOD profile_manager->('Y_IF_PROFILE_MANAGER~SELECT_PROFILES') + PARAMETER-TABLE ptab. + + IF IS NOT ASSIGNED. + RETURN. + ENDIF. + + IF lines( ) > 0. + result = abap_false. + ELSE. + attributes_ok = abap_true. + result = abap_true. ENDIF. - CATCH ycx_entry_not_found. + + CATCH cx_sy_create_data_error + cx_sy_create_object_error + ycx_entry_not_found. attributes_ok = abap_true. result = abap_true. ENDTRY.