diff --git a/src/main/java/com/example/parser/FlowableExcelParser.java b/src/main/java/com/example/parser/FlowableExcelParser.java index d56e090..1150503 100644 --- a/src/main/java/com/example/parser/FlowableExcelParser.java +++ b/src/main/java/com/example/parser/FlowableExcelParser.java @@ -8,6 +8,7 @@ import org.springframework.stereotype.Component; import java.io.FileInputStream; import java.io.IOException; import java.util.ArrayList; +import java.util.LinkedHashMap; @Component @@ -32,6 +33,7 @@ public class FlowableExcelParser { } } + @Deprecated public ArrayList> parseExcelSheet(String excelPath) { try (FileInputStream fileInputStream = new FileInputStream(excelPath)) { Workbook workBook = new XSSFWorkbook(fileInputStream); @@ -120,4 +122,33 @@ public class FlowableExcelParser { } return maxCol; } + + @Deprecated + public ArrayList> parseExcel(String resourcePath) { + try (FileInputStream fileInputStream = new FileInputStream(resourcePath)) { + Workbook workBook = new XSSFWorkbook(fileInputStream); + FormulaEvaluator formulaEvaluator = workBook.getCreationHelper().createFormulaEvaluator(); + ArrayList> sheet = parseSheet(workBook.getSheetAt(0), formulaEvaluator); + ArrayList colHeaders = new ArrayList<>(); + ArrayList> rowList = new ArrayList<>(); + for (int rowIndex = 0; rowIndex < sheet.size(); rowIndex++) { + ArrayList row = sheet.get(rowIndex); + if (rowIndex == 0) { + // Header row + for (Object cell : row) { + colHeaders.add(String.valueOf(cell)); + } + continue; + } + LinkedHashMap rowMap = new LinkedHashMap<>(); + for (int colIndex = 0; colIndex < row.size(); colIndex++) { + rowMap.put(colHeaders.get(colIndex), row.get(colIndex)); + } + rowList.add(rowMap); + } + return rowList; + } catch (IOException e) { + throw new RuntimeException(e); + } + } } diff --git a/src/test/java/com/example/parser/FlowableExcelParserTest.java b/src/test/java/com/example/parser/FlowableExcelParserTest.java index 23c07a4..936b2c2 100644 --- a/src/test/java/com/example/parser/FlowableExcelParserTest.java +++ b/src/test/java/com/example/parser/FlowableExcelParserTest.java @@ -28,7 +28,7 @@ class FlowableExcelParserTest { return resourceUrl.getPath(); } - protected Stream getArgumentsFromExcel(String path) { + protected Stream getRowsFromExcel(String path) { ArrayList argumentList = new ArrayList<>(); ArrayList>> book = flowableExcelParser.parseExcelBook(getResourcePath(path)); for (ArrayList> sheet : book) { @@ -45,11 +45,11 @@ class FlowableExcelParserTest { @NotNull protected Stream booleanExcelParserTestData() { - return getArgumentsFromExcel("flowableExcelParserTestData1.xlsx"); + return getRowsFromExcel("flowableExcelParserTestDataBoolean.xlsx"); } @ParameterizedTest @MethodSource("booleanExcelParserTestData") - void booleanExcelParserTest(ArrayList row) { + public void booleanExcelParserTest(ArrayList row) { Boolean valOr = (Boolean) row.get(0) || (Boolean) row.get(1) || (Boolean) row.get(2); Assertions.assertThat(row.get(3)).isEqualTo(valOr); @@ -59,11 +59,11 @@ class FlowableExcelParserTest { @NotNull protected Stream stringExcelParserTestData() { - return getArgumentsFromExcel("flowableExcelParserTestData2.xlsx"); + return getRowsFromExcel("flowableExcelParserTestDataString.xlsx"); } @ParameterizedTest @MethodSource("stringExcelParserTestData") - void stringExcelParserTest(ArrayList row) { + public void stringExcelParserTest(ArrayList row) { String val12 = row.get(0).toString() + row.get(1).toString(); Assertions.assertThat(row.get(3)).isEqualTo(val12); @@ -76,11 +76,11 @@ class FlowableExcelParserTest { @NotNull protected Stream numberExcelParserTestData() { - return getArgumentsFromExcel("flowableExcelParserTestData3.xlsx"); + return getRowsFromExcel("flowableExcelParserTestDataInteger.xlsx"); } @ParameterizedTest @MethodSource("numberExcelParserTestData") - void numberExcelParserTest(ArrayList row) { + public void numberExcelParserTest(ArrayList row) { Double val12 = (Double) row.get(0) + (Double) row.get(1); Assertions.assertThat(row.get(3)).isEqualTo(val12); @@ -90,4 +90,93 @@ class FlowableExcelParserTest { Double val123 = (Double) row.get(0) + (Double) row.get(1) + (Double) row.get(2); Assertions.assertThat(row.get(5)).isEqualTo(val123); } + + @Deprecated + protected Stream getArgumentsFromExcel(String path) { + ArrayList argumentList = new ArrayList<>(); + ArrayList> rowList = flowableExcelParser.parseExcel(getResourcePath(path)); + for (LinkedHashMap row : rowList) { + LinkedHashMap inputMap = new LinkedHashMap<>(); + LinkedHashMap outputMap = new LinkedHashMap<>(); + for (Map.Entry entry : row.entrySet()) { + String key = entry.getKey(); + if (List.of("input1", "input2", "input3").contains(key)) { + inputMap.put(key, entry.getValue()); + } + if (List.of("output1", "output2", "output3").contains(key)) { + outputMap.put(key, entry.getValue()); + } + } + argumentList.add(Arguments.of(inputMap, outputMap)); + } + return argumentList.stream(); + } + + @NotNull + protected Stream booleanExcelParserTestDataProvider() { + return getArgumentsFromExcel("flowableExcelParserTestDataBooleanOld.xlsx"); + } + @ParameterizedTest + @MethodSource("booleanExcelParserTestDataProvider") + public void booleanExcelParserTest(LinkedHashMap inputMap, LinkedHashMap outputMap) { + for (Map.Entry entry : outputMap.entrySet()) { + String key = entry.getKey(); + if (key.equals("output1")) { + Boolean val = (Boolean)inputMap.get("input1") || (Boolean)inputMap.get("input2") || (Boolean)inputMap.get("input3"); + Assertions.assertThat(entry.getValue()).isEqualTo(val); + } + if (key.equals("output2")) { + Boolean val = (Boolean)inputMap.get("input1") && (Boolean)inputMap.get("input2") && (Boolean)inputMap.get("input3"); + Assertions.assertThat(entry.getValue()).isEqualTo(val); + } + } + } + + @NotNull + protected Stream stringExcelParserTestDataProvider() { + return getArgumentsFromExcel("flowableExcelParserTestDataStringOld.xlsx"); + } + @ParameterizedTest + @MethodSource("stringExcelParserTestDataProvider") + public void stringExcelParserTest(LinkedHashMap inputMap, LinkedHashMap outputMap) { + for (Map.Entry entry : outputMap.entrySet()) { + String key = entry.getKey(); + if (key.equals("output1")) { + String val = inputMap.get("input1").toString() + inputMap.get("input2").toString(); + Assertions.assertThat(entry.getValue()).isEqualTo(val); + } + if (key.equals("output2")) { + String val = inputMap.get("input2").toString() + inputMap.get("input3").toString(); + Assertions.assertThat(entry.getValue()).isEqualTo(val); + } + if (key.equals("output3")) { + String val = inputMap.get("input1").toString() + inputMap.get("input2").toString() + inputMap.get("input3").toString(); + Assertions.assertThat(entry.getValue()).isEqualTo(val); + } + } + } + + @NotNull + protected Stream numberExcelParserTestDataProvider() { + return getArgumentsFromExcel("flowableExcelParserTestDataIntegerOld.xlsx"); + } + @ParameterizedTest + @MethodSource("numberExcelParserTestDataProvider") + public void numberExcelParserTest(LinkedHashMap inputMap, LinkedHashMap outputMap) { + for (Map.Entry entry : outputMap.entrySet()) { + String key = entry.getKey(); + if (key.equals("output1")) { + Double val = (Double)inputMap.get("input1") + (Double)inputMap.get("input2"); + Assertions.assertThat(entry.getValue()).isEqualTo(val); + } + if (key.equals("output2")) { + Double val = (Double)inputMap.get("input2") + (Double)inputMap.get("input3"); + Assertions.assertThat(entry.getValue()).isEqualTo(val); + } + if (key.equals("output3")) { + Double val = (Double)inputMap.get("input1") + (Double)inputMap.get("input2") + (Double)inputMap.get("input3"); + Assertions.assertThat(entry.getValue()).isEqualTo(val); + } + } + } } diff --git a/src/test/resources/flowableExcelParserTestData1.xlsx b/src/test/resources/flowableExcelParserTestDataBoolean.xlsx similarity index 100% rename from src/test/resources/flowableExcelParserTestData1.xlsx rename to src/test/resources/flowableExcelParserTestDataBoolean.xlsx diff --git a/src/test/resources/flowableExcelParserTestDataBooleanOld.xlsx b/src/test/resources/flowableExcelParserTestDataBooleanOld.xlsx new file mode 100644 index 0000000..4b26fe6 Binary files /dev/null and b/src/test/resources/flowableExcelParserTestDataBooleanOld.xlsx differ diff --git a/src/test/resources/flowableExcelParserTestData3.xlsx b/src/test/resources/flowableExcelParserTestDataInteger.xlsx similarity index 100% rename from src/test/resources/flowableExcelParserTestData3.xlsx rename to src/test/resources/flowableExcelParserTestDataInteger.xlsx diff --git a/src/test/resources/flowableExcelParserTestDataIntegerOld.xlsx b/src/test/resources/flowableExcelParserTestDataIntegerOld.xlsx new file mode 100644 index 0000000..f734a9f Binary files /dev/null and b/src/test/resources/flowableExcelParserTestDataIntegerOld.xlsx differ diff --git a/src/test/resources/flowableExcelParserTestData2.xlsx b/src/test/resources/flowableExcelParserTestDataString.xlsx similarity index 100% rename from src/test/resources/flowableExcelParserTestData2.xlsx rename to src/test/resources/flowableExcelParserTestDataString.xlsx diff --git a/src/test/resources/flowableExcelParserTestDataStringOld.xlsx b/src/test/resources/flowableExcelParserTestDataStringOld.xlsx new file mode 100644 index 0000000..4180383 Binary files /dev/null and b/src/test/resources/flowableExcelParserTestDataStringOld.xlsx differ