Skip to content

Commit 59c516d

Browse files
committed
Implement comments
See #333 (comment) and #333 (comment): - add top-level literal to test behaviour See #333 (comment): - rename variables - add _elseFlattened - add testing _elseFlattened See #333 (comment): - rename and move test
1 parent 758327d commit 59c516d

File tree

3 files changed

+80
-61
lines changed

3 files changed

+80
-61
lines changed

metamorph/src/main/java/org/metafacture/metamorph/Metamorph.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -65,8 +65,9 @@
6565
@FluxCommand("morph")
6666
public final class Metamorph implements StreamPipe<StreamReceiver>, NamedValuePipe, Maps {
6767

68-
private static final String ELSE_AND_PASS_ENTITY_EVENTS_KEYWORD = "_elseAndPassEntityEvents";
68+
private static final String ELSE_NESTED_KEYWORD = "_elseNested";
6969
public static final String ELSE_KEYWORD = "_else";
70+
public static final String ELSE_FLATTENED_KEYWORD = "_elseFlattened";
7071
public static final char FEEDBACK_CHAR = '@';
7172
public static final char ESCAPE_CHAR = '\\';
7273
public static final String METADATA = "__meta";
@@ -96,7 +97,7 @@ public final class Metamorph implements StreamPipe<StreamReceiver>, NamedValuePi
9697
private MorphErrorHandler errorHandler = new DefaultErrorHandler();
9798
private int recordCount;
9899
private final List<FlushListener> recordEndListener = new ArrayList<>();
99-
private boolean passEntityEvents;
100+
private boolean elseNested;
100101
final private Pattern literalPatternOfEntityMarker = Pattern.compile(flattener.getEntityMarker(), Pattern.LITERAL);
101102

102103
protected Metamorph() {
@@ -219,10 +220,10 @@ public void setErrorHandler(final MorphErrorHandler errorHandler) {
219220
}
220221

221222
protected void registerNamedValueReceiver(final String source, final NamedValueReceiver data) {
222-
if (ELSE_AND_PASS_ENTITY_EVENTS_KEYWORD.equals(source)) {
223-
this.passEntityEvents = true;
223+
if (ELSE_NESTED_KEYWORD.equals(source)) {
224+
this.elseNested = true;
224225
}
225-
if (ELSE_KEYWORD.equals(source) || this.passEntityEvents) {
226+
if (ELSE_KEYWORD.equals(source) || ELSE_FLATTENED_KEYWORD.equals(source) || elseNested) {
226227
elseSources.add(data);
227228
} else {
228229
dataRegistry.register(source, data);
@@ -325,7 +326,7 @@ protected void dispatch(final String path, final String value, final List<NamedV
325326
private void send(final String path, final String value, final List<NamedValueReceiver> dataList, final boolean fallback) {
326327
for (final NamedValueReceiver data : dataList) {
327328
String key=path;
328-
if (fallback && value != null && passEntityEvents) {
329+
if (fallback && value != null && elseNested) {
329330
if (flattener.getCurrentEntityName() != null) {
330331
outputStreamReceiver.startEntity(flattener.getCurrentEntityName());
331332
key = literalPatternOfEntityMarker.split(path)[1];
@@ -336,7 +337,7 @@ private void send(final String path, final String value, final List<NamedValueRe
336337
} catch (final RuntimeException e) {
337338
errorHandler.error(e);
338339
}
339-
if (fallback && value != null && passEntityEvents) {
340+
if (fallback && value != null && elseNested) {
340341
if (flattener.getCurrentEntityName() != null) {
341342
outputStreamReceiver.endEntity();
342343
}

metamorph/src/test/java/org/metafacture/metamorph/MetamorphTest.java

Lines changed: 0 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
import static org.mockito.ArgumentMatchers.any;
2222
import static org.mockito.ArgumentMatchers.anyInt;
2323
import static org.mockito.ArgumentMatchers.eq;
24-
import static org.mockito.Mockito.inOrder;
2524
import static org.mockito.Mockito.never;
2625
import static org.mockito.Mockito.verify;
2726

@@ -34,7 +33,6 @@
3433
import org.metafacture.framework.helpers.DefaultStreamReceiver;
3534
import org.metafacture.metamorph.api.Maps;
3635
import org.metafacture.metamorph.api.NamedValueReceiver;
37-
import org.mockito.InOrder;
3836
import org.mockito.Mock;
3937
import org.mockito.junit.MockitoJUnit;
4038
import org.mockito.junit.MockitoRule;
@@ -195,56 +193,4 @@ public void shouldThrowIllegalStateExceptionIfEntityIsNotClosed() {
195193
metamorph.endRecord(); // Exception expected
196194
}
197195

198-
@Test
199-
public void metamorph1() {
200-
metamorph = InlineMorph.in(this) //
201-
.with("<rules>") //
202-
.with(" <data source='_else'/>")//
203-
.with("</rules>")//
204-
.createConnectedTo(receiver);
205-
206-
metamorph.startRecord("1");
207-
metamorph.startEntity("clone");
208-
metamorph.literal("id", "0");
209-
metamorph.endEntity();
210-
metamorph.startEntity("clone");
211-
metamorph.literal("id", "1");
212-
metamorph.endEntity();
213-
metamorph.endRecord();
214-
215-
final InOrder ordered = inOrder(receiver);
216-
ordered.verify(receiver).startRecord("1");
217-
ordered.verify(receiver).literal("clone.id", "0");
218-
ordered.verify(receiver).literal("clone.id", "1");
219-
ordered.verify(receiver).endRecord();
220-
}
221-
222-
@Test
223-
public void metamorph1_1() {
224-
metamorph = InlineMorph.in(this).with("<meta>") //
225-
.with("</meta>")//
226-
.with("<rules>")//
227-
.with(" <data source='_elseAndPassEntityEvents' />")//
228-
.with("</rules>")//
229-
.createConnectedTo(receiver);
230-
231-
metamorph.startRecord("1");
232-
metamorph.startEntity("clone");
233-
metamorph.literal("id", "0");
234-
metamorph.endEntity();
235-
metamorph.startEntity("clone");
236-
metamorph.literal("id", "1");
237-
metamorph.endEntity();
238-
metamorph.endRecord();
239-
240-
final InOrder ordered = inOrder(receiver);
241-
ordered.verify(receiver).startRecord("1");
242-
ordered.verify(receiver).startEntity("clone");
243-
ordered.verify(receiver).literal("id", "0");
244-
ordered.verify(receiver).endEntity();
245-
ordered.verify(receiver).startEntity("clone");
246-
ordered.verify(receiver).literal("id", "1");
247-
ordered.verify(receiver).endEntity();
248-
ordered.verify(receiver).endRecord();
249-
}
250196
}

metamorph/src/test/java/org/metafacture/metamorph/TestMetamorphBasics.java

Lines changed: 72 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,78 @@ public void shouldHandleUnmatchedLiteralsInElseSource() {
8686
ordered.verify(receiver).endRecord();
8787
}
8888

89+
@Test
90+
public void shouldHandleUnmatchedLiteralsAndEntitiesInElseSource() {
91+
metamorph = InlineMorph.in(this) //
92+
.with("<rules>") //
93+
.with(" <data source='_else'/>")//
94+
.with("</rules>")//
95+
.createConnectedTo(receiver);
96+
testElseData();
97+
}
98+
99+
@Test
100+
public void shouldHandleUnmatchedLiteralsAndEntitiesInElseFlattenedSource() {
101+
metamorph = InlineMorph.in(this) //
102+
.with("<rules>") //
103+
.with(" <data source='_elseFlattened'/>")//
104+
.with("</rules>")//
105+
.createConnectedTo(receiver);
106+
testElseData();
107+
}
108+
private void testElseData() {
109+
metamorph.startRecord("1");
110+
metamorph.literal("Shikotan", "Aekap");
111+
metamorph.startEntity("Germany");
112+
metamorph.literal("Langeoog", "Moin");
113+
metamorph.endEntity();
114+
metamorph.startEntity("Germany");
115+
metamorph.literal("Baltrum", "Moin Moin");
116+
metamorph.endEntity();
117+
metamorph.endRecord();
118+
119+
final InOrder ordered = inOrder(receiver);
120+
ordered.verify(receiver).startRecord("1");
121+
ordered.verify(receiver).literal("Shikotan", "Aekap");
122+
ordered.verify(receiver).literal("Germany.Langeoog", "Moin");
123+
ordered.verify(receiver).literal("Germany.Baltrum", "Moin Moin");
124+
ordered.verify(receiver).endRecord();
125+
}
126+
127+
@Test
128+
public void shouldHandleUnmatchedLiteralsAndEntitiesInElseNestedSource() {
129+
metamorph = InlineMorph.in(this).with("<rules>")//
130+
.with(" <entity name='USA' >")//
131+
.with(" <data source='USA.Sylt' name='Hawaii' />")
132+
.with(" </entity>")//
133+
.with(" <data source='_elseNested' />")//
134+
.with("</rules>")//
135+
.createConnectedTo(receiver);
136+
137+
metamorph.startRecord("1");
138+
metamorph.literal("Shikotan", "Aekap");
139+
metamorph.startEntity("Germany");
140+
metamorph.literal("Langeoog", "Moin");
141+
metamorph.literal("Baltrum", "Moin Moin");
142+
metamorph.endEntity();
143+
metamorph.startEntity("USA");
144+
metamorph.literal("Sylt", "Aloha");
145+
metamorph.endEntity();
146+
metamorph.endRecord();
147+
148+
final InOrder ordered = inOrder(receiver);
149+
ordered.verify(receiver).startRecord("1");
150+
ordered.verify(receiver).literal("Shikotan", "Aekap");
151+
ordered.verify(receiver).startEntity("Germany");
152+
ordered.verify(receiver).literal("Langeoog", "Moin");
153+
ordered.verify(receiver).literal("Baltrum", "Moin Moin");
154+
ordered.verify(receiver).endEntity();
155+
ordered.verify(receiver).startEntity("USA");
156+
ordered.verify(receiver).literal("Hawaii", "Aloha");
157+
ordered.verify(receiver).endEntity();
158+
ordered.verify(receiver).endRecord();
159+
}
160+
89161
@Test
90162
public void shouldMatchCharacterWithQuestionMarkWildcard() {
91163
metamorph = InlineMorph.in(this)

0 commit comments

Comments
 (0)