From 6743ac5fda69431ae002dcdc17aa006ef898f6ba Mon Sep 17 00:00:00 2001 From: Lars Hvam Date: Fri, 2 Sep 2022 08:43:28 +0200 Subject: [PATCH] add page for running unit tests (#5719) --- abaplint.json | 8 +- .../zcl_abapgit_gui_page_repo_view.clas.abap | 13 +- src/ui/zcl_abapgit_gui_page_runit.clas.abap | 228 ++++++++++++++++++ src/ui/zcl_abapgit_gui_page_runit.clas.xml | 16 ++ 4 files changed, 262 insertions(+), 3 deletions(-) create mode 100644 src/ui/zcl_abapgit_gui_page_runit.clas.abap create mode 100644 src/ui/zcl_abapgit_gui_page_runit.clas.xml diff --git a/abaplint.json b/abaplint.json index bb7b0a6ae..4663f07ca 100644 --- a/abaplint.json +++ b/abaplint.json @@ -158,7 +158,13 @@ "^if_wb_adt_plugin_resource_co$", "^if_wb_object_data_selection_co$", "^if_wb_object_operator$", - "^cl_abap_syst" + "^cl_abap_syst", + "^SABP_T_TADIR_KEYS$", + "^CL_SAUNIT_INTERNAL_RESULT$", + "^CL_AUCV_TEST_RUNNER_ABSTRACT$", + "^IF_SAUNIT_INTERNAL_RESULT$", + "^IF_SAUNIT_INTERNAL_RESULT_TYPE$", + "^CL_AUCV_TEST_RUNNER_STANDARD$" ] }, "forbidden_identifier": true, diff --git a/src/ui/zcl_abapgit_gui_page_repo_view.clas.abap b/src/ui/zcl_abapgit_gui_page_repo_view.clas.abap index fc7804d1c..6a7415ec5 100644 --- a/src/ui/zcl_abapgit_gui_page_repo_view.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_repo_view.clas.abap @@ -17,6 +17,7 @@ CLASS zcl_abapgit_gui_page_repo_view DEFINITION toggle_diff_first TYPE string VALUE 'toggle_diff_first ' ##NO_TEXT, display_more TYPE string VALUE 'display_more' ##NO_TEXT, go_data TYPE string VALUE 'go_data', + go_unit TYPE string VALUE 'go_unit', END OF c_actions . METHODS constructor @@ -123,7 +124,7 @@ CLASS zcl_abapgit_gui_page_repo_view DEFINITION VALUE(rv_inactive_html_code) TYPE string . METHODS build_srcsystem_code IMPORTING - !is_item TYPE zif_abapgit_definitions=>ty_repo_item + !is_item TYPE zif_abapgit_definitions=>ty_repo_item RETURNING VALUE(rv_srcsystem_html_code) TYPE string . METHODS open_in_main_language @@ -192,7 +193,7 @@ ENDCLASS. -CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION. +CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_VIEW IMPLEMENTATION. METHOD apply_order_by. @@ -311,6 +312,8 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION. iv_typ = zif_abapgit_html=>c_action_type-separator ). ro_advanced_dropdown->add( iv_txt = 'Syntax Check' iv_act = |{ zif_abapgit_definitions=>c_action-repo_syntax_check }?key={ mv_key }| ). + ro_advanced_dropdown->add( iv_txt = 'Unit Test' + iv_act = |{ c_actions-go_unit }| ). ro_advanced_dropdown->add( iv_txt = 'Run Code Inspector' iv_act = |{ zif_abapgit_definitions=>c_action-repo_code_inspector }?key={ mv_key }| ). @@ -1275,6 +1278,12 @@ CLASS zcl_abapgit_gui_page_repo_view IMPLEMENTATION. iv_key = |{ ii_event->query( )->get( 'KEY' ) }|. rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page. + WHEN c_actions-go_unit. + CREATE OBJECT rs_handled-page TYPE zcl_abapgit_gui_page_runit + EXPORTING + iv_devclass = mo_repo->get_package( ). + rs_handled-state = zcl_abapgit_gui=>c_event_state-new_page. + WHEN c_actions-toggle_hide_files. " Toggle file diplay mv_hide_files = zcl_abapgit_persistence_user=>get_instance( )->toggle_hide_files( ). rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render. diff --git a/src/ui/zcl_abapgit_gui_page_runit.clas.abap b/src/ui/zcl_abapgit_gui_page_runit.clas.abap new file mode 100644 index 000000000..8a84728c0 --- /dev/null +++ b/src/ui/zcl_abapgit_gui_page_runit.clas.abap @@ -0,0 +1,228 @@ +CLASS zcl_abapgit_gui_page_runit DEFINITION + PUBLIC + INHERITING FROM zcl_abapgit_gui_page + FINAL + CREATE PUBLIC . + + PUBLIC SECTION. + + METHODS constructor + IMPORTING + !iv_devclass TYPE devclass + RAISING + zcx_abapgit_exception . + + METHODS: + zif_abapgit_gui_event_handler~on_event + REDEFINITION. + + PROTECTED SECTION. + METHODS render_content + REDEFINITION . + PRIVATE SECTION. + + TYPES: BEGIN OF ty_key, + obj_name TYPE tadir-obj_name, + obj_type TYPE tadir-object, + END OF ty_key. + TYPES ty_keys_tt TYPE STANDARD TABLE OF ty_key WITH DEFAULT KEY. + + DATA mv_devclass TYPE devclass . + + METHODS build_tadir + RETURNING + VALUE(rt_tadir) TYPE ty_keys_tt + RAISING + zcx_abapgit_exception . + METHODS run + RETURNING + VALUE(ro_result) TYPE REF TO object + RAISING + zcx_abapgit_exception . +ENDCLASS. + + + +CLASS ZCL_ABAPGIT_GUI_PAGE_RUNIT IMPLEMENTATION. + + + METHOD build_tadir. + + DATA lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt. + DATA ls_tadir LIKE LINE OF lt_tadir. + DATA ls_row LIKE LINE OF rt_tadir. + + lt_tadir = zcl_abapgit_factory=>get_tadir( )->read( + iv_package = mv_devclass + iv_only_local_objects = abap_true ). + + LOOP AT lt_tadir INTO ls_tadir. + CLEAR ls_row. + ls_row-obj_type = ls_tadir-object. + ls_row-obj_name = ls_tadir-obj_name. + APPEND ls_row TO rt_tadir. + ENDLOOP. + + ENDMETHOD. + + + METHOD constructor. + super->constructor( ). + + ms_control-page_title = |Run Unit Tests { iv_devclass }|. + + mv_devclass = iv_devclass. + ENDMETHOD. + + + METHOD render_content. + + DATA lo_result TYPE REF TO object. + DATA lv_program_ndx TYPE i. + DATA lv_class_ndx TYPE i. + DATA lv_method_ndx TYPE i. + DATA lv_text TYPE string. + DATA lv_count TYPE i. + DATA lv_params TYPE string. + + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE ANY TABLE. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE ANY TABLE. + FIELD-SYMBOLS TYPE ANY TABLE. + FIELD-SYMBOLS TYPE ANY TABLE. + FIELD-SYMBOLS TYPE ANY TABLE. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE any. + FIELD-SYMBOLS TYPE string_table. + + + CREATE OBJECT ri_html TYPE zcl_abapgit_html. + + ri_html->add( '
' ). + + lo_result = run( ). + + ASSIGN lo_result->('F_TASK_DATA') TO . + ASSIGN COMPONENT 'ALERTS_BY_INDICIES' OF STRUCTURE TO . + ASSIGN COMPONENT 'PROGRAMS' OF STRUCTURE TO . + + LOOP AT ASSIGNING . + ASSIGN COMPONENT 'ALERTS' OF STRUCTURE TO . + LOOP AT ASSIGNING WHERE ('KIND = ''F'' OR KIND = ''S'''). " check level=F(ail?) instead? + ASSIGN COMPONENT 'HEADER-PARAMS' OF STRUCTURE TO . + LOOP AT INTO lv_params. + lv_text = lv_params. + ENDLOOP. + ri_html->add( |{ lv_text }
| ). + lv_count = lv_count + 1. + ENDLOOP. + ENDLOOP. + + ri_html->add( |{ lv_count } Errors
| ). + + ri_html->add( |
| ). + + LOOP AT ASSIGNING . + lv_program_ndx = sy-tabix. + ASSIGN COMPONENT 'INFO-KEY-OBJ_TYPE' OF STRUCTURE TO . + IF sy-subrc = 0. + ri_html->add( || ). + ELSE. +* KEY field does not exist in 750 + ASSIGN COMPONENT 'INFO-NAME' OF STRUCTURE TO . + ri_html->add( || ). + ENDIF. + ASSIGN COMPONENT 'CLASSES' OF STRUCTURE TO . + LOOP AT ASSIGNING . + lv_class_ndx = sy-tabix. + + ASSIGN COMPONENT 'INFO-NAME' OF STRUCTURE TO . + ri_html->add( || ). + ASSIGN COMPONENT 'METHODS' OF STRUCTURE TO . + LOOP AT ASSIGNING . + lv_method_ndx = sy-tabix. + + CLEAR lv_text. + READ TABLE WITH KEY + ('PROGRAM_NDX') = lv_program_ndx + ('CLASS_NDX') = lv_class_ndx + ('METHOD_NDX') = lv_method_ndx + ASSIGNING . + IF sy-subrc = 0. + ASSIGN COMPONENT 'ALERTS' OF STRUCTURE TO . + LOOP AT ASSIGNING . + ASSIGN COMPONENT 'HEADER-PARAMS' OF STRUCTURE TO . + LOOP AT INTO lv_params. + lv_text = lv_params. + ENDLOOP. + ENDLOOP. + ENDIF. + + IF lv_text IS INITIAL. + lv_text = |PASSED|. + ELSE. + lv_text = |{ lv_text }|. + ENDIF. + + ASSIGN COMPONENT 'INFO-NAME' OF STRUCTURE TO . + ri_html->add( || ). + ENDLOOP. + ENDLOOP. + ENDLOOP. + + ri_html->add( '
{ } | ). + ASSIGN COMPONENT 'INFO-KEY-OBJ_NAME' OF STRUCTURE TO . + ri_html->add( |{ }
{ }
    { }
        { + }{ lv_text }
' ). + + ENDMETHOD. + + + METHOD run. + + DATA lo_passport TYPE REF TO object. + DATA lo_runner TYPE REF TO object. + DATA lt_keys TYPE ty_keys_tt. + DATA li_result TYPE REF TO data. + FIELD-SYMBOLS TYPE any. + + lt_keys = build_tadir( ). + + TRY. + CALL METHOD ('\PROGRAM=SAPLSAUCV_GUI_RUNNER\CLASS=PASSPORT')=>get + RECEIVING + result = lo_passport. + + CALL METHOD ('CL_AUCV_TEST_RUNNER_STANDARD')=>create + EXPORTING + i_passport = lo_passport + RECEIVING + result = lo_runner. + CATCH cx_root. + zcx_abapgit_exception=>raise( |Not supported in your NW release| ). + ENDTRY. + + CREATE DATA li_result TYPE REF TO ('IF_SAUNIT_INTERNAL_RESULT'). + ASSIGN li_result->* TO . + + CALL METHOD lo_runner->('RUN_FOR_PROGRAM_KEYS') + EXPORTING + i_limit_on_duration_category = '36' " long + i_limit_on_risk_level = '33' " critical + i_program_keys = lt_keys + IMPORTING + e_aunit_result = . + + ro_result = . + + ENDMETHOD. + + + METHOD zif_abapgit_gui_event_handler~on_event. + RETURN. + ENDMETHOD. +ENDCLASS. diff --git a/src/ui/zcl_abapgit_gui_page_runit.clas.xml b/src/ui/zcl_abapgit_gui_page_runit.clas.xml new file mode 100644 index 000000000..cf4eb5fc8 --- /dev/null +++ b/src/ui/zcl_abapgit_gui_page_runit.clas.xml @@ -0,0 +1,16 @@ + + + + + + ZCL_ABAPGIT_GUI_PAGE_RUNIT + E + abapGit - Run Unit Tests + 1 + X + X + X + + + +