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