@@ -217,6 +217,174 @@ public void issue338_shouldPreserveSameEntitiesInElseNestedSource() {
217217 );
218218 }
219219
220+ @ Test
221+ public void issue378_shouldOutputMoreThanTwoLevelsInElseNestedSource () {
222+ assertMorph (receiver ,
223+ "<rules>" +
224+ " <data source='_elseNested' />" +
225+ "</rules>" ,
226+ i -> {
227+ i .startRecord ("1" );
228+ i .startEntity ("mods" );
229+ i .literal ("ID" , "duepublico_mods_00074526" );
230+ i .startEntity ("name" );
231+ i .literal ("type" , "personal" );
232+ i .literal ("type" , "simple" );
233+ i .startEntity ("displayForm" );
234+ i .literal ("value" , "Armbruster, André" );
235+ i .endEntity ();
236+ i .startEntity ("role" );
237+ i .startEntity ("roleTerm" );
238+ i .literal ("authority" , "marcrelator" );
239+ i .literal ("type" , "code" );
240+ i .literal ("value" , "aut" );
241+ i .endEntity ();
242+ i .startEntity ("roleTerm" );
243+ i .literal ("authority" , "marcrelator" );
244+ i .literal ("type" , "text" );
245+ i .literal ("value" , "Author" );
246+ i .endEntity ();
247+ i .endEntity ();
248+ i .startEntity ("nameIdentifier" );
249+ i .literal ("type" , "gnd" );
250+ i .literal ("value" , "1081830107" );
251+ i .endEntity ();
252+ i .startEntity ("namePart" );
253+ i .literal ("type" , "family" );
254+ i .literal ("value" , "Armbruster" );
255+ i .endEntity ();
256+ i .startEntity ("namePart" );
257+ i .literal ("type" , "given" );
258+ i .literal ("value" , "André" );
259+ i .endEntity ();
260+ i .endEntity ();
261+ i .endEntity ();
262+ i .endRecord ();
263+ },
264+ (o , f ) -> {
265+ o .get ().startRecord ("1" );
266+ o .get ().startEntity ("mods" );
267+ o .get ().literal ("ID" , "duepublico_mods_00074526" );
268+ o .get ().startEntity ("name" );
269+ o .get ().literal ("type" , "personal" );
270+ o .get ().literal ("type" , "simple" );
271+ o .get ().startEntity ("displayForm" );
272+ o .get ().literal ("value" , "Armbruster, André" );
273+ o .get ().endEntity ();
274+ o .get ().startEntity ("role" );
275+ o .get ().startEntity ("roleTerm" );
276+ o .get ().literal ("authority" , "marcrelator" );
277+ o .get ().literal ("type" , "code" );
278+ o .get ().literal ("value" , "aut" );
279+ o .get ().endEntity ();
280+ o .get ().startEntity ("roleTerm" );
281+ o .get ().literal ("authority" , "marcrelator" );
282+ o .get ().literal ("type" , "text" );
283+ o .get ().literal ("value" , "Author" );
284+ f .apply (2 ).endEntity ();
285+ o .get ().startEntity ("nameIdentifier" );
286+ o .get ().literal ("type" , "gnd" );
287+ o .get ().literal ("value" , "1081830107" );
288+ o .get ().endEntity ();
289+ o .get ().startEntity ("namePart" );
290+ o .get ().literal ("type" , "family" );
291+ o .get ().literal ("value" , "Armbruster" );
292+ o .get ().endEntity ();
293+ o .get ().startEntity ("namePart" );
294+ o .get ().literal ("type" , "given" );
295+ o .get ().literal ("value" , "André" );
296+ f .apply (3 ).endEntity ();
297+ o .get ().endRecord ();
298+ }
299+ );
300+ }
301+
302+ @ Test
303+ public void shouldOutputMoreThanTwoLevelsInElseNestedSourceWithModifications () {
304+ assertMorph (receiver ,
305+ "<rules>" +
306+ " <entity name='name' flushWith='record'>" +
307+ " <data source='mods.name.displayForm.value' name='displayForm' />" +
308+ " <data source='mods.name.namePart.value' />" +
309+ " </entity>" +
310+ " <data source='_elseNested' />" +
311+ "</rules>" ,
312+ i -> {
313+ i .startRecord ("1" );
314+ i .startEntity ("mods" );
315+ i .literal ("ID" , "duepublico_mods_00074526" );
316+ i .startEntity ("name" );
317+ i .literal ("type" , "personal" );
318+ i .literal ("type" , "simple" );
319+ i .startEntity ("displayForm" );
320+ i .literal ("value" , "Armbruster, André" );
321+ i .endEntity ();
322+ i .startEntity ("role" );
323+ i .startEntity ("roleTerm" );
324+ i .literal ("authority" , "marcrelator" );
325+ i .literal ("type" , "code" );
326+ i .literal ("value" , "aut" );
327+ i .endEntity ();
328+ i .startEntity ("roleTerm" );
329+ i .literal ("authority" , "marcrelator" );
330+ i .literal ("type" , "text" );
331+ i .literal ("value" , "Author" );
332+ i .endEntity ();
333+ i .endEntity ();
334+ i .startEntity ("nameIdentifier" );
335+ i .literal ("type" , "gnd" );
336+ i .literal ("value" , "1081830107" );
337+ i .endEntity ();
338+ i .startEntity ("namePart" );
339+ i .literal ("type" , "family" );
340+ i .literal ("value" , "Armbruster" );
341+ i .endEntity ();
342+ i .startEntity ("namePart" );
343+ i .literal ("type" , "given" );
344+ i .literal ("value" , "André" );
345+ i .endEntity ();
346+ i .endEntity ();
347+ i .endEntity ();
348+ i .endRecord ();
349+ },
350+ (o , f ) -> {
351+ o .get ().startRecord ("1" );
352+ o .get ().startEntity ("mods" );
353+ o .get ().literal ("ID" , "duepublico_mods_00074526" );
354+ o .get ().startEntity ("name" );
355+ o .get ().literal ("type" , "personal" );
356+ o .get ().literal ("type" , "simple" );
357+ o .get ().startEntity ("role" );
358+ o .get ().startEntity ("roleTerm" );
359+ o .get ().literal ("authority" , "marcrelator" );
360+ o .get ().literal ("type" , "code" );
361+ o .get ().literal ("value" , "aut" );
362+ o .get ().endEntity ();
363+ o .get ().startEntity ("roleTerm" );
364+ o .get ().literal ("authority" , "marcrelator" );
365+ o .get ().literal ("type" , "text" );
366+ o .get ().literal ("value" , "Author" );
367+ f .apply (2 ).endEntity ();
368+ o .get ().startEntity ("nameIdentifier" );
369+ o .get ().literal ("type" , "gnd" );
370+ o .get ().literal ("value" , "1081830107" );
371+ o .get ().endEntity ();
372+ o .get ().startEntity ("namePart" );
373+ o .get ().literal ("type" , "family" );
374+ o .get ().endEntity ();
375+ o .get ().startEntity ("namePart" );
376+ o .get ().literal ("type" , "given" );
377+ f .apply (3 ).endEntity ();
378+ o .get ().startEntity ("name" );
379+ o .get ().literal ("displayForm" , "Armbruster, André" );
380+ o .get ().literal ("mods.name.namePart.value" , "Armbruster" );
381+ o .get ().literal ("mods.name.namePart.value" , "André" );
382+ o .get ().endEntity ();
383+ o .get ().endRecord ();
384+ }
385+ );
386+ }
387+
220388 @ Test
221389 public void shouldHandleUnmatchedLiteralsAndEntitiesInElseNestedSource () {
222390 assertMorph (receiver ,
0 commit comments