From 8fa05f62ea08506b4f827eb2fc9b54af1af9686a Mon Sep 17 00:00:00 2001
From: Jonas Blatt <jonasblatt@uni-koblenz.de>
Date: Sun, 29 Sep 2019 12:15:28 +0200
Subject: [PATCH] Add String BiCreater Combine + Tests

---
 .../bicreater/BiCreaterStringCombine.java     |  6 +-
 .../utils/boundary/impl/StringBoundary.java   |  8 +-
 .../bicreater/BiCreaterStringCombineTest.java | 77 +++++++++++++++++++
 3 files changed, 83 insertions(+), 8 deletions(-)
 create mode 100644 dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringCombineTest.java

diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringCombine.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringCombine.java
index 150bf62e..a537cd73 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringCombine.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringCombine.java
@@ -35,11 +35,9 @@ public class BiCreaterStringCombine extends AbstractBoundaryBiCreater<StringBoun
     Set<String> values = new HashSet<>();
     if (b1.matchesNoneOfValues() && b2.matchesNoneOfValues()) {
       values = intersection(b1.getValues(), b2.getValues());
-    }
-    if (b1.matchesNoneOfValues()) {
+    } else if (b1.matchesNoneOfValues()) {
       values = leftInter(b1.getValues(), b2.getValues());
-    }
-    if (b2.matchesNoneOfValues()) {
+    } else if (b2.matchesNoneOfValues()) {
       values = leftInter(b2.getValues(), b1.getValues());
     }
     return Optional.of(
diff --git a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java
index 232c476c..12d091eb 100644
--- a/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java
+++ b/dmnverifierapi/src/main/java/de/unikoblenz/fgbks/base/utils/boundary/impl/StringBoundary.java
@@ -192,10 +192,6 @@ public class StringBoundary extends AbstractBoundary<String> {
 
     public Builder isMatchAny(boolean matchAny) {
       value.matchAny = matchAny;
-      if (matchAny) {
-        value.matchNoneOfValues = false;
-        value.values = new String[0];
-      }
       return this;
     }
 
@@ -224,6 +220,10 @@ public class StringBoundary extends AbstractBoundary<String> {
     @Override
     public StringBoundary build() {
       value.values = buildingValues.toArray(new String[0]);
+      if (value.matchAny) {
+        value.matchNoneOfValues = false;
+        value.values = new String[0];
+      }
       value.calcHashes();
       value.text = value.getParsedText();
       return super.build();
diff --git a/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringCombineTest.java b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringCombineTest.java
new file mode 100644
index 00000000..259b9f6f
--- /dev/null
+++ b/dmnverifierapi/src/test/java/de/unikoblenz/fgbks/base/utils/boundary/bicreater/BiCreaterStringCombineTest.java
@@ -0,0 +1,77 @@
+package de.unikoblenz.fgbks.base.utils.boundary.bicreater;
+
+import static de.unikoblenz.fgbks.base.utils.boundary.bicreater.BoundaryBiCreaterType.COMBINE;
+import static org.junit.jupiter.api.Assertions.assertArrayEquals;
+import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import de.unikoblenz.fgbks.base.utils.boundary.impl.StringBoundary;
+import io.quarkus.test.junit.QuarkusTest;
+import org.junit.jupiter.api.Test;
+
+@QuarkusTest
+class BiCreaterStringCombineTest {
+
+  StringBoundary sb1;
+  StringBoundary sb2;
+  StringBoundary sbR;
+
+  @Test
+  void testCreater() {
+    sb1 = StringBoundary.getBuilder().addValue("a").build();
+    sb2 = StringBoundary.getBuilder().addValue("b").build();
+    sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
+    assertArrayEquals(new String[]{"a", "b"}, sbR.getValues());
+    assertFalse(sbR.matchesNoneOfValues());
+    assertFalse(sbR.isMatchAny());
+
+    sb1 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").build();
+    sb2 = StringBoundary.getBuilder().addValue("b").build();
+    sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
+    assertArrayEquals(new String[]{"a"}, sbR.getValues());
+    assertTrue(sbR.matchesNoneOfValues());
+    assertFalse(sbR.isMatchAny());
+
+    sb1 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").addValue("b").build();
+    sb2 = StringBoundary.getBuilder().addValue("b").build();
+    sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
+    assertArrayEquals(new String[]{"a"}, sbR.getValues());
+    assertTrue(sbR.matchesNoneOfValues());
+    assertFalse(sbR.isMatchAny());
+
+    sb1 = StringBoundary.getBuilder().addValue("b").build();
+    sb2 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").addValue("b").build();
+    sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
+    assertArrayEquals(new String[]{"a"}, sbR.getValues());
+    assertTrue(sbR.matchesNoneOfValues());
+    assertFalse(sbR.isMatchAny());
+
+    sb1 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").build();
+    sb2 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("b").build();
+    sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
+    assertArrayEquals(new String[]{}, sbR.getValues());
+    assertFalse(sbR.matchesNoneOfValues());
+    assertTrue(sbR.isMatchAny());
+
+    sb1 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("a").build();
+    sb2 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("b").addValue("a").build();
+    sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
+    assertArrayEquals(new String[]{"a"}, sbR.getValues());
+    assertTrue(sbR.matchesNoneOfValues());
+    assertFalse(sbR.isMatchAny());
+
+    sb1 = StringBoundary.getBuilder().isMatchAny(true).build();
+    sb2 = StringBoundary.getBuilder().isMatchNoneOfValues(true).addValue("b").addValue("a").build();
+    sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
+    assertArrayEquals(new String[]{}, sbR.getValues());
+    assertFalse(sbR.matchesNoneOfValues());
+    assertTrue(sbR.isMatchAny());
+
+    sb1 = StringBoundary.getBuilder().isMatchAny(true).build();
+    sb2 = StringBoundary.getBuilder().isMatchAny(true).build();
+    sbR = (StringBoundary) sb1.createBi(COMBINE, sb2).get();
+    assertArrayEquals(new String[]{}, sbR.getValues());
+    assertFalse(sbR.matchesNoneOfValues());
+    assertTrue(sbR.isMatchAny());
+  }
+}
-- 
GitLab