Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 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 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 | 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 5x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x | CLASS ltcl_gui_mock DEFINITION FOR TESTING FINAL.
PUBLIC SECTION.
TYPES:
BEGIN OF ty_cache_signature,
url TYPE string,
type TYPE string,
data TYPE string,
END OF ty_cache_signature.
INTERFACES zif_abapgit_gui_services.
METHODS get_asset RETURNING VALUE(rs_asset) TYPE ty_cache_signature.
PRIVATE SECTION.
DATA ms_last_cache_signature TYPE ty_cache_signature.
ENDCLASS.
CLASS ltcl_gui_mock IMPLEMENTATION.
METHOD zif_abapgit_gui_services~cache_asset.
ms_last_cache_signature-url = iv_url.
ms_last_cache_signature-type = iv_type && '/' && iv_subtype.
ms_last_cache_signature-data = iv_text.
ENDMETHOD.
METHOD zif_abapgit_gui_services~register_event_handler.
ENDMETHOD.
METHOD zif_abapgit_gui_services~get_current_page_name.
ENDMETHOD.
METHOD zif_abapgit_gui_services~get_hotkeys_ctl.
ENDMETHOD.
METHOD zif_abapgit_gui_services~get_html_parts.
ENDMETHOD.
METHOD zif_abapgit_gui_services~get_log.
ENDMETHOD.
METHOD zif_abapgit_gui_services~register_page_asset.
ENDMETHOD.
METHOD get_asset.
rs_asset = ms_last_cache_signature.
ENDMETHOD.
ENDCLASS.
CLASS ltcl_html_processor_test DEFINITION DEFERRED.
CLASS zcl_abapgit_gui_html_processor DEFINITION LOCAL FRIENDS ltcl_html_processor_test.
CLASS ltcl_html_processor_test DEFINITION
FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS
FINAL.
PRIVATE SECTION.
DATA mv_source TYPE string.
DATA mo_cut TYPE REF TO zcl_abapgit_gui_html_processor.
DATA mo_gui_mock TYPE REF TO ltcl_gui_mock.
METHODS render_html
IMPORTING
iv_src TYPE string
RETURNING
VALUE(rv_html) TYPE string.
METHODS setup RAISING zcx_abapgit_exception.
METHODS process_typical FOR TESTING RAISING zcx_abapgit_exception.
METHODS process_with_preserve FOR TESTING RAISING zcx_abapgit_exception.
METHODS process_no_css FOR TESTING RAISING zcx_abapgit_exception.
METHODS process_fails FOR TESTING RAISING zcx_abapgit_exception.
METHODS find_head_closing_tag FOR TESTING RAISING zcx_abapgit_exception.
ENDCLASS.
CLASS ltcl_html_processor_test IMPLEMENTATION.
METHOD render_html.
rv_html = iv_src.
REPLACE ALL OCCURRENCES OF '\n' IN rv_html WITH cl_abap_char_utilities=>newline.
ENDMETHOD.
METHOD setup.
DATA li_asset_man TYPE REF TO zif_abapgit_gui_asset_manager.
li_asset_man = zcl_abapgit_gui_asset_manager=>create( ).
li_asset_man->register_asset( iv_url = 'css/style1.css'
iv_type = 'text/css'
iv_inline = 'dummy1' ).
li_asset_man->register_asset( iv_url = 'css/style2.css'
iv_type = 'text/css'
iv_inline = 'dummy2' ).
li_asset_man->register_asset( iv_url = 'css/style3.css'
iv_type = 'text/css'
iv_inline = 'dummy3' ).
CREATE OBJECT mo_cut
EXPORTING
ii_asset_man = li_asset_man.
CREATE OBJECT mo_gui_mock.
mv_source = render_html(
`<html>\n` &&
` <head>\n` &&
` <title>abapGit</title>\n` &&
` <LINK rel="stylesheet" type="text/css" href="css/style1.css">\n` && " +case & extra space
` <link rel="stylesheet" type="text/css" href="css/style2.css">\n` &&
` <link rel="stylesheet" type="text/css" href="css/style3.css">\n` &&
` <script type="text/javascript" src="js/common.js"></script>\n` &&
` </head>\n` &&
` <body>hello</body>\n` &&
`</html>\n` ).
ENDMETHOD.
METHOD process_typical.
DATA lv_act TYPE string.
lv_act = mo_cut->zif_abapgit_gui_html_processor~process(
iv_html = mv_source
ii_gui_services = mo_gui_mock ).
cl_abap_unit_assert=>assert_equals(
act = lv_act
exp = render_html(
`<html>\n` &&
` <head>\n` &&
` <title>abapGit</title>\n` &&
` <!--<LINK rel="stylesheet" type="text/css" href="css/style1.css">-->\n` &&
` <!--<link rel="stylesheet" type="text/css" href="css/style2.css">-->\n` &&
` <!--<link rel="stylesheet" type="text/css" href="css/style3.css">-->\n` &&
` <script type="text/javascript" src="js/common.js"></script>\n` &&
` <!-- abapGit HTML preprocessor -->\n` &&
` <link rel="stylesheet" type="text/css" href="css/bundle.css">\n` &&
` </head>\n` &&
` <body>hello</body>\n` &&
`</html>\n`
) ).
" GUI call checks
cl_abap_unit_assert=>assert_equals(
act = mo_gui_mock->get_asset( )-url
exp = 'css/bundle.css' ).
cl_abap_unit_assert=>assert_equals(
act = mo_gui_mock->get_asset( )-type
exp = 'text/css' ).
cl_abap_unit_assert=>assert_equals(
act = mo_gui_mock->get_asset( )-data
exp = render_html( 'dummy1\ndummy2\ndummy3' ) ).
ENDMETHOD.
METHOD process_with_preserve.
DATA lv_act TYPE string.
mo_cut->preserve_css( 'css/style2.css' ).
lv_act = mo_cut->zif_abapgit_gui_html_processor~process(
iv_html = mv_source
ii_gui_services = mo_gui_mock ).
cl_abap_unit_assert=>assert_equals(
act = lv_act
exp = render_html(
`<html>\n` &&
` <head>\n` &&
` <title>abapGit</title>\n` &&
` <!--<LINK rel="stylesheet" type="text/css" href="css/style1.css">-->\n` &&
` <link rel="stylesheet" type="text/css" href="css/style2.css">\n` && " Preserved
` <!--<link rel="stylesheet" type="text/css" href="css/style3.css">-->\n` &&
` <script type="text/javascript" src="js/common.js"></script>\n` &&
` <!-- abapGit HTML preprocessor -->\n` &&
` <link rel="stylesheet" type="text/css" href="css/bundle.css">\n` &&
` </head>\n` &&
` <body>hello</body>\n` &&
`</html>\n`
) ).
ENDMETHOD.
METHOD process_no_css.
DATA lv_act TYPE string.
lv_act = mo_cut->zif_abapgit_gui_html_processor~process(
iv_html = '<html><head></head></html>'
ii_gui_services = mo_gui_mock ).
cl_abap_unit_assert=>assert_equals(
act = lv_act
exp = '<html><head></head></html>' ).
ENDMETHOD.
METHOD process_fails.
TRY.
" BTW this is valid HTML, maybe refactor the code ...
mo_cut->zif_abapgit_gui_html_processor~process(
iv_html = '<html><body></body></html>'
ii_gui_services = mo_gui_mock ).
cl_abap_unit_assert=>fail( ).
CATCH zcx_abapgit_exception ##NO_HANDLER.
ENDTRY.
ENDMETHOD.
METHOD find_head_closing_tag.
"given
DATA: lv_head_end TYPE i,
lv_html TYPE string.
lv_html = '<!DOCTYPE html><html><head><title>abapGit</title><link rel="stylesheet" type="text/css" ' &&
'href="css/common.css"><link rel="stylesheet" type="text/css" href="css/ag-icons.css">' &&
'<link rel="stylesheet" type="text/css" href="css/theme-default.css"><script type="text/javascript"' &&
' src="js/common.js"></script></head>'.
"when
TRY.
lv_head_end = mo_cut->find_head_offset( lv_html ).
CATCH zcx_abapgit_exception.
cl_abap_unit_assert=>fail( msg = 'HEAD closing tag could not be found' ).
ENDTRY.
"then
cl_abap_unit_assert=>assert_equals(
act = lv_head_end
exp = 299
msg = 'Head closing tag was not found' ).
ENDMETHOD.
ENDCLASS.
|