content: package com.alibaba.json.bvt.compatible.jsonlib;
  
  import java.math.BigDecimal;
  import java.math.BigInteger;
  import java.util.Date;
  import java.util.HashMap;
  import java.util.List;
  import java.util.Map;
  
  import junit.framework.Assert;
  import junit.framework.TestCase;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.serializer.JSONLibDataFormatSerializer;
  import com.alibaba.fastjson.serializer.SerializeConfig;
  import com.alibaba.fastjson.serializer.SerializerFeature;
  
  public class CompatibleTest_noasm extends TestCase {
  
      protected void setUp() throws Exception {
          System.out.println();
      }
  
      public void test_0() throws Exception {
          Map<String, Object> obj = new HashMap<String, Object>();
          assertEquals(toCompatibleJSONString(obj), toJSONLibString(obj));
      }
  
      public void test_1() throws Exception {
          VO vo = new VO();
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public void test_2() throws Exception {
          V1 vo = new V1();
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      // {"media":{"size":58982400,"format":"video/mpg4","uri":"http://javaone.com/keynote.mpg","title":"Javaone Keynote","width":640,"height":480,"duration":18000000,"bitrate":262144,"persons":["Bill Gates","Steve Jobs"],"player":"JAVA"}{"images":[{"size":"LARGE","uri":"http://javaone.com/keynote_large.jpg","title":"Javaone Keynote","width":1024,"height":768},{"size":"SMALL","uri":"http://javaone.com/keynote_small.jpg","title":"Javaone Keynote","width":320,"height":240}]}
  
      public void test_3() throws Exception {
          V1 vo = new V1();
          vo.setDate(new Date());
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public void test_4() throws Exception {
          V1 vo = new V1();
          vo.setF2('中');
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public void test_5() throws Exception {
          V2 vo = new V2();
          vo.setF2('中');
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public void test_6() throws Exception {
          V2 vo = new V2();
          vo.setF1(0.1f);
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public void test_7() throws Exception {
          V2 vo = new V2();
          vo.setF2(0.1D);
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public void test_8() throws Exception {
          V3 vo = new V3();
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public void test_9() throws Exception {
          V4 vo = new V4();
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public void test_10() throws Exception {
          Object vo = null;
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public void test_11() throws Exception {
          Object vo = new HashMap();
          assertEquals(toCompatibleJSONString(vo), toJSONLibString(vo));
      }
  
      public static void assertEquals(String fastJSON, String jsonLib) {
          System.out.println("fastjson: " + fastJSON);
          System.out.println("json-lib: " + jsonLib);
          Assert.assertEquals(JSON.parse(fastJSON), JSON.parse(jsonLib));
      }
  
      private static final SerializeConfig   mapping;
      static {
          mapping = new SerializeConfig();
          mapping.setAsmEnable(false);
          mapping.put(Date.class, new JSONLibDataFormatSerializer()); // 使用和json-lib兼容的日期输出格式
      }
  
      private static final SerializerFeature[] features = { SerializerFeature.WriteMapNullValue, // 输出空置字段
              SerializerFeature.WriteNullListAsEmpty, // list字段如果为null，输出为[]，而不是null
              SerializerFeature.WriteNullNumberAsZero, // 数值字段如果为null，输出为0，而不是null
              SerializerFeature.WriteNullBooleanAsFalse, // Boolean字段如果为null，输出为false，而不是null
              SerializerFeature.WriteNullStringAsEmpty // 字符类型字段如果为null，输出为""，而不是null
                                                        };
  
      // 序列化为和JSON-LIB兼容的字符串
      public static String toCompatibleJSONString(Object object) {
  
          return JSON.toJSONString(object, mapping, features);
      }
  
      public static String toJSONLibString(Object object) {
          net.sf.json.JSONObject obj = net.sf.json.JSONObject.fromObject(object);
          return obj.toString();
      }
  
      public static class V4 {
  
          private Map<String, Object> items;
  
          public Map<String, Object> getItems() {
              return items;
          }
  
          public void setItems(Map<String, Object> items) {
              this.items = items;
          }
  
      }
  
      public static class V3 {
  
          private List<String> items;
  
          public List<String> getItems() {
              return items;
          }
  
          public void setItems(List<String> items) {
              this.items = items;
          }
  
      }
  
      public static class V2 {
  
          private float  f1;
          private double f2;
  
          private Float  f3;
          private Double f4;
  
          public float getF1() {
              return f1;
          }
  
          public void setF1(float f1) {
              this.f1 = f1;
          }
  
          public double getF2() {
              return f2;
          }
  
          public void setF2(double f2) {
              this.f2 = f2;
          }
  
          public Float getF3() {
              return f3;
          }
  
          public void setF3(Float f3) {
              this.f3 = f3;
          }
  
          public Double getF4() {
              return f4;
          }
  
          public void setF4(Double f4) {
              this.f4 = f4;
          }
  
      }
  
      public static class V1 {
  
          private Boolean   f1;
          private Character f2;
          private String    f3;
          private Date      date;
  
          private boolean   f4;
          private char      f5;
  
          public Boolean getF1() {
              return f1;
          }
  
          public void setF1(Boolean f1) {
              this.f1 = f1;
          }
  
          public Character getF2() {
              return f2;
          }
  
          public void setF2(Character f2) {
              this.f2 = f2;
          }
  
          public String getF3() {
              return f3;
          }
  
          public void setF3(String f3) {
              this.f3 = f3;
          }
  
          public Date getDate() {
              return date;
          }
  
          public void setDate(Date date) {
              this.date = date;
          }
  
          public boolean isF4() {
              return f4;
          }
  
          public void setF4(boolean f4) {
              this.f4 = f4;
          }
  
          public char getF5() {
              return f5;
          }
  
          public void setF5(char f5) {
              this.f5 = f5;
          }
  
      }
  
      public static class VO {
  
          private int          id;
          private String       name;
          private BigDecimal   salary;
          private List<String> items;
  
          private Byte         f1;
          private Short        f2;
          private Integer      f3;
          private Long         f4;
          private BigInteger   f5;
          private BigDecimal   f6;
  
          private byte         f7;
          private short        f8;
          private int          f9;
          private long         f10;
  
          public Byte getF1() {
              return f1;
          }
  
          public void setF1(Byte f1) {
              this.f1 = f1;
          }
  
          public Short getF2() {
              return f2;
          }
  
          public void setF2(Short f2) {
              this.f2 = f2;
          }
  
          public Integer getF3() {
              return f3;
          }
  
          public void setF3(Integer f3) {
              this.f3 = f3;
          }
  
          public Long getF4() {
              return f4;
          }
  
          public void setF4(Long f4) {
              this.f4 = f4;
          }
  
          public BigInteger getF5() {
              return f5;
          }
  
          public void setF5(BigInteger f5) {
              this.f5 = f5;
          }
  
          public BigDecimal getF6() {
              return f6;
          }
  
          public void setF6(BigDecimal f6) {
              this.f6 = f6;
          }
  
          public byte getF7() {
              return f7;
          }
  
          public void setF7(byte f7) {
              this.f7 = f7;
          }
  
          public short getF8() {
              return f8;
          }
  
          public void setF8(short f8) {
              this.f8 = f8;
          }
  
          public int getF9() {
              return f9;
          }
  
          public void setF9(int f9) {
              this.f9 = f9;
          }
  
          public long getF10() {
              return f10;
          }
  
          public void setF10(long f10) {
              this.f10 = f10;
          }
  
          public BigDecimal getSalary() {
              return salary;
          }
  
          public void setSalary(BigDecimal salary) {
              this.salary = salary;
          }
  
          public int getId() {
              return id;
          }
  
          public void setId(int id) {
              this.id = id;
          }
  
          public String getName() {
              return name;
          }
  
          public void setName(String name) {
              this.name = name;
          }
  
          public List<String> getItems() {
              return items;
          }
  
          public void setItems(List<String> items) {
              this.items = items;
          }
  
      }
  }
  