From a5515b432b253999a0d92616029690dccc3b4360 Mon Sep 17 00:00:00 2001 From: AtomKrieg Date: Sat, 16 Dec 2017 15:55:45 +0300 Subject: [PATCH 1/3] Update zcl_excel_worksheet.clas.abap --- src/zcl_excel_worksheet.clas.abap | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index afbeb03..24dd571 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -3696,7 +3696,7 @@ ENDMETHOD. METHOD delete_merge. FIELD-SYMBOLS: LIKE LINE OF me->mt_merged_cells. - DATA: is_merged TYPE abap_bool. + DATA: lv_column TYPE i. *--------------------------------------------------------------------* * If cell information is passed delete merge including this cell, * otherwise delete all merges @@ -3705,15 +3705,16 @@ METHOD delete_merge. OR ip_cell_row IS INITIAL. CLEAR me->mt_merged_cells. ELSE. - LOOP AT me->mt_merged_cells ASSIGNING . - - is_merged = me->is_cell_merged( ip_column = ip_cell_column - ip_row = ip_cell_row ). - IF is_merged = abap_true. - DELETE me->mt_merged_cells. " Delete this merge, that includes this cell - EXIT. - ENDIF. + lv_column = zcl_excel_common=>convert_column2int( ip_cell_column ). + + LOOP AT me->mt_merged_cells TRANSPORTING NO FIELDS + WHERE + ( row_from <= ip_cell_row and row_to >= ip_cell_row ) + AND + ( col_from <= lv_column and col_to >= lv_column ). + DELETE me->mt_merged_cells. + EXIT. ENDLOOP. ENDIF. From 3ce3335f12f858fed5ee81c7188ec030418f0332 Mon Sep 17 00:00:00 2001 From: AtomKrieg Date: Sat, 16 Dec 2017 17:32:45 +0300 Subject: [PATCH 2/3] Create zcl_excel_worksheet.clas.testclasses.abap --- src/zcl_excel_worksheet.clas.testclasses.abap | 395 ++++++++++++++++++ 1 file changed, 395 insertions(+) create mode 100644 src/zcl_excel_worksheet.clas.testclasses.abap diff --git a/src/zcl_excel_worksheet.clas.testclasses.abap b/src/zcl_excel_worksheet.clas.testclasses.abap new file mode 100644 index 0000000..9c21dd4 --- /dev/null +++ b/src/zcl_excel_worksheet.clas.testclasses.abap @@ -0,0 +1,395 @@ + +CLASS LCL_EXCEL_WORKSHEET_TEST DEFINITION FOR TESTING + "#AU Risk_Level Harmless + "#AU Duration Short +. +*? +*? +*? +*?lcl_Excel_Worksheet_Test +*? +*?f_Cut +*? +*?ZCL_EXCEL_WORKSHEET +*? +*? +*?X +*? +*?X +*? +*?X +*? +*?X +*? +*? +*? +*? + PRIVATE SECTION. +* ================ + DATA: + F_CUT TYPE REF TO ZCL_EXCEL_WORKSHEET. "class under test + + CLASS-METHODS: CLASS_SETUP. + CLASS-METHODS: CLASS_TEARDOWN. + METHODS: SETUP. + METHODS: TEARDOWN. + METHODS: SET_MERGE FOR TESTING. + METHODS: DELETE_MERGE FOR TESTING. +ENDCLASS. "lcl_Excel_Worksheet_Test + + +CLASS LCL_EXCEL_WORKSHEET_TEST IMPLEMENTATION. +* ============================================== + + METHOD CLASS_SETUP. +* =================== + + ENDMETHOD. "class_Setup + + + METHOD CLASS_TEARDOWN. +* ====================== + + + ENDMETHOD. "class_Teardown + + + METHOD SETUP. +* ============= + + DATA LO_EXCEL TYPE REF TO ZCL_EXCEL. + + CREATE OBJECT LO_EXCEL. + + CREATE OBJECT F_CUT + EXPORTING IP_EXCEL = LO_EXCEL. + + ENDMETHOD. "setup + + + METHOD TEARDOWN. +* ================ + + + ENDMETHOD. "teardown + + METHOD SET_MERGE. +* ==================== + + DATA LT_MERGE TYPE STRING_TABLE. + DATA LV_MERGE TYPE STRING. + DATA LV_SIZE TYPE I. + DATA LV_SIZE_NEXT TYPE I. + + +* Test 1. Simple test for initial value + + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE + EXP = 0 + MSG = 'Initial state of merge table is not empty' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + + +* Test 2. Add merge + + F_CUT->SET_MERGE( + IP_COLUMN_START = 2 + IP_COLUMN_END = 3 + IP_ROW = 2 + IP_ROW_TO = 3 + ). + + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE_NEXT = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE_NEXT - LV_SIZE + EXP = 1 + MSG = 'Expect add 1 table line when 1 merge added' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + +* Test 2. Add same merge + + LV_SIZE = LV_SIZE_NEXT. + + TRY. + F_CUT->SET_MERGE( + IP_COLUMN_START = 2 + IP_COLUMN_END = 3 + IP_ROW = 2 + IP_ROW_TO = 3 + ). + CATCH ZCX_EXCEL. + ENDTRY. + + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE_NEXT = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE_NEXT - LV_SIZE + EXP = 0 + MSG = 'Expect no change when add same merge' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + +* Test 3. Add one different merge + + LV_SIZE = LV_SIZE_NEXT. + + F_CUT->SET_MERGE( + IP_COLUMN_START = 4 + IP_COLUMN_END = 5 + IP_ROW = 2 + IP_ROW_TO = 3 + ). + + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE_NEXT = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE_NEXT - LV_SIZE + EXP = 1 + MSG = 'Expect 1 change when add different merge' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + +* Test 4. Merge added with concrete value #1 + + F_CUT->DELETE_MERGE( ). + + F_CUT->SET_MERGE( + IP_COLUMN_START = 2 + IP_COLUMN_END = 3 + IP_ROW = 2 + IP_ROW_TO = 3 + ). + + LT_MERGE = F_CUT->GET_MERGE( ). + READ TABLE LT_MERGE INTO LV_MERGE INDEX 1. + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_MERGE + EXP = 'B2:C3' + MSG = 'Expect B2:C3' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + +* Test 5. Merge added with concrete value #2 + + F_CUT->DELETE_MERGE( ). + + F_CUT->SET_MERGE( + IP_COLUMN_START = 4 + IP_COLUMN_END = 5 + IP_ROW = 4 + IP_ROW_TO = 5 + ). + + LT_MERGE = F_CUT->GET_MERGE( ). + READ TABLE LT_MERGE INTO LV_MERGE INDEX 1. + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_MERGE + EXP = 'D4:E5' + MSG = 'Expect D4:E5' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + + ENDMETHOD. + + METHOD DELETE_MERGE. +* ==================== + DATA LT_MERGE TYPE STRING_TABLE. + DATA LV_MERGE TYPE STRING. + DATA LV_SIZE TYPE I. + DATA LV_INDEX TYPE I. + +* Test 1. Simple test delete all merges + + F_CUT->SET_MERGE( + IP_COLUMN_START = 2 + IP_COLUMN_END = 3 + IP_ROW = 2 + IP_ROW_TO = 3 + ). + + F_CUT->DELETE_MERGE( ). + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE + EXP = 0 + MSG = 'Expect merge table with 1 line fully cleared' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + +* Test 2. Simple test delete all merges + + DO 10 TIMES. + F_CUT->SET_MERGE( + IP_COLUMN_START = 2 + SY-INDEX * 2 + IP_COLUMN_END = 3 + SY-INDEX * 2 + IP_ROW = 2 + SY-INDEX * 2 + IP_ROW_TO = 3 + SY-INDEX * 2 + ). + ENDDO. + + F_CUT->DELETE_MERGE( ). + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE + EXP = 0 + MSG = 'Expect merge table with few lines fully cleared' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + +* Test 3. Delete concrete merge with success + + DO 4 TIMES. + LV_INDEX = SY-INDEX. + + F_CUT->DELETE_MERGE( ). + + F_CUT->SET_MERGE( + IP_COLUMN_START = 2 + IP_COLUMN_END = 3 + IP_ROW = 2 + IP_ROW_TO = 3 + ). + + CASE LV_INDEX. + WHEN 1. F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 2 IP_CELL_ROW = 2 ). + WHEN 2. F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 2 IP_CELL_ROW = 3 ). + WHEN 3. F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 3 IP_CELL_ROW = 2 ). + WHEN 4. F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 3 IP_CELL_ROW = 3 ). + ENDCASE. + + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE + EXP = 0 + MSG = 'Expect merge table with 1 line fully cleared' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + ENDDO. + +* Test 4. Delete concrete merge with fail + + DO 4 TIMES. + LV_INDEX = SY-INDEX. + + F_CUT->DELETE_MERGE( ). + + F_CUT->SET_MERGE( + IP_COLUMN_START = 2 + IP_COLUMN_END = 3 + IP_ROW = 2 + IP_ROW_TO = 3 + ). + + CASE LV_INDEX. + WHEN 1. F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 1 IP_CELL_ROW = 2 ). + WHEN 2. F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 2 IP_CELL_ROW = 1 ). + WHEN 3. F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 4 IP_CELL_ROW = 2 ). + WHEN 4. F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 2 IP_CELL_ROW = 4 ). + ENDCASE. + + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE + EXP = 1 + MSG = 'Expect no merge were deleted' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + ENDDO. + +* Test 5. Delete concrete merge #1 + + F_CUT->DELETE_MERGE( ). + + F_CUT->SET_MERGE( + IP_COLUMN_START = 2 + IP_COLUMN_END = 3 + IP_ROW = 2 + IP_ROW_TO = 3 + ). + F_CUT->SET_MERGE( + IP_COLUMN_START = 4 + IP_COLUMN_END = 5 + IP_ROW = 4 + IP_ROW_TO = 5 + ). + + F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 2 IP_CELL_ROW = 2 ). + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE + EXP = 1 + MSG = 'Expect we have the one merge' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + + READ TABLE LT_MERGE INTO LV_MERGE INDEX 1. + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_MERGE + EXP = 'D4:E5' + MSG = 'Expect delete B2:C3 merge' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + +* Test 6. Delete concrete merge #2 + + F_CUT->DELETE_MERGE( ). + + F_CUT->SET_MERGE( + IP_COLUMN_START = 2 + IP_COLUMN_END = 3 + IP_ROW = 2 + IP_ROW_TO = 3 + ). + F_CUT->SET_MERGE( + IP_COLUMN_START = 4 + IP_COLUMN_END = 5 + IP_ROW = 4 + IP_ROW_TO = 5 + ). + + F_CUT->DELETE_MERGE( IP_CELL_COLUMN = 4 IP_CELL_ROW = 4 ). + LT_MERGE = F_CUT->GET_MERGE( ). + LV_SIZE = LINES( LT_MERGE ). + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_SIZE + EXP = 1 + MSG = 'Expect we have the one merge' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + + READ TABLE LT_MERGE INTO LV_MERGE INDEX 1. + + ZCL_EXCEL_COMMON=>ASSERT_EQUALS( + ACT = LV_MERGE + EXP = 'B2:C3' + MSG = 'Expect delete D4:E5 merge' + LEVEL = IF_AUNIT_CONSTANTS=>CRITICAL + ). + + ENDMETHOD. "delete_Merge + +ENDCLASS. "lcl_Excel_Worksheet_Test From 4a7291ca4970a60293701958e33554698acab627 Mon Sep 17 00:00:00 2001 From: AtomKrieg Date: Sat, 16 Dec 2017 18:10:16 +0300 Subject: [PATCH 3/3] Update zcl_excel_worksheet.clas.abap --- src/zcl_excel_worksheet.clas.abap | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/src/zcl_excel_worksheet.clas.abap b/src/zcl_excel_worksheet.clas.abap index 24dd571..8a57774 100644 --- a/src/zcl_excel_worksheet.clas.abap +++ b/src/zcl_excel_worksheet.clas.abap @@ -3694,8 +3694,7 @@ ENDMETHOD. METHOD delete_merge. - - FIELD-SYMBOLS: LIKE LINE OF me->mt_merged_cells. + DATA: lv_column TYPE i. *--------------------------------------------------------------------* * If cell information is passed delete merge including this cell,