*"* use this source file for your ABAP unit test classes
CLASS lcl_test DEFINITION DEFERRED.
CLASS zcl_excel_reader_huge_file DEFINITION LOCAL FRIENDS lcl_test.
*
CLASS lcl_test DEFINITION FOR TESTING
RISK LEVEL HARMLESS
DURATION SHORT.
PRIVATE SECTION.
DATA:
out TYPE REF TO zcl_excel_reader_huge_file, " object under test
excel TYPE REF TO zcl_excel,
worksheet TYPE REF TO zcl_excel_worksheet.
METHODS:
setup RAISING cx_static_check,
test_number FOR TESTING RAISING cx_static_check,
test_shared_string FOR TESTING RAISING cx_static_check,
test_shared_string_missing FOR TESTING RAISING cx_static_check,
test_inline_string FOR TESTING RAISING cx_static_check,
test_empty_cells FOR TESTING RAISING cx_static_check,
test_boolean FOR TESTING RAISING cx_static_check,
test_style FOR TESTING RAISING cx_static_check,
test_style_missing FOR TESTING RAISING cx_static_check,
test_formula FOR TESTING RAISING cx_static_check,
test_read_shared_strings FOR TESTING RAISING cx_static_check,
test_shared_string_some_empty FOR TESTING RAISING cx_static_check,
test_shared_string_multi_style FOR TESTING RAISING cx_static_check,
test_skip_to_inexistent FOR TESTING RAISING cx_static_check,
get_reader IMPORTING iv_xml TYPE string RETURNING VALUE(eo_reader) TYPE REF TO if_sxml_reader,
assert_value_equals IMPORTING iv_row TYPE i DEFAULT 1 iv_col TYPE i DEFAULT 1 iv_value TYPE string,
assert_formula_equals IMPORTING iv_row TYPE i DEFAULT 1 iv_col TYPE i DEFAULT 1 iv_formula TYPE string,
assert_style_equals IMPORTING iv_row TYPE i DEFAULT 1 iv_col TYPE i DEFAULT 1 iv_style TYPE zexcel_cell_style,
assert_datatype_equals IMPORTING iv_row TYPE i DEFAULT 1 iv_col TYPE i DEFAULT 1 iv_datatype TYPE string.
ENDCLASS. "lcl_test DEFINITION
*
CLASS lcl_test IMPLEMENTATION.
*
METHOD test_number.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
lo_reader = get_reader(
`17`
).
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_value_equals( `17` ).
assert_datatype_equals( `n` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
cl_abap_unit_assert=>fail( lv_text ).
ENDTRY.
ENDMETHOD. "test_shared_string
*
METHOD test_shared_string.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
DATA: ls_shared_string TYPE zcl_excel_reader_huge_file=>t_shared_string.
ls_shared_string-value = `Test1`.
APPEND ls_shared_string TO out->shared_strings.
ls_shared_string-value = `Test2`.
APPEND ls_shared_string TO out->shared_strings.
lo_reader = get_reader(
`1`
).
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_value_equals( `Test2` ).
assert_datatype_equals( `s` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
cl_abap_unit_assert=>fail( lv_text ).
ENDTRY.
ENDMETHOD. "test_shared_string
*
METHOD test_shared_string_missing.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
DATA: ls_shared_string TYPE zcl_excel_reader_huge_file=>t_shared_string.
ls_shared_string-value = `Test`.
APPEND ls_shared_string TO out->shared_strings.
lo_reader = get_reader(
`1`
).
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
cl_abap_unit_assert=>fail( `Index to non-existent shared string should give an error` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
ENDTRY.
ENDMETHOD.
*
METHOD test_inline_string.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
lo_reader = get_reader(
`Alpha`
).
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_value_equals( `Alpha` ).
assert_datatype_equals( `inlineStr` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
cl_abap_unit_assert=>fail( lv_text ).
ENDTRY.
ENDMETHOD. "test_inline_string
*
METHOD test_boolean.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
lo_reader = get_reader(
`1`
).
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_value_equals( `1` ).
assert_datatype_equals( `b` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
cl_abap_unit_assert=>fail( lv_text ).
ENDTRY.
ENDMETHOD. "test_boolean
*
METHOD test_formula.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
lo_reader = get_reader(
`A2*A2`
).
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_formula_equals( `A2*A2` ).
assert_datatype_equals( `n` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
cl_abap_unit_assert=>fail( lv_text ).
ENDTRY.
ENDMETHOD. "test_formula
*
METHOD test_empty_cells.
* There is no need to store an empty cell in the ABAP worksheet structure
DATA: lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
DATA: ls_shared_string TYPE zcl_excel_reader_huge_file=>t_shared_string.
ls_shared_string-value = ``.
APPEND ls_shared_string TO out->shared_strings.
ls_shared_string-value = `t`.
APPEND ls_shared_string TO out->shared_strings.
lo_reader = get_reader(
`0` &
`` &
`1`
).
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_value_equals( iv_row = 1 iv_col = 1 iv_value = `` ).
assert_value_equals( iv_row = 2 iv_col = 1 iv_value = `` ).
assert_value_equals( iv_row = 3 iv_col = 1 iv_value = `t` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
cl_abap_unit_assert=>fail( lv_text ).
ENDTRY.
ENDMETHOD.
*
METHOD test_style.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string,
lo_style TYPE REF TO zcl_excel_style,
lv_guid TYPE zexcel_cell_style.
CREATE OBJECT lo_style.
APPEND lo_style TO out->styles.
lv_guid = lo_style->get_guid( ).
lo_reader = get_reader(
`18`
).
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
assert_style_equals( lv_guid ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
cl_abap_unit_assert=>fail( lv_text ).
ENDTRY.
ENDMETHOD. "test_style
*
METHOD test_style_missing.
DATA:
lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
lo_reader = get_reader(
`18`
).
TRY.
out->read_worksheet_data( io_reader = lo_reader io_worksheet = worksheet ).
cl_abap_unit_assert=>fail( `Reference to non-existent style should throw an lcx_not_found exception` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " >>> May inspect the message in the debugger
ENDTRY.
ENDMETHOD. "test_style
*
METHOD test_read_shared_strings.
DATA: lo_c2x TYPE REF TO cl_abap_conv_out_ce,
lv_xstring TYPE xstring,
lo_reader TYPE REF TO if_sxml_reader,
lt_act TYPE stringtab,
lt_exp TYPE stringtab.
lo_c2x = cl_abap_conv_out_ce=>create( ).
lo_c2x->convert( EXPORTING data = `AlphaBravo`
IMPORTING buffer = lv_xstring ).
lo_reader = cl_sxml_string_reader=>create( lv_xstring ).
APPEND :
`` TO lt_exp,
`Alpha` TO lt_exp,
`Bravo` TO lt_exp.
lt_act = out->read_shared_strings( lo_reader ).
cl_abap_unit_assert=>assert_equals( act = lt_act
exp = lt_exp ).
ENDMETHOD.
*
METHOD test_shared_string_some_empty.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lt_act TYPE stringtab,
lt_exp TYPE stringtab.
lo_reader = cl_sxml_string_reader=>create( cl_abap_codepage=>convert_to(
`` &
`Alpha` &
`` &
`Bravo`
) ).
APPEND :
`` TO lt_exp,
`Alpha` TO lt_exp,
`` TO lt_exp,
`Bravo` TO lt_exp.
lt_act = out->read_shared_strings( lo_reader ).
cl_abap_unit_assert=>assert_equals( act = lt_act
exp = lt_exp ).
ENDMETHOD.
*
METHOD test_shared_string_multi_style.
DATA: lo_reader TYPE REF TO if_sxml_reader,
lt_act TYPE stringtab,
lt_exp TYPE stringtab.
lo_reader = cl_sxml_string_reader=>create( cl_abap_codepage=>convert_to(
`` &&
`Cell A2` &&
`the following coloured part will be preserved` &&
`Cell A3` &&
`` ) ).
APPEND :
`Cell A2` TO lt_exp,
`the following coloured part will be preserved` TO lt_exp,
`Cell A3` TO lt_exp.
lt_act = out->read_shared_strings( lo_reader ).
cl_abap_unit_assert=>assert_equals( act = lt_act
exp = lt_exp ).
ENDMETHOD.
*
METHOD test_skip_to_inexistent.
DATA: lo_c2x TYPE REF TO cl_abap_conv_out_ce,
lv_xstring TYPE xstring,
lo_reader TYPE REF TO if_sxml_reader,
lo_ex TYPE REF TO lcx_not_found,
lv_text TYPE string.
lo_c2x = cl_abap_conv_out_ce=>create( ).
lo_c2x->convert( EXPORTING data = `AlphaBravo`
IMPORTING buffer = lv_xstring ).
lo_reader = cl_sxml_string_reader=>create( lv_xstring ).
TRY.
out->skip_to( iv_element_name = `nonExistingElement` io_reader = lo_reader ).
cl_abap_unit_assert=>fail( `Skipping to non-existing element must raise lcx_not_found exception` ).
CATCH lcx_not_found INTO lo_ex.
lv_text = lo_ex->get_text( ). " May inspect exception text in debugger
ENDTRY.
ENDMETHOD.
*
METHOD get_reader.
DATA: lv_full TYPE string,
lo_c2x TYPE REF TO cl_abap_conv_out_ce,
lv_xstring TYPE xstring.
CONCATENATE `` iv_xml `
` INTO lv_full.
lo_c2x = cl_abap_conv_out_ce=>create( ).
lo_c2x->convert( EXPORTING data = lv_full
IMPORTING buffer = lv_xstring ).
eo_reader = cl_sxml_string_reader=>create( lv_xstring ).
ENDMETHOD. "get_reader
*
METHOD assert_value_equals.
CONSTANTS: lc_empty_string TYPE string VALUE IS INITIAL.
FIELD-SYMBOLS: TYPE zexcel_s_cell_data,
TYPE string.
READ TABLE worksheet->sheet_content ASSIGNING
WITH TABLE KEY cell_row = iv_row cell_column = iv_col.
IF sy-subrc EQ 0.
ASSIGN -cell_value TO .
ELSE.
ASSIGN lc_empty_string TO .
ENDIF.
cl_abap_unit_assert=>assert_equals( act =
exp = iv_value ).
ENDMETHOD. "assert_value_equals
**
METHOD assert_formula_equals.
FIELD-SYMBOLS: TYPE zexcel_s_cell_data.
READ TABLE worksheet->sheet_content ASSIGNING
WITH TABLE KEY cell_row = iv_row cell_column = iv_col.
cl_abap_unit_assert=>assert_subrc( sy-subrc ).
cl_abap_unit_assert=>assert_equals( act = -cell_formula
exp = iv_formula ).
ENDMETHOD. "assert_formula_equals
*
METHOD assert_style_equals.
FIELD-SYMBOLS: TYPE zexcel_s_cell_data.
READ TABLE worksheet->sheet_content ASSIGNING
WITH TABLE KEY cell_row = iv_row cell_column = iv_col.
cl_abap_unit_assert=>assert_subrc( sy-subrc ).
cl_abap_unit_assert=>assert_equals( act = -cell_style
exp = iv_style ).
ENDMETHOD.
*
METHOD assert_datatype_equals.
FIELD-SYMBOLS: TYPE zexcel_s_cell_data.
READ TABLE worksheet->sheet_content ASSIGNING
WITH TABLE KEY cell_row = iv_row cell_column = iv_col.
cl_abap_unit_assert=>assert_subrc( sy-subrc ).
cl_abap_unit_assert=>assert_equals( act = -data_type
exp = iv_datatype ).
ENDMETHOD. "assert_datatype_equals
METHOD setup.
CREATE OBJECT out.
CREATE OBJECT excel.
CREATE OBJECT worksheet
EXPORTING
ip_excel = excel.
ENDMETHOD. "setup
ENDCLASS. "lcl_test IMPLEMENTATION