├── .abapgit.xml
├── .gitignore
├── LICENSE
├── README.md
├── abaplint.json
└── src
├── abapgit
├── package.devc.xml
├── zcl_agci_abapgit_utils.clas.abap
└── zcl_agci_abapgit_utils.clas.xml
├── package.devc.xml
├── recipes
├── package.devc.xml
├── zagci_run_unit_tests.prog.abap
└── zagci_run_unit_tests.prog.xml
└── unit_tests
├── package.devc.xml
├── zagci_style.ssst.xml
├── zagci_unit_test_report.ssfo.xml
├── zcl_agci_unit_test_pdf.clas.abap
├── zcl_agci_unit_test_pdf.clas.xml
├── zcl_agci_unit_tests.clas.abap
└── zcl_agci_unit_tests.clas.xml
/.abapgit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | E
6 | /src/
7 | PREFIX
8 |
9 | - /.gitignore
10 | - /LICENSE
11 | - /README.md
12 | - /package.json
13 | - /.travis.yml
14 | - /.gitlab-ci.yml
15 | - /abaplint.json
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | deps1
2 |
3 | deps2
4 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2019 abapGit
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # ci_tools
2 | Continuous Integration tools for use with abapGit
3 |
4 | + Limit external dependencies
5 | + 740sp08 required
6 | + full installation of objects from https://github.com/larshp/abapGit required
7 |
8 | Work in progress
9 |
10 | ## Recipes
11 | todo
12 |
13 | ## Features
14 |
15 | ### Run unit tests
16 | todo
17 |
18 | ### Run code coverage
19 | todo
20 |
21 | ### REST endpoint
22 | todo
23 |
--------------------------------------------------------------------------------
/abaplint.json:
--------------------------------------------------------------------------------
1 | {
2 | "global": {
3 | "files": "/src/**/*.*",
4 | "skipGeneratedGatewayClasses": true,
5 | "skipGeneratedPersistentClasses": true,
6 | "skipGeneratedFunctionGroups": true
7 | },
8 | "dependencies": [
9 | {
10 | "url": "https://github.com/abaplint/deps",
11 | "folder": "/deps1",
12 | "files": "/src/**/*.*"
13 | },
14 | {
15 | "url": "https://github.com/abapGit/abapGit",
16 | "folder": "/deps2",
17 | "files": "/src/**/*.*"
18 | }
19 | ],
20 | "syntax": {
21 | "version": "v740sp08",
22 | "errorNamespace": "^(Z|Y)",
23 | "globalConstants": ["icon_green_light", "icon_red_light"]
24 | },
25 | "rules": {
26 | "use_class_based_exceptions": true,
27 | "begin_single_include": true,
28 | "call_transaction_authority_check": true,
29 | "check_subrc": true,
30 | "cyclomatic_complexity": true,
31 | "downport": true,
32 | "forbidden_identifier": true,
33 | "forbidden_pseudo_and_pragma": true,
34 | "forbidden_void_type": true,
35 | "function_module_recommendations": true,
36 | "identical_conditions": false,
37 | "identical_contents": true,
38 | "intf_referencing_clas": true,
39 | "line_break_multiple_parameters": true,
40 | "line_break_style": false,
41 | "method_implemented_twice": true,
42 | "method_overwrites_builtin": true,
43 | "names_no_dash": true,
44 | "omit_parameter_name": true,
45 | "omit_receiving": true,
46 | "parser_702_chaining": true,
47 | "parser_missing_space": true,
48 | "prefer_inline": true,
49 | "prefer_is_not": false,
50 | "prefer_xsdbool": false,
51 | "reduce_string_templates": true,
52 | "sy_modification": true,
53 | "uncaught_exception": true,
54 | "unknown_types": true,
55 | "unused_methods": true,
56 | "unused_types": true,
57 | "use_bool_expression": true,
58 | "use_line_exists": true,
59 | "fully_type_constants": true,
60 | "keep_single_parameter_on_one_line": true,
61 | "keyword_case": true,
62 | "newline_between_methods": false,
63 | "prefer_returning_to_exporting": true,
64 | "prefix_is_current_class": true,
65 | "selection_screen_naming": true,
66 | "sicf_consistency": true,
67 | "sql_escape_host_variables": true,
68 | "try_without_catch": true,
69 | "unused_variables": false,
70 | "xml_consistency": true,
71 | "allowed_object_naming": true,
72 | "check_comments": false,
73 | "abapdoc": false,
74 | "chain_mainly_declarations": true,
75 | "check_abstract": true,
76 | "check_ddic": true,
77 | "check_include": true,
78 | "check_text_elements": true,
79 | "types_naming": true,
80 | "7bit_ascii": true,
81 | "allowed_object_types": true,
82 | "ambiguous_statement": true,
83 | "avoid_use": true,
84 | "begin_end_names": true,
85 | "check_transformation_exists": true,
86 | "check_syntax": true,
87 | "class_attribute_names": true,
88 | "cloud_types": true,
89 | "colon_missing_space": true,
90 | "commented_code": true,
91 | "constructor_visibility_public": true,
92 | "contains_tab": true,
93 | "definitions_top": true,
94 | "description_empty": true,
95 | "double_space": true,
96 | "empty_line_in_statement": true,
97 | "empty_statement": true,
98 | "empty_structure": true,
99 | "exit_or_check": true,
100 | "exporting": true,
101 | "form_tables_obsolete": true,
102 | "functional_writing": true,
103 | "global_class": true,
104 | "identical_form_names": true,
105 | "if_in_if": true,
106 | "implement_methods": true,
107 | "in_statement_indentation": true,
108 | "indentation": true,
109 | "inline_data_old_versions": true,
110 | "line_length": true,
111 | "line_only_punc": true,
112 | "local_class_naming": true,
113 | "local_variable_names": true,
114 | "main_file_contents": true,
115 | "max_one_statement": true,
116 | "message_exists": true,
117 | "method_length": true,
118 | "method_parameter_names": true,
119 | "mix_returning": true,
120 | "msag_consistency": true,
121 | "nesting": true,
122 | "no_public_attributes": true,
123 | "object_naming": true,
124 | "obsolete_statement": true,
125 | "parser_error": true,
126 | "preferred_compare_operator": true,
127 | "release_idoc": true,
128 | "remove_descriptions": true,
129 | "rfc_error_handling": true,
130 | "sequential_blank": true,
131 | "short_case": true,
132 | "space_before_colon": true,
133 | "space_before_dot": true,
134 | "start_at_tab": true,
135 | "superclass_final": true,
136 | "tabl_enhancement_category": true,
137 | "type_form_parameters": true,
138 | "unreachable_code": true,
139 | "use_new": true,
140 | "when_others_last": true,
141 | "whitespace_end": true
142 | }
143 | }
144 |
--------------------------------------------------------------------------------
/src/abapgit/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | abapGit
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/abapgit/zcl_agci_abapgit_utils.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_agci_abapgit_utils DEFINITION
2 | PUBLIC
3 | FINAL
4 | CREATE PUBLIC .
5 |
6 | PUBLIC SECTION.
7 |
8 | METHODS find_repo_by_package
9 | IMPORTING
10 | !iv_package TYPE devclass
11 | RETURNING
12 | VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_online
13 | RAISING
14 | zcx_abapgit_exception .
15 | METHODS find_repo_by_url
16 | IMPORTING
17 | !iv_url1 TYPE string
18 | !iv_url2 TYPE string OPTIONAL
19 | RETURNING
20 | VALUE(ro_repo) TYPE REF TO zcl_abapgit_repo_online
21 | RAISING
22 | zcx_abapgit_exception .
23 | METHODS list_branches
24 | IMPORTING
25 | !io_repo TYPE REF TO zcl_abapgit_repo_online
26 | RETURNING
27 | VALUE(rt_branches) TYPE zif_abapgit_git_definitions=>ty_git_branch_list_tt
28 | RAISING
29 | zcx_abapgit_exception .
30 | METHODS pull_branch
31 | IMPORTING
32 | !io_repo TYPE REF TO zcl_abapgit_repo_online
33 | !iv_name TYPE string
34 | RAISING
35 | zcx_abapgit_exception .
36 | METHODS pull_by_sha1
37 | IMPORTING
38 | !io_repo TYPE REF TO zcl_abapgit_repo_online
39 | !iv_sha1 TYPE string
40 | RAISING
41 | zcx_abapgit_exception .
42 | PROTECTED SECTION.
43 |
44 | METHODS overwrite_all
45 | IMPORTING
46 | !is_checks TYPE zif_abapgit_definitions=>ty_deserialize_checks
47 | RETURNING
48 | VALUE(rs_checks) TYPE zif_abapgit_definitions=>ty_deserialize_checks .
49 | PRIVATE SECTION.
50 | ENDCLASS.
51 |
52 |
53 |
54 | CLASS zcl_agci_abapgit_utils IMPLEMENTATION.
55 |
56 |
57 | METHOD find_repo_by_package.
58 |
59 | DATA(lt_list) = zcl_abapgit_repo_srv=>get_instance( )->list( ).
60 |
61 | LOOP AT lt_list INTO DATA(lo_repo).
62 | IF lo_repo->is_offline( ) = abap_false.
63 | DATA(lo_online) = CAST zcl_abapgit_repo_online( lo_repo ).
64 | IF lo_online->get_package( ) = iv_package.
65 | ro_repo = lo_online.
66 | RETURN.
67 | ENDIF.
68 | ENDIF.
69 | ENDLOOP.
70 |
71 | ENDMETHOD.
72 |
73 |
74 | METHOD find_repo_by_url.
75 |
76 | DATA(lt_list) = zcl_abapgit_repo_srv=>get_instance( )->list( ).
77 |
78 | LOOP AT lt_list INTO DATA(lo_repo).
79 | IF lo_repo->is_offline( ) = abap_false.
80 | DATA(lo_online) = CAST zcl_abapgit_repo_online( lo_repo ).
81 | IF lo_online->get_url( ) = iv_url1 OR lo_online->get_url( ) = iv_url2.
82 | ro_repo = lo_online.
83 | RETURN.
84 | ENDIF.
85 | ENDIF.
86 | ENDLOOP.
87 |
88 | ENDMETHOD.
89 |
90 |
91 | METHOD list_branches.
92 |
93 | DATA(lo_branch_list) = zcl_abapgit_git_transport=>branches( io_repo->get_url( ) ).
94 |
95 | rt_branches = lo_branch_list->get_all( ).
96 |
97 | ENDMETHOD.
98 |
99 |
100 | METHOD overwrite_all.
101 |
102 | rs_checks = is_checks.
103 |
104 | LOOP AT rs_checks-overwrite ASSIGNING FIELD-SYMBOL().
105 | -decision = 'Y'.
106 | ENDLOOP.
107 |
108 | LOOP AT rs_checks-warning_package ASSIGNING FIELD-SYMBOL().
109 | -decision = 'Y'.
110 | ENDLOOP.
111 |
112 | IF rs_checks-requirements-met = 'N'.
113 | rs_checks-requirements-decision = 'Y'.
114 | ENDIF.
115 |
116 | ASSERT rs_checks-transport-required = abap_false.
117 | * todo, set rs_checks-transport-transport to transport number if required.
118 |
119 | ENDMETHOD.
120 |
121 |
122 | METHOD pull_branch.
123 |
124 | io_repo->select_branch( iv_name ).
125 |
126 | DATA(ls_checks) = overwrite_all( io_repo->deserialize_checks( ) ).
127 |
128 | DATA(lo_log) = NEW zcl_abapgit_log( ).
129 |
130 | io_repo->deserialize(
131 | is_checks = ls_checks
132 | ii_log = lo_log ).
133 |
134 | DATA(lt_status) = zcl_abapgit_repo_status=>calculate( io_repo ).
135 |
136 | * todo, check log and status
137 |
138 | ENDMETHOD.
139 |
140 |
141 | METHOD pull_by_sha1.
142 |
143 | DATA(lt_branches) = list_branches( io_repo ).
144 |
145 | READ TABLE lt_branches INTO DATA(ls_branch) WITH KEY sha1 = iv_sha1.
146 | IF sy-subrc = 0.
147 | pull_branch( io_repo = io_repo
148 | iv_name = ls_branch-name ).
149 | ELSE.
150 | zcx_abapgit_exception=>raise( |Branch for SHA1 not found| ).
151 | ENDIF.
152 |
153 | ENDMETHOD.
154 | ENDCLASS.
155 |
--------------------------------------------------------------------------------
/src/abapgit/zcl_agci_abapgit_utils.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AGCI_ABAPGIT_UTILS
7 | E
8 | abapGit - Utils
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | abapGit - CI Tools
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/recipes/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Recipes / Templates
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/recipes/zagci_run_unit_tests.prog.abap:
--------------------------------------------------------------------------------
1 | REPORT zagci_run_unit_tests.
2 |
3 | PARAMETERS: p_devc TYPE tdevc-devclass OBLIGATORY,
4 | p_unit RADIOBUTTON GROUP grp1 DEFAULT 'X',
5 | p_cov RADIOBUTTON GROUP grp1,
6 | p_pdf RADIOBUTTON GROUP grp1.
7 |
8 | START-OF-SELECTION.
9 | PERFORM run.
10 |
11 | FORM run RAISING zcx_abapgit_exception.
12 |
13 | CASE abap_true.
14 | WHEN p_unit.
15 | PERFORM unit.
16 | WHEN p_cov.
17 | PERFORM coverage.
18 | WHEN p_pdf.
19 | PERFORM pdf.
20 | WHEN OTHERS.
21 | ASSERT 0 = 1.
22 | ENDCASE.
23 |
24 | ENDFORM.
25 |
26 | FORM unit RAISING zcx_abapgit_exception.
27 |
28 | DATA(lt_results) = NEW zcl_agci_unit_tests( )->run( p_devc ).
29 |
30 | LOOP AT lt_results INTO DATA(ls_result).
31 | WRITE: / ls_result-tadir-obj_name, ls_result-tadir-devclass, ls_result-has_skipped.
32 |
33 | LOOP AT ls_result-tests INTO DATA(ls_test).
34 | IF ls_test-kind IS INITIAL.
35 | WRITE: / icon_green_light, ls_test-class_name, ls_test-method_name, ls_test-kind.
36 | ELSE.
37 | WRITE: / icon_red_light, ls_test-class_name, ls_test-method_name, ls_test-kind.
38 | ENDIF.
39 | WRITE: /.
40 | ENDLOOP.
41 |
42 | WRITE: /.
43 | ENDLOOP.
44 |
45 | ENDFORM.
46 |
47 | FORM coverage RAISING zcx_abapgit_exception.
48 |
49 | DATA(ls_cov_result) = NEW zcl_agci_unit_tests( )->run_with_coverage( p_devc ).
50 | DATA(lt_results) = ls_cov_result-results.
51 |
52 | WRITE: / `Branch Executed : `, ls_cov_result-coverage-branch_percentage, `%`.
53 | WRITE: / `Processing block Executed :`, ls_cov_result-coverage-block_percentage, `%`.
54 | WRITE: / `Statement Executed : `, ls_cov_result-coverage-statement_percentage, `%`.
55 |
56 | ENDFORM.
57 |
58 | FORM pdf RAISING zcx_abapgit_exception.
59 |
60 | NEW zcl_agci_unit_test_pdf( )->output( p_devc ).
61 |
62 | ENDFORM.
63 |
--------------------------------------------------------------------------------
/src/recipes/zagci_run_unit_tests.prog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAGCI_RUN_UNIT_TESTS
7 | 1
8 | E
9 | X
10 | X
11 |
12 |
13 | -
14 | R
15 | abapGit CI - Run unit tests for package
16 | 39
17 |
18 | -
19 | S
20 | P_COV
21 | Test incl. coverage
22 | 27
23 |
24 | -
25 | S
26 | P_DEVC
27 | .
28 | 15
29 | D
30 |
31 | -
32 | S
33 | P_PDF
34 | PDF
35 | 11
36 |
37 | -
38 | S
39 | P_UNIT
40 | Test unit tests
41 | 23
42 |
43 |
44 |
45 |
46 |
47 |
--------------------------------------------------------------------------------
/src/unit_tests/package.devc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | Unit tests
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/src/unit_tests/zagci_style.ssst.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZAGCI_STYLE
7 | E
8 | E
9 | Style ZAGCI_STYLE
10 | Style ZAGCI_STYLE
11 | L
12 | 10.0
13 | 6.0
14 | 1.0
15 | CM
16 | A
17 | HELVE
18 | 120
19 |
20 |
21 |
22 | A
23 | ZAGCI_STYLE
24 | L
25 | LEFT
26 | 1.0
27 | LN
28 | CM
29 | CM
30 | CM
31 | CM
32 | CM
33 | *
34 | *
35 | *
36 | E
37 | Left aligned
38 |
39 |
40 |
41 |
42 | A
43 | ZAGCI_STYLE
44 | FF
45 | *
46 | *
47 | *
48 | *
49 | COURIER
50 | *
51 | *
52 | *
53 | E
54 | Fixed Font
55 |
56 |
57 | A
58 | ZAGCI_STYLE
59 | H
60 | *
61 | *
62 | *
63 | *
64 | HELVE
65 | 240
66 | X
67 | *
68 | *
69 | E
70 | Heading
71 |
72 |
73 | A
74 | ZAGCI_STYLE
75 | U
76 | *
77 | *
78 | *
79 | *
80 | *
81 | *
82 | X
83 | E
84 | Underline
85 |
86 |
87 |
88 |
89 |
90 |
--------------------------------------------------------------------------------
/src/unit_tests/zagci_unit_test_report.ssfo.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | ZAGCI_UNIT_TEST_REPORT
6 | abapGit CI - Unit Test Report
7 | E
8 | *
9 |
10 | 00001
11 | DUMMY
12 | 2020-03-27
13 | 11:05:18
14 | DUMMY
15 |
16 |
17 |
18 |
19 | -
20 | E
21 | DOCUMENT_OUTPUT_INFO
22 | TYPE
23 | SSFCRESPD
24 | X
25 | X
26 |
27 | -
28 | E
29 | JOB_OUTPUT_INFO
30 | TYPE
31 | SSFCRESCL
32 | X
33 | X
34 |
35 | -
36 | E
37 | JOB_OUTPUT_OPTIONS
38 | TYPE
39 | SSFCRESOP
40 | X
41 | X
42 |
43 | -
44 | I
45 | ARCHIVE_INDEX
46 | TYPE
47 | TOA_DARA
48 | X
49 | X
50 | X
51 |
52 | -
53 | I
54 | ARCHIVE_INDEX_TAB
55 | TYPE
56 | TSFDARA
57 | X
58 | X
59 | X
60 |
61 | -
62 | I
63 | ARCHIVE_PARAMETERS
64 | TYPE
65 | ARC_PARAMS
66 | X
67 | X
68 | X
69 |
70 | -
71 | I
72 | CONTROL_PARAMETERS
73 | TYPE
74 | SSFCTRLOP
75 | X
76 | X
77 | X
78 |
79 | -
80 | I
81 | MAIL_APPL_OBJ
82 | TYPE
83 | SWOTOBJID
84 | X
85 | X
86 | X
87 |
88 | -
89 | I
90 | MAIL_RECIPIENT
91 | TYPE
92 | SWOTOBJID
93 | X
94 | X
95 | X
96 |
97 | -
98 | I
99 | MAIL_SENDER
100 | TYPE
101 | SWOTOBJID
102 | X
103 | X
104 | X
105 |
106 | -
107 | I
108 | OUTPUT_OPTIONS
109 | TYPE
110 | SSFCOMPOP
111 | X
112 | X
113 | X
114 |
115 | -
116 | I
117 | USER_SETTINGS
118 | TYPE
119 | TDBOOL
120 | X
121 | X
122 | 'X'
123 | X
124 |
125 | -
126 | I
127 | IS_COVERAGE
128 | TYPE
129 | ZCL_AGCI_UNIT_TESTS=>TY_COV_RESULT
130 |
131 | -
132 | I
133 | IS_INFO
134 | TYPE
135 | ZCL_AGCI_UNIT_TEST_PDF=>TY_INFO
136 |
137 | -
138 | X
139 | FORMATTING_ERROR
140 | X
141 |
142 | -
143 | X
144 | INTERNAL_ERROR
145 | X
146 |
147 | -
148 | X
149 | SEND_ERROR
150 | X
151 |
152 | -
153 | X
154 | USER_CANCELED
155 | X
156 |
157 |
158 |
159 | -
160 | GS_RESULT
161 | TYPE
162 | ZCL_AGCI_UNIT_TESTS=>TY_RESULT
163 |
164 | -
165 | GS_TEST
166 | TYPE
167 | ZCL_AGCI_UNIT_TESTS=>TY_TEST
168 |
169 |
170 |
171 | -
172 | GS_RESULT
173 | I
174 |
175 | -
176 | GS_TEST
177 | I
178 |
179 |
180 |
181 | - CLEAR gs_result.
182 | - CLEAR gs_test.
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 | DINA4
209 | 10.00
210 | 6.00
211 | ZAGCI_STYLE
212 |
213 |
214 | RP
215 |
216 |
217 |
218 | PA
219 |
220 |
221 |
222 | %PAGE1
223 |
224 | New Page
225 |
226 | %PAGE1
227 |
228 | I
229 | A
230 | P
231 |
232 | -
233 | E
234 | ZAGCI_UNIT_TEST_REPORT
235 | PA
236 | %PAGE1
237 | New Page
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 | WI
246 |
247 |
248 |
249 | MAIN
250 |
251 | Main Window
252 | M
253 |
254 | -
255 | E
256 | ZAGCI_UNIT_TEST_REPORT
257 | WI
258 | MAIN
259 | Main Window
260 |
261 |
262 |
263 |
264 | RC
265 |
266 |
267 |
268 | TI
269 |
270 |
271 |
272 | %TEXT1
273 |
274 | Headings
275 | P
276 |
277 | -
278 | *
279 | <H>Unit Test Report</>
280 |
281 | -
282 | *
283 |
284 | -
285 | *
286 | System:,,<FF>&IS_INFO-SYSID&</>
287 |
288 | -
289 | *
290 | Package:,,<FF>&IS_INFO-DEVCLASS&</>
291 |
292 | -
293 | *
294 | URL:,,,,&IS_INFO-URL&
295 |
296 | -
297 | *
298 | Branch:,,&IS_INFO-BRANCH&
299 |
300 | -
301 | *
302 | Time:,,&IS_INFO-TIME&
303 |
304 | -
305 | *
306 |
307 | -
308 | *
309 | Branch:,,,,&IS_COVERAGE-COVERAGE-BRANCH_PERCENTAGE&%
310 |
311 | -
312 | *
313 | Block:,,,,&IS_COVERAGE-COVERAGE-BLOCK_PERCENTAGE&%
314 |
315 | -
316 | *
317 | Statement:,,&IS_COVERAGE-COVERAGE-STATEMENT_PERCENTAGE&%
318 |
319 | -
320 | *
321 |
322 |
323 | ZAGCI_STYLE
324 |
325 | F
326 | 0
327 | 0
328 |
329 |
330 | -
331 | E
332 | ZAGCI_UNIT_TEST_REPORT
333 | TI
334 | %TEXT1
335 | Headings
336 |
337 |
338 |
339 | -
340 | E
341 | F
342 | ZAGCI_UNIT_TEST_REPORT
343 | %TEXT1
344 | 000001
345 | *
346 | <H>Unit Test Report</>
347 |
348 | -
349 | E
350 | F
351 | ZAGCI_UNIT_TEST_REPORT
352 | %TEXT1
353 | 000002
354 | *
355 |
356 | -
357 | E
358 | F
359 | ZAGCI_UNIT_TEST_REPORT
360 | %TEXT1
361 | 000003
362 | *
363 | System:,,<FF>&IS_INFO-SYSID&</>
364 |
365 | -
366 | E
367 | F
368 | ZAGCI_UNIT_TEST_REPORT
369 | %TEXT1
370 | 000004
371 | *
372 | Package:,,<FF>&IS_INFO-DEVCLASS&</>
373 |
374 | -
375 | E
376 | F
377 | ZAGCI_UNIT_TEST_REPORT
378 | %TEXT1
379 | 000005
380 | *
381 | URL:,,,,&IS_INFO-URL&
382 |
383 | -
384 | E
385 | F
386 | ZAGCI_UNIT_TEST_REPORT
387 | %TEXT1
388 | 000006
389 | *
390 | Branch:,,&IS_INFO-BRANCH&
391 |
392 | -
393 | E
394 | F
395 | ZAGCI_UNIT_TEST_REPORT
396 | %TEXT1
397 | 000007
398 | *
399 | Time:,,&IS_INFO-TIME&
400 |
401 | -
402 | E
403 | F
404 | ZAGCI_UNIT_TEST_REPORT
405 | %TEXT1
406 | 000008
407 | *
408 |
409 | -
410 | E
411 | F
412 | ZAGCI_UNIT_TEST_REPORT
413 | %TEXT1
414 | 000009
415 | *
416 | Branch:,,,,&IS_COVERAGE-COVERAGE-BRANCH_PERCENTAGE&%
417 |
418 | -
419 | E
420 | F
421 | ZAGCI_UNIT_TEST_REPORT
422 | %TEXT1
423 | 000010
424 | *
425 | Block:,,,,&IS_COVERAGE-COVERAGE-BLOCK_PERCENTAGE&%
426 |
427 | -
428 | E
429 | F
430 | ZAGCI_UNIT_TEST_REPORT
431 | %TEXT1
432 | 000011
433 | *
434 | Statement:,,&IS_COVERAGE-COVERAGE-STATEMENT_PERCENTAGE&%
435 |
436 | -
437 | E
438 | F
439 | ZAGCI_UNIT_TEST_REPORT
440 | %TEXT1
441 | 000012
442 | *
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 | SE
453 |
454 |
455 |
456 | %LOOP1
457 |
458 | Loop: Objects
459 | L
460 | L
461 | IS_COVERAGE-RESULTS
462 | I
463 | GS_RESULT
464 | CM
465 |
466 | 0000
467 | 0.00
468 | PT
469 |
470 | CM
471 | CM
472 | CM
473 | CM
474 | CM
475 |
476 | -
477 | E
478 | ZAGCI_UNIT_TEST_REPORT
479 | SE
480 | %LOOP1
481 | Loop: Objects
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 | TI
490 |
491 |
492 |
493 | %TEXT2
494 |
495 | Object Information
496 | X
497 | P
498 |
499 | -
500 | *
501 | <U>&GS_RESULT-TADIR-OBJ_NAME& &GS_RESULT-TADIR-DEVCLASS&</>
502 |
503 |
504 | ZAGCI_STYLE
505 |
506 | F
507 | 0
508 | 0
509 |
510 |
511 | -
512 | E
513 | ZAGCI_UNIT_TEST_REPORT
514 | TI
515 | %TEXT2
516 | Object Information
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 | SE
527 |
528 |
529 |
530 | %LOOP2
531 |
532 | Loop: Tests
533 | L
534 | L
535 | GS_RESULT-TESTS
536 | I
537 | GS_TEST
538 | CM
539 |
540 | 0000
541 | 0.00
542 | PT
543 |
544 | CM
545 | CM
546 | CM
547 | CM
548 | CM
549 |
550 | -
551 | E
552 | ZAGCI_UNIT_TEST_REPORT
553 | SE
554 | %LOOP2
555 | Loop: Tests
556 |
557 |
558 |
559 |
560 |
561 |
562 |
563 | CD
564 |
565 |
566 |
567 | %CONDITION2
568 |
569 | Check Success
570 |
571 | -
572 | EQ
573 | GS_TEST-KIND
574 | ''
575 | @20\QSelect: Equal to@
576 |
577 |
578 |
579 | -
580 | E
581 | ZAGCI_UNIT_TEST_REPORT
582 | CD
583 | %CONDITION2
584 | Check Success
585 |
586 |
587 |
588 |
589 |
590 |
591 |
592 | EV
593 |
594 |
595 |
596 | %EVENT1
597 |
598 | TRUE
599 | +
600 |
601 | -
602 | E
603 | ZAGCI_UNIT_TEST_REPORT
604 | EV
605 | %EVENT1
606 | TRUE
607 |
608 |
609 |
610 |
611 |
612 |
613 |
614 | TI
615 |
616 |
617 |
618 | %TEXT3
619 |
620 | Test Information, Green
621 | X
622 | P
623 |
624 | -
625 | *
626 | &GS_TEST-CLASS_NAME&,,&GS_TEST-METHOD_NAME&
627 |
628 |
629 | ZAGCI_STYLE
630 |
631 | F
632 | 0
633 | 0
634 |
635 |
636 | -
637 | E
638 | ZAGCI_UNIT_TEST_REPORT
639 | TI
640 | %TEXT3
641 | Test Information, Green
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 | %OUTATTRIB2
650 |
651 | PT
652 | CM
653 | CM
654 | 100
655 |
656 | 000
657 | 255
658 | 000
659 | 000
660 |
661 | CM
662 | CM
663 | CM
664 | CM
665 |
666 |
667 | 0.00
668 | PT
669 | 0.00
670 | CM
671 |
672 | 000
673 | 000
674 | 000
675 | 000
676 |
677 |
678 |
679 | 0.00
680 | PT
681 | 0.00
682 | CM
683 |
684 | 000
685 | 000
686 | 000
687 | 000
688 |
689 |
690 |
691 | 0.00
692 | PT
693 | 0.00
694 | CM
695 |
696 | 000
697 | 000
698 | 000
699 | 000
700 |
701 |
702 |
703 | 0.00
704 | PT
705 | 0.00
706 | CM
707 |
708 | 000
709 | 000
710 | 000
711 | 000
712 |
713 |
714 |
715 |
716 | -
717 | E
718 | ZAGCI_UNIT_TEST_REPORT
719 | OA
720 | %OUTATTRIB2
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 | EV
734 |
735 |
736 |
737 | %EVENT2
738 |
739 | FALSE
740 | -
741 |
742 | -
743 | E
744 | ZAGCI_UNIT_TEST_REPORT
745 | EV
746 | %EVENT2
747 | FALSE
748 |
749 |
750 |
751 |
752 |
753 |
754 |
755 | TI
756 |
757 |
758 |
759 | %TEXT4
760 |
761 | Test Information, Red
762 | X
763 | P
764 |
765 | -
766 | *
767 | &GS_TEST-CLASS_NAME&,,&GS_TEST-METHOD_NAME&
768 |
769 |
770 | ZAGCI_STYLE
771 |
772 | F
773 | 0
774 | 0
775 |
776 |
777 | -
778 | E
779 | ZAGCI_UNIT_TEST_REPORT
780 | TI
781 | %TEXT4
782 | Test Information, Red
783 |
784 |
785 |
786 |
787 |
788 |
789 |
790 | %OUTATTRIB3
791 |
792 | PT
793 | CM
794 | CM
795 | 100
796 |
797 | 255
798 | 000
799 | 000
800 | 000
801 |
802 | CM
803 | CM
804 | CM
805 | CM
806 |
807 |
808 | 0.00
809 | PT
810 | 0.00
811 | CM
812 |
813 | 000
814 | 000
815 | 000
816 | 000
817 |
818 |
819 |
820 | 0.00
821 | PT
822 | 0.00
823 | CM
824 |
825 | 000
826 | 000
827 | 000
828 | 000
829 |
830 |
831 |
832 | 0.00
833 | PT
834 | 0.00
835 | CM
836 |
837 | 000
838 | 000
839 | 000
840 | 000
841 |
842 |
843 |
844 | 0.00
845 | PT
846 | 0.00
847 | CM
848 |
849 | 000
850 | 000
851 | 000
852 | 000
853 |
854 |
855 |
856 |
857 | -
858 | E
859 | ZAGCI_UNIT_TEST_REPORT
860 | OA
861 | %OUTATTRIB3
862 |
863 |
864 |
865 |
866 |
867 |
868 |
869 |
870 |
871 |
872 |
873 |
874 |
875 |
876 |
877 |
878 |
879 |
880 |
881 |
882 |
883 |
884 |
885 |
886 |
887 |
888 |
889 | %OUTATTRIB1
890 |
891 | New Display Option
892 | PT
893 | CM
894 | CM
895 | 2.50
896 | CM
897 | 16.00
898 | CM
899 | 2.50
900 | CM
901 | 25.20
902 | CM
903 |
904 |
905 | 0.00
906 | PT
907 | 0.00
908 | CM
909 |
910 | 000
911 | 000
912 | 000
913 | 000
914 |
915 |
916 |
917 | 0.00
918 | PT
919 | 0.00
920 | CM
921 |
922 | 000
923 | 000
924 | 000
925 | 000
926 |
927 |
928 |
929 | 0.00
930 | PT
931 | 0.00
932 | CM
933 |
934 | 000
935 | 000
936 | 000
937 | 000
938 |
939 |
940 |
941 | 0.00
942 | PT
943 | 0.00
944 | CM
945 |
946 | 000
947 | 000
948 | 000
949 | 000
950 |
951 |
952 |
953 |
954 | -
955 | E
956 | ZAGCI_UNIT_TEST_REPORT
957 | OA
958 | %OUTATTRIB1
959 | New Display Option
960 |
961 |
962 |
963 |
964 |
965 |
966 |
967 |
968 |
969 |
970 |
971 |
972 |
973 |
974 |
975 |
976 |
977 |
--------------------------------------------------------------------------------
/src/unit_tests/zcl_agci_unit_test_pdf.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_agci_unit_test_pdf DEFINITION
2 | PUBLIC
3 | CREATE PUBLIC .
4 |
5 | PUBLIC SECTION.
6 |
7 | TYPES: BEGIN OF ty_info,
8 | sysid LIKE sy-sysid,
9 | devclass TYPE devclass,
10 | url TYPE string,
11 | branch TYPE string,
12 | time TYPE string,
13 | END OF ty_info.
14 |
15 | METHODS output
16 | IMPORTING
17 | !iv_devclass TYPE devclass
18 | RAISING
19 | zcx_abapgit_exception .
20 | PROTECTED SECTION.
21 |
22 | METHODS call_smartform
23 | IMPORTING
24 | !is_coverage TYPE zcl_agci_unit_tests=>ty_cov_result
25 | !is_info TYPE ty_info .
26 | PRIVATE SECTION.
27 | ENDCLASS.
28 |
29 |
30 |
31 | CLASS ZCL_AGCI_UNIT_TEST_PDF IMPLEMENTATION.
32 |
33 |
34 | METHOD call_smartform.
35 |
36 | DATA: lv_fm TYPE rs38l_fnam.
37 |
38 | CALL FUNCTION 'SSF_FUNCTION_MODULE_NAME'
39 | EXPORTING
40 | formname = 'ZAGCI_UNIT_TEST_REPORT'
41 | IMPORTING
42 | fm_name = lv_fm.
43 |
44 | CALL FUNCTION lv_fm
45 | EXPORTING
46 | * ARCHIVE_INDEX =
47 | * ARCHIVE_INDEX_TAB =
48 | * ARCHIVE_PARAMETERS =
49 | * CONTROL_PARAMETERS =
50 | * MAIL_APPL_OBJ =
51 | * MAIL_RECIPIENT =
52 | * MAIL_SENDER =
53 | * OUTPUT_OPTIONS =
54 | * USER_SETTINGS = 'X'
55 | is_coverage = is_coverage
56 | is_info = is_info
57 | * IMPORTING
58 | * DOCUMENT_OUTPUT_INFO =
59 | * JOB_OUTPUT_INFO =
60 | * JOB_OUTPUT_OPTIONS =
61 | EXCEPTIONS
62 | formatting_error = 1
63 | internal_error = 2
64 | send_error = 3
65 | user_canceled = 4
66 | OTHERS = 5.
67 | ASSERT sy-subrc <> 0 AND sy-subrc <> 0.
68 |
69 | ENDMETHOD.
70 |
71 |
72 | METHOD output.
73 |
74 | DATA(ls_coverage) = NEW zcl_agci_unit_tests( )->run_with_coverage( iv_devclass ).
75 |
76 | DATA(ls_info) = VALUE ty_info(
77 | sysid = sy-sysid
78 | devclass = iv_devclass
79 | time = |{ sy-datlo DATE = ENVIRONMENT } { sy-timlo TIME = ENVIRONMENT } { sy-zonlo }| ).
80 |
81 | DATA(lo_repo) = NEW zcl_agci_abapgit_utils( )->find_repo_by_package( iv_devclass ).
82 | IF lo_repo IS BOUND.
83 | ls_info-url = lo_repo->get_url( ).
84 | ls_info-branch = lo_repo->get_selected_branch( ).
85 | ENDIF.
86 |
87 | call_smartform(
88 | is_coverage = ls_coverage
89 | is_info = ls_info ).
90 |
91 | ENDMETHOD.
92 | ENDCLASS.
93 |
--------------------------------------------------------------------------------
/src/unit_tests/zcl_agci_unit_test_pdf.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AGCI_UNIT_TEST_PDF
7 | E
8 | abapGit CI - Output PDF with results
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/src/unit_tests/zcl_agci_unit_tests.clas.abap:
--------------------------------------------------------------------------------
1 | CLASS zcl_agci_unit_tests DEFINITION
2 | PUBLIC
3 | CREATE PUBLIC .
4 |
5 | PUBLIC SECTION.
6 |
7 | TYPES:
8 | BEGIN OF ty_test,
9 | program_name TYPE objname,
10 | class_name TYPE objname,
11 | method_name TYPE objname,
12 | kind TYPE c LENGTH 1,
13 | END OF ty_test .
14 | TYPES:
15 | ty_tests TYPE STANDARD TABLE OF ty_test WITH EMPTY KEY .
16 | TYPES:
17 | BEGIN OF ty_coverage_st,
18 | object TYPE sobj_name,
19 | executed TYPE i,
20 | not_executed TYPE i,
21 | percentage TYPE decfloat16,
22 | type TYPE string,
23 | END OF ty_coverage_st .
24 | TYPES:
25 | ty_coverage_tt TYPE STANDARD TABLE OF ty_coverage_st WITH EMPTY KEY .
26 | TYPES:
27 | BEGIN OF ty_coverage_pct_st,
28 | branch_percentage TYPE p LENGTH 5 DECIMALS 2,
29 | block_percentage TYPE p LENGTH 5 DECIMALS 2,
30 | statement_percentage TYPE p LENGTH 5 DECIMALS 2,
31 | END OF ty_coverage_pct_st.
32 |
33 | TYPES:
34 | BEGIN OF ty_result,
35 | tadir TYPE tadir,
36 | has_skipped TYPE abap_bool,
37 | tests TYPE ty_tests,
38 | coverages TYPE ty_coverage_tt,
39 | END OF ty_result .
40 | TYPES:
41 | ty_results TYPE STANDARD TABLE OF ty_result WITH EMPTY KEY .
42 |
43 | TYPES:
44 | BEGIN OF ty_cov_result,
45 | coverage TYPE ty_coverage_pct_st,
46 | results TYPE ty_results,
47 | END OF ty_cov_result.
48 |
49 | METHODS run
50 | IMPORTING
51 | !iv_devclass TYPE devclass
52 | RETURNING
53 | VALUE(rt_results) TYPE ty_results
54 | RAISING
55 | zcx_abapgit_exception .
56 | METHODS run_with_coverage
57 | IMPORTING
58 | !iv_devclass TYPE devclass
59 | RETURNING
60 | VALUE(rs_cov_result) TYPE ty_cov_result
61 | RAISING
62 | zcx_abapgit_exception .
63 | PROTECTED SECTION.
64 |
65 | METHODS calc_coverage_pct
66 | IMPORTING
67 | !it_results TYPE ty_results
68 | RETURNING
69 | VALUE(rs_coverage_pct) TYPE ty_coverage_pct_st .
70 | METHODS analyze_result
71 | IMPORTING
72 | !io_result TYPE REF TO cl_saunit_internal_result
73 | RETURNING
74 | VALUE(rt_tests) TYPE ty_tests .
75 | METHODS get_runner
76 | IMPORTING
77 | !iv_coverage TYPE abap_bool DEFAULT abap_false
78 | RETURNING
79 | VALUE(ro_runner) TYPE REF TO cl_aucv_test_runner_abstract .
80 | METHODS run_coverage
81 | IMPORTING
82 | !is_tadir TYPE tadir
83 | EXPORTING
84 | !et_tests TYPE ty_tests
85 | !ev_has_skipped_tests TYPE abap_bool
86 | !et_coverages TYPE ty_coverage_tt
87 | RAISING
88 | cx_scv_execution_error
89 | cx_scv_call_error .
90 | METHODS run_normal
91 | IMPORTING
92 | !is_tadir TYPE tadir
93 | EXPORTING
94 | !et_tests TYPE ty_tests
95 | !ev_has_skipped_tests TYPE abap_bool .
96 | METHODS has_tests
97 | IMPORTING
98 | !is_tadir TYPE tadir
99 | RETURNING
100 | VALUE(rv_has_tests) TYPE abap_bool .
101 | PRIVATE SECTION.
102 | ENDCLASS.
103 |
104 |
105 |
106 | CLASS zcl_agci_unit_tests IMPLEMENTATION.
107 |
108 |
109 | METHOD analyze_result.
110 |
111 | LOOP AT io_result->f_task_data-programs INTO DATA(ls_program).
112 | DATA(lv_program_index) = sy-tabix.
113 | LOOP AT ls_program-classes INTO DATA(ls_class).
114 | DATA(lv_class_index) = sy-tabix.
115 | LOOP AT ls_class-methods INTO DATA(ls_method).
116 | DATA(lv_method_index) = sy-tabix.
117 |
118 | READ TABLE io_result->f_task_data-alerts_by_indicies WITH KEY
119 | program_ndx = lv_program_index
120 | class_ndx = lv_class_index
121 | method_ndx = lv_method_index
122 | INTO DATA(ls_alert).
123 | IF sy-subrc = 0.
124 | DATA(lv_kind) = ls_alert-alerts[ 1 ]-kind.
125 | ELSE.
126 | CLEAR lv_kind.
127 | ENDIF.
128 |
129 | APPEND VALUE #(
130 | program_name = ls_program-info-name
131 | class_name = ls_class-info-name
132 | method_name = ls_method-info-name
133 | kind = lv_kind ) TO rt_tests.
134 |
135 | ENDLOOP.
136 | ENDLOOP.
137 | ENDLOOP.
138 |
139 | ENDMETHOD.
140 |
141 |
142 | METHOD calc_coverage_pct.
143 |
144 | DATA: lv_branch_exe TYPE i,
145 | lv_branch_total TYPE i,
146 | lv_block_exe TYPE i,
147 | lv_block_total TYPE i,
148 | lv_statement_exe TYPE i,
149 | lv_statement_total TYPE i.
150 |
151 | LOOP AT it_results INTO DATA(ls_result).
152 | LOOP AT ls_result-coverages INTO DATA(ls_coverage).
153 | CASE ls_coverage-type.
154 | WHEN 'Branch Coverage'.
155 | lv_branch_exe = lv_branch_exe + ls_coverage-executed.
156 | lv_branch_total = lv_branch_total + ls_coverage-executed + ls_coverage-not_executed.
157 | WHEN 'Processing Block Coverage'.
158 | lv_block_exe = lv_block_exe + ls_coverage-executed.
159 | lv_block_total = lv_block_total + ls_coverage-not_executed.
160 | WHEN 'Statement Coverage'.
161 | lv_statement_exe = lv_statement_exe + ls_coverage-executed.
162 | lv_statement_total = lv_statement_total + ls_coverage-executed + ls_coverage-not_executed.
163 | ENDCASE.
164 | ENDLOOP.
165 | ENDLOOP.
166 |
167 | rs_coverage_pct-branch_percentage = lv_branch_exe / lv_branch_total * 100.
168 | rs_coverage_pct-block_percentage = lv_block_exe / lv_block_total * 100.
169 | rs_coverage_pct-statement_percentage = lv_statement_exe / lv_statement_total * 100.
170 |
171 | ENDMETHOD.
172 |
173 |
174 | METHOD get_runner.
175 |
176 | DATA: lo_passport TYPE REF TO object.
177 |
178 |
179 | CALL METHOD ('\PROGRAM=SAPLSAUCV_GUI_RUNNER\CLASS=PASSPORT')=>get
180 | RECEIVING
181 | result = lo_passport.
182 |
183 | IF iv_coverage = abap_true.
184 | ro_runner = cl_aucv_test_runner_coverage=>create( lo_passport ).
185 | ELSE.
186 | ro_runner = cl_aucv_test_runner_standard=>create( lo_passport ).
187 | ENDIF.
188 |
189 | ENDMETHOD.
190 |
191 |
192 | METHOD has_tests.
193 |
194 | DATA(ls_aunit_info) = cl_aunit_prog_info=>get_program_info(
195 | allow_commit = abap_true
196 | obj_type = is_tadir-object
197 | obj_name = is_tadir-obj_name ).
198 |
199 | rv_has_tests = ls_aunit_info-has_tests.
200 |
201 | ENDMETHOD.
202 |
203 |
204 | METHOD run.
205 |
206 | DATA(lt_tadir) = zcl_abapgit_factory=>get_tadir( )->read( iv_devclass ).
207 | DELETE lt_tadir WHERE object <> 'CLAS' AND object <> 'PROG' AND object <> 'FUGR'.
208 |
209 | LOOP AT lt_tadir INTO DATA(ls_tadir).
210 |
211 | IF has_tests( CORRESPONDING #( ls_tadir ) ) = abap_false.
212 | CONTINUE.
213 | ENDIF.
214 |
215 | run_normal(
216 | EXPORTING
217 | is_tadir = CORRESPONDING #( ls_tadir )
218 | IMPORTING
219 | et_tests = DATA(lt_tests)
220 | ev_has_skipped_tests = DATA(lv_has_skipped) ).
221 |
222 | APPEND VALUE #(
223 | tadir = CORRESPONDING #( ls_tadir )
224 | has_skipped = lv_has_skipped
225 | tests = lt_tests ) TO rt_results.
226 |
227 | ENDLOOP.
228 |
229 | ENDMETHOD.
230 |
231 |
232 | METHOD run_coverage.
233 |
234 | CONSTANTS: lc_harmless TYPE saunit_d_allowed_risk_level VALUE 11,
235 | lc_medium TYPE saunit_d_allowed_rt_duration VALUE 24.
236 |
237 | DATA: lo_casted TYPE REF TO cl_saunit_internal_result,
238 | lo_cvrg_rslt_provider TYPE REF TO if_aucv_cvrg_rslt_provider.
239 |
240 | get_runner( abap_true )->run_for_program_keys(
241 | EXPORTING
242 | i_limit_on_duration_category = lc_medium
243 | i_limit_on_risk_level = lc_harmless
244 | i_program_keys = VALUE #( ( CORRESPONDING #( is_tadir MAPPING obj_type = object ) ) )
245 | IMPORTING
246 | e_aunit_result = DATA(li_aunit)
247 | e_coverage_result = lo_cvrg_rslt_provider ).
248 |
249 | DATA(lo_result) = lo_cvrg_rslt_provider->build_coverage_result( ).
250 |
251 | LOOP AT lo_result->get_coverages( ) INTO DATA(ls_coverages).
252 | INSERT VALUE #( object = is_tadir-obj_name
253 | executed = ls_coverages->get_executed( )
254 | not_executed = ls_coverages->get_not_executed( )
255 | percentage = ls_coverages->get_percentage( )
256 | type = ls_coverages->type->text
257 | ) INTO TABLE et_coverages.
258 | ENDLOOP.
259 |
260 | lo_casted ?= li_aunit.
261 |
262 | ev_has_skipped_tests = lo_casted->f_task_data-info-has_skipped.
263 |
264 | et_tests = analyze_result( lo_casted ).
265 |
266 | ENDMETHOD.
267 |
268 |
269 | METHOD run_normal.
270 |
271 | CONSTANTS: lc_harmless TYPE saunit_d_allowed_risk_level VALUE 11,
272 | lc_medium TYPE saunit_d_allowed_rt_duration VALUE 24.
273 |
274 | DATA: lo_casted TYPE REF TO cl_saunit_internal_result.
275 |
276 | get_runner( )->run_for_program_keys(
277 | EXPORTING
278 | i_limit_on_duration_category = lc_medium
279 | i_limit_on_risk_level = lc_harmless
280 | i_program_keys = VALUE #( ( CORRESPONDING #( is_tadir MAPPING obj_type = object ) ) )
281 | IMPORTING
282 | e_aunit_result = DATA(li_aunit) ).
283 |
284 | lo_casted ?= li_aunit.
285 |
286 | ev_has_skipped_tests = lo_casted->f_task_data-info-has_skipped.
287 |
288 | et_tests = analyze_result( lo_casted ).
289 |
290 | ENDMETHOD.
291 |
292 |
293 | METHOD run_with_coverage.
294 |
295 | DATA(lt_tadir) = zcl_abapgit_factory=>get_tadir( )->read( iv_devclass ).
296 | DELETE lt_tadir WHERE object <> 'CLAS' AND object <> 'PROG' AND object <> 'FUGR'.
297 |
298 | LOOP AT lt_tadir INTO DATA(ls_tadir).
299 |
300 | TRY.
301 | run_coverage(
302 | EXPORTING
303 | is_tadir = CORRESPONDING #( ls_tadir )
304 | IMPORTING
305 | et_tests = DATA(lt_tests)
306 | ev_has_skipped_tests = DATA(lv_has_skipped)
307 | et_coverages = DATA(lt_coverages) ).
308 | CATCH cx_scv_call_error cx_scv_execution_error.
309 | CONTINUE.
310 | ENDTRY.
311 |
312 | APPEND VALUE #(
313 | tadir = CORRESPONDING #( ls_tadir )
314 | has_skipped = lv_has_skipped
315 | tests = lt_tests
316 | coverages = lt_coverages ) TO rs_cov_result-results.
317 |
318 | ENDLOOP.
319 |
320 | rs_cov_result-coverage = calc_coverage_pct( rs_cov_result-results ).
321 |
322 | ENDMETHOD.
323 | ENDCLASS.
324 |
--------------------------------------------------------------------------------
/src/unit_tests/zcl_agci_unit_tests.clas.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | ZCL_AGCI_UNIT_TESTS
7 | E
8 | abapGit CI - Run unit tests
9 | 1
10 | X
11 | X
12 | X
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------