@@ -217,6 +217,226 @@ public void issue338_shouldPreserveSameEntitiesInElseNestedSource() {
217
217
);
218
218
}
219
219
220
+ @ Test
221
+ public void issue374_shouldPropagateArrayMarkersInElseNestedSource () {
222
+ assertMorph (receiver ,
223
+ "<rules>" +
224
+ " <data source='_elseNested' />" +
225
+ "</rules>" ,
226
+ i -> {
227
+ i .startRecord ("1" );
228
+ i .startEntity ("author[]" );
229
+ i .startEntity ("" );
230
+ i .literal ("@type" , "Person" );
231
+ i .literal ("name" , "Katja Königstein-Lüdersdorff" );
232
+ i .endEntity ();
233
+ i .startEntity ("" );
234
+ i .literal ("@type" , "Person" );
235
+ i .literal ("name" , "Corinna Peters" );
236
+ i .endEntity ();
237
+ i .startEntity ("" );
238
+ i .literal ("@type" , "Person" );
239
+ i .literal ("name" , "Oleg Tjulenev" );
240
+ i .endEntity ();
241
+ i .startEntity ("" );
242
+ i .literal ("@type" , "Person" );
243
+ i .literal ("name" , "Claudia Vogeler" );
244
+ i .endEntity ();
245
+ i .endEntity ();
246
+ i .endRecord ();
247
+ },
248
+ (o , f ) -> {
249
+ o .get ().startRecord ("1" );
250
+ o .get ().startEntity ("author[]" );
251
+ o .get ().startEntity ("" );
252
+ o .get ().literal ("@type" , "Person" );
253
+ o .get ().literal ("name" , "Katja Königstein-Lüdersdorff" );
254
+ o .get ().endEntity ();
255
+ o .get ().startEntity ("" );
256
+ o .get ().literal ("@type" , "Person" );
257
+ o .get ().literal ("name" , "Corinna Peters" );
258
+ o .get ().endEntity ();
259
+ o .get ().startEntity ("" );
260
+ o .get ().literal ("@type" , "Person" );
261
+ o .get ().literal ("name" , "Oleg Tjulenev" );
262
+ o .get ().endEntity ();
263
+ o .get ().startEntity ("" );
264
+ o .get ().literal ("@type" , "Person" );
265
+ o .get ().literal ("name" , "Claudia Vogeler" );
266
+ f .apply (2 ).endEntity ();
267
+ o .get ().endRecord ();
268
+ }
269
+ );
270
+ }
271
+
272
+ @ Test
273
+ public void issue378_shouldOutputMoreThanTwoLevelsInElseNestedSource () {
274
+ assertMorph (receiver ,
275
+ "<rules>" +
276
+ " <data source='_elseNested' />" +
277
+ "</rules>" ,
278
+ i -> {
279
+ i .startRecord ("1" );
280
+ i .startEntity ("mods" );
281
+ i .literal ("ID" , "duepublico_mods_00074526" );
282
+ i .startEntity ("name" );
283
+ i .literal ("type" , "personal" );
284
+ i .literal ("type" , "simple" );
285
+ i .startEntity ("displayForm" );
286
+ i .literal ("value" , "Armbruster, André" );
287
+ i .endEntity ();
288
+ i .startEntity ("role" );
289
+ i .startEntity ("roleTerm" );
290
+ i .literal ("authority" , "marcrelator" );
291
+ i .literal ("type" , "code" );
292
+ i .literal ("value" , "aut" );
293
+ i .endEntity ();
294
+ i .startEntity ("roleTerm" );
295
+ i .literal ("authority" , "marcrelator" );
296
+ i .literal ("type" , "text" );
297
+ i .literal ("value" , "Author" );
298
+ i .endEntity ();
299
+ i .endEntity ();
300
+ i .startEntity ("nameIdentifier" );
301
+ i .literal ("type" , "gnd" );
302
+ i .literal ("value" , "1081830107" );
303
+ i .endEntity ();
304
+ i .startEntity ("namePart" );
305
+ i .literal ("type" , "family" );
306
+ i .literal ("value" , "Armbruster" );
307
+ i .endEntity ();
308
+ i .startEntity ("namePart" );
309
+ i .literal ("type" , "given" );
310
+ i .literal ("value" , "André" );
311
+ i .endEntity ();
312
+ i .endEntity ();
313
+ i .endEntity ();
314
+ i .endRecord ();
315
+ },
316
+ (o , f ) -> {
317
+ o .get ().startRecord ("1" );
318
+ o .get ().startEntity ("mods" );
319
+ o .get ().literal ("ID" , "duepublico_mods_00074526" );
320
+ o .get ().startEntity ("name" );
321
+ o .get ().literal ("type" , "personal" );
322
+ o .get ().literal ("type" , "simple" );
323
+ o .get ().startEntity ("displayForm" );
324
+ o .get ().literal ("value" , "Armbruster, André" );
325
+ o .get ().endEntity ();
326
+ o .get ().startEntity ("role" );
327
+ o .get ().startEntity ("roleTerm" );
328
+ o .get ().literal ("authority" , "marcrelator" );
329
+ o .get ().literal ("type" , "code" );
330
+ o .get ().literal ("value" , "aut" );
331
+ o .get ().endEntity ();
332
+ o .get ().startEntity ("roleTerm" );
333
+ o .get ().literal ("authority" , "marcrelator" );
334
+ o .get ().literal ("type" , "text" );
335
+ o .get ().literal ("value" , "Author" );
336
+ f .apply (2 ).endEntity ();
337
+ o .get ().startEntity ("nameIdentifier" );
338
+ o .get ().literal ("type" , "gnd" );
339
+ o .get ().literal ("value" , "1081830107" );
340
+ o .get ().endEntity ();
341
+ o .get ().startEntity ("namePart" );
342
+ o .get ().literal ("type" , "family" );
343
+ o .get ().literal ("value" , "Armbruster" );
344
+ o .get ().endEntity ();
345
+ o .get ().startEntity ("namePart" );
346
+ o .get ().literal ("type" , "given" );
347
+ o .get ().literal ("value" , "André" );
348
+ f .apply (3 ).endEntity ();
349
+ o .get ().endRecord ();
350
+ }
351
+ );
352
+ }
353
+
354
+ @ Test
355
+ public void shouldOutputMoreThanTwoLevelsInElseNestedSourceWithModifications () {
356
+ assertMorph (receiver ,
357
+ "<rules>" +
358
+ " <entity name='name' flushWith='record'>" +
359
+ " <data source='mods.name.displayForm.value' name='displayForm' />" +
360
+ " <data source='mods.name.namePart.value' />" +
361
+ " </entity>" +
362
+ " <data source='_elseNested' />" +
363
+ "</rules>" ,
364
+ i -> {
365
+ i .startRecord ("1" );
366
+ i .startEntity ("mods" );
367
+ i .literal ("ID" , "duepublico_mods_00074526" );
368
+ i .startEntity ("name" );
369
+ i .literal ("type" , "personal" );
370
+ i .literal ("type" , "simple" );
371
+ i .startEntity ("displayForm" );
372
+ i .literal ("value" , "Armbruster, André" );
373
+ i .endEntity ();
374
+ i .startEntity ("role" );
375
+ i .startEntity ("roleTerm" );
376
+ i .literal ("authority" , "marcrelator" );
377
+ i .literal ("type" , "code" );
378
+ i .literal ("value" , "aut" );
379
+ i .endEntity ();
380
+ i .startEntity ("roleTerm" );
381
+ i .literal ("authority" , "marcrelator" );
382
+ i .literal ("type" , "text" );
383
+ i .literal ("value" , "Author" );
384
+ i .endEntity ();
385
+ i .endEntity ();
386
+ i .startEntity ("nameIdentifier" );
387
+ i .literal ("type" , "gnd" );
388
+ i .literal ("value" , "1081830107" );
389
+ i .endEntity ();
390
+ i .startEntity ("namePart" );
391
+ i .literal ("type" , "family" );
392
+ i .literal ("value" , "Armbruster" );
393
+ i .endEntity ();
394
+ i .startEntity ("namePart" );
395
+ i .literal ("type" , "given" );
396
+ i .literal ("value" , "André" );
397
+ i .endEntity ();
398
+ i .endEntity ();
399
+ i .endEntity ();
400
+ i .endRecord ();
401
+ },
402
+ (o , f ) -> {
403
+ o .get ().startRecord ("1" );
404
+ o .get ().startEntity ("mods" );
405
+ o .get ().literal ("ID" , "duepublico_mods_00074526" );
406
+ o .get ().startEntity ("name" );
407
+ o .get ().literal ("type" , "personal" );
408
+ o .get ().literal ("type" , "simple" );
409
+ o .get ().startEntity ("role" );
410
+ o .get ().startEntity ("roleTerm" );
411
+ o .get ().literal ("authority" , "marcrelator" );
412
+ o .get ().literal ("type" , "code" );
413
+ o .get ().literal ("value" , "aut" );
414
+ o .get ().endEntity ();
415
+ o .get ().startEntity ("roleTerm" );
416
+ o .get ().literal ("authority" , "marcrelator" );
417
+ o .get ().literal ("type" , "text" );
418
+ o .get ().literal ("value" , "Author" );
419
+ f .apply (2 ).endEntity ();
420
+ o .get ().startEntity ("nameIdentifier" );
421
+ o .get ().literal ("type" , "gnd" );
422
+ o .get ().literal ("value" , "1081830107" );
423
+ o .get ().endEntity ();
424
+ o .get ().startEntity ("namePart" );
425
+ o .get ().literal ("type" , "family" );
426
+ o .get ().endEntity ();
427
+ o .get ().startEntity ("namePart" );
428
+ o .get ().literal ("type" , "given" );
429
+ f .apply (3 ).endEntity ();
430
+ o .get ().startEntity ("name" );
431
+ o .get ().literal ("displayForm" , "Armbruster, André" );
432
+ o .get ().literal ("mods.name.namePart.value" , "Armbruster" );
433
+ o .get ().literal ("mods.name.namePart.value" , "André" );
434
+ o .get ().endEntity ();
435
+ o .get ().endRecord ();
436
+ }
437
+ );
438
+ }
439
+
220
440
@ Test
221
441
public void shouldHandleUnmatchedLiteralsAndEntitiesInElseNestedSource () {
222
442
assertMorph (receiver ,
0 commit comments