From bbaacfb439788ba0deaa0f026bd6ed3e75f8fef0 Mon Sep 17 00:00:00 2001 From: Andreas Isler Date: Fri, 5 Dec 2025 09:19:33 +0100 Subject: [PATCH] Fixed issue in isSubset --- .../parser/FlowableExcelMapperTest.java | 12 +++--------- .../flowableExcelMapperTestData_fail.xlsx | Bin 16582 -> 16585 bytes 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/src/test/java/com/example/parser/FlowableExcelMapperTest.java b/src/test/java/com/example/parser/FlowableExcelMapperTest.java index d002fd8..edffce2 100644 --- a/src/test/java/com/example/parser/FlowableExcelMapperTest.java +++ b/src/test/java/com/example/parser/FlowableExcelMapperTest.java @@ -6,8 +6,6 @@ import org.junit.jupiter.api.TestInstance; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.Arguments; import org.junit.jupiter.params.provider.MethodSource; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.context.SpringBootTest; @@ -23,8 +21,6 @@ class FlowableExcelMapperTest { @Autowired private FlowableExcelMapper flowableExcelMapper; - protected static final Logger logger = LoggerFactory.getLogger(FlowableExcelMapperTest.class); - public boolean isSubset(JsonNode root, JsonNode test) { // If test is null, it is always a subset of root @@ -71,7 +67,7 @@ class FlowableExcelMapperTest { rootValue = root.get(fieldName); } if (testValue.isTextual() && "__N_A".equals(testValue.asText())) { - if (rootValue != null && !rootValue.isNull()) { + if (root != null && root.has(fieldName)) { return false; } continue; @@ -105,9 +101,8 @@ class FlowableExcelMapperTest { public void excelMapperTestOk(JsonNode row) { JsonNode root = row.get("root"); JsonNode test = row.get("test"); - logger.info("{}root={}{}test={}", System.lineSeparator(), root, System.lineSeparator(), test); Assertions.assertThat(isSubset(root, test)) - .withFailMessage(System.lineSeparator() + "root=" + root + System.lineSeparator() + "test=" + test).isTrue(); + .withFailMessage(System.lineSeparator() + "test :" + test + System.lineSeparator() + "root :" + root).isTrue(); } protected Stream excelMapperTestFail() { @@ -118,8 +113,7 @@ class FlowableExcelMapperTest { public void excelMapperTestFail(JsonNode row) { JsonNode root = row.get("root"); JsonNode test = row.get("test"); - logger.info("{}root={}{}test={}", System.lineSeparator(), root, System.lineSeparator(), test); Assertions.assertThat(isSubset(root, test)) - .withFailMessage(System.lineSeparator() + "root=" + root + System.lineSeparator() + "test=" + test).isFalse(); + .withFailMessage(System.lineSeparator() + "test :" + test + System.lineSeparator() + "root :" + root).isFalse(); } } diff --git a/src/test/resources/flowableExcelMapperTestData_fail.xlsx b/src/test/resources/flowableExcelMapperTestData_fail.xlsx index 498685b1b218f195820b2126c976d749e2ad62f1..7b46a9b747619c686c3d73466750138874073836 100644 GIT binary patch delta 10529 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

IGu&uao8D&R6@Ux~d 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 L(<4j?Kc@eG4O9PA