@Test
  public void testInterceptMessageConstruction() throws Exception {
    MessageConstructionInterceptor interceptor =
        new AbstractMessageConstructionInterceptor() {
          @Override
          public boolean supportsMessageType(String messageType) {
            return MessageType.XML.toString().equalsIgnoreCase(messageType);
          }

          @Override
          protected Message interceptMessage(
              Message message, String messageType, TestContext context) {
            return new DefaultMessage("Intercepted!");
          }

          @Override
          protected String getName() {
            return "MockInterceptor";
          }
        };

    Message in = new DefaultMessage("Hello Citrus!");
    Message intercepted =
        interceptor.interceptMessageConstruction(in, MessageType.XML.toString(), context);
    Assert.assertEquals(intercepted.getPayload(String.class), "Intercepted!");

    intercepted =
        interceptor.interceptMessageConstruction(in, MessageType.PLAINTEXT.toString(), context);
    Assert.assertEquals(intercepted.getPayload(String.class), "Hello Citrus!");
  }
  @Test
  public void testSendBuilderWithObjectMessageInstance() {
    final Message message = new DefaultMessage(new Integer(10)).setHeader("operation", "foo");
    MockTestDesigner builder =
        new MockTestDesigner(applicationContext) {
          @Override
          public void configure() {
            send(messageEndpoint).message(message);
          }
        };

    builder.configure();

    TestCase test = builder.getTestCase();
    Assert.assertEquals(test.getActionCount(), 1);
    Assert.assertEquals(test.getActions().get(0).getClass(), SendMessageAction.class);

    SendMessageAction action = ((SendMessageAction) test.getActions().get(0));
    Assert.assertEquals(action.getName(), "send");

    Assert.assertEquals(action.getEndpoint(), messageEndpoint);
    Assert.assertEquals(action.getMessageBuilder().getClass(), StaticMessageContentBuilder.class);

    StaticMessageContentBuilder messageBuilder =
        (StaticMessageContentBuilder) action.getMessageBuilder();
    Assert.assertEquals(messageBuilder.getMessage().getPayload(), 10);
    Assert.assertEquals(messageBuilder.getMessageHeaders().size(), 0L);
    Assert.assertEquals(
        messageBuilder.getMessage().copyHeaders().size(), message.copyHeaders().size());
    Assert.assertEquals(
        messageBuilder.getMessage().getHeader(MessageHeaders.ID),
        message.getHeader(MessageHeaders.ID));
    Assert.assertEquals(messageBuilder.getMessage().getHeader("operation"), "foo");

    Message constructed =
        messageBuilder.buildMessageContent(new TestContext(), MessageType.PLAINTEXT.name());
    Assert.assertEquals(constructed.copyHeaders().size(), message.copyHeaders().size());
    Assert.assertEquals(constructed.getHeader("operation"), "foo");
    Assert.assertEquals(
        constructed.getHeader(MessageHeaders.ID), message.getHeader(MessageHeaders.ID));
  }