summaryrefslogtreecommitdiff
path: root/core/src/test/java/org/elasticsearch/common
diff options
context:
space:
mode:
authorTim Vernum <tim@adjective.org>2017-04-27 20:26:10 +1000
committerGitHub <noreply@github.com>2017-04-27 20:26:10 +1000
commit65f90b25e0e2306ed53cad6c01e07875a0000a6c (patch)
tree9c608ab60cef618d4093f9e7de2691fad8efb91a /core/src/test/java/org/elasticsearch/common
parent8a8410b5ceac748b50424b62a99e4c312719c33f (diff)
Pass Context to ConstructingObjectParser's function (#24230)
Allow the `Context` to be used in the builder function used within ConstructingObjectParser. This facilitates scenarios where a constructor argument comes from a URL parameter, or from document id.
Diffstat (limited to 'core/src/test/java/org/elasticsearch/common')
-rw-r--r--core/src/test/java/org/elasticsearch/common/xcontent/ConstructingObjectParserTests.java29
1 files changed, 28 insertions, 1 deletions
diff --git a/core/src/test/java/org/elasticsearch/common/xcontent/ConstructingObjectParserTests.java b/core/src/test/java/org/elasticsearch/common/xcontent/ConstructingObjectParserTests.java
index 7f6187800c..3f3e8496b2 100644
--- a/core/src/test/java/org/elasticsearch/common/xcontent/ConstructingObjectParserTests.java
+++ b/core/src/test/java/org/elasticsearch/common/xcontent/ConstructingObjectParserTests.java
@@ -303,6 +303,18 @@ public class ConstructingObjectParserTests extends ESTestCase {
assertEquals(s.test, "foo");
}
+ public void testConstructObjectUsingContext() throws IOException {
+ XContentParser parser = createParser(JsonXContent.jsonXContent,
+ "{\n"
+ + " \"animal\": \"dropbear\",\n"
+ + " \"mineral\": -8\n"
+ + "}");
+ HasCtorArguments parsed = HasCtorArguments.PARSER_INT_CONTEXT.apply(parser, 42);
+ assertEquals(Integer.valueOf(42), parsed.vegetable);
+ assertEquals("dropbear", parsed.animal);
+ assertEquals(-8, parsed.mineral);
+ }
+
private static class HasCtorArguments implements ToXContent {
@Nullable
final String animal;
@@ -381,22 +393,37 @@ public class ConstructingObjectParserTests extends ESTestCase {
public static final ConstructingObjectParser<HasCtorArguments, Void> PARSER = buildParser(true, true);
public static final ConstructingObjectParser<HasCtorArguments, Void> PARSER_VEGETABLE_OPTIONAL = buildParser(true, false);
public static final ConstructingObjectParser<HasCtorArguments, Void> PARSER_ALL_OPTIONAL = buildParser(false, false);
+
public static final List<ConstructingObjectParser<HasCtorArguments, Void>> ALL_PARSERS = unmodifiableList(
Arrays.asList(PARSER, PARSER_VEGETABLE_OPTIONAL, PARSER_ALL_OPTIONAL));
+ public static final ConstructingObjectParser<HasCtorArguments, Integer> PARSER_INT_CONTEXT = buildContextParser();
+
private static ConstructingObjectParser<HasCtorArguments, Void> buildParser(boolean animalRequired,
boolean vegetableRequired) {
ConstructingObjectParser<HasCtorArguments, Void> parser = new ConstructingObjectParser<>(
"has_required_arguments", a -> new HasCtorArguments((String) a[0], (Integer) a[1]));
parser.declareString(animalRequired ? constructorArg() : optionalConstructorArg(), new ParseField("animal"));
parser.declareInt(vegetableRequired ? constructorArg() : optionalConstructorArg(), new ParseField("vegetable"));
+ declareSetters(parser);
+ return parser;
+ }
+
+ private static ConstructingObjectParser<HasCtorArguments, Integer> buildContextParser() {
+ ConstructingObjectParser<HasCtorArguments, Integer> parser = new ConstructingObjectParser<>(
+ "has_required_arguments", false, (args, ctx) -> new HasCtorArguments((String) args[0], ctx));
+ parser.declareString(constructorArg(), new ParseField("animal"));
+ declareSetters(parser);
+ return parser;
+ }
+
+ private static void declareSetters(ConstructingObjectParser<HasCtorArguments, ?> parser) {
parser.declareInt(HasCtorArguments::setMineral, new ParseField("mineral"));
parser.declareInt(HasCtorArguments::setFruit, new ParseField("fruit"));
parser.declareString(HasCtorArguments::setA, new ParseField("a"));
parser.declareString(HasCtorArguments::setB, new ParseField("b"));
parser.declareString(HasCtorArguments::setC, new ParseField("c"));
parser.declareBoolean(HasCtorArguments::setD, new ParseField("d"));
- return parser;
}
}