16
16
17
17
public class DotExpandingXContentParserTests extends ESTestCase {
18
18
19
- private void assertXContentMatches (String expected , String actual ) throws IOException {
20
- XContentParser inputParser = createParser (JsonXContent .jsonXContent , actual );
19
+ private void assertXContentMatches (String dotsExpanded , String withDots ) throws IOException {
20
+ XContentParser inputParser = createParser (JsonXContent .jsonXContent , withDots );
21
21
XContentParser expandedParser = DotExpandingXContentParser .expandDots (inputParser );
22
22
23
23
XContentBuilder actualOutput = XContentBuilder .builder (JsonXContent .jsonXContent ).copyCurrentStructure (expandedParser );
24
- assertEquals (expected , Strings .toString (actualOutput ));
24
+ assertEquals (dotsExpanded , Strings .toString (actualOutput ));
25
+
26
+ XContentParser expectedParser = createParser (JsonXContent .jsonXContent , dotsExpanded );
27
+ XContentParser actualParser = DotExpandingXContentParser .expandDots (createParser (JsonXContent .jsonXContent , withDots ));
28
+ XContentParser .Token currentToken ;
29
+ while ((currentToken = actualParser .nextToken ()) != null ) {
30
+ assertEquals (currentToken , expectedParser .nextToken ());
31
+ assertEquals (expectedParser .currentToken (), actualParser .currentToken ());
32
+ assertEquals (actualParser .currentToken ().name (), expectedParser .currentName (), actualParser .currentName ());
33
+
34
+ }
35
+ assertNull (expectedParser .nextToken ());
25
36
}
26
37
27
38
public void testEmbeddedObject () throws IOException {
@@ -33,7 +44,16 @@ public void testEmbeddedObject() throws IOException {
33
44
""" );
34
45
}
35
46
36
- public void testEmbeddedArray () throws IOException {
47
+ public void testEmbeddedObjects () throws IOException {
48
+
49
+ assertXContentMatches ("""
50
+ {"test":{"with":{"dots":{"obj":{"field":"value","array":["value",{"field":"value"}]}}}},"nodots":"value2"}\
51
+ """ , """
52
+ {"test.with.dots":{"obj":{"field":"value","array":["value",{"field":"value"}]}},"nodots":"value2"}\
53
+ """ );
54
+ }
55
+
56
+ public void testEmbeddedArrayOfValues () throws IOException {
37
57
38
58
assertXContentMatches ("""
39
59
{"test":{"with":{"dots":["field","value"]}},"nodots":"value2"}\
@@ -43,6 +63,26 @@ public void testEmbeddedArray() throws IOException {
43
63
44
64
}
45
65
66
+ public void testEmbeddedArrayOfObjects () throws IOException {
67
+
68
+ assertXContentMatches ("""
69
+ {"test":{"with":{"dots":[{"field":"value"},{"field":"value"}]}},"nodots":"value2"}\
70
+ """ , """
71
+ {"test.with.dots":[{"field":"value"},{"field":"value"}],"nodots":"value2"}\
72
+ """ );
73
+
74
+ }
75
+
76
+ public void testEmbeddedArrayMixedContent () throws IOException {
77
+
78
+ assertXContentMatches ("""
79
+ {"test":{"with":{"dots":["value",{"field":"value"}]}},"nodots":"value2"}\
80
+ """ , """
81
+ {"test.with.dots":["value",{"field":"value"}],"nodots":"value2"}\
82
+ """ );
83
+
84
+ }
85
+
46
86
public void testEmbeddedValue () throws IOException {
47
87
48
88
assertXContentMatches ("""
@@ -85,6 +125,40 @@ public void testSkipChildren() throws IOException {
85
125
assertNull (parser .nextToken ());
86
126
}
87
127
128
+ public void testSkipChildrenWithinInnerObject () throws IOException {
129
+ XContentParser parser = DotExpandingXContentParser .expandDots (createParser (JsonXContent .jsonXContent , """
130
+ { "test.with.dots" : {"obj" : {"field":"value"}}, "nodots" : "value2" }""" ));
131
+
132
+ parser .nextToken (); // start object
133
+ assertEquals (XContentParser .Token .FIELD_NAME , parser .nextToken ());
134
+ assertEquals ("test" , parser .currentName ());
135
+ assertEquals (XContentParser .Token .START_OBJECT , parser .nextToken ());
136
+ assertEquals (XContentParser .Token .START_OBJECT , parser .currentToken ());
137
+ assertEquals (XContentParser .Token .FIELD_NAME , parser .nextToken ());
138
+ assertEquals ("with" , parser .currentName ());
139
+ assertEquals (XContentParser .Token .START_OBJECT , parser .nextToken ());
140
+ assertEquals (XContentParser .Token .START_OBJECT , parser .currentToken ());
141
+ assertEquals (XContentParser .Token .FIELD_NAME , parser .nextToken ());
142
+ assertEquals ("dots" , parser .currentName ());
143
+ assertEquals (XContentParser .Token .START_OBJECT , parser .nextToken ());
144
+ assertEquals (XContentParser .Token .START_OBJECT , parser .currentToken ());
145
+ assertEquals (XContentParser .Token .FIELD_NAME , parser .nextToken ());
146
+ assertEquals ("obj" , parser .currentName ());
147
+ assertEquals (XContentParser .Token .START_OBJECT , parser .nextToken ());
148
+ assertEquals (XContentParser .Token .START_OBJECT , parser .currentToken ());
149
+ parser .skipChildren ();
150
+ assertEquals (XContentParser .Token .END_OBJECT , parser .currentToken ());
151
+ assertEquals (XContentParser .Token .END_OBJECT , parser .nextToken ());
152
+ assertEquals (XContentParser .Token .END_OBJECT , parser .nextToken ());
153
+ assertEquals (XContentParser .Token .END_OBJECT , parser .nextToken ());
154
+ assertEquals (XContentParser .Token .FIELD_NAME , parser .nextToken ());
155
+ assertEquals ("nodots" , parser .currentName ());
156
+ assertEquals (XContentParser .Token .VALUE_STRING , parser .nextToken ());
157
+ assertEquals ("value2" , parser .text ());
158
+ assertEquals (XContentParser .Token .END_OBJECT , parser .nextToken ());
159
+ assertNull (parser .nextToken ());
160
+ }
161
+
88
162
public void testNestedExpansions () throws IOException {
89
163
assertXContentMatches ("""
90
164
{"first":{"dot":{"second":{"dot":"value"},"third":"value"}},"nodots":"value"}\
0 commit comments