@@ -98,13 +98,19 @@ public void shouldHandleUnmatchedLiteralsAndEntitiesInElseFlattenedSource() {
98
98
private void testElseData (final String elseKeyword ) {
99
99
assertMorph (receiver ,
100
100
"<rules>" +
101
+ " <entity name='Germany'>" +
102
+ " <data source='Germany.Sylt' name='Hawaii' />" +
103
+ " <data source='Germany.Borkum' />" +
104
+ " </entity>" +
101
105
" <data source='" + elseKeyword + "'/>" +
102
106
"</rules>" ,
103
107
i -> {
104
108
i .startRecord ("1" );
105
109
i .literal ("Shikotan" , "Aekap" );
106
110
i .startEntity ("Germany" );
107
111
i .literal ("Langeoog" , "Moin" );
112
+ i .literal ("Sylt" , "Aloha" );
113
+ i .literal ("Borkum" , "Tach" );
108
114
i .endEntity ();
109
115
i .startEntity ("Germany" );
110
116
i .literal ("Baltrum" , "Moin Moin" );
@@ -115,12 +121,97 @@ private void testElseData(final String elseKeyword) {
115
121
o .get ().startRecord ("1" );
116
122
o .get ().literal ("Shikotan" , "Aekap" );
117
123
o .get ().literal ("Germany.Langeoog" , "Moin" );
124
+ o .get ().startEntity ("Germany" );
125
+ o .get ().literal ("Hawaii" , "Aloha" );
126
+ o .get ().literal ("Germany.Borkum" , "Tach" );
127
+ o .get ().endEntity ();
118
128
o .get ().literal ("Germany.Baltrum" , "Moin Moin" );
119
129
o .get ().endRecord ();
120
130
}
121
131
);
122
132
}
123
133
134
+ @ Test
135
+ public void issue338_shouldPreserveSameEntitiesInElseNestedSource () {
136
+ assertMorph (receiver ,
137
+ "<rules>" +
138
+ " <data source='_elseNested' />" +
139
+ "</rules>" ,
140
+ i -> {
141
+ i .startRecord ("1" );
142
+ i .literal ("lit1" , "val1" );
143
+ i .startEntity ("ent1" );
144
+ i .literal ("lit2" , "val2" );
145
+ i .literal ("lit3" , "val3" );
146
+ i .endEntity ();
147
+ i .literal ("lit4" , "val4" );
148
+ i .startEntity ("ent2" );
149
+ i .literal ("lit5" , "val5" );
150
+ i .literal ("lit6" , "val6" );
151
+ i .literal ("lit7" , "val7" );
152
+ i .endEntity ();
153
+ i .startEntity ("ent2" ); // sic!
154
+ i .literal ("lit8" , "val8" );
155
+ i .literal ("lit9" , "val9" );
156
+ i .endEntity ();
157
+ i .endRecord ();
158
+ i .startRecord ("2" );
159
+ i .startEntity ("ent1" );
160
+ i .literal ("lit1" , "val1" );
161
+ i .literal ("lit2" , "val2" );
162
+ i .endEntity ();
163
+ i .startEntity ("ent2" );
164
+ i .literal ("lit3" , "val3" );
165
+ i .literal ("lit4" , "val4" );
166
+ i .literal ("lit5" , "val5" );
167
+ i .literal ("lit6" , "val6" );
168
+ i .endEntity ();
169
+ i .startEntity ("ent3" );
170
+ i .literal ("lit7" , "val7" );
171
+ i .literal ("lit8" , "val8" );
172
+ i .endEntity ();
173
+ i .literal ("lit9" , "val9" );
174
+ i .endRecord ();
175
+ },
176
+ o -> {
177
+ o .get ().startRecord ("1" );
178
+ o .get ().literal ("lit1" , "val1" );
179
+ o .get ().startEntity ("ent1" );
180
+ o .get ().literal ("lit2" , "val2" );
181
+ o .get ().literal ("lit3" , "val3" );
182
+ o .get ().endEntity ();
183
+ o .get ().literal ("lit4" , "val4" );
184
+ o .get ().startEntity ("ent2" );
185
+ o .get ().literal ("lit5" , "val5" );
186
+ o .get ().literal ("lit6" , "val6" );
187
+ o .get ().literal ("lit7" , "val7" );
188
+ o .get ().endEntity ();
189
+ o .get ().startEntity ("ent2" );
190
+ o .get ().literal ("lit8" , "val8" );
191
+ o .get ().literal ("lit9" , "val9" );
192
+ o .get ().endEntity ();
193
+ o .get ().endRecord ();
194
+ o .get ().startRecord ("2" );
195
+ o .get ().startEntity ("ent1" );
196
+ o .get ().literal ("lit1" , "val1" );
197
+ o .get ().literal ("lit2" , "val2" );
198
+ o .get ().endEntity ();
199
+ o .get ().startEntity ("ent2" );
200
+ o .get ().literal ("lit3" , "val3" );
201
+ o .get ().literal ("lit4" , "val4" );
202
+ o .get ().literal ("lit5" , "val5" );
203
+ o .get ().literal ("lit6" , "val6" );
204
+ o .get ().endEntity ();
205
+ o .get ().startEntity ("ent3" );
206
+ o .get ().literal ("lit7" , "val7" );
207
+ o .get ().literal ("lit8" , "val8" );
208
+ o .get ().endEntity ();
209
+ o .get ().literal ("lit9" , "val9" );
210
+ o .get ().endRecord ();
211
+ }
212
+ );
213
+ }
214
+
124
215
@ Test
125
216
public void shouldHandleUnmatchedLiteralsAndEntitiesInElseNestedSource () {
126
217
assertMorph (receiver ,
@@ -147,13 +238,118 @@ public void shouldHandleUnmatchedLiteralsAndEntitiesInElseNestedSource() {
147
238
o .get ().literal ("Shikotan" , "Aekap" );
148
239
o .get ().startEntity ("Germany" );
149
240
o .get ().literal ("Langeoog" , "Moin" );
241
+ o .get ().literal ("Baltrum" , "Moin Moin" );
242
+ o .get ().endEntity ();
243
+ o .get ().startEntity ("USA" );
244
+ o .get ().literal ("Hawaii" , "Aloha" );
150
245
o .get ().endEntity ();
246
+ o .get ().endRecord ();
247
+ }
248
+ );
249
+ }
250
+
251
+ @ Test
252
+ public void shouldHandlePartiallyUnmatchedLiteralsAndEntitiesInElseNestedSource () {
253
+ assertMorph (receiver ,
254
+ "<rules>" +
255
+ " <entity name='USA1'>" +
256
+ " <data source='USA1.Sylt' name='Hawaii' />" +
257
+ " </entity>" +
258
+ " <entity name='USA2'>" +
259
+ " <data source='USA2.Sylt' name='Hawaii' />" +
260
+ " </entity>" +
261
+ " <entity name='USA3'>" +
262
+ " <data source='USA3.Sylt' name='Hawaii' />" +
263
+ " </entity>" +
264
+ " <entity name='USA4'>" +
265
+ " <data source='USA4.Sylt' name='Hawaii' />" +
266
+ " </entity>" +
267
+ " <data source='_elseNested' />" +
268
+ "</rules>" ,
269
+ i -> {
270
+ i .startRecord ("1" );
271
+ i .literal ("Shikotan" , "Aekap" );
272
+ i .startEntity ("Germany" );
273
+ i .literal ("Langeoog" , "Moin" );
274
+ i .literal ("Baltrum" , "Moin Moin" );
275
+ i .endEntity ();
276
+ i .startEntity ("USA1" );
277
+ i .literal ("Sylt" , "Aloha" );
278
+ i .endEntity ();
279
+ i .startEntity ("USA2" );
280
+ i .literal ("Sylt" , "Aloha" );
281
+ i .literal ("Langeoog" , "Moin" );
282
+ i .literal ("Baltrum" , "Moin Moin" );
283
+ i .endEntity ();
284
+ i .startEntity ("USA3" );
285
+ i .literal ("Langeoog" , "Moin" );
286
+ i .literal ("Sylt" , "Aloha" );
287
+ i .literal ("Baltrum" , "Moin Moin" );
288
+ i .endEntity ();
289
+ i .startEntity ("USA4" );
290
+ i .literal ("Langeoog" , "Moin" );
291
+ i .literal ("Baltrum" , "Moin Moin" );
292
+ i .literal ("Sylt" , "Aloha" );
293
+ i .endEntity ();
294
+ i .endRecord ();
295
+ },
296
+ (o , f ) -> {
297
+ final boolean coordinatesWithEntity = false ;
298
+ final boolean separatesFromEntity = false ;
299
+ o .get ().startRecord ("1" );
300
+ o .get ().literal ("Shikotan" , "Aekap" );
151
301
o .get ().startEntity ("Germany" );
302
+ o .get ().literal ("Langeoog" , "Moin" );
152
303
o .get ().literal ("Baltrum" , "Moin Moin" );
153
304
o .get ().endEntity ();
154
- o .get ().startEntity ("USA" );
305
+ o .get ().startEntity ("USA1" );
306
+ o .get ().literal ("Hawaii" , "Aloha" );
307
+ o .get ().endEntity ();
308
+ o .get ().startEntity ("USA2" );
309
+ o .get ().literal ("Hawaii" , "Aloha" );
310
+ if (!coordinatesWithEntity ) {
311
+ o .get ().endEntity ();
312
+ o .get ().startEntity ("USA2" );
313
+ }
314
+ o .get ().literal ("Langeoog" , "Moin" );
315
+ o .get ().literal ("Baltrum" , "Moin Moin" );
316
+ o .get ().endEntity ();
317
+ o .get ().startEntity ("USA3" );
318
+ o .get ().literal ("Langeoog" , "Moin" );
319
+ if (!coordinatesWithEntity ) {
320
+ o .get ().startEntity ("USA3" );
321
+ }
322
+ else if (separatesFromEntity ) {
323
+ o .get ().endEntity ();
324
+ o .get ().startEntity ("USA3" );
325
+ }
326
+ o .get ().literal ("Hawaii" , "Aloha" );
327
+ if (!coordinatesWithEntity ) {
328
+ o .get ().endEntity ();
329
+ }
330
+ else if (separatesFromEntity ) {
331
+ o .get ().endEntity ();
332
+ o .get ().startEntity ("USA3" );
333
+ }
334
+ o .get ().literal ("Baltrum" , "Moin Moin" );
335
+ o .get ().endEntity ();
336
+ o .get ().startEntity ("USA4" );
337
+ o .get ().literal ("Langeoog" , "Moin" );
338
+ o .get ().literal ("Baltrum" , "Moin Moin" );
339
+ if (!coordinatesWithEntity ) {
340
+ o .get ().startEntity ("USA4" );
341
+ }
342
+ else if (separatesFromEntity ) {
343
+ o .get ().endEntity ();
344
+ o .get ().startEntity ("USA4" );
345
+ }
155
346
o .get ().literal ("Hawaii" , "Aloha" );
347
+ if (!coordinatesWithEntity ) {
348
+ f .apply (2 ).endEntity ();
349
+ }
350
+ else {
156
351
o .get ().endEntity ();
352
+ }
157
353
o .get ().endRecord ();
158
354
}
159
355
);
0 commit comments