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 150bf62ead17e2c5613a7533a832c62a809998ee..a537cd73ee481a295ed723701b8b58bb3f1d8ada 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 232c476c6997ebe35e4318ec315c21573a9beaa9..12d091ebd65780538dc64ab8f52ae43204f45eb3 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 0000000000000000000000000000000000000000..259b9f6f448a52f3ce22af1c70fc7ca159a44bff --- /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()); + } +}