providedBindings) {
- this(rawtemplate, providedBindings, STANDARD_ANCHOR, EXTENDED_ANCHOR);
- }
+ private final BindPointParser bindPointParser = new BindPointParser();
+ private final CapturePointParser capturePointParser = new CapturePointParser();
/**
* Parse the given raw template, check the bind points against the provide bindings, and
* provide detailed template checks for validity.
*
- * Overriding Patterns
- *
- * If patterns are not provided then {@link ParsedTemplate#STANDARD_ANCHOR} are used, which includes
- * the ability to match {var1} and ?var1 style anchors. If patterns are
- * provided, then they must be compatible with the {@link Matcher#find()} method, and must also
- * have a named group with the name 'anchor', as in (?<anchor>...)
- *
- *
* @param rawtemplate A string template which contains optionally embedded named anchors
* @param availableBindings The bindings which are provided by the user to fulfill the named anchors in this raw template
- * @param parserPatterns The patterns which match the named anchor format and extract anchor names from the raw template
*/
- public ParsedTemplate(String rawtemplate, Map availableBindings, Pattern... parserPatterns) {
+ public ParsedTemplate(String rawtemplate, Map availableBindings) {
this.bindings.putAll(availableBindings);
- this.spans = parse(rawtemplate, availableBindings, parserPatterns);
+ this.rawtemplate = rawtemplate;
+
+ CapturePointParser.Result captureData = capturePointParser.apply(rawtemplate);
+ this.captures = captureData.getCaptures();
+ List spanData = bindPointParser.apply(captureData.getRawTemplate());
+ this.spans = spanData.toArray(new String[0]);
}
- public Form getForm() {
+ public Type getType() {
if (this.spans.length == 1) {
- return Form.literal;
+ return Type.literal;
} else if (this.spans[0].isEmpty() && this.spans[2].isEmpty()) {
- return Form.rawbind;
+ return Type.bindref;
} else {
- return Form.template;
+ return Type.concat;
}
}
@@ -151,59 +159,6 @@ public class ParsedTemplate {
return this;
}
- /**
- * After this method runs, the following conditions should apply:
- *
- * - spans will contain all the literal and variable sections in order, starting a literal, even if it is empty
- * - spans will be an odd number in length, meaning that the last section will also be a literal, even if it is empty
- * - specificBindings will contain an ordered map of the binding definitions
- *
- */
- private String[] parse(String rawtemplate, Map providedBindings, Pattern[] patterns) {
- List spans = new ArrayList<>();
-
- String statement = rawtemplate;
- int patternsMatched = 0;
-
- int lastMatch = 0;
-
- for (Pattern pattern : patterns) {
- if (!pattern.toString().contains("?")) {
- throw new InvalidParameterException("The provided pattern '" + pattern + "' must contain a named group called anchor," +
- "as in '(?...)'");
- }
-
- Matcher m = pattern.matcher(rawtemplate);
-
- if (!m.find()) { // sanity check that this matcher works at all or go to the next pattern
- continue;
- }
-
- while (m.find(lastMatch)) {
- String pre = statement.substring(lastMatch, m.start());
- spans.add(pre);
-
- String tokenName = m.group("anchor");
- lastMatch = m.end();
-
- spans.add(tokenName);
-
- }
-
- break; // If the last matcher worked at all, only do one cycle
- }
-
- if (lastMatch >= 0) {
- spans.add(statement.substring(lastMatch));
- } else {
- spans.add(statement);
- }
-
-
- return spans.toArray(new String[0]);
-
- }
-
public String toString() {
String sb = "\n parsed: " +
StreamSupport.stream(Arrays.spliterator(spans), false)
@@ -245,7 +200,7 @@ public class ParsedTemplate {
}
/**
- * @return a list of anchors as fou nd in the raw template.
+ * @return a list of anchors as found in the raw template.
*/
public List getAnchors() {
List anchors = new ArrayList<>();
@@ -265,7 +220,7 @@ public class ParsedTemplate {
* @throws InvalidParameterException if the template has an error,
* such as an anchor which has no provided binding.
*/
- public List getCheckedBindPoints() {
+ public List getBindPoints() {
List bindpoints = new ArrayList<>();
for (int i = 1; i < spans.length; i += 2) {
if (!bindings.containsKey(spans[i])) {
@@ -277,7 +232,7 @@ public class ParsedTemplate {
return bindpoints;
}
- public List getUncheckedBindPoints() {
+ private List getUncheckedBindPoints() {
List bindpoints = new ArrayList<>();
for (int i = 1; i < spans.length; i += 2) {
bindpoints.add(new BindPoint(spans[i], bindings.getOrDefault(spans[i], null)));
@@ -329,4 +284,8 @@ public class ParsedTemplate {
}
}
+ public List getCaptures() {
+ return this.captures;
+ }
+
}
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/ParsedTemplateTest.java b/virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/ParsedTemplateTest.java
deleted file mode 100644
index dd5e37864..000000000
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/ParsedTemplateTest.java
+++ /dev/null
@@ -1,119 +0,0 @@
-package io.nosqlbench.virtdata.core.templates;
-
-import io.nosqlbench.virtdata.core.templates.BindPoint;
-import io.nosqlbench.virtdata.core.templates.ParsedTemplate;
-import org.junit.Test;
-
-import java.security.InvalidParameterException;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.regex.Pattern;
-
-import static org.assertj.core.api.Assertions.assertThat;
-
-public class ParsedTemplateTest {
-
- private final Map bindings = new HashMap<>() {{
- put("bindname1", "bindspec1");
- put("bindname2", "bindspec2");
- }};
- private final String rawNothing = "This has no anchors";
- private final String oneCurly = "A {curly} brace.";
- private final String oneQuestion = " A ?question anchor.";
- private final String oneExtraneous = "An {this is an extraneous form} invalid anchor.";
-
- @Test
- public void testShouldMatchRawLiteral() {
- ParsedTemplate pt = new ParsedTemplate(rawNothing, bindings);
- assertThat(pt.getSpans()).containsExactly("This has no anchors");
- assertThat(pt.getSpecificBindings()).isEmpty();
- assertThat(pt.getExtraBindings()).hasSameElementsAs(bindings.keySet());
- assertThat(pt.getMissingBindings()).isEmpty();
- }
-
- @Test
- public void testShoudlMatchCurlyBraces() {
- ParsedTemplate pt = new ParsedTemplate(oneCurly, bindings);
- assertThat(pt.getSpans()).containsExactly("A ", "curly", " brace.");
- assertThat(pt.getSpecificBindings().isEmpty());
- assertThat(pt.getMissingBindings()).contains("curly");
- assertThat(pt.getExtraBindings()).hasSameElementsAs(bindings.keySet());
- }
-
- @Test
- public void testShouldMatchQuestionMark() {
- ParsedTemplate pt = new ParsedTemplate(oneQuestion, bindings);
- assertThat(pt.getSpans()).containsExactly(" A ", "question", " anchor.");
- assertThat(pt.getSpecificBindings()).isEmpty();
- assertThat(pt.getMissingBindings()).containsExactly("question");
- assertThat(pt.getExtraBindings()).hasSameElementsAs(bindings.keySet());
- }
-
- @Test
- public void testShouldIgnoreExtraneousAnchors() {
- ParsedTemplate pt = new ParsedTemplate(oneExtraneous, bindings);
- assertThat(pt.getSpans()).containsExactly("An {this is an extraneous form} invalid anchor.");
- assertThat(pt.getSpecificBindings()).isEmpty();
- assertThat(pt.getMissingBindings()).isEmpty();
- assertThat(pt.getExtraBindings()).hasSameElementsAs(bindings.keySet());
- }
-
- @Test
- public void testShouldMatchLiteralVariableOnly() {
- String literalVariableOnly = "literal {bindname1}";
- ParsedTemplate pt = new ParsedTemplate(literalVariableOnly, bindings);
- assertThat(pt.getSpans()).containsExactly("literal ", "bindname1", "");
- assertThat(pt.getSpecificBindings()).containsOnlyKeys("bindname1");
- assertThat(pt.getMissingBindings()).isEmpty();
- assertThat(pt.getExtraBindings()).containsExactly("bindname2");
-
- }
-
- @Test
- public void testShouldMatchVariableLiteralOnly() {
- String variableLiteralOnly = "{bindname2} literal";
- ParsedTemplate pt = new ParsedTemplate(variableLiteralOnly, bindings);
- assertThat(pt.getSpans()).containsExactly("", "bindname2", " literal");
- assertThat(pt.getSpecificBindings()).containsOnlyKeys("bindname2");
- assertThat(pt.getMissingBindings()).isEmpty();
- assertThat(pt.getExtraBindings()).containsExactly("bindname1");
- }
-
- @Test
- public void testShouldMatchProvidedValidPattern() {
- String basic = "A [provided] pattern.";
- Pattern p = Pattern.compile("\\[(?\\w[_a-zA-Z]+)]");
- ParsedTemplate pt = new ParsedTemplate(basic, bindings, p);
- assertThat(pt.getSpans()).containsExactly("A ", "provided", " pattern.");
- assertThat(pt.getSpecificBindings()).isEmpty();
- assertThat(pt.getMissingBindings()).containsExactly("provided");
- assertThat(pt.getExtraBindings()).containsAll(bindings.keySet());
- }
-
- //, expectedExceptionsMessageRegExp = ".*must contain a named group called anchor.*"
- @Test(expected= InvalidParameterException.class)
- public void testShouldErrorOnInvalidPattern() {
- String wontuse = "This won't get used.";
- Pattern p = Pattern.compile("\\[(\\w[_a-zA-Z]+)]");
- ParsedTemplate pt = new ParsedTemplate(wontuse, bindings, p);
- }
-
- @Test
- public void testPositionalExpansionShouldBeValid() {
- String multi = "A {bindname1} of {bindname2} sort.";
- ParsedTemplate pt = new ParsedTemplate(multi, bindings);
- assertThat(pt.getSpans()).containsExactly("A ", "bindname1", " of ", "bindname2", " sort.");
- assertThat(pt.getSpecificBindings()).containsOnlyKeys("bindname1", "bindname2");
- assertThat(pt.getMissingBindings()).isEmpty();
- assertThat(pt.getExtraBindings()).isEmpty();
- assertThat(pt.getPositionalStatement(s -> "##")).isEqualTo("A ## of ## sort.");
- assertThat(pt.getPositionalStatement(s -> "[[" + s + "]]")).isEqualTo("A [[bindname1]] of [[bindname2]] sort.");
-
- assertThat(pt.getBindPoints()).containsExactly(
- new BindPoint("bindname1", "bindspec1"),
- new BindPoint("bindname2", "bindspec2")
- );
- }
-
-
-}
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/annotations/ExampleDataTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/annotations/ExampleDataTest.java
similarity index 96%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/annotations/ExampleDataTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/annotations/ExampleDataTest.java
index 0f254e459..abbc849e6 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/annotations/ExampleDataTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/annotations/ExampleDataTest.java
@@ -1,7 +1,7 @@
package io.nosqlbench.virtdata.annotations;
import io.nosqlbench.virtdata.api.annotations.ExampleData;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/virtdata-api/src/test/java/io/nosqlbench/virtdata/api/bindings/VirtDataConversionsTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/api/bindings/VirtDataConversionsTest.java
index 1726c2b23..fa1701170 100644
--- a/virtdata-api/src/test/java/io/nosqlbench/virtdata/api/bindings/VirtDataConversionsTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/api/bindings/VirtDataConversionsTest.java
@@ -1,6 +1,6 @@
package io.nosqlbench.virtdata.api.bindings;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.util.function.*;
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/CompatibilityFixupsTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/CompatibilityFixupsTest.java
similarity index 97%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/core/CompatibilityFixupsTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/core/CompatibilityFixupsTest.java
index 45fd14d57..051e29f36 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/CompatibilityFixupsTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/CompatibilityFixupsTest.java
@@ -1,9 +1,10 @@
package io.nosqlbench.virtdata.core;
import io.nosqlbench.virtdata.core.bindings.CompatibilityFixups;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
+
public class CompatibilityFixupsTest {
@Test
@@ -30,7 +31,5 @@ public class CompatibilityFixupsTest {
@Test
public void testParsingSanity() {
assertThat(CompatibilityFixups.fixup("long -> Add(5) -> long")).isEqualTo("long -> Add(5) -> long");
-
}
-
}
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/ResolvedFunctionTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/ResolvedFunctionTest.java
similarity index 98%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/core/ResolvedFunctionTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/core/ResolvedFunctionTest.java
index 36ae7b867..584e107c9 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/ResolvedFunctionTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/ResolvedFunctionTest.java
@@ -1,7 +1,7 @@
package io.nosqlbench.virtdata.core;
import io.nosqlbench.virtdata.core.bindings.ResolvedFunction;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.util.function.LongUnaryOperator;
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/VirtDataComposerTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/VirtDataComposerTest.java
similarity index 94%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/core/VirtDataComposerTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/core/VirtDataComposerTest.java
index 6992bcf88..2a39156b7 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/VirtDataComposerTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/VirtDataComposerTest.java
@@ -2,7 +2,7 @@ package io.nosqlbench.virtdata.core;
import io.nosqlbench.virtdata.core.bindings.ResolverDiagnostics;
import io.nosqlbench.virtdata.core.bindings.VirtDataComposer;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
public class VirtDataComposerTest {
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/VirtDataTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/VirtDataTest.java
similarity index 91%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/core/VirtDataTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/core/VirtDataTest.java
index 713f564c3..35fa66a29 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/VirtDataTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/VirtDataTest.java
@@ -2,7 +2,7 @@ package io.nosqlbench.virtdata.core;
import io.nosqlbench.virtdata.core.bindings.BindingsTemplate;
import io.nosqlbench.virtdata.core.bindings.VirtData;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/composers/FunctionAssemblerMatrixTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/composers/FunctionAssemblerMatrixTest.java
similarity index 99%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/core/composers/FunctionAssemblerMatrixTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/core/composers/FunctionAssemblerMatrixTest.java
index ae32cffab..4815c10de 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/composers/FunctionAssemblerMatrixTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/composers/FunctionAssemblerMatrixTest.java
@@ -3,7 +3,7 @@ package io.nosqlbench.virtdata.core.composers;
import io.nosqlbench.virtdata.core.bindings.DataMapper;
import io.nosqlbench.virtdata.core.bindings.FunctionType;
import io.nosqlbench.virtdata.core.bindings.DataMapperFunctionMapper;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/composers/FunctionAssemblerTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/composers/FunctionAssemblerTest.java
similarity index 90%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/core/composers/FunctionAssemblerTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/core/composers/FunctionAssemblerTest.java
index a65f3afa8..97ce18b48 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/composers/FunctionAssemblerTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/composers/FunctionAssemblerTest.java
@@ -1,13 +1,14 @@
package io.nosqlbench.virtdata.core.composers;
import io.nosqlbench.virtdata.core.bindings.DataMapper;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.util.function.Function;
import java.util.function.LongFunction;
import java.util.function.LongUnaryOperator;
import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
public class FunctionAssemblerTest {
@@ -51,13 +52,14 @@ public class FunctionAssemblerTest {
assertThat(aLong).isEqualTo(15);
}
- @Test(expected = ClassCastException.class)
- public void testLongFunctionLongFunctionMistyped() throws Exception {
+ @Test
+ public void testLongFunctionLongFunctionMistyped() {
FunctionComposer fass = new FunctionAssembly();
fass.andThen(new LongAddFiveFunction());
fass.andThen(new GenericStringCat());
DataMapper dataMapper = fass.getDataMapper();
- dataMapper.get(5);
+ assertThatExceptionOfType(ClassCastException.class)
+ .isThrownBy(() -> dataMapper.get(5));
}
@Test
@@ -79,12 +81,13 @@ public class FunctionAssemblerTest {
// assertThat(s).isEqualTo("Cat5");
// }
- @Test(expected= ClassCastException.class)
+ @Test
public void testFunctionFunctionMistyped() {
FunctionComposer fass = new FunctionAssembly();
fass.andThen(new GenericStringCat());
DataMapper dataMapper = fass.getDataMapper();
- String s = dataMapper.get(5);
+ assertThatExceptionOfType(ClassCastException.class)
+ .isThrownBy(() -> dataMapper.get(5));
}
@Test
diff --git a/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/config/ConfigDataTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/config/ConfigDataTest.java
index a6bd8c30a..74f647780 100644
--- a/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/config/ConfigDataTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/config/ConfigDataTest.java
@@ -1,7 +1,7 @@
package io.nosqlbench.virtdata.core.config;
import io.nosqlbench.nb.api.config.ConfigData;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.util.List;
import java.util.Map;
diff --git a/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/BindPointParserTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/BindPointParserTest.java
new file mode 100644
index 000000000..22ef6989e
--- /dev/null
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/BindPointParserTest.java
@@ -0,0 +1,22 @@
+package io.nosqlbench.virtdata.core.templates;
+
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class BindPointParserTest {
+
+ @Test
+ public void testBindPointParser() {
+ BindPointParser bpp = new BindPointParser();
+ assertThat(bpp.apply("test {one}")).containsExactly("test ","one","");
+ assertThat(bpp.apply("test {one} {{two three}}")).containsExactly("test ","one"," ","two three","");
+ }
+
+ @Test
+ public void testBindPointParserBypass() {
+ BindPointParser bpp = new BindPointParser();
+ assertThat(bpp.apply("")).containsExactly("");
+ }
+
+}
diff --git a/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/CapturePointTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/CapturePointTest.java
new file mode 100644
index 000000000..247120eb3
--- /dev/null
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/CapturePointTest.java
@@ -0,0 +1,31 @@
+package io.nosqlbench.virtdata.core.templates;
+
+import org.junit.jupiter.api.Test;
+
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class CapturePointTest {
+
+ @Test
+ public void testBasicCaptures() {
+ CapturePointParser cpp = new CapturePointParser();
+ assertThat(cpp.apply("test [point1] [point2 as alias3]")).isEqualTo(
+ new CapturePointParser.Result("test point1 point2",
+ List.of(
+ CapturePoint.of("point1"),
+ CapturePoint.of("point2","alias3")
+ ))
+ );
+ }
+
+ @Test
+ public void testBypass() {
+ CapturePointParser cpp = new CapturePointParser();
+ assertThat(cpp.apply("")).isEqualTo(
+ new CapturePointParser.Result("", List.of())
+ );
+ }
+
+}
diff --git a/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/ParsedTemplateTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/ParsedTemplateTest.java
index 61c5e7690..789df5534 100644
--- a/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/ParsedTemplateTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/ParsedTemplateTest.java
@@ -1,8 +1,9 @@
package io.nosqlbench.virtdata.core.templates;
+import org.junit.jupiter.api.Disabled;
+import org.junit.jupiter.api.Test;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
-import org.junit.Test;
import java.util.Map;
import java.util.Optional;
@@ -11,40 +12,79 @@ import static org.assertj.core.api.Assertions.assertThat;
public class ParsedTemplateTest {
+ private final Map bindings = Map.of(
+ "bindname1", "bindspec1",
+ "bindname2", "bindspec2");
+
@Test
- public void testParsedTemplate() {
- ParsedTemplate pt = new ParsedTemplate("test template", Map.of());
- assertThat(pt.getAnchors()).isEmpty();
- assertThat(pt.getCheckedBindPoints()).isEmpty();
- assertThat(pt.getSpans()).contains("test template");
+ public void testShouldMatchRawLiteral() {
+ String rawNothing = "This has no anchors";
+ ParsedTemplate pt = new ParsedTemplate(rawNothing, bindings);
+ assertThat(pt.getSpans()).containsExactly("This has no anchors");
+ assertThat(pt.getBindPoints()).isEmpty();
assertThat(pt.getMissing()).isEmpty();
}
@Test
- public void testBindPoints() {
- ParsedTemplate pt = new ParsedTemplate("test template {missing1}", Map.of("b1","v1"));
- assertThat(pt.getSpans()).contains("test template ");
- assertThat(pt.getAnchors()).containsExactly("missing1");
- assertThat(pt.getUncheckedBindPoints()).containsExactly(new BindPoint("missing1",null));
+ public void testShouldIgnoreExtraneousAnchors() {
+ String oneExtraneous = "An {this is an extraneous form} invalid anchor.";
+ ParsedTemplate pt = new ParsedTemplate(oneExtraneous, bindings);
+ assertThat(pt.getSpans()).containsExactly("An {this is an extraneous form} invalid anchor.");
+ assertThat(pt.getBindPoints()).isEmpty();
+ assertThat(pt.getMissing()).isEmpty();
}
@Test
- public void testSingleBinding() {
- ParsedTemplate pt = new ParsedTemplate("{single}", Map.of());
- Optional sb = pt.asBinding();
- assertThat(sb).isPresent();
- assertThat(sb).contains(new BindPoint("single",null));
+ public void testShouldAllowArbitraryNonGreedyInExtendedBindPoint() {
+ String oneExtendedBindPoint = "An {{this is an extended form}} {{and another}} invalid anchor.";
+ ParsedTemplate pt = new ParsedTemplate(oneExtendedBindPoint, bindings);
+ assertThat(pt.getSpans()).containsExactly("An ","this is an extended form"," ","and another"," invalid anchor.");
+ assertThat(pt.getAnchors()).containsExactly("this is an extended form","and another");
}
@Test
- public void testJsonFormat() {
- ParsedTemplate pt = new ParsedTemplate("test template {missing1}", Map.of("b1","v1"));
- Gson gson = new GsonBuilder().setPrettyPrinting().create();
- String format = gson.toJson(pt);
- System.out.println(format);
-
-
+ public void testShouldMatchLiteralVariableOnly() {
+ String literalVariableOnly = "literal {bindname1}";
+ ParsedTemplate pt = new ParsedTemplate(literalVariableOnly, bindings);
+ assertThat(pt.getSpans()).containsExactly("literal ", "bindname1", "");
+ assertThat(pt.getAnchors()).containsOnly("bindname1");
+ assertThat(pt.getMissing()).isEmpty();
}
+ @Test
+ public void testShouldMatchVariableLiteralOnly() {
+ String variableLiteralOnly = "{bindname2} literal";
+ ParsedTemplate pt = new ParsedTemplate(variableLiteralOnly, bindings);
+ assertThat(pt.getSpans()).containsExactly("", "bindname2", " literal");
+ assertThat(pt.getAnchors()).containsOnly("bindname2");
+ assertThat(pt.getMissing()).isEmpty();
+ }
+
+ @Test
+ public void testPositionalExpansionShouldBeValid() {
+ String multi = "A {bindname1} of {bindname2} sort.";
+ ParsedTemplate pt = new ParsedTemplate(multi, bindings);
+ assertThat(pt.getSpans()).containsExactly("A ", "bindname1", " of ", "bindname2", " sort.");
+ assertThat(pt.getAnchors()).containsOnly("bindname1", "bindname2");
+ assertThat(pt.getMissing()).isEmpty();
+ assertThat(pt.getPositionalStatement(s -> "##")).isEqualTo("A ## of ## sort.");
+ assertThat(pt.getPositionalStatement(s -> "[[" + s + "]]")).isEqualTo("A [[bindname1]] of [[bindname2]] sort.");
+
+ assertThat(pt.getBindPoints()).containsExactly(
+ new BindPoint("bindname1", "bindspec1"),
+ new BindPoint("bindname2", "bindspec2")
+ );
+ }
+
+ @Test
+ public void shouldMatchBasicCapturePoint() {
+ ParsedTemplate pt = new ParsedTemplate(
+ "select [u],[v as v1] from users where userid={userid}", Map.of("userid", "NumberNameToString()")
+ );
+ assertThat(pt.getAnchors()).containsExactly("userid");
+ assertThat(pt.getType()).isEqualTo(ParsedTemplate.Type.concat);
+ assertThat(pt.getCaptures()).containsExactly(CapturePoint.of("u"),CapturePoint.of("v","v1"));
+
+ }
}
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/StringBindingsTemplateTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/StringBindingsTemplateTest.java
similarity index 70%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/StringBindingsTemplateTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/StringBindingsTemplateTest.java
index baa945496..65014407d 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/StringBindingsTemplateTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/StringBindingsTemplateTest.java
@@ -1,18 +1,20 @@
package io.nosqlbench.virtdata.core.templates;
import io.nosqlbench.virtdata.core.bindings.BindingsTemplate;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
+
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
public class StringBindingsTemplateTest {
// , expectedExceptionsMessageRegExp = ".*not provided in the bindings: \\[two, three\\]")
- @Test(expected = RuntimeException.class)
+ @Test
public void testUnqualifiedBindings() {
BindingsTemplate bt1 = new BindingsTemplate();
bt1.addFieldBinding("one", "Identity()");
String template="{one} {two} {three}\n";
StringBindingsTemplate sbt = new StringBindingsTemplate(template,bt1);
- StringBindings resolved = sbt.resolve();
+ assertThatExceptionOfType(RuntimeException.class)
+ .isThrownBy(sbt::resolve);
}
-
}
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/StringCompositorTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/StringCompositorTest.java
similarity index 90%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/StringCompositorTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/StringCompositorTest.java
index 1b025bc3d..c0a177d38 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/StringCompositorTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/StringCompositorTest.java
@@ -1,7 +1,6 @@
package io.nosqlbench.virtdata.core.templates;
-import io.nosqlbench.virtdata.core.templates.StringCompositor;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
@@ -12,7 +11,6 @@ public class StringCompositorTest {
StringCompositor c = new StringCompositor("A");
String[] spans = c.parseTemplate("A\\{ {one}two");
assertThat(spans).containsExactly("A\\{ ", "one", "two");
-
}
@Test
@@ -28,5 +26,4 @@ public class StringCompositorTest {
// String[] spans = c.parseTemplate("A\\{B}C");
// assertThat(spans).containsExactly("A\\{B}C");
// }
-
}
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/ValueTypeTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/ValueTypeTest.java
similarity index 91%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/ValueTypeTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/ValueTypeTest.java
index 0b66a4876..e1bd9952b 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/core/templates/ValueTypeTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/core/templates/ValueTypeTest.java
@@ -1,7 +1,7 @@
package io.nosqlbench.virtdata.core.templates;
import io.nosqlbench.virtdata.core.bindings.ValueType;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/testmappers/TestableTemplate.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/testmappers/TestableTemplate.java
similarity index 90%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/testmappers/TestableTemplate.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/testmappers/TestableTemplate.java
index ab2a757ee..24dfdeb64 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/testmappers/TestableTemplate.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/testmappers/TestableTemplate.java
@@ -7,8 +7,8 @@ import java.util.function.LongFunction;
@ThreadSafeMapper
public class TestableTemplate implements LongFunction {
- private LongFunction>[] funcs;
- private String separator;
+ private final LongFunction>[] funcs;
+ private final String separator;
public TestableTemplate(String separator, LongFunction>... funcs) {
this.funcs = funcs;
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/testmappers/TestableTemplateTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/testmappers/TestableTemplateTest.java
similarity index 91%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/testmappers/TestableTemplateTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/testmappers/TestableTemplateTest.java
index 438f6eedb..bc63317a6 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/testmappers/TestableTemplateTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/testmappers/TestableTemplateTest.java
@@ -1,6 +1,6 @@
package io.nosqlbench.virtdata.testmappers;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/testmappers/TestingRepeater.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/testmappers/TestingRepeater.java
similarity index 93%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/testmappers/TestingRepeater.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/testmappers/TestingRepeater.java
index 4ffede008..45e4cbcde 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/testmappers/TestingRepeater.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/testmappers/TestingRepeater.java
@@ -6,7 +6,7 @@ import java.util.function.LongUnaryOperator;
@ThreadSafeMapper
public class TestingRepeater implements LongUnaryOperator {
- private int repeat;
+ private final int repeat;
public TestingRepeater(int repeat) {
this.repeat = repeat;
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/util/StringObjectPromoterTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/util/StringObjectPromoterTest.java
similarity index 92%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/util/StringObjectPromoterTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/util/StringObjectPromoterTest.java
index 4feae2e4a..3f86a20b4 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/util/StringObjectPromoterTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/util/StringObjectPromoterTest.java
@@ -1,7 +1,7 @@
package io.nosqlbench.virtdata.util;
import io.nosqlbench.virtdata.core.bindings.StringObjectPromoter;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.math.BigDecimal;
import java.math.BigInteger;
@@ -47,9 +47,9 @@ public class StringObjectPromoterTest {
@Test
public void testBigDecimalFallback() {
- Object o = StringObjectPromoter.promote("1"+String.valueOf(Double.MAX_VALUE));
+ Object o = StringObjectPromoter.promote("1"+ Double.MAX_VALUE);
assertThat(o).isInstanceOf(BigDecimal.class);
- assertThat(o).isEqualTo(new BigDecimal("1"+String.valueOf(Double.MAX_VALUE)));
+ assertThat(o).isEqualTo(new BigDecimal("1"+ Double.MAX_VALUE));
}
@Test
diff --git a/virtdata-api/src/test/io/nosqlbench/virtdata/util/VirtDataFunctionsTest.java b/virtdata-api/src/test/java/io/nosqlbench/virtdata/util/VirtDataFunctionsTest.java
similarity index 68%
rename from virtdata-api/src/test/io/nosqlbench/virtdata/util/VirtDataFunctionsTest.java
rename to virtdata-api/src/test/java/io/nosqlbench/virtdata/util/VirtDataFunctionsTest.java
index 29cc60908..8603a3067 100644
--- a/virtdata-api/src/test/io/nosqlbench/virtdata/util/VirtDataFunctionsTest.java
+++ b/virtdata-api/src/test/java/io/nosqlbench/virtdata/util/VirtDataFunctionsTest.java
@@ -1,12 +1,14 @@
package io.nosqlbench.virtdata.util;
import io.nosqlbench.virtdata.api.bindings.VirtDataFunctions;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.security.InvalidParameterException;
import java.util.function.Function;
import java.util.function.LongFunction;
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
+
public class VirtDataFunctionsTest {
@Test
@@ -16,11 +18,10 @@ public class VirtDataFunctionsTest {
long f2 = adapted.apply(42L);
}
- @Test(expected = InvalidParameterException.class)
+ @Test
public void testWrongLongUnaryConversion() {
- Function fl = (Long l) -> Math.max(l.intValue(),43);
- LongFunction adapted = VirtDataFunctions.adapt(fl, LongFunction.class, Long.class, true);
- long f2 = adapted.apply(42L);
+ Function fl = (Long l) -> Math.max(l.intValue(), 43);
+ assertThatExceptionOfType(InvalidParameterException.class)
+ .isThrownBy(() -> VirtDataFunctions.adapt(fl, LongFunction.class, Long.class, true));
}
-
}
diff --git a/virtdata-lang/pom.xml b/virtdata-lang/pom.xml
index 3140ac65a..5fed69593 100644
--- a/virtdata-lang/pom.xml
+++ b/virtdata-lang/pom.xml
@@ -7,7 +7,7 @@
mvn-defaults
io.nosqlbench
- 4.15.48-SNAPSHOT
+ 4.15.51-SNAPSHOT
../mvn-defaults
diff --git a/virtdata-lang/src/test/java/io/nosqlbench/virtdata/lang/parser/VirtdataBuilderTest.java b/virtdata-lang/src/test/java/io/nosqlbench/virtdata/lang/parser/VirtdataBuilderTest.java
index 8f1ac7f1b..0b4ac5e56 100644
--- a/virtdata-lang/src/test/java/io/nosqlbench/virtdata/lang/parser/VirtdataBuilderTest.java
+++ b/virtdata-lang/src/test/java/io/nosqlbench/virtdata/lang/parser/VirtdataBuilderTest.java
@@ -6,7 +6,7 @@ import io.nosqlbench.virtdata.lang.generated.VirtDataParser;
import org.antlr.v4.runtime.CharStreams;
import org.antlr.v4.runtime.CodePointCharStream;
import org.antlr.v4.runtime.CommonTokenStream;
-import org.junit.Test;
+import org.junit.jupiter.api.Test;
import java.io.BufferedReader;
import java.io.IOException;
diff --git a/virtdata-lib-basics/pom.xml b/virtdata-lib-basics/pom.xml
index 5f4a999fe..bca63d305 100644
--- a/virtdata-lib-basics/pom.xml
+++ b/virtdata-lib-basics/pom.xml
@@ -7,7 +7,7 @@
mvn-defaults
io.nosqlbench
- 4.15.48-SNAPSHOT
+ 4.15.51-SNAPSHOT
../mvn-defaults
@@ -20,7 +20,7 @@
io.nosqlbench
virtdata-api
- 4.15.48-SNAPSHOT
+ 4.15.51-SNAPSHOT
diff --git a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/distributions/CSVSampler.java b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/distributions/CSVSampler.java
index 15e4a059a..fefb01f45 100644
--- a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/distributions/CSVSampler.java
+++ b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/distributions/CSVSampler.java
@@ -8,7 +8,6 @@ import io.nosqlbench.virtdata.api.annotations.Example;
import io.nosqlbench.virtdata.api.annotations.ThreadSafeMapper;
import io.nosqlbench.virtdata.library.basics.core.stathelpers.AliasElementSampler;
import io.nosqlbench.virtdata.library.basics.core.stathelpers.ElemProbD;
-import io.nosqlbench.virtdata.library.basics.core.stathelpers.EvProbD;
import io.nosqlbench.virtdata.library.basics.shared.from_long.to_long.Hash;
import org.apache.commons.csv.CSVParser;
import org.apache.commons.csv.CSVRecord;
@@ -68,8 +67,6 @@ public class CSVSampler implements LongFunction {
*/
@Example({"CSVSampler('USPS','n/a','name','census_state_abbrev')",""})
public CSVSampler(String labelColumn, String weightColumn, String... data) {
- List events = new ArrayList<>();
- List values = new ArrayList<>();
Function weightFunc = LabeledStatistic::sum;
LongUnaryOperator prefunc = new Hash();
diff --git a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_long/HostHash.java b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_long/HostHash.java
index 0267043e9..5e33c2401 100644
--- a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_long/HostHash.java
+++ b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_long/HostHash.java
@@ -20,8 +20,8 @@ import java.util.function.LongUnaryOperator;
*/
public class HostHash implements LongUnaryOperator {
- private static long hostHash = computeHostHash();
- private ByteBuffer bb = ByteBuffer.allocate(Long.BYTES);
+ private static final long hostHash = computeHostHash();
+ private final ByteBuffer bb = ByteBuffer.allocate(Long.BYTES);
private Murmur3F murmur3F;
@Example({"HostHash()","a simple per-host hash function"})
@@ -60,10 +60,10 @@ public class HostHash implements LongUnaryOperator {
distinctNames.add(iface.getHostName());
});
List nameList = new ArrayList<>(distinctNames);
- nameList.sort(String::compareTo);
+ Collections.sort(nameList);
Murmur3F m3f = new Murmur3F(0);
m3f.reset();
- distinctNames.forEach(
+ nameList.forEach(
s -> m3f.update(s.getBytes(StandardCharsets.UTF_8))
);
return m3f.getValue();
diff --git a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_object/WeightedFuncs.java b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_object/WeightedFuncs.java
index 12b729c11..9390761ee 100644
--- a/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_object/WeightedFuncs.java
+++ b/virtdata-lib-basics/src/main/java/io/nosqlbench/virtdata/library/basics/shared/from_long/to_object/WeightedFuncs.java
@@ -23,13 +23,11 @@ public class WeightedFuncs implements LongFunction