|  | @@ -91,10 +91,7 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testMissingAllConstructorArgs() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\n"
 | 
	
		
			
				|  |  | -                + "  \"mineral\": 1\n"
 | 
	
		
			
				|  |  | -                + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{ \"mineral\": 1 }");
 | 
	
		
			
				|  |  |          ConstructingObjectParser<HasCtorArguments, Void> objectParser = randomBoolean() ? HasCtorArguments.PARSER
 | 
	
		
			
				|  |  |                  : HasCtorArguments.PARSER_VEGETABLE_OPTIONAL;
 | 
	
		
			
				|  |  |          IllegalArgumentException e = expectThrows(IllegalArgumentException.class, () -> objectParser.apply(parser, null));
 | 
	
	
		
			
				|  | @@ -106,31 +103,20 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testMissingAllConstructorArgsButNotRequired() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                "{\n"
 | 
	
		
			
				|  |  | -              + "  \"mineral\": 1\n"
 | 
	
		
			
				|  |  | -              + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{ \"mineral\": 1 }");
 | 
	
		
			
				|  |  |          HasCtorArguments parsed = HasCtorArguments.PARSER_ALL_OPTIONAL.apply(parser, null);
 | 
	
		
			
				|  |  |          assertEquals(1, parsed.mineral);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testMissingSecondConstructorArg() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\n"
 | 
	
		
			
				|  |  | -                + "  \"mineral\": 1,\n"
 | 
	
		
			
				|  |  | -                + "  \"animal\": \"cat\"\n"
 | 
	
		
			
				|  |  | -                + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{ \"mineral\": 1, \"animal\": \"cat\" }");
 | 
	
		
			
				|  |  |          IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
 | 
	
		
			
				|  |  |                  () -> HasCtorArguments.PARSER.apply(parser, null));
 | 
	
		
			
				|  |  |          assertEquals("Required [vegetable]", e.getMessage());
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testMissingSecondConstructorArgButNotRequired() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                "{\n"
 | 
	
		
			
				|  |  | -              + "  \"mineral\": 1,\n"
 | 
	
		
			
				|  |  | -              + "  \"animal\": \"cat\"\n"
 | 
	
		
			
				|  |  | -              + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{ \"mineral\": 1, \"animal\": \"cat\" }");
 | 
	
		
			
				|  |  |          @SuppressWarnings("unchecked")
 | 
	
		
			
				|  |  |          HasCtorArguments parsed = randomFrom(HasCtorArguments.PARSER_VEGETABLE_OPTIONAL, HasCtorArguments.PARSER_ALL_OPTIONAL).apply(parser,
 | 
	
		
			
				|  |  |                  null);
 | 
	
	
		
			
				|  | @@ -139,11 +125,7 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testMissingFirstConstructorArg() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\n"
 | 
	
		
			
				|  |  | -                + "  \"mineral\": 1,\n"
 | 
	
		
			
				|  |  | -                + "  \"vegetable\": 2\n"
 | 
	
		
			
				|  |  | -                + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{ \"mineral\": 1, \"vegetable\": 2 }");
 | 
	
		
			
				|  |  |          @SuppressWarnings("unchecked")
 | 
	
		
			
				|  |  |          IllegalArgumentException e = expectThrows(IllegalArgumentException.class,
 | 
	
		
			
				|  |  |                  () -> randomFrom(HasCtorArguments.PARSER, HasCtorArguments.PARSER_VEGETABLE_OPTIONAL).apply(parser, null));
 | 
	
	
		
			
				|  | @@ -151,23 +133,19 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testMissingFirstConstructorArgButNotRequired() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                "{\n"
 | 
	
		
			
				|  |  | -              + "  \"mineral\": 1,\n"
 | 
	
		
			
				|  |  | -              + "  \"vegetable\": 2\n"
 | 
	
		
			
				|  |  | -              + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{ \"mineral\": 1, \"vegetable\": 2 }");
 | 
	
		
			
				|  |  |          HasCtorArguments parsed = HasCtorArguments.PARSER_ALL_OPTIONAL.apply(parser, null);
 | 
	
		
			
				|  |  |          assertEquals(1, parsed.mineral);
 | 
	
		
			
				|  |  |          assertEquals((Integer) 2, parsed.vegetable);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testBadParam() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\n"
 | 
	
		
			
				|  |  | -                + "  \"animal\": \"cat\",\n"
 | 
	
		
			
				|  |  | -                + "  \"vegetable\": 2,\n"
 | 
	
		
			
				|  |  | -                + "  \"a\": \"supercalifragilisticexpialidocious\"\n"
 | 
	
		
			
				|  |  | -                + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            // The following JSON needs to include newlines, in order to affect the line numbers
 | 
	
		
			
				|  |  | +            // included in the exception
 | 
	
		
			
				|  |  | +            "{\n" + "  \"animal\": \"cat\",\n" + "  \"vegetable\": 2,\n" + "  \"a\": \"supercalifragilisticexpialidocious\"\n" + "}"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |          XContentParseException e = expectThrows(XContentParseException.class,
 | 
	
		
			
				|  |  |                  () -> randomFrom(HasCtorArguments.ALL_PARSERS).apply(parser, null));
 | 
	
		
			
				|  |  |          assertThat(e.getMessage(), containsString("[has_required_arguments] failed to parse field [a]"));
 | 
	
	
		
			
				|  | @@ -177,12 +155,12 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testBadParamBeforeObjectBuilt() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\n"
 | 
	
		
			
				|  |  | -                + "  \"a\": \"supercalifragilisticexpialidocious\",\n"
 | 
	
		
			
				|  |  | -                + "  \"animal\": \"cat\"\n,"
 | 
	
		
			
				|  |  | -                + "  \"vegetable\": 2\n"
 | 
	
		
			
				|  |  | -                + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            // The following JSON needs to include newlines, in order to affect the line numbers
 | 
	
		
			
				|  |  | +            // included in the exception
 | 
	
		
			
				|  |  | +            "{\n" + "  \"a\": \"supercalifragilisticexpialidocious\",\n" + "  \"animal\": \"cat\"\n," + "  \"vegetable\": 2\n" + "}"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |          XContentParseException e = expectThrows(XContentParseException.class,
 | 
	
		
			
				|  |  |                  () -> randomFrom(HasCtorArguments.ALL_PARSERS).apply(parser, null));
 | 
	
		
			
				|  |  |          assertThat(e.getMessage(), containsString("[has_required_arguments] failed to parse field [vegetable]"));
 | 
	
	
		
			
				|  | @@ -238,40 +216,25 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |          parser.declareString(ctorArgOptional ? optionalConstructorArg() : constructorArg(), new ParseField("yeah"));
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // ctor arg first so we can test for the bug we found one time
 | 
	
		
			
				|  |  | -        XContentParser xcontent = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                "{\n"
 | 
	
		
			
				|  |  | -              + "  \"yeah\": \"!\",\n"
 | 
	
		
			
				|  |  | -              + "  \"foo\": \"foo\"\n"
 | 
	
		
			
				|  |  | -              + "}");
 | 
	
		
			
				|  |  | +        XContentParser xcontent = createParser(JsonXContent.jsonXContent, "{ \"yeah\": \"!\", \"foo\": \"foo\" }");
 | 
	
		
			
				|  |  |          CalledOneTime result = parser.apply(xcontent, null);
 | 
	
		
			
				|  |  |          assertTrue(result.fooSet);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // and ctor arg second just in case
 | 
	
		
			
				|  |  | -        xcontent = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                "{\n"
 | 
	
		
			
				|  |  | -              + "  \"foo\": \"foo\",\n"
 | 
	
		
			
				|  |  | -              + "  \"yeah\": \"!\"\n"
 | 
	
		
			
				|  |  | -              + "}");
 | 
	
		
			
				|  |  | +        xcontent = createParser(JsonXContent.jsonXContent, "{ \"foo\": \"foo\",  \"yeah\": \"!\" }");
 | 
	
		
			
				|  |  |          result = parser.apply(xcontent, null);
 | 
	
		
			
				|  |  |          assertTrue(result.fooSet);
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          if (ctorArgOptional) {
 | 
	
		
			
				|  |  |              // and without the constructor arg if we've made it optional
 | 
	
		
			
				|  |  | -            xcontent = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                    "{\n"
 | 
	
		
			
				|  |  | -                  + "  \"foo\": \"foo\"\n"
 | 
	
		
			
				|  |  | -                  + "}");
 | 
	
		
			
				|  |  | +            xcontent = createParser(JsonXContent.jsonXContent, "{ \"foo\": \"foo\" }");
 | 
	
		
			
				|  |  |              result = parser.apply(xcontent, null);
 | 
	
		
			
				|  |  |          }
 | 
	
		
			
				|  |  |          assertTrue(result.fooSet);
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testIgnoreUnknownFields() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\n"
 | 
	
		
			
				|  |  | -                + "  \"test\" : \"foo\",\n"
 | 
	
		
			
				|  |  | -                + "  \"junk\" : 2\n"
 | 
	
		
			
				|  |  | -                + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{ \"test\" : \"foo\", \"junk\" : 2 }");
 | 
	
		
			
				|  |  |          class TestStruct {
 | 
	
		
			
				|  |  |              public final String test;
 | 
	
		
			
				|  |  |              TestStruct(String test) {
 | 
	
	
		
			
				|  | @@ -286,11 +249,7 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testConstructObjectUsingContext() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -            "{\n"
 | 
	
		
			
				|  |  | -                + "  \"animal\": \"dropbear\",\n"
 | 
	
		
			
				|  |  | -                + "  \"mineral\": -8\n"
 | 
	
		
			
				|  |  | -                + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{ \"animal\": \"dropbear\", \"mineral\": -8 }");
 | 
	
		
			
				|  |  |          HasCtorArguments parsed = HasCtorArguments.PARSER_INT_CONTEXT.apply(parser, 42);
 | 
	
		
			
				|  |  |          assertEquals(Integer.valueOf(42), parsed.vegetable);
 | 
	
		
			
				|  |  |          assertEquals("dropbear", parsed.animal);
 | 
	
	
		
			
				|  | @@ -410,12 +369,10 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObject() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": {\n"
 | 
	
		
			
				|  |  | -                + "  \"a\": {}"
 | 
	
		
			
				|  |  | -                + "},\"named_in_constructor\": {\n"
 | 
	
		
			
				|  |  | -                + "  \"b\": {}"
 | 
	
		
			
				|  |  | -                + "}}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            "{\"named\": { \"a\": {} }, \"named_in_constructor\": { \"b\": {} } }"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |          NamedObjectHolder h = NamedObjectHolder.PARSER.apply(parser, null);
 | 
	
		
			
				|  |  |          assertThat(h.named, hasSize(1));
 | 
	
		
			
				|  |  |          assertEquals("a", h.named.get(0).name);
 | 
	
	
		
			
				|  | @@ -425,12 +382,10 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObjectInOrder() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"a\": {}}"
 | 
	
		
			
				|  |  | -                + "],\"named_in_constructor\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"b\": {}}"
 | 
	
		
			
				|  |  | -                + "]}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            "{\"named\": [ {\"a\": {}} ], \"named_in_constructor\": [ {\"b\": {}} ]}"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |          NamedObjectHolder h = NamedObjectHolder.PARSER.apply(parser, null);
 | 
	
		
			
				|  |  |          assertThat(h.named, hasSize(1));
 | 
	
		
			
				|  |  |          assertEquals("a", h.named.get(0).name);
 | 
	
	
		
			
				|  | @@ -440,12 +395,10 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObjectTwoFieldsInArray() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"a\": {}, \"b\": {}}"
 | 
	
		
			
				|  |  | -                + "],\"named_in_constructor\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"c\": {}}"
 | 
	
		
			
				|  |  | -                + "]}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            "{\"named\": [ {\"a\": {}, \"b\": {}}], \"named_in_constructor\": [ {\"c\": {}} ]}"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |          XContentParseException e = expectThrows(XContentParseException.class, () -> NamedObjectHolder.PARSER.apply(parser, null));
 | 
	
		
			
				|  |  |          assertThat(e.getMessage(), containsString("[named_object_holder] failed to parse field [named]"));
 | 
	
		
			
				|  |  |          assertThat(e.getCause().getMessage(),
 | 
	
	
		
			
				|  | @@ -454,12 +407,10 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObjectTwoFieldsInArrayConstructorArg() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"a\": {}}"
 | 
	
		
			
				|  |  | -                + "],\"named_in_constructor\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"c\": {}, \"d\": {}}"
 | 
	
		
			
				|  |  | -                + "]}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            "{\"named\": [ {\"a\": {}}], \"named_in_constructor\": [ {\"c\": {}, \"d\": {}} ]}"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |          XContentParseException e = expectThrows(XContentParseException.class, () -> NamedObjectHolder.PARSER.apply(parser, null));
 | 
	
		
			
				|  |  |          assertThat(e.getMessage(), containsString("[named_object_holder] failed to parse field [named_in_constructor]"));
 | 
	
		
			
				|  |  |          assertThat(e.getCause().getMessage(),
 | 
	
	
		
			
				|  | @@ -468,12 +419,7 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObjectNoFieldsInArray() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": [\n"
 | 
	
		
			
				|  |  | -                + "  {}"
 | 
	
		
			
				|  |  | -                + "],\"named_in_constructor\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"a\": {}}"
 | 
	
		
			
				|  |  | -                + "]}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{\"named\": [ {} ], \"named_in_constructor\": [ {\"a\": {}} ]}");
 | 
	
		
			
				|  |  |          XContentParseException e = expectThrows(XContentParseException.class, () -> NamedObjectHolder.PARSER.apply(parser, null));
 | 
	
		
			
				|  |  |          assertThat(e.getMessage(), containsString("[named_object_holder] failed to parse field [named]"));
 | 
	
		
			
				|  |  |          assertThat(e.getCause().getMessage(),
 | 
	
	
		
			
				|  | @@ -482,12 +428,7 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObjectNoFieldsInArrayConstructorArg() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"a\": {}}"
 | 
	
		
			
				|  |  | -                + "],\"named_in_constructor\": [\n"
 | 
	
		
			
				|  |  | -                + "  {}"
 | 
	
		
			
				|  |  | -                + "]}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(JsonXContent.jsonXContent, "{\"named\": [ {\"a\": {}} ], \"named_in_constructor\": [ {} ]}");
 | 
	
		
			
				|  |  |          XContentParseException e = expectThrows(XContentParseException.class, () -> NamedObjectHolder.PARSER.apply(parser, null));
 | 
	
		
			
				|  |  |          assertThat(e.getMessage(), containsString("[named_object_holder] failed to parse field [named_in_constructor]"));
 | 
	
		
			
				|  |  |          assertThat(e.getCause().getMessage(),
 | 
	
	
		
			
				|  | @@ -496,12 +437,10 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObjectJunkInArray() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": [\n"
 | 
	
		
			
				|  |  | -                + "  \"junk\""
 | 
	
		
			
				|  |  | -                + "],\"named_in_constructor\": [\n"
 | 
	
		
			
				|  |  | -                + " {\"a\": {}}"
 | 
	
		
			
				|  |  | -                + "]}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            "{\"named\": [ \"junk\" ], \"named_in_constructor\": [ {\"a\": {}} ]}"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |          XContentParseException e = expectThrows(XContentParseException.class, () -> NamedObjectHolder.PARSER.apply(parser, null));
 | 
	
		
			
				|  |  |          assertThat(e.getMessage(), containsString("[named_object_holder] failed to parse field [named]"));
 | 
	
		
			
				|  |  |          assertThat(e.getCause().getMessage(),
 | 
	
	
		
			
				|  | @@ -510,12 +449,10 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObjectJunkInArrayConstructorArg() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"a\": {}}"
 | 
	
		
			
				|  |  | -                + "],\"named_in_constructor\": [\n"
 | 
	
		
			
				|  |  | -                + "  \"junk\""
 | 
	
		
			
				|  |  | -                + "]}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            "{\"named\": [ {\"a\": {}} ], \"named_in_constructor\": [ \"junk\" ]}"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |          XContentParseException e = expectThrows(XContentParseException.class, () -> NamedObjectHolder.PARSER.apply(parser, null));
 | 
	
		
			
				|  |  |          assertThat(e.getMessage(), containsString("[named_object_holder] failed to parse field [named_in_constructor]"));
 | 
	
		
			
				|  |  |          assertThat(e.getCause().getMessage(),
 | 
	
	
		
			
				|  | @@ -524,11 +461,10 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObjectInOrderNotSupported() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"a\": {}}"
 | 
	
		
			
				|  |  | -                + "],\"named_in_constructor\": {\"b\": {}}"
 | 
	
		
			
				|  |  | -                + "}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            "{\"named\": [\n" + "  {\"a\": {}}" + "],\"named_in_constructor\": {\"b\": {}}" + "}"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // Create our own parser for this test so we can disable support for the "ordered" mode specified by the array above
 | 
	
		
			
				|  |  |          @SuppressWarnings("unchecked")
 | 
	
	
		
			
				|  | @@ -545,11 +481,10 @@ public class ConstructingObjectParserTests extends ESTestCase {
 | 
	
		
			
				|  |  |      }
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |      public void testParseNamedObjectInOrderNotSupportedConstructorArg() throws IOException {
 | 
	
		
			
				|  |  | -        XContentParser parser = createParser(JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | -                  "{\"named\": {\"a\": {}}"
 | 
	
		
			
				|  |  | -                + ",\"named_in_constructor\": [\n"
 | 
	
		
			
				|  |  | -                + "  {\"b\": {}}"
 | 
	
		
			
				|  |  | -                + "]}");
 | 
	
		
			
				|  |  | +        XContentParser parser = createParser(
 | 
	
		
			
				|  |  | +            JsonXContent.jsonXContent,
 | 
	
		
			
				|  |  | +            "{\"named\": {\"a\": {}}, \"named_in_constructor\": [ {\"b\": {}} ]}"
 | 
	
		
			
				|  |  | +        );
 | 
	
		
			
				|  |  |  
 | 
	
		
			
				|  |  |          // Create our own parser for this test so we can disable support for the "ordered" mode specified by the array above
 | 
	
		
			
				|  |  |          @SuppressWarnings("unchecked")
 |