View Javadoc
1   /*
2    * Copyright (c) MuleSoft, Inc.  All rights reserved.  http://www.mulesoft.com
3    * The software in this package is published under the terms of the CPAL v1.0
4    * license, a copy of which has been included with this distribution in the
5    * LICENSE.txt file.
6    */
7   package org.mule.transport.email.transformers;
8   
9   import static org.junit.Assert.assertEquals;
10  import static org.junit.Assert.assertNotNull;
11  import static org.junit.Assert.assertTrue;
12  
13  import org.mule.DefaultMuleMessage;
14  import org.mule.api.MuleMessage;
15  import org.mule.api.transformer.Transformer;
16  import org.mule.config.i18n.LocaleMessageHandler;
17  import org.mule.transport.email.MailProperties;
18  
19  import java.util.HashMap;
20  import java.util.Locale;
21  import java.util.Map;
22  
23  import javax.mail.internet.MimeMessage;
24  
25  import org.junit.Test;
26  
27  public class MailMessageTransformersNonAsciiTestCase extends MailMessageTransformersTestCase
28  {
29  
30      @Override
31      protected String getContentType() 
32      {
33          return "text/plain; charset=iso-2022-jp";
34      }
35      
36      @Override
37      public Object getResultData()
38      {
39          return LocaleMessageHandler.getString("test-data", Locale.JAPAN,
40              "MailMessageTransformersNonAsciiTestCase.getResultData", new Object[] {});
41      }
42  
43      @Test
44      public void testNonAsciiSubjectEncodingInRoundtripTransformation() throws Exception
45      {
46          Transformer roundTripTransformer = super.getRoundTripTransformer();
47  
48          // Build message setting the non-ascii message subject as a property for the transformer.
49          Map<String, Object> outboundProperties = new HashMap<String, Object>();
50          String testSubject = (String) getResultData();
51          outboundProperties.put(MailProperties.SUBJECT_PROPERTY, testSubject);
52          MuleMessage message = new DefaultMuleMessage(testSubject, outboundProperties, muleContext);
53  
54          // Hack to set the default charset used by the javax.mail API to perform the mail subject encoding as iso-8859-1.
55          System.setProperty("mail.mime.charset", "iso-8859-1");
56  
57          // Transform.
58          Object result = roundTripTransformer.transform(message, "iso-2022-jp");
59  
60          assertNotNull("The result of the roundtrip transform shouldn't be null", result);
61          assertTrue(result instanceof MimeMessage);
62          // Assert that the mail subject has been correctly encoded in iso-2022-jp.
63          assertEquals(((MimeMessage) result).getSubject(), testSubject);
64      }
65  }