Skip to content

Commit 9655bbe

Browse files
lucasborinLucas Borin
andauthored
Empty Catch: Test Double Framework (#483)
* Fixes #332 * Missing space between string or character literal and parentheses * changelog Co-authored-by: Lucas Borin <5233413+lucasborin@users.noreply.github.co>
1 parent 29e1d4c commit 9655bbe

File tree

3 files changed

+65
-17
lines changed

3 files changed

+65
-17
lines changed

changelog.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Legend
1818

1919
2021-08-XX v.1.16.0
2020
------------------
21+
* Empty Catch: Test Double Framework (#483)
2122
* Y_CHECK_FORM: Screen Events (#454)
2223
* Magic Number: CASE SY-TABIX and CO NUMBERS (#480)
2324
* Magic Number: Leading Zeros (#479)

src/checks/y_check_empty_catches.clas.abap

Lines changed: 29 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,17 @@ CLASS y_check_empty_catches DEFINITION PUBLIC INHERITING FROM y_check_base CREAT
33
METHODS constructor .
44

55
PROTECTED SECTION.
6-
METHODS inspect_tokens REDEFINITION .
6+
METHODS inspect_tokens REDEFINITION.
7+
METHODS get_token_abs REDEFINITION.
78

89
PRIVATE SECTION.
9-
METHODS get_next_token_from_index IMPORTING index TYPE i
10-
RETURNING VALUE(result) TYPE stokesx.
10+
METHODS is_test_double_framework RETURNING VALUE(result) TYPE abap_bool.
1111

1212
ENDCLASS.
1313

1414

1515

16-
CLASS Y_CHECK_EMPTY_CATCHES IMPLEMENTATION.
16+
CLASS y_check_empty_catches IMPLEMENTATION.
1717

1818

1919
METHOD constructor.
@@ -28,21 +28,13 @@ CLASS Y_CHECK_EMPTY_CATCHES IMPLEMENTATION.
2828
ENDMETHOD.
2929

3030

31-
METHOD get_next_token_from_index.
32-
LOOP AT ref_scan->tokens ASSIGNING FIELD-SYMBOL(<token>)
33-
FROM index WHERE type = 'I'.
34-
IF result IS INITIAL.
35-
result = <token>.
36-
EXIT.
37-
ENDIF.
38-
ENDLOOP.
39-
ENDMETHOD.
31+
METHOD inspect_tokens.
32+
CHECK keyword( ) = 'CATCH'.
4033

34+
CHECK get_token_abs( statement-to + 1 ) = if_kaizen_keywords_c=>gc_endtry
35+
OR get_token_abs( statement-to + 1 ) = 'ENDCATCH'.
4136

42-
METHOD inspect_tokens.
43-
CHECK get_next_token_from_index( statement-from )-str = 'CATCH'
44-
AND ( get_next_token_from_index( statement-to + 1 )-str = 'ENDTRY'
45-
OR get_next_token_from_index( statement-to + 1 )-str = 'ENDCATCH' ).
37+
CHECK is_test_double_framework( ) = abap_false.
4638

4739
DATA(check_configuration) = detect_check_configuration( statement ).
4840

@@ -51,4 +43,24 @@ CLASS Y_CHECK_EMPTY_CATCHES IMPLEMENTATION.
5143
statement_from = statement-from
5244
check_configuration = check_configuration ).
5345
ENDMETHOD.
46+
47+
48+
METHOD get_token_abs.
49+
p_result = super->get_token_abs( p_n ).
50+
if token_wa-type = scan_token_type-comment.
51+
p_result = get_token_abs( p_n + 1 ).
52+
endif.
53+
ENDMETHOD.
54+
55+
56+
METHOD is_test_double_framework.
57+
DATA(catch_structure) = ref_scan->structures[ statement_wa-struc ].
58+
DATA(before_try_structure) = ref_scan->structures[ catch_structure-back - 1 ].
59+
DATA(search_from_token) = ref_scan->statements[ before_try_structure-stmnt_from ]-from.
60+
DATA(search_to_token) = ref_scan->statements[ before_try_structure-stmnt_to ]-to.
61+
DATA(range_tokens) = VALUE stokesx_tab( FOR token IN ref_scan->tokens FROM search_from_token TO search_to_token ( token ) ).
62+
result = xsdbool( line_exists( range_tokens[ str = 'CL_ABAP_TESTDOUBLE=>CONFIGURE_CALL(' ] ) ).
63+
ENDMETHOD.
64+
65+
5466
ENDCLASS.

src/checks/y_check_empty_catches.clas.testclasses.abap

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,8 @@ CLASS ltc_class_based IMPLEMENTATION.
7474

7575
ENDCLASS.
7676

77+
78+
7779
CLASS ltc_system_based DEFINITION INHERITING FROM y_unit_test_base FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
7880
PROTECTED SECTION.
7981
METHODS get_cut REDEFINITION.
@@ -144,3 +146,36 @@ CLASS ltc_system_based IMPLEMENTATION.
144146
ENDMETHOD.
145147

146148
ENDCLASS.
149+
150+
151+
152+
CLASS ltc_test_double_framework DEFINITION INHERITING FROM ltc_class_based FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
153+
PROTECTED SECTION.
154+
METHODS get_code_without_issue REDEFINITION.
155+
ENDCLASS.
156+
157+
CLASS ltc_test_double_framework IMPLEMENTATION.
158+
159+
METHOD get_code_without_issue.
160+
result = VALUE #(
161+
( ' REPORT ut_test. ' )
162+
163+
( ' CLASS classname DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT. ' )
164+
( ' PUBLIC SECTION. ' )
165+
( ' METHODS framwork FOR TESTING. ' )
166+
( ' ENDCLASS. ' )
167+
168+
( ' CLASS classname IMPLEMENTATION. ' )
169+
( ' METHOD framwork. ' )
170+
( ' DATA cut TYPE REF TO y_check_empty_catches. ' )
171+
( ' cl_abap_testdouble=>configure_call( cut )->returning( 55 ). ' )
172+
( ' TRY. ' )
173+
( ' cut->get_attributes( ). ' )
174+
( ' CATCH cx_sy_no_handler. ' )
175+
( ' ENDTRY. ' )
176+
( ' ENDMETHOD. ' )
177+
( 'ENDCLASS. ' )
178+
).
179+
ENDMETHOD.
180+
181+
ENDCLASS.

0 commit comments

Comments
 (0)