1
2
3
4
5
6
7 package org.mule.expression;
8
9 import org.mule.DefaultMuleMessage;
10 import org.mule.api.MuleMessage;
11 import org.mule.api.expression.RequiredValueException;
12 import org.mule.tck.junit4.AbstractMuleContextTestCase;
13
14 import java.util.Collections;
15 import java.util.HashMap;
16 import java.util.Map;
17
18 import org.junit.Test;
19
20 import static org.junit.Assert.assertEquals;
21 import static org.junit.Assert.assertNotNull;
22 import static org.junit.Assert.assertNull;
23
24 public class MessageHeaderExpressionEvaluatorTestCase extends AbstractMuleContextTestCase
25 {
26 private HashMap<String, Object> messageProperties;
27 private MessageHeaderExpressionEvaluator evaluator = new MessageHeaderExpressionEvaluator();
28 private MuleMessage message;
29
30 public MessageHeaderExpressionEvaluatorTestCase()
31 {
32 super();
33 setDisposeContextPerClass(true);
34 }
35
36 @Override
37 public void doSetUp()
38 {
39 messageProperties = new HashMap<String, Object>(3);
40 messageProperties.put("foo", "foovalue");
41 messageProperties.put("bar", "barvalue");
42 messageProperties.put("baz", "bazvalue");
43
44 message = new DefaultMuleMessage(TEST_MESSAGE, messageProperties, muleContext);
45 }
46
47 @Test
48 public void requiredHeaderWithExistingValueShouldReturnValue()
49 {
50 Object result = evaluator.evaluate("foo", message);
51 assertNotNull(result);
52 assertEquals("foovalue", result);
53 }
54
55 @Test
56 public void requiredHeaderWithExistingValueViaExpressionManagerShouldReturnValue()
57 {
58 Object result = muleContext.getExpressionManager().evaluate("#[header:foo]", message);
59 assertNotNull(result);
60 assertEquals("foovalue", result);
61 }
62
63 @Test(expected = RequiredValueException.class)
64 public void requiredHeaderWithMissingValueShouldFail()
65 {
66 evaluator.evaluate("nonexistent", message);
67 }
68
69 @Test(expected = RequiredValueException.class)
70 public void requiredHeaderWithMissingValueViaExpressionManagerShouldFail()
71 {
72 muleContext.getExpressionManager().evaluate("#[header:fool]", message);
73 }
74
75 @Test
76 public void requiredHeaderWithExplicitPropertyScopeShouldReturnValue() throws Exception
77 {
78 addInboundMessageProperty("testProp", "testvalue");
79
80 Object result = evaluator.evaluate("INBOUND:testProp", message);
81 assertEquals("testvalue", result);
82 }
83
84 @Test
85 public void optionalHeaderWithExistingValueShouldReturnValue()
86 {
87 Object result = evaluator.evaluate("foo?", message);
88 assertEquals("foovalue", result);
89 }
90
91 @Test
92 public void optionalHeaderWithExistingValueViaExpressionManagerShouldReturnValue()
93 {
94 Object result = muleContext.getExpressionManager().evaluate("#[header:foo?]", message);
95 assertNotNull(result);
96 assertEquals("foovalue", result);
97 }
98
99 @Test
100 public void optionalHeaderWithMissingValueShouldReturnNull()
101 {
102 Object result = evaluator.evaluate("nonexistent?", message);
103 assertNull(result);
104 }
105
106 @Test
107 public void optionalHeaderWithMissingValueViaExpressionManagerShouldReturnNull()
108 {
109 Object result = muleContext.getExpressionManager().evaluate("#[header:nonexistent?]", message);
110 assertNull(result);
111 }
112
113 @Test
114 public void optionalHeaderWithMissingValueInDefaultScopeShouldReturnNull()
115 {
116
117
118 addInboundMessageProperty("testProp", "testvalue");
119
120 Object result = evaluator.evaluate("testProp?", message);
121 assertNull(result);
122 }
123
124 private void addInboundMessageProperty(String key, Object value)
125 {
126 Map<String, Object> inboundProperties = Collections.singletonMap(key, value);
127
128 DefaultMuleMessage dmm = (DefaultMuleMessage) message;
129 dmm.addInboundProperties(inboundProperties);
130 }
131 }