package com.alibaba.json.bvt.bug;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.alibaba.fastjson.annotation.JSONField;
import com.alibaba.fastjson.annotation.JSONPOJOBuilder;
import com.alibaba.fastjson.annotation.JSONType;
import junit.framework.TestCase;
import org.junit.Assert;
import org.junit.Test;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;
/**
* Created by wenshao on 19/12/2016.
*/
public class Issue955 extends TestCase {
public void test_checkObject() {
Art origin = makeOrigin();
JSONObject articleObj = (JSONObject) JSON.toJSON(origin);
JSONObject dataObj = new JSONObject();
dataObj.put("art", articleObj);
Art other = dataObj.getObject("art", Art.class);// return null;
assertSame(origin, other); // test failed
}
public void test_checkArray() throws Exception {
Art origin = makeOrigin();
JSONObject object = (JSONObject) JSON.toJSON(origin);
JSONArray jsonArray = new JSONArray();
jsonArray.add(object);
Art other = JSON.parseObject(jsonArray.getString(0), Art.class);
assertSame(origin, other); // test passed
other = jsonArray.getObject(0, Art.class); // return = null;
assertSame(origin, other); // test failed
}
private Art makeOrigin() {
final long unixTime = System.currentTimeMillis() / 1000;
final Art origin = new Art();
origin.id = "12";
origin.date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date(unixTime * 1000));
origin.isSupported = true;
return origin;
}
public void assertSame(Art origin, Art another) {
assertNotNull(another);
assertEquals(origin.id, another.id);
assertEquals(origin.date, another.date);
assertSame(origin.isSupported, another.isSupported);
}
@JSONType(builder = Art.Builder.class)
public static class Art {
private String id;
private String date;
private boolean isSupported;
public String getId() {
return id;
}
public long getDatetime() throws ParseException {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
return (format.parse(date)).getTime() / 1000;
}
@JSONField(name = "isSupported")
public int isSupported() {
return isSupported ? 1 : 0;
}
@JSONPOJOBuilder()
public final static class Builder {
private final Art article = new Art();
public Builder(){
}
@JSONField(name = "id")
public Builder withId(String id) {
article.id = id;
return this;
}
@JSONField(name = "datetime")
public Builder withDateTime(long dateTime) {
if (dateTime > 0)
article.date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date(dateTime * 1000));
return this;
}
@JSONField(name = "isSupported")
public Builder withSupported(int supported) {
article.isSupported = supported == 1;
return this;
}
public Art build() {
return article;
}
}
}
}