package com.alibaba.json.bvt.serializer;

import java.sql.Date;
import java.sql.Timestamp;

import org.junit.Assert;
import junit.framework.TestCase;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONException;

public class BugTest0 extends TestCase {

    public void test_0() throws Exception {
        Timestamp t = new Timestamp(System.currentTimeMillis());

        String text = JSON.toJSONString(t);

        Timestamp t1 = JSON.parseObject(text, Timestamp.class);
        Assert.assertEquals(t, t1);
    }

    public void test_1() throws Exception {
        long t1 = System.currentTimeMillis();
        String text = JSON.toJSONString(t1);

        Timestamp t2 = JSON.parseObject(text, Timestamp.class);
        Assert.assertEquals(t1, t2.getTime());
    }

    public void test_2() throws Exception {
        Date t = new Date(System.currentTimeMillis());

        String text = JSON.toJSONString(t);

        Date t1 = JSON.parseObject(text, Date.class);
        Assert.assertEquals(t, t1);
    }

    public void test_3() throws Exception {
        long t1 = System.currentTimeMillis();
        String text = JSON.toJSONString(t1);

        Date t2 = JSON.parseObject(text, Date.class);
        Assert.assertEquals(t1, t2.getTime());
    }

    public void test_4() throws Exception {
        A a = new A();
        a.setDate(new java.sql.Date(System.currentTimeMillis()));
        a.setTime(new java.sql.Timestamp(System.currentTimeMillis()));
        String text = JSON.toJSONString(a);

        A a1 = JSON.parseObject(text, A.class);

        Assert.assertEquals(a.getDate(), a1.getDate());
        Assert.assertEquals(a.getTime(), a1.getTime());
    }

    public void test_error_0() throws Exception {
        Exception error = null;
        try {
            JSON.parseObject("\"222A\"", Timestamp.class);
        } catch (JSONException e) {
            error = e;
        }
        Assert.assertNotNull(error);
    }

    public void test_error_1() throws Exception {
        Exception error = null;
        try {
            JSON.parseObject("\"222B\"", Date.class);
        } catch (JSONException e) {
            error = e;
        }
        Assert.assertNotNull(error);
    }
    
    public void test_error_3() throws Exception {
        Exception error = null;
        try {
            JSON.parseObject("true", Timestamp.class);
        } catch (JSONException e) {
            error = e;
        }
        Assert.assertNotNull(error);
    }
    
    public void test_error_4() throws Exception {
        Exception error = null;
        try {
            JSON.parseObject("true", Date.class);
        } catch (JSONException e) {
            error = e;
        }
        Assert.assertNotNull(error);
    }

    public static class A {

        private java.sql.Timestamp time;
        private java.sql.Date      date;

        public java.sql.Timestamp getTime() {
            return time;
        }

        public void setTime(java.sql.Timestamp time) {
            this.time = time;
        }

        public java.sql.Date getDate() {
            return date;
        }

        public void setDate(java.sql.Date date) {
            this.date = date;
        }

    }
}
