1
2
3
4
5
6
7
8
9
10
11 package org.mule.routing;
12
13 import org.mule.DefaultMessageCollection;
14 import org.mule.DefaultMuleEvent;
15 import org.mule.DefaultMuleMessage;
16 import org.mule.api.MuleEvent;
17 import org.mule.api.MuleException;
18 import org.mule.api.MuleMessage;
19 import org.mule.api.MuleMessageCollection;
20 import org.mule.api.processor.MessageProcessor;
21 import org.mule.tck.junit4.AbstractMuleContextTestCase;
22 import org.mule.tck.testmodels.fruit.Apple;
23 import org.mule.tck.testmodels.fruit.Banana;
24 import org.mule.tck.testmodels.fruit.Fruit;
25 import org.mule.tck.testmodels.fruit.FruitBowl;
26 import org.mule.tck.testmodels.fruit.Orange;
27
28 import java.util.ArrayList;
29 import java.util.List;
30
31 import org.junit.Test;
32
33 import static org.junit.Assert.assertEquals;
34 import static org.junit.Assert.assertTrue;
35
36 public class AbstractSplitterTestCase extends AbstractMuleContextTestCase
37 {
38
39 @Test
40 public void testSimpleSplitter() throws Exception
41 {
42 TestSplitter splitter = new TestSplitter();
43 MultipleEventSensingMessageProcessor listener = new MultipleEventSensingMessageProcessor();
44 splitter.setListener(listener);
45 splitter.setMuleContext(muleContext);
46
47 Apple apple = new Apple();
48 Banana banana = new Banana();
49 Orange orange = new Orange();
50 FruitBowl fruitBowl = new FruitBowl();
51 fruitBowl.addFruit(apple);
52 fruitBowl.addFruit(banana);
53 fruitBowl.addFruit(orange);
54
55 MuleEvent inEvent = new DefaultMuleEvent(new DefaultMuleMessage(fruitBowl, muleContext),
56 getTestEvent(""));
57
58 MuleEvent resultEvent = splitter.process(inEvent);
59
60 assertEquals(3, listener.events.size());
61 assertTrue(listener.events.get(0).getMessage().getPayload() instanceof Fruit);
62 assertTrue(listener.events.get(1).getMessage().getPayload() instanceof Fruit);
63 assertTrue(listener.events.get(2).getMessage().getPayload() instanceof Fruit);
64
65 assertEquals(DefaultMessageCollection.class, resultEvent.getMessage().getClass());
66 assertEquals(3, ((MuleMessageCollection) resultEvent.getMessage()).size());
67 assertTrue(((MuleMessageCollection) resultEvent.getMessage()).getMessage(0).getPayload() instanceof Fruit);
68 assertTrue(((MuleMessageCollection) resultEvent.getMessage()).getMessage(1).getPayload() instanceof Fruit);
69 assertTrue(((MuleMessageCollection) resultEvent.getMessage()).getMessage(2).getPayload() instanceof Fruit);
70 }
71
72 private static class MultipleEventSensingMessageProcessor implements MessageProcessor
73 {
74 List<MuleEvent> events = new ArrayList<MuleEvent>();
75
76 public MuleEvent process(MuleEvent event) throws MuleException
77 {
78 events.add(event);
79 return event;
80 }
81 }
82
83 private static class TestSplitter extends AbstractSplitter
84 {
85 @Override
86 protected List<MuleMessage> splitMessage(MuleEvent event)
87 {
88 FruitBowl bowl = (FruitBowl) event.getMessage().getPayload();
89 List<MuleMessage> parts = new ArrayList<MuleMessage>();
90 for (Fruit fruit : bowl.getFruit())
91 {
92 parts.add(new DefaultMuleMessage(fruit, muleContext));
93 }
94 return parts;
95 }
96 }
97
98 }