content: package com.alibaba.json.bvt.support.spring;
  
  import java.io.ByteArrayInputStream;
  import java.io.ByteArrayOutputStream;
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  import java.lang.reflect.Method;
  import java.nio.charset.Charset;
  
  import org.junit.Assert;
  import org.springframework.http.HttpHeaders;
  import org.springframework.http.HttpInputMessage;
  import org.springframework.http.HttpOutputMessage;
  import org.springframework.http.MediaType;
  
  import com.alibaba.fastjson.support.config.FastJsonConfig;
  import com.alibaba.fastjson.support.spring.FastJsonpHttpMessageConverter4;
  import com.alibaba.fastjson.support.spring.MappingFastJsonValue;
  
  import junit.framework.TestCase;
  
  public class FastJsonpHttpMessageConverter4Test extends TestCase {
      public void test_1() throws Exception {
  
          FastJsonpHttpMessageConverter4 converter = new FastJsonpHttpMessageConverter4();
  
          Assert.assertNotNull(converter.getFastJsonConfig());
          converter.setFastJsonConfig(new FastJsonConfig());
  
          converter.canRead(VO.class, VO.class, MediaType.APPLICATION_JSON_UTF8);
  
          converter.canWrite(VO.class, VO.class, MediaType.APPLICATION_JSON_UTF8);
  
          Method method1 = FastJsonpHttpMessageConverter4.class.getDeclaredMethod("supports", Class.class);
          method1.setAccessible(true);
          method1.invoke(converter, int.class);
  
          HttpInputMessage input = new HttpInputMessage() {
  
              public HttpHeaders getHeaders() {
                  return null;
              }
  
              public InputStream getBody() throws IOException {
                  return new ByteArrayInputStream("{\"id\":123}".getBytes(Charset.forName("UTF-8")));
              }
  
          };
          VO vo = (VO) converter.read(VO.class, VO.class, input);
          Assert.assertEquals(123, vo.getId());
  
          final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
          HttpOutputMessage out = new HttpOutputMessage() {
  
              public HttpHeaders getHeaders() {
                  return new HttpHeaders();
              }
  
              public OutputStream getBody() throws IOException {
                  return byteOut;
              }
          };
          converter.write(vo, VO.class, MediaType.TEXT_PLAIN, out);
  
          byte[] bytes = byteOut.toByteArray();
          Assert.assertEquals("{\"id\":123}", new String(bytes, "UTF-8"));
  
          Method method2 = FastJsonpHttpMessageConverter4.class.getDeclaredMethod("readInternal", Class.class,
                  HttpInputMessage.class);
          method2.setAccessible(true);
          method2.invoke(converter, VO.class, input);
      }
  
      public void test_2() throws Exception {
  
          FastJsonpHttpMessageConverter4 converter = new FastJsonpHttpMessageConverter4();
  
          Assert.assertNotNull(converter.getFastJsonConfig());
          converter.setFastJsonConfig(new FastJsonConfig());
  
          converter.canRead(VO.class, VO.class, MediaType.APPLICATION_JSON_UTF8);
  
          converter.canWrite(VO.class, VO.class, MediaType.APPLICATION_JSON_UTF8);
  
          Method method1 = FastJsonpHttpMessageConverter4.class.getDeclaredMethod("supports", Class.class);
          method1.setAccessible(true);
          method1.invoke(converter, int.class);
  
          HttpInputMessage input = new HttpInputMessage() {
  
              public HttpHeaders getHeaders() {
                  return null;
              }
  
              public InputStream getBody() throws IOException {
                  return new ByteArrayInputStream("{\"id\":123}".getBytes(Charset.forName("UTF-8")));
              }
  
          };
          VO vo = (VO) converter.read(VO.class, VO.class, input);
          Assert.assertEquals(123, vo.getId());
  
          final ByteArrayOutputStream byteOut = new ByteArrayOutputStream();
          HttpOutputMessage out = new HttpOutputMessage() {
  
              public HttpHeaders getHeaders() {
                  return new HttpHeaders();
              }
  
              public OutputStream getBody() throws IOException {
                  return byteOut;
              }
          };
          MappingFastJsonValue mappingFastJsonValue = new MappingFastJsonValue(vo);
          mappingFastJsonValue.setJsonpFunction("callback");
          converter.write(mappingFastJsonValue, VO.class, MediaType.TEXT_PLAIN, out);
  
          byte[] bytes = byteOut.toByteArray();
          Assert.assertEquals("/**/callback({\"id\":123})", new String(bytes, "UTF-8"));
  
          Method method2 = FastJsonpHttpMessageConverter4.class.getDeclaredMethod("readInternal", Class.class,
                  HttpInputMessage.class);
          method2.setAccessible(true);
          method2.invoke(converter, VO.class, input);
      }
  
      public static class VO {
  
          private int id;
  
          public int getId() {
              return id;
          }
  
          public void setId(int id) {
              this.id = id;
          }
  
      }
  }
  