content: /*
   * 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;
  		}
  	}
  }
  