/*
* www.yiji.com Inc.
* Copyright (c) 2014 All Rights Reserved
*/
/*
* 修订记录:
* qzhanbo@yiji.com 2015-03-01 00:55 创建
*
*/
package com.alibaba.json.bvt.serializer.enum_;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.serializer.SerializeWriter;
import com.alibaba.fastjson.serializer.SerializerFeature;
import org.junit.Assert;
import org.junit.Test;
import java.util.EnumMap;
import java.util.HashMap;
import java.util.Map;
/**
* @author bohr.qiu@gmail.com
*/
public class EnumTest3 {
@Test
public void testDefault() throws Exception {
String json = JSON.toJSONString(Sex.M);
Assert.assertEquals(json, "\"M\"");
Pojo pojo = new Pojo();
pojo.setSex(Sex.M);
json = JSON.toJSONString(pojo);
Assert.assertEquals(json, "{\"sex\":\"M\"}");
try {
JSON.parseObject(json, Pojo.class);
Assert.assertTrue(true);
} catch (Exception e) {
Assert.fail("枚举默认序列化name值,可以反序列化成功");
}
Map<String, Pojo> map = new HashMap<String, Pojo>();
map.put("a", pojo);
json = JSON.toJSONString(map);
Assert.assertEquals(json, "{\"a\":{\"sex\":\"M\"}}");
Map<Sex, Pojo> enumMap = new EnumMap<Sex, Pojo>(Sex.class);
enumMap.put(Sex.M, pojo);
json = JSON.toJSONString(enumMap);
Assert.assertEquals(json, "{\"M\":{\"sex\":\"M\"}}");
}
@Test
public void testDefault1() throws Exception {
// JSON.DUMP_CLASS = "/Users/bohr/Downloads/tmp";
String json = JSON.toJSONString(Sex.M, SerializerFeature.WriteEnumUsingToString);
Assert.assertEquals(json, "\"男\"");
}
@Test
public void testDefault2() throws Exception {
Pojo pojo = new Pojo();
pojo.setSex(Sex.M);
String json = JSON.toJSONString(pojo, SerializerFeature.WriteEnumUsingToString);
Assert.assertEquals(json, "{\"sex\":\"男\"}");
try {
Pojo pojo1 = JSON.parseObject(json, Pojo.class);
Assert.assertNull(pojo1.getSex());
} catch (Exception e) {
Assert.assertTrue(true);
}
Map<String, Pojo> map = new HashMap<String, Pojo>();
map.put("a", pojo);
json = JSON.toJSONString(map, SerializerFeature.WriteEnumUsingToString);
Assert.assertEquals(json, "{\"a\":{\"sex\":\"男\"}}");
Map<Sex, Pojo> enumMap = new EnumMap<Sex, Pojo>(Sex.class);
enumMap.put(Sex.M, pojo);
json = JSON.toJSONString(enumMap, SerializerFeature.WriteEnumUsingToString);
Assert.assertEquals(json, "{\"男\":{\"sex\":\"男\"}}");
}
@Test
public void testName() throws Exception {
Assert.assertEquals("\"男\"", JSON.toJSONString(Sex.M, SerializerFeature.WriteEnumUsingToString));
Assert.assertEquals("\"女\"", JSON.toJSONString(Sex.W, SerializerFeature.WriteEnumUsingToString));
}
@Test
public void testWriterSerializerFeature() throws Exception {
SerializeWriter writer=new SerializeWriter();
writer.config(SerializerFeature.WriteEnumUsingToString,true);
Assert.assertTrue(writer.isEnabled(SerializerFeature.WriteEnumUsingToString));
writer.config(SerializerFeature.WriteEnumUsingName,true);
Assert.assertTrue(writer.isEnabled(SerializerFeature.WriteEnumUsingName));
Assert.assertFalse(writer.isEnabled(SerializerFeature.WriteEnumUsingToString));
writer.config(SerializerFeature.WriteEnumUsingToString,true);
Assert.assertTrue(writer.isEnabled(SerializerFeature.WriteEnumUsingToString));
Assert.assertFalse(writer.isEnabled(SerializerFeature.WriteEnumUsingName));
}
public static enum Sex {
M("男"),
W("女");
private String msg;
Sex(String msg) {
this.msg = msg;
}
@Override
public String toString() {
return msg;
}
}
public static class Pojo {
private Sex sex;
public Sex getSex() {
return sex;
}
public void setSex(Sex sex) {
this.sex = sex;
}
}
}