@Test
 public void testProcessAndSendWithSizeExpressionEvaluated() throws Exception {
   when(group.getMessages()).thenReturn(messages);
   processor = new ExpressionEvaluatingMessageGroupProcessor("#root.size()");
   Object result = processor.processMessageGroup(group);
   assertTrue(result instanceof Message<?>);
   Message<?> resultMessage = (Message<?>) result;
   assertEquals(5, resultMessage.getPayload());
 }
 @Test
 public void testProcessAndCheckHeaders() throws Exception {
   when(group.getMessages()).thenReturn(messages);
   processor = new ExpressionEvaluatingMessageGroupProcessor("#root");
   Object result = processor.processMessageGroup(group);
   assertTrue(result instanceof Message<?>);
   Message<?> resultMessage = (Message<?>) result;
   assertEquals("bar", resultMessage.getHeaders().get("foo"));
 }
 @Test
 public void testProcessAndSendWithFilterAndProjectionAndMethodInvokingExpressionEvaluated()
     throws Exception {
   when(group.getMessages()).thenReturn(messages);
   processor =
       new ExpressionEvaluatingMessageGroupProcessor(
           String.format("T(%s).sum(?[payload>2].![payload])", getClass().getName()));
   Object result = processor.processMessageGroup(group);
   assertTrue(result instanceof Message<?>);
   Message<?> resultMessage = (Message<?>) result;
   assertEquals(3 + 4 + 5, resultMessage.getPayload());
 }
 @Test
 public void testProcessAndSendWithFilterAndProjectionExpressionEvaluated() throws Exception {
   when(group.getMessages()).thenReturn(messages);
   processor = new ExpressionEvaluatingMessageGroupProcessor("?[payload>2].![payload]");
   Object result = processor.processMessageGroup(group);
   assertTrue(result instanceof Message<?>);
   Message<?> resultMessage = (Message<?>) result;
   assertTrue(resultMessage.getPayload() instanceof Collection<?>);
   Collection<?> list = (Collection<?>) resultMessage.getPayload();
   assertEquals(3, list.size());
   assertTrue(list.contains(3));
   assertTrue(list.contains(4));
   assertTrue(list.contains(5));
 }