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.module.json.transformers;
8   
9   import org.mule.api.endpoint.EndpointBuilder;
10  import org.mule.api.endpoint.ImmutableEndpoint;
11  import org.mule.api.transformer.Transformer;
12  import org.mule.config.i18n.LocaleMessageHandler;
13  import org.mule.endpoint.EndpointURIEndpointBuilder;
14  import org.mule.tck.testmodels.fruit.Apple;
15  import org.mule.tck.testmodels.fruit.Orange;
16  import org.mule.transformer.types.SimpleDataType;
17  
18  import java.io.UnsupportedEncodingException;
19  import java.util.Locale;
20  
21  import static org.junit.Assert.fail;
22  
23  public class JsonBeanRoundTripNonAsciiTestCase extends JsonBeanRoundTripTestCase
24  {
25      private static final String ENCODING = "Windows-31J";
26  
27      private final String jsonString;
28      private final FruitCollection jsonObject;
29  
30      public JsonBeanRoundTripNonAsciiTestCase()
31      {
32          jsonString = "{\"apple\":{\"bitten\":true,\"washed\":false},\"orange\":{\"brand\":\""
33              +  getBrandOfOrange(Locale.JAPAN)
34              + "\",\"segments\":8,\"radius\":3.45,\"listProperties\":null,\"mapProperties\":null,\"arrayProperties\":null}}";
35  
36          jsonObject = new FruitCollection(new Apple(true), null, new Orange(8, 3.45, getBrandOfOrange(Locale.JAPAN)));
37      }
38  
39      @Override
40      public void testTransform() throws Exception
41      {
42          // This test fails under Java 1.6 on Windows, because the Java fields are serialized in a different order.
43          String javaVersion = System.getProperty("java.specification.version", "<None>");
44          String osName = System.getProperty("os.name", "<None>");
45          if (javaVersion.equals("1.6") && osName.startsWith("Windows"))
46          {
47              return;
48          }
49          super.testTransform();
50      }
51  
52      @Override
53      public Transformer getRoundTripTransformer() throws Exception
54      {
55          Transformer trans = super.getRoundTripTransformer();
56          EndpointBuilder builder = new EndpointURIEndpointBuilder("test://test", muleContext);
57          builder.setEncoding(ENCODING);
58          ImmutableEndpoint endpoint = muleContext.getEndpointFactory().getInboundEndpoint(
59              builder);
60          trans.setEndpoint(endpoint);
61          return trans;
62      }
63  
64      @Override
65      public Transformer getTransformer() throws Exception
66      {
67          Transformer trans = super.getTransformer();
68          trans.setReturnDataType(new SimpleDataType<byte[]>(byte[].class));
69          EndpointBuilder builder = new EndpointURIEndpointBuilder("test://test", muleContext);
70          builder.setEncoding(ENCODING);
71          ImmutableEndpoint endpoint = muleContext.getEndpointFactory().getInboundEndpoint(
72              builder);
73          trans.setEndpoint(endpoint);
74          return trans;
75      }
76      
77      @Override
78      public Object getTestData()
79      {
80          return jsonObject;
81      }
82  
83      @Override
84      public Object getResultData()
85      {
86          try
87          {
88              return jsonString.getBytes(ENCODING);
89          }
90          catch (UnsupportedEncodingException e)
91          {
92              fail();
93              return null;
94          }
95      }
96  
97      private String getBrandOfOrange(Locale locale)
98      {
99          return LocaleMessageHandler.getString("test-data", locale, "JsonBeanRoundTripNonAsciiTestCase.getBrandOfOrange", new Object[] {});
100     }
101 }