package com.alibaba.json.bvt.parser.deser;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Set;

import org.junit.Assert;

import junit.framework.TestCase;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.TypeReference;

public class ArrayListTypeDeserializerTest extends TestCase {

    public void test_null_0() throws Exception {
        Assert.assertNull(JSON.parseObject("null", new TypeReference<ArrayList<Integer>>() {
        }));
    }

    public void test_null_1() throws Exception {
        Assert.assertNull(JSON.parseObject("null", new TypeReference<Collection<Integer>>() {
        }));
    }

    public void test_null_2() throws Exception {
        Assert.assertNull(JSON.parseObject("{\"value\":null}", VO.class).getValue());
    }

    public void test_null_3() throws Exception {
        Assert.assertNull(JSON.parseObject("{\"value\":null}", V1.class).getValue());
    }

    public void test_empty() throws Exception {
        Assert.assertEquals(0, JSON.parseObject("[]", new TypeReference<ArrayList<Integer>>() {
        }).size());
        Assert.assertEquals(0, JSON.parseObject("[]", new TypeReference<Set<Integer>>() {
        }).size());

        Assert.assertEquals(0, JSON.parseObject("[]", new TypeReference<HashSet<Integer>>() {
        }).size());

        Assert.assertEquals(0, JSON.parseObject("{\"value\":[]}", VO.class).getValue().size());
    }

    public static class VO {

        private ArrayList<Integer> value;

        public ArrayList<Integer> getValue() {
            return value;
        }

        public void setValue(ArrayList<Integer> value) {
            this.value = value;
        }

    }

    private static class V1 {

        private ArrayList<Integer> value;

        public ArrayList<Integer> getValue() {
            return value;
        }

        @SuppressWarnings("unused")
        public void setValue(ArrayList<Integer> value) {
            this.value = value;
        }

    }
}
