View Javadoc

1   /*
2    * $Id: AbstractSplitterTestCase.java 22377 2011-07-11 12:41:42Z dirk.olmes $
3    * --------------------------------------------------------------------------------------
4    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
5    *
6    * The software in this package is published under the terms of the CPAL v1.0
7    * license, a copy of which has been included with this distribution in the
8    * LICENSE.txt file.
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  }