abapgit-agent 1.4.0 → 1.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/README.md +2 -0
  2. package/abap/guidelines/00_index.md +35 -0
  3. package/abap/guidelines/01_sql.md +72 -0
  4. package/abap/guidelines/02_exceptions.md +108 -0
  5. package/abap/guidelines/03_testing.md +252 -0
  6. package/abap/guidelines/04_cds.md +120 -0
  7. package/abap/guidelines/05_classes.md +50 -0
  8. package/abap/guidelines/06_objects.md +103 -0
  9. package/abap/guidelines/07_json.md +22 -0
  10. package/abap/guidelines/08_abapgit.md +193 -0
  11. package/bin/abapgit-agent +597 -44
  12. package/bin/abgagt +24 -0
  13. package/package.json +11 -3
  14. package/src/abap-client.js +65 -2
  15. package/src/agent.js +58 -4
  16. package/src/config.js +9 -2
  17. package/src/ref-search.js +989 -0
  18. package/.abapGitAgent.example +0 -11
  19. package/.github/workflows/release.yml +0 -57
  20. package/API.md +0 -710
  21. package/CLAUDE.md +0 -1031
  22. package/CLAUDE_MEM.md +0 -88
  23. package/ERROR_HANDLING.md +0 -30
  24. package/INSTALL.md +0 -155
  25. package/RELEASE_NOTES.md +0 -143
  26. package/abap/CLAUDE.md +0 -898
  27. package/abap/copilot-instructions.md +0 -79
  28. package/abap/package.devc.xml +0 -10
  29. package/abap/zcl_abgagt_agent.clas.abap +0 -420
  30. package/abap/zcl_abgagt_agent.clas.xml +0 -15
  31. package/abap/zcl_abgagt_cmd_factory.clas.abap +0 -48
  32. package/abap/zcl_abgagt_cmd_factory.clas.xml +0 -15
  33. package/abap/zcl_abgagt_command_create.clas.abap +0 -95
  34. package/abap/zcl_abgagt_command_create.clas.xml +0 -15
  35. package/abap/zcl_abgagt_command_import.clas.abap +0 -138
  36. package/abap/zcl_abgagt_command_import.clas.xml +0 -15
  37. package/abap/zcl_abgagt_command_inspect.clas.abap +0 -411
  38. package/abap/zcl_abgagt_command_inspect.clas.testclasses.abap +0 -121
  39. package/abap/zcl_abgagt_command_inspect.clas.xml +0 -16
  40. package/abap/zcl_abgagt_command_preview.clas.abap +0 -386
  41. package/abap/zcl_abgagt_command_preview.clas.xml +0 -15
  42. package/abap/zcl_abgagt_command_pull.clas.abap +0 -80
  43. package/abap/zcl_abgagt_command_pull.clas.testclasses.abap +0 -87
  44. package/abap/zcl_abgagt_command_pull.clas.xml +0 -16
  45. package/abap/zcl_abgagt_command_tree.clas.abap +0 -237
  46. package/abap/zcl_abgagt_command_tree.clas.xml +0 -15
  47. package/abap/zcl_abgagt_command_unit.clas.abap +0 -297
  48. package/abap/zcl_abgagt_command_unit.clas.xml +0 -15
  49. package/abap/zcl_abgagt_command_view.clas.abap +0 -240
  50. package/abap/zcl_abgagt_command_view.clas.xml +0 -15
  51. package/abap/zcl_abgagt_resource_create.clas.abap +0 -71
  52. package/abap/zcl_abgagt_resource_create.clas.xml +0 -15
  53. package/abap/zcl_abgagt_resource_health.clas.abap +0 -25
  54. package/abap/zcl_abgagt_resource_health.clas.xml +0 -15
  55. package/abap/zcl_abgagt_resource_import.clas.abap +0 -66
  56. package/abap/zcl_abgagt_resource_import.clas.xml +0 -15
  57. package/abap/zcl_abgagt_resource_inspect.clas.abap +0 -62
  58. package/abap/zcl_abgagt_resource_inspect.clas.xml +0 -15
  59. package/abap/zcl_abgagt_resource_preview.clas.abap +0 -67
  60. package/abap/zcl_abgagt_resource_preview.clas.xml +0 -15
  61. package/abap/zcl_abgagt_resource_pull.clas.abap +0 -71
  62. package/abap/zcl_abgagt_resource_pull.clas.xml +0 -15
  63. package/abap/zcl_abgagt_resource_tree.clas.abap +0 -70
  64. package/abap/zcl_abgagt_resource_tree.clas.xml +0 -15
  65. package/abap/zcl_abgagt_resource_unit.clas.abap +0 -64
  66. package/abap/zcl_abgagt_resource_unit.clas.xml +0 -15
  67. package/abap/zcl_abgagt_resource_view.clas.abap +0 -68
  68. package/abap/zcl_abgagt_resource_view.clas.xml +0 -15
  69. package/abap/zcl_abgagt_rest_handler.clas.abap +0 -32
  70. package/abap/zcl_abgagt_rest_handler.clas.xml +0 -15
  71. package/abap/zcl_abgagt_util.clas.abap +0 -93
  72. package/abap/zcl_abgagt_util.clas.testclasses.abap +0 -84
  73. package/abap/zcl_abgagt_util.clas.xml +0 -16
  74. package/abap/zcl_abgagt_viewer_clas.clas.abap +0 -58
  75. package/abap/zcl_abgagt_viewer_clas.clas.xml +0 -15
  76. package/abap/zcl_abgagt_viewer_ddls.clas.abap +0 -83
  77. package/abap/zcl_abgagt_viewer_ddls.clas.xml +0 -15
  78. package/abap/zcl_abgagt_viewer_dtel.clas.abap +0 -98
  79. package/abap/zcl_abgagt_viewer_dtel.clas.xml +0 -15
  80. package/abap/zcl_abgagt_viewer_factory.clas.abap +0 -41
  81. package/abap/zcl_abgagt_viewer_factory.clas.xml +0 -15
  82. package/abap/zcl_abgagt_viewer_intf.clas.abap +0 -58
  83. package/abap/zcl_abgagt_viewer_intf.clas.xml +0 -15
  84. package/abap/zcl_abgagt_viewer_stru.clas.abap +0 -59
  85. package/abap/zcl_abgagt_viewer_stru.clas.xml +0 -15
  86. package/abap/zcl_abgagt_viewer_tabl.clas.abap +0 -59
  87. package/abap/zcl_abgagt_viewer_tabl.clas.xml +0 -15
  88. package/abap/zcl_abgagt_viewer_ttyp.clas.abap +0 -93
  89. package/abap/zcl_abgagt_viewer_ttyp.clas.xml +0 -15
  90. package/abap/zif_abgagt_agent.intf.abap +0 -53
  91. package/abap/zif_abgagt_agent.intf.xml +0 -15
  92. package/abap/zif_abgagt_cmd_factory.intf.abap +0 -7
  93. package/abap/zif_abgagt_cmd_factory.intf.xml +0 -15
  94. package/abap/zif_abgagt_command.intf.abap +0 -26
  95. package/abap/zif_abgagt_command.intf.xml +0 -15
  96. package/abap/zif_abgagt_util.intf.abap +0 -28
  97. package/abap/zif_abgagt_util.intf.xml +0 -15
  98. package/abap/zif_abgagt_viewer.intf.abap +0 -12
  99. package/abap/zif_abgagt_viewer.intf.xml +0 -15
  100. package/docs/commands.md +0 -142
  101. package/docs/create-command.md +0 -129
  102. package/docs/health-command.md +0 -89
  103. package/docs/import-command.md +0 -195
  104. package/docs/init-command.md +0 -189
  105. package/docs/inspect-command.md +0 -158
  106. package/docs/preview-command.md +0 -528
  107. package/docs/pull-command.md +0 -188
  108. package/docs/status-command.md +0 -68
  109. package/docs/tree-command.md +0 -303
  110. package/docs/unit-command.md +0 -167
  111. package/docs/view-command.md +0 -501
  112. package/img/claude.png +0 -0
  113. package/scripts/claude-integration.js +0 -351
  114. package/scripts/release.sh +0 -60
  115. package/scripts/test-integration.js +0 -139
@@ -1,237 +0,0 @@
1
- *"*"use source
2
- *"*"Local Interface:
3
- *"**********************************************************************
4
- " TREE command implementation - displays package hierarchy tree
5
- CLASS zcl_abgagt_command_tree DEFINITION PUBLIC FINAL CREATE PUBLIC.
6
- PUBLIC SECTION.
7
- INTERFACES zif_abgagt_command.
8
-
9
- TYPES: BEGIN OF ty_tree_params,
10
- package TYPE tdevc-devclass,
11
- depth TYPE i,
12
- include_objects TYPE abap_bool,
13
- END OF ty_tree_params.
14
-
15
- TYPES: BEGIN OF ty_object_count,
16
- object TYPE tadir-object,
17
- count TYPE i,
18
- END OF ty_object_count.
19
-
20
- TYPES ty_object_counts TYPE TABLE OF ty_object_count WITH NON-UNIQUE DEFAULT KEY.
21
-
22
- TYPES: BEGIN OF ty_package_node,
23
- package TYPE tdevc-devclass,
24
- parent TYPE tdevc-devclass,
25
- description TYPE string,
26
- depth TYPE i,
27
- object_count TYPE i,
28
- END OF ty_package_node.
29
-
30
- TYPES ty_package_nodes TYPE TABLE OF ty_package_node WITH NON-UNIQUE DEFAULT KEY.
31
-
32
- TYPES: BEGIN OF ty_tree_result,
33
- success TYPE abap_bool,
34
- command TYPE string,
35
- package TYPE tdevc-devclass,
36
- message TYPE string,
37
- parent_package TYPE tdevc-devclass,
38
- nodes TYPE ty_package_nodes,
39
- total_packages TYPE i,
40
- total_objects TYPE i,
41
- objects TYPE ty_object_counts,
42
- error TYPE string,
43
- END OF ty_tree_result.
44
-
45
- METHODS build_tree
46
- IMPORTING is_params TYPE ty_tree_params
47
- RETURNING VALUE(rs_result) TYPE ty_tree_result.
48
-
49
- METHODS get_object_count
50
- IMPORTING iv_package TYPE tdevc-devclass
51
- RETURNING VALUE(rv_count) TYPE i.
52
-
53
- METHODS get_object_counts_by_type
54
- IMPORTING iv_package TYPE tdevc-devclass
55
- CHANGING ct_counts TYPE ty_object_counts.
56
-
57
- METHODS collect_subpackages
58
- IMPORTING iv_parent TYPE tdevc-devclass
59
- iv_current_depth TYPE i
60
- iv_max_depth TYPE i
61
- iv_include_objects TYPE abap_bool
62
- CHANGING ct_nodes TYPE ty_package_nodes
63
- cv_total_objects TYPE i
64
- ct_types TYPE ty_object_counts.
65
-
66
- ENDCLASS.
67
-
68
- CLASS zcl_abgagt_command_tree IMPLEMENTATION.
69
-
70
- METHOD zif_abgagt_command~get_name.
71
- rv_name = zif_abgagt_command=>gc_tree.
72
- ENDMETHOD.
73
-
74
- METHOD zif_abgagt_command~execute.
75
- DATA: ls_params TYPE ty_tree_params,
76
- ls_result TYPE ty_tree_result.
77
-
78
- ls_result-command = zif_abgagt_command=>gc_tree.
79
-
80
- IF is_param IS SUPPLIED.
81
- ls_params = CORRESPONDING #( is_param ).
82
- ENDIF.
83
-
84
- IF ls_params-package IS INITIAL.
85
- ls_result-success = abap_false.
86
- ls_result-error = 'Package is required'.
87
- rv_result = /ui2/cl_json=>serialize( data = ls_result ).
88
- RETURN.
89
- ENDIF.
90
-
91
- IF ls_params-depth IS INITIAL OR ls_params-depth <= 0.
92
- ls_params-depth = 3.
93
- ENDIF.
94
-
95
- IF ls_params-depth > 10.
96
- ls_params-depth = 10.
97
- ENDIF.
98
-
99
- ls_result = build_tree( ls_params ).
100
- rv_result = /ui2/cl_json=>serialize( data = ls_result ).
101
- ENDMETHOD.
102
-
103
- METHOD build_tree.
104
- DATA: lv_package TYPE tdevc-devclass,
105
- lv_max_depth TYPE i,
106
- lv_total_objects TYPE i,
107
- lt_all_types TYPE ty_object_counts,
108
- lt_nodes TYPE ty_package_nodes,
109
- ls_package TYPE tdevc.
110
-
111
- lv_package = is_params-package.
112
- lv_max_depth = is_params-depth.
113
-
114
- SELECT SINGLE devclass parentcl FROM tdevc
115
- INTO ls_package
116
- WHERE devclass = lv_package.
117
-
118
- IF sy-subrc <> 0.
119
- rs_result-success = abap_false.
120
- rs_result-package = lv_package.
121
- rs_result-error = |Package { lv_package } does not exist|.
122
- RETURN.
123
- ENDIF.
124
-
125
- rs_result-success = abap_true.
126
- rs_result-command = 'TREE'.
127
- rs_result-package = lv_package.
128
- rs_result-message = 'Tree retrieved successfully'.
129
- rs_result-parent_package = ls_package-parentcl.
130
-
131
- " Add root package
132
- DATA(ls_root) = VALUE ty_package_node(
133
- package = lv_package
134
- parent = ls_package-parentcl
135
- description = lv_package
136
- depth = 0
137
- object_count = get_object_count( lv_package ) ).
138
- APPEND ls_root TO lt_nodes.
139
-
140
- lv_total_objects = ls_root-object_count.
141
-
142
- " Get object types for root
143
- IF is_params-include_objects = abap_true.
144
- get_object_counts_by_type(
145
- EXPORTING iv_package = lv_package
146
- CHANGING ct_counts = rs_result-objects ).
147
- LOOP AT rs_result-objects INTO DATA(ls_obj).
148
- APPEND ls_obj TO lt_all_types.
149
- ENDLOOP.
150
- ENDIF.
151
-
152
- " Add all subpackages
153
- collect_subpackages(
154
- EXPORTING iv_parent = lv_package
155
- iv_current_depth = 1
156
- iv_max_depth = lv_max_depth
157
- iv_include_objects = is_params-include_objects
158
- CHANGING ct_nodes = lt_nodes
159
- cv_total_objects = lv_total_objects
160
- ct_types = lt_all_types ).
161
-
162
- rs_result-nodes = lt_nodes.
163
- rs_result-total_packages = lines( lt_nodes ).
164
- rs_result-total_objects = lv_total_objects.
165
- rs_result-objects = lt_all_types.
166
- ENDMETHOD.
167
-
168
- METHOD get_object_count.
169
- DATA lv_count TYPE i.
170
- SELECT COUNT(*) FROM tadir
171
- INTO lv_count
172
- WHERE devclass = iv_package
173
- AND object NOT IN ('DEVC', 'PACK').
174
- rv_count = lv_count.
175
- ENDMETHOD.
176
-
177
- METHOD get_object_counts_by_type.
178
- DATA lt_counts TYPE ty_object_counts.
179
- SELECT object COUNT(*) AS count FROM tadir
180
- INTO TABLE lt_counts
181
- WHERE devclass = iv_package
182
- AND object NOT IN ('DEVC', 'PACK')
183
- GROUP BY object.
184
- ct_counts = lt_counts.
185
- ENDMETHOD.
186
-
187
- METHOD collect_subpackages.
188
- DATA: lt_direct_subs TYPE TABLE OF tdevc,
189
- ls_direct TYPE tdevc.
190
-
191
- SELECT devclass parentcl FROM tdevc
192
- INTO TABLE lt_direct_subs
193
- WHERE parentcl = iv_parent
194
- ORDER BY devclass.
195
-
196
- LOOP AT lt_direct_subs INTO ls_direct.
197
- DATA ls_node TYPE ty_package_node.
198
- ls_node-package = ls_direct-devclass.
199
- ls_node-parent = iv_parent.
200
- ls_node-description = ls_direct-devclass.
201
- ls_node-depth = iv_current_depth.
202
- ls_node-object_count = get_object_count( ls_direct-devclass ).
203
-
204
- APPEND ls_node TO ct_nodes.
205
- cv_total_objects = cv_total_objects + ls_node-object_count.
206
-
207
- " Add object types
208
- IF iv_include_objects = abap_true.
209
- DATA lt_types TYPE ty_object_counts.
210
- get_object_counts_by_type(
211
- EXPORTING iv_package = ls_direct-devclass
212
- CHANGING ct_counts = lt_types ).
213
- LOOP AT lt_types INTO DATA(ls_type).
214
- READ TABLE ct_types WITH KEY object = ls_type-object
215
- ASSIGNING FIELD-SYMBOL(<ls_existing>).
216
- IF sy-subrc = 0.
217
- <ls_existing>-count = <ls_existing>-count + ls_type-count.
218
- ELSE.
219
- APPEND ls_type TO ct_types.
220
- ENDIF.
221
- ENDLOOP.
222
- ENDIF.
223
-
224
- IF iv_current_depth < iv_max_depth.
225
- collect_subpackages(
226
- EXPORTING iv_parent = ls_direct-devclass
227
- iv_current_depth = iv_current_depth + 1
228
- iv_max_depth = iv_max_depth
229
- iv_include_objects = iv_include_objects
230
- CHANGING ct_nodes = ct_nodes
231
- cv_total_objects = cv_total_objects
232
- ct_types = ct_types ).
233
- ENDIF.
234
- ENDLOOP.
235
- ENDMETHOD.
236
-
237
- ENDCLASS.
@@ -1,15 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
3
- <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
4
- <asx:values>
5
- <VSEOCLASS>
6
- <CLSNAME>ZCL_ABGAGT_COMMAND_TREE</CLSNAME>
7
- <LANGU>E</LANGU>
8
- <DESCRIPT>Tree Command for ABAP Git Agent</DESCRIPT>
9
- <EXPOSURE>2</EXPOSURE>
10
- <STATE>1</STATE>
11
- <UNICODE>X</UNICODE>
12
- </VSEOCLASS>
13
- </asx:values>
14
- </asx:abap>
15
- </abapGit>
@@ -1,297 +0,0 @@
1
- *"*"use source
2
- *"*"Local Interface:
3
- *"**********************************************************************
4
- " UNIT command implementation - runs AUnit tests directly
5
- CLASS zcl_abgagt_command_unit DEFINITION PUBLIC FINAL CREATE PUBLIC.
6
- PUBLIC SECTION.
7
- INTERFACES zif_abgagt_command.
8
-
9
- TYPES: BEGIN OF ty_unit_params,
10
- package TYPE string,
11
- files TYPE string_table,
12
- END OF ty_unit_params.
13
-
14
- " Error structure for failed test methods
15
- TYPES: BEGIN OF ty_error,
16
- class_name TYPE string,
17
- method_name TYPE string,
18
- error_kind TYPE string,
19
- error_text TYPE string,
20
- END OF ty_error.
21
-
22
- TYPES ty_errors TYPE STANDARD TABLE OF ty_error WITH DEFAULT KEY.
23
-
24
- TYPES: BEGIN OF ty_unit_result,
25
- success TYPE abap_bool,
26
- message TYPE string,
27
- test_count TYPE i,
28
- passed_count TYPE i,
29
- failed_count TYPE i,
30
- errors TYPE ty_errors,
31
- END OF ty_unit_result.
32
-
33
- TYPES: BEGIN OF ty_key,
34
- obj_name TYPE tadir-obj_name,
35
- obj_type TYPE tadir-object,
36
- END OF ty_key.
37
-
38
- TYPES ty_keys TYPE STANDARD TABLE OF ty_key WITH DEFAULT KEY.
39
-
40
- METHODS run_aunit_tests
41
- IMPORTING
42
- iv_package TYPE devclass OPTIONAL
43
- it_keys TYPE ty_keys OPTIONAL
44
- RETURNING
45
- VALUE(rs_result) TYPE ty_unit_result.
46
-
47
- PRIVATE SECTION.
48
- " Methods for extracting errors from nested structure using CL_SUT_AUNIT_RUNNER types
49
- METHODS get_failed_methods
50
- IMPORTING
51
- it_tab_objects TYPE cl_sut_aunit_runner=>typ_tab_objects
52
- RETURNING
53
- VALUE(rt_errors) TYPE ty_errors.
54
-
55
- METHODS extract_errors_from_object
56
- IMPORTING
57
- is_object TYPE cl_sut_aunit_runner=>typ_str_object
58
- RETURNING
59
- VALUE(rt_errors) TYPE ty_errors.
60
-
61
- METHODS extract_errors_from_testclass
62
- IMPORTING
63
- is_testclass TYPE cl_sut_aunit_runner=>typ_str_testclass
64
- iv_class_name TYPE seoclass-clsname
65
- RETURNING
66
- VALUE(rt_errors) TYPE ty_errors.
67
-
68
- METHODS extract_error_from_method
69
- IMPORTING
70
- is_method TYPE cl_sut_aunit_runner=>typ_str_method
71
- iv_method_name TYPE saunit_s_method_key-method
72
- RETURNING
73
- VALUE(rs_error) TYPE ty_error.
74
-
75
- ENDCLASS.
76
-
77
- CLASS zcl_abgagt_command_unit IMPLEMENTATION.
78
-
79
- METHOD zif_abgagt_command~get_name.
80
- rv_name = zif_abgagt_command=>gc_unit.
81
- ENDMETHOD.
82
-
83
- METHOD zif_abgagt_command~execute.
84
- DATA: ls_params TYPE ty_unit_params,
85
- lv_package TYPE devclass,
86
- lv_file TYPE string,
87
- lv_obj_type TYPE string,
88
- lv_obj_name TYPE string,
89
- lo_util TYPE REF TO zcl_abgagt_util,
90
- ls_result TYPE ty_unit_result,
91
- lt_keys TYPE ty_keys,
92
- ls_key TYPE ty_key.
93
-
94
- " Parse parameters from is_param
95
- IF is_param IS SUPPLIED.
96
- ls_params = CORRESPONDING #( is_param ).
97
- ENDIF.
98
-
99
- " Convert package string to devclass
100
- IF ls_params-package IS NOT INITIAL.
101
- lv_package = ls_params-package.
102
- ENDIF.
103
-
104
- " Parse files to get object keys
105
- IF ls_params-files IS NOT INITIAL.
106
- lo_util = zcl_abgagt_util=>get_instance( ).
107
- LOOP AT ls_params-files INTO lv_file.
108
- CLEAR: lv_obj_type, lv_obj_name.
109
- lo_util->zif_abgagt_util~parse_file_to_object(
110
- EXPORTING iv_file = lv_file
111
- IMPORTING ev_obj_type = lv_obj_type
112
- ev_obj_name = lv_obj_name ).
113
- IF lv_obj_type IS NOT INITIAL AND lv_obj_name IS NOT INITIAL.
114
- CLEAR ls_key.
115
- ls_key-obj_type = lv_obj_type.
116
- ls_key-obj_name = lv_obj_name.
117
- APPEND ls_key TO lt_keys.
118
- ENDIF.
119
- ENDLOOP.
120
- ENDIF.
121
-
122
- " Initialize result
123
- ls_result-success = abap_false.
124
- ls_result-test_count = 0.
125
- ls_result-passed_count = 0.
126
- ls_result-failed_count = 0.
127
-
128
- IF lt_keys IS INITIAL AND lv_package IS INITIAL.
129
- ls_result-message = 'No files or package provided'.
130
- rv_result = /ui2/cl_json=>serialize( data = ls_result ).
131
- RETURN.
132
- ENDIF.
133
-
134
- " Remove duplicates from keys
135
- IF lt_keys IS NOT INITIAL.
136
- SORT lt_keys BY obj_type obj_name.
137
- DELETE ADJACENT DUPLICATES FROM lt_keys COMPARING obj_type obj_name.
138
- ENDIF.
139
-
140
- " Run tests and get result directly from str_results
141
- ls_result = run_aunit_tests(
142
- iv_package = lv_package
143
- it_keys = lt_keys ).
144
-
145
- IF ls_result-test_count = 0 AND ls_result-failed_count = 0.
146
- ls_result-message = 'No test results returned'.
147
- rv_result = /ui2/cl_json=>serialize( data = ls_result ).
148
- RETURN.
149
- ENDIF.
150
-
151
- IF ls_result-failed_count = 0.
152
- ls_result-success = abap_true.
153
- ls_result-message = |All { ls_result-test_count } tests passed|.
154
- ELSE.
155
- ls_result-message = |{ ls_result-failed_count } of { ls_result-test_count } tests failed|.
156
- ENDIF.
157
-
158
- rv_result = /ui2/cl_json=>serialize( data = ls_result ).
159
- ENDMETHOD.
160
-
161
- METHOD run_aunit_tests.
162
- DATA: lo_runner TYPE REF TO cl_sut_aunit_runner.
163
-
164
- " Create runner using S_CREATE
165
- cl_sut_aunit_runner=>s_create(
166
- EXPORTING
167
- p_cov = abap_false
168
- i_flg_api = abap_true
169
- RECEIVING
170
- r_ref_runner = lo_runner ).
171
-
172
- " Configure runner for OBJECT selection mode
173
- lo_runner->p_disp = abap_false. " No GUI display
174
- lo_runner->p_save = abap_true. " Save results
175
- lo_runner->p_runmd = 'E'. " Execute mode
176
-
177
- " Set selection type to OBJECT
178
- lo_runner->p_seltyp = 'OBJECT'.
179
- lo_runner->p_selcl = abap_true. " Enable class selection mode
180
-
181
- " Build SO_CLASS range for test class(es)
182
- DATA lt_so_class TYPE RANGE OF seoaliases-clsname.
183
- IF it_keys IS NOT INITIAL.
184
- LOOP AT it_keys ASSIGNING FIELD-SYMBOL(<ls_key>).
185
- APPEND VALUE #( sign = 'I' option = 'EQ' low = <ls_key>-obj_name ) TO lt_so_class.
186
- ENDLOOP.
187
- ENDIF.
188
-
189
- " Set the class range
190
- lo_runner->so_class[] = lt_so_class[].
191
-
192
- " Run tests
193
- TRY.
194
- lo_runner->run(
195
- EXPORTING
196
- i_flg_select_only = abap_false
197
- EXCEPTIONS
198
- OTHERS = 1 ).
199
- CATCH cx_sut_error.
200
- RETURN.
201
- ENDTRY.
202
-
203
- IF sy-subrc <> 0.
204
- RETURN.
205
- ENDIF.
206
-
207
- " Get results from str_results - use type from CL_SUT_AUNIT_RUNNER
208
- DATA: ls_str TYPE cl_sut_aunit_runner=>typ_str_results.
209
- ls_str = lo_runner->str_results.
210
-
211
- " Fill result directly from str_results counts
212
- rs_result-test_count = ls_str-cnt_testmethods.
213
- rs_result-passed_count = ls_str-cnt_ok_methods.
214
- rs_result-failed_count = ls_str-cnt_error_methods.
215
-
216
- IF rs_result-failed_count > 0 OR ls_str-pie_abortions > 0.
217
- rs_result-success = abap_false.
218
- ELSE.
219
- rs_result-success = abap_true.
220
- ENDIF.
221
-
222
- " Extract failed method details from tab_objects
223
- rs_result-errors = get_failed_methods( lo_runner->tab_objects ).
224
- ENDMETHOD.
225
-
226
- METHOD get_failed_methods.
227
- " Entry point for extracting failed methods from TAB_OBJECTS
228
- LOOP AT it_tab_objects ASSIGNING FIELD-SYMBOL(<ls_object>).
229
- " Extract errors from this object
230
- DATA(lt_errors) = extract_errors_from_object( <ls_object> ).
231
- APPEND LINES OF lt_errors TO rt_errors.
232
- ENDLOOP.
233
- ENDMETHOD.
234
-
235
- METHOD extract_errors_from_object.
236
- " Extract errors from TAB_TESTCLASSES within an object
237
- LOOP AT is_object-tab_testclasses ASSIGNING FIELD-SYMBOL(<ls_tcl>).
238
- " Extract errors from this testclass
239
- DATA(lt_errors) = extract_errors_from_testclass(
240
- is_testclass = <ls_tcl>
241
- iv_class_name = is_object-clsname ).
242
- APPEND LINES OF lt_errors TO rt_errors.
243
- ENDLOOP.
244
- ENDMETHOD.
245
-
246
- METHOD extract_errors_from_testclass.
247
- " Extract errors from TAB_METHODS within a testclass
248
- LOOP AT is_testclass-tab_methods ASSIGNING FIELD-SYMBOL(<ls_method>).
249
- " Extract error from this method
250
- DATA(ls_error) = extract_error_from_method(
251
- is_method = <ls_method>
252
- iv_method_name = <ls_method>-methodname ).
253
-
254
- " Only add if there's an error
255
- IF ls_error-error_text IS NOT INITIAL.
256
- ls_error-class_name = iv_class_name.
257
- APPEND ls_error TO rt_errors.
258
- ENDIF.
259
- ENDLOOP.
260
- ENDMETHOD.
261
-
262
- METHOD extract_error_from_method.
263
- " Extract STR_ERROR from method and build error structure
264
- " typ_str_error contains typ_str_error_core via INCLUDE as STR_ERROR_CORE
265
-
266
- " Check if there's an error - only process if error kind is set
267
- IF is_method-str_error IS INITIAL.
268
- RETURN.
269
- ENDIF.
270
-
271
- " Get error kind (e.g., 'ERROR', 'FAILURE')
272
- rs_error-error_kind = is_method-str_error-str_error_core-errorkind.
273
-
274
- " Only process if there's an actual error
275
- IF rs_error-error_kind IS INITIAL.
276
- RETURN.
277
- ENDIF.
278
-
279
- " Get error text
280
- rs_error-error_text = is_method-str_error-str_error_core-errortext.
281
-
282
- " If no error text, try tab_messages
283
- IF rs_error-error_text IS INITIAL.
284
- DATA lv_messages TYPE string.
285
- LOOP AT is_method-str_error-str_error_core-tab_messages ASSIGNING FIELD-SYMBOL(<lv_msg>).
286
- IF lv_messages IS NOT INITIAL.
287
- lv_messages = |{ lv_messages }\n|.
288
- ENDIF.
289
- lv_messages = |{ lv_messages }{ <lv_msg> }|.
290
- ENDLOOP.
291
- rs_error-error_text = lv_messages.
292
- ENDIF.
293
-
294
- rs_error-method_name = iv_method_name.
295
- ENDMETHOD.
296
-
297
- ENDCLASS.
@@ -1,15 +0,0 @@
1
- <?xml version="1.0" encoding="utf-8"?>
2
- <abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
3
- <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
4
- <asx:values>
5
- <VSEOCLASS>
6
- <CLSNAME>ZCL_ABGAGT_COMMAND_UNIT</CLSNAME>
7
- <LANGU>E</LANGU>
8
- <DESCRIPT>Unit Command for ABAP Git Agent</DESCRIPT>
9
- <EXPOSURE>2</EXPOSURE>
10
- <STATE>1</STATE>
11
- <UNICODE>X</UNICODE>
12
- </VSEOCLASS>
13
- </asx:values>
14
- </asx:abap>
15
- </abapGit>