/** * Copyright (C) 2009-2012 Typesafe Inc. */ package akka.camel; import akka.actor.ActorSystem; import akka.japi.Function; import org.apache.camel.NoTypeConversionAvailableException; import org.junit.AfterClass; import org.junit.BeforeClass; import org.junit.Test; import java.io.InputStream; import java.util.*; import static org.junit.Assert.assertEquals; /** * @author Martin Krasser */ public class MessageJavaTestBase { static Camel camel; private static ActorSystem system; private Map empty = new HashMap(); @BeforeClass public static void setUpBeforeClass() { system = ActorSystem.create("test"); camel = (Camel) CamelExtension.get(system); } @AfterClass public static void cleanup(){ system.shutdown(); } CamelMessage message(Object body){ return new CamelMessage(body, new HashMap()); } CamelMessage message(Object body, Map headers){ return new CamelMessage(body, headers); } @Test public void shouldConvertDoubleBodyToString() { assertEquals("1.4", message("1.4", empty).getBodyAs(String.class,camel.context())); } @Test(expected=NoTypeConversionAvailableException.class) public void shouldThrowExceptionWhenConvertingDoubleBodyToInputStream() { message(1.4).getBodyAs(InputStream.class,camel.context()); } @Test public void shouldReturnDoubleHeader() { CamelMessage message = message("test" , createMap("test", 1.4)); assertEquals(1.4, message.getHeader("test")); } @Test public void shouldConvertDoubleHeaderToString() { CamelMessage message = message("test" , createMap("test", 1.4)); assertEquals("1.4", message.getHeaderAs("test", String.class,camel.context())); } @Test public void shouldReturnSubsetOfHeaders() { CamelMessage message = message("test" , createMap("A", "1", "B", "2")); assertEquals(createMap("B", "2"), message.getHeaders(createSet("B"))); } @Test(expected=UnsupportedOperationException.class) public void shouldReturnSubsetOfHeadersUnmodifiable() { CamelMessage message = message("test" , createMap("A", "1", "B", "2")); message.getHeaders(createSet("B")).put("x", "y"); } @Test public void shouldReturnAllHeaders() { CamelMessage message = message("test" , createMap("A", "1", "B", "2")); assertEquals(createMap("A", "1", "B", "2"), message.getHeaders()); } @Test(expected=UnsupportedOperationException.class) public void shouldReturnAllHeadersUnmodifiable() { CamelMessage message = message("test" , createMap("A", "1", "B", "2")); message.getHeaders().put("x", "y"); } @Test public void shouldTransformBodyAndPreserveHeaders() { assertEquals( message("ab", createMap("A", "1")), message("a" , createMap("A", "1")).mapBody(new TestTransformer())); } @Test public void shouldConvertBodyAndPreserveHeaders() { assertEquals( message("1.4", createMap("A", "1")), message(1.4 , createMap("A", "1")).withBodyAs(String.class,camel.context())); } @Test public void shouldSetBodyAndPreserveHeaders() { assertEquals( message("test2" , createMap("A", "1")), message("test1" , createMap("A", "1")).withBody("test2")); } @Test public void shouldSetHeadersAndPreserveBody() { assertEquals( message("test1" , createMap("C", "3")), message("test1" , createMap("A", "1")).withHeaders(createMap("C", "3"))); } @Test public void shouldAddHeaderAndPreserveBodyAndHeaders() { assertEquals( message("test1" , createMap("A", "1", "B", "2")), message("test1" , createMap("A", "1")).addHeader("B", "2")); } @Test public void shouldAddHeadersAndPreserveBodyAndHeaders() { assertEquals( message("test1" , createMap("A", "1", "B", "2")), message("test1" , createMap("A", "1")).addHeaders(createMap("B", "2"))); } @Test public void shouldRemoveHeadersAndPreserveBodyAndRemainingHeaders() { assertEquals( message("test1" , createMap("A", "1")), message("test1" , createMap("A", "1", "B", "2")).withoutHeader("B")); } private static Set createSet(String... entries) { HashSet set = new HashSet(); set.addAll(Arrays.asList(entries)); return set; } private static Map createMap(Object... pairs) { HashMap map = new HashMap(); for (int i = 0; i < pairs.length; i += 2) { map.put((String)pairs[i], pairs[i+1]); } return map; } private static class TestTransformer implements Function { public String apply(String param) { return param + "b"; } } }