diff options
Diffstat (limited to 'core/src/test/java/org/elasticsearch/common/xcontent/support/XContentMapValuesTests.java')
-rw-r--r-- | core/src/test/java/org/elasticsearch/common/xcontent/support/XContentMapValuesTests.java | 173 |
1 files changed, 33 insertions, 140 deletions
diff --git a/core/src/test/java/org/elasticsearch/common/xcontent/support/XContentMapValuesTests.java b/core/src/test/java/org/elasticsearch/common/xcontent/support/XContentMapValuesTests.java index 3a1144afe9..ce092e6f21 100644 --- a/core/src/test/java/org/elasticsearch/common/xcontent/support/XContentMapValuesTests.java +++ b/core/src/test/java/org/elasticsearch/common/xcontent/support/XContentMapValuesTests.java @@ -21,14 +21,12 @@ package org.elasticsearch.common.xcontent.support; import org.elasticsearch.common.Strings; import org.elasticsearch.common.collect.Tuple; +import org.elasticsearch.common.xcontent.ToXContentObject; import org.elasticsearch.common.xcontent.XContentBuilder; import org.elasticsearch.common.xcontent.XContentFactory; -import org.elasticsearch.common.xcontent.XContentHelper; import org.elasticsearch.common.xcontent.XContentParser; import org.elasticsearch.common.xcontent.XContentType; import org.elasticsearch.common.xcontent.json.JsonXContent; -import org.elasticsearch.test.ESTestCase; -import org.hamcrest.Matchers; import java.io.IOException; import java.util.Arrays; @@ -36,9 +34,10 @@ import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.Set; -import static java.util.Collections.emptyMap; -import static java.util.Collections.singletonMap; +import static org.elasticsearch.common.xcontent.XContentHelper.convertToMap; +import static org.elasticsearch.common.xcontent.XContentHelper.toXContent; import static org.hamcrest.Matchers.hasEntry; import static org.hamcrest.Matchers.hasKey; import static org.hamcrest.Matchers.hasSize; @@ -46,60 +45,29 @@ import static org.hamcrest.Matchers.instanceOf; import static org.hamcrest.Matchers.nullValue; import static org.hamcrest.core.IsEqual.equalTo; -public class XContentMapValuesTests extends ESTestCase { - public void testFilter() throws Exception { - XContentBuilder builder = XContentFactory.jsonBuilder().startObject() - .field("test1", "value1") - .field("test2", "value2") - .field("something_else", "value3") - .endObject(); - - Map<String, Object> source; - try (XContentParser parser = createParser(JsonXContent.jsonXContent, builder.string())) { - source = parser.map(); - } - Map<String, Object> filter = XContentMapValues.filter(source, new String[]{"test1"}, Strings.EMPTY_ARRAY); - assertThat(filter.size(), equalTo(1)); - assertThat(filter.get("test1").toString(), equalTo("value1")); - - filter = XContentMapValues.filter(source, new String[]{"test*"}, Strings.EMPTY_ARRAY); - assertThat(filter.size(), equalTo(2)); - assertThat(filter.get("test1").toString(), equalTo("value1")); - assertThat(filter.get("test2").toString(), equalTo("value2")); +public class XContentMapValuesTests extends AbstractFilteringTestCase { - filter = XContentMapValues.filter(source, Strings.EMPTY_ARRAY, new String[]{"test1"}); - assertThat(filter.size(), equalTo(2)); - assertThat(filter.get("test2").toString(), equalTo("value2")); - assertThat(filter.get("something_else").toString(), equalTo("value3")); + @Override + protected void testFilter(Builder expected, Builder actual, Set<String> includes, Set<String> excludes) throws IOException { + final XContentType xContentType = randomFrom(XContentType.values()); + final boolean humanReadable = randomBoolean(); - // more complex object... - builder = XContentFactory.jsonBuilder().startObject() - .startObject("path1") - .startArray("path2") - .startObject().field("test", "value1").endObject() - .startObject().field("test", "value2").endObject() - .endArray() - .endObject() - .field("test1", "value1") - .endObject(); - - try (XContentParser parser = createParser(JsonXContent.jsonXContent, builder.string())) { - source = parser.map(); + String[] sourceIncludes; + if (includes == null) { + sourceIncludes = randomBoolean() ? Strings.EMPTY_ARRAY : null; + } else { + sourceIncludes = includes.toArray(new String[includes.size()]); + } + String[] sourceExcludes; + if (excludes == null) { + sourceExcludes = randomBoolean() ? Strings.EMPTY_ARRAY : null; + } else { + sourceExcludes = excludes.toArray(new String[excludes.size()]); } - filter = XContentMapValues.filter(source, new String[]{"path1"}, Strings.EMPTY_ARRAY); - assertThat(filter.size(), equalTo(1)); - - filter = XContentMapValues.filter(source, new String[]{"path1*"}, Strings.EMPTY_ARRAY); - assertThat(filter.get("path1"), equalTo(source.get("path1"))); - assertThat(filter.containsKey("test1"), equalTo(false)); - - filter = XContentMapValues.filter(source, new String[]{"test1*"}, Strings.EMPTY_ARRAY); - assertThat(filter.get("test1"), equalTo(source.get("test1"))); - assertThat(filter.containsKey("path1"), equalTo(false)); - filter = XContentMapValues.filter(source, new String[]{"path1.path2.*"}, Strings.EMPTY_ARRAY); - assertThat(filter.get("path1"), equalTo(source.get("path1"))); - assertThat(filter.containsKey("test1"), equalTo(false)); + assertEquals("Filtered map must be equal to the expected map", + toMap(expected, xContentType, humanReadable), + XContentMapValues.filter(toMap(actual, xContentType, humanReadable), sourceIncludes, sourceExcludes)); } @SuppressWarnings({"unchecked"}) @@ -376,7 +344,6 @@ public class XContentMapValuesTests extends ESTestCase { Map<String, Object> filteredMap = XContentMapValues.filter(map, Strings.EMPTY_ARRAY, Strings.EMPTY_ARRAY); assertThat(filteredMap.size(), equalTo(1)); assertThat(filteredMap.get("field").toString(), equalTo("value")); - } public void testThatFilterIncludesEmptyObjectWhenUsingIncludes() throws Exception { @@ -385,7 +352,7 @@ public class XContentMapValuesTests extends ESTestCase { .endObject() .endObject(); - Tuple<XContentType, Map<String, Object>> mapTuple = XContentHelper.convertToMap(builder.bytes(), true, builder.contentType()); + Tuple<XContentType, Map<String, Object>> mapTuple = convertToMap(builder.bytes(), true, builder.contentType()); Map<String, Object> filteredSource = XContentMapValues.filter(mapTuple.v2(), new String[]{"obj"}, Strings.EMPTY_ARRAY); assertThat(mapTuple.v2(), equalTo(filteredSource)); @@ -397,7 +364,7 @@ public class XContentMapValuesTests extends ESTestCase { .endObject() .endObject(); - Tuple<XContentType, Map<String, Object>> mapTuple = XContentHelper.convertToMap(builder.bytes(), true, builder.contentType()); + Tuple<XContentType, Map<String, Object>> mapTuple = convertToMap(builder.bytes(), true, builder.contentType()); Map<String, Object> filteredSource = XContentMapValues.filter(mapTuple.v2(), Strings.EMPTY_ARRAY, new String[]{"nonExistingField"}); assertThat(mapTuple.v2(), equalTo(filteredSource)); @@ -410,7 +377,7 @@ public class XContentMapValuesTests extends ESTestCase { .endObject() .endObject(); - Tuple<XContentType, Map<String, Object>> mapTuple = XContentHelper.convertToMap(builder.bytes(), true, builder.contentType()); + Tuple<XContentType, Map<String, Object>> mapTuple = convertToMap(builder.bytes(), true, builder.contentType()); Map<String, Object> filteredSource = XContentMapValues.filter(mapTuple.v2(), Strings.EMPTY_ARRAY, new String[]{"obj.f1"}); assertThat(filteredSource.size(), equalTo(1)); @@ -430,7 +397,7 @@ public class XContentMapValuesTests extends ESTestCase { .endObject(); // implicit include - Tuple<XContentType, Map<String, Object>> mapTuple = XContentHelper.convertToMap(builder.bytes(), true, builder.contentType()); + Tuple<XContentType, Map<String, Object>> mapTuple = convertToMap(builder.bytes(), true, builder.contentType()); Map<String, Object> filteredSource = XContentMapValues.filter(mapTuple.v2(), Strings.EMPTY_ARRAY, new String[]{"*.obj2"}); assertThat(filteredSource.size(), equalTo(1)); @@ -460,7 +427,7 @@ public class XContentMapValuesTests extends ESTestCase { .endObject() .endObject(); - Tuple<XContentType, Map<String, Object>> mapTuple = XContentHelper.convertToMap(builder.bytes(), true, builder.contentType()); + Tuple<XContentType, Map<String, Object>> mapTuple = convertToMap(builder.bytes(), true, builder.contentType()); Map<String, Object> filteredSource = XContentMapValues.filter(mapTuple.v2(), new String[]{"*.obj2"}, Strings.EMPTY_ARRAY); assertThat(filteredSource.size(), equalTo(1)); @@ -470,85 +437,6 @@ public class XContentMapValuesTests extends ESTestCase { assertThat(((Map) ((Map) filteredSource.get("obj1")).get("obj2")).size(), equalTo(0)); } - public void testEmptyList() throws IOException { - XContentBuilder builder = XContentFactory.jsonBuilder().startObject() - .startArray("some_array") - .endArray().endObject(); - - try (XContentParser parser = createParser(JsonXContent.jsonXContent, builder.string())) { - assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("some_array", parser.currentName()); - if (random().nextBoolean()) { - // sometimes read the start array token, sometimes not - assertEquals(XContentParser.Token.START_ARRAY, parser.nextToken()); - } - assertEquals(Collections.emptyList(), parser.list()); - } - } - - public void testSimpleList() throws IOException { - XContentBuilder builder = XContentFactory.jsonBuilder().startObject() - .startArray("some_array") - .value(1) - .value(3) - .value(0) - .endArray().endObject(); - - try (XContentParser parser = createParser(JsonXContent.jsonXContent, builder.string())) { - assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("some_array", parser.currentName()); - if (random().nextBoolean()) { - // sometimes read the start array token, sometimes not - assertEquals(XContentParser.Token.START_ARRAY, parser.nextToken()); - } - assertEquals(Arrays.asList(1, 3, 0), parser.list()); - } - } - - public void testNestedList() throws IOException { - XContentBuilder builder = XContentFactory.jsonBuilder().startObject() - .startArray("some_array") - .startArray().endArray() - .startArray().value(1).value(3).endArray() - .startArray().value(2).endArray() - .endArray().endObject(); - - try (XContentParser parser = createParser(JsonXContent.jsonXContent, builder.string())) { - assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("some_array", parser.currentName()); - if (random().nextBoolean()) { - // sometimes read the start array token, sometimes not - assertEquals(XContentParser.Token.START_ARRAY, parser.nextToken()); - } - assertEquals( - Arrays.asList(Collections.<Integer>emptyList(), Arrays.asList(1, 3), Arrays.asList(2)), - parser.list()); - } - } - - public void testNestedMapInList() throws IOException { - XContentBuilder builder = XContentFactory.jsonBuilder().startObject() - .startArray("some_array") - .startObject().field("foo", "bar").endObject() - .startObject().endObject() - .endArray().endObject(); - - try (XContentParser parser = createParser(JsonXContent.jsonXContent, builder.string())) { - assertEquals(XContentParser.Token.START_OBJECT, parser.nextToken()); - assertEquals(XContentParser.Token.FIELD_NAME, parser.nextToken()); - assertEquals("some_array", parser.currentName()); - if (random().nextBoolean()) { - // sometimes read the start array token, sometimes not - assertEquals(XContentParser.Token.START_ARRAY, parser.nextToken()); - } - assertEquals( - Arrays.asList(singletonMap("foo", "bar"), emptyMap()), - parser.list()); - } - } public void testDotsInFieldNames() { Map<String, Object> map = new HashMap<>(); @@ -599,4 +487,9 @@ public class XContentMapValuesTests extends ESTestCase { expected.put("photosCount", 2); assertEquals(expected, filtered); } + + private static Map<String, Object> toMap(Builder test, XContentType xContentType, boolean humanReadable) throws IOException { + ToXContentObject toXContent = (builder, params) -> test.apply(builder); + return convertToMap(toXContent(toXContent, xContentType, humanReadable), true, xContentType).v2(); + } } |