package com.jsoniter; import com.jsoniter.spi.Binding; import com.jsoniter.spi.ClassDescriptor; import com.jsoniter.spi.JsoniterSpi; import com.jsoniter.spi.TypeLiteral; import junit.framework.TestCase; import java.io.IOException; import java.util.*; import static org.junit.Assert.assertArrayEquals; public class TestGenerics extends TestCase { static { // JsonIterator.setMode(DecodingMode.REFLECTION_MODE); } public void test_int_list() throws IOException { JsonIterator iter = JsonIterator.parse("[1,2,3]"); List val = iter.read(new TypeLiteral>() { }); assertArrayEquals(new Integer[]{1, 2, 3}, val.toArray(new Integer[0])); } public void test_string_list() throws IOException { JsonIterator iter = JsonIterator.parse("['hello', 'world']".replace('\'', '"')); List val = iter.read(new TypeLiteral>() { }); assertArrayEquals(new String[]{"hello", "world"}, val.toArray(new String[0])); } public void test_linked_list() throws IOException { JsonIterator iter = JsonIterator.parse("['hello', 'world']".replace('\'', '"')); List val = iter.read(new TypeLiteral>() { }); assertArrayEquals(new String[]{"hello", "world"}, val.toArray(new String[0])); } public void test_string_set() throws IOException { JsonIterator iter = JsonIterator.parse("['hello']".replace('\'', '"')); Set val = iter.read(new TypeLiteral>() { }); assertArrayEquals(new String[]{"hello"}, val.toArray(new String[0])); } public void test_string_map() throws IOException { JsonIterator iter = JsonIterator.parse("{'hello': 'world'}".replace('\'', '"')); Map val = iter.read(new TypeLiteral>() { }); assertEquals("world", val.get("hello")); } public void test_integer_map() throws IOException { JsonIterator iter = JsonIterator.parse("{'hello': 1}".replace('\'', '"')); Map val = iter.read(new TypeLiteral>() { }); assertEquals(Integer.valueOf(1), val.get("hello")); } public void test_list_of_list() throws Exception { JsonIterator iter = JsonIterator.parse("[[1,2],[3,4]]"); List> listOfList = iter.read(new TypeLiteral>>() { }); assertEquals(Integer.valueOf(4), listOfList.get(1).get(1)); } public void test_complex_object() throws IOException { JsonIterator iter = JsonIterator.parse("{'field1': 100, 'field2': [[1,2],[3,4]]}".replace('\'', '"')); ComplexObject val = iter.read(ComplexObject.class); assertEquals(100, val.field1); assertEquals(Integer.valueOf(4), val.field2.get(1).get(1)); } public static class Class1 { public List field1; public B[] field2; public List[] field3; public List field4; public List>> getField6() { return null; } public T getField7() { return null; } public void setField8(List a) { } } public static class Class2 extends Class1 { public E field5; } public static class Class3 extends Class2 { } public void test_generic_super_class() throws IOException { ClassDescriptor desc = JsoniterSpi.getDecodingClassDescriptor(Class3.class, true); Map fieldDecoderCacheKeys = new HashMap(); for (Binding field : desc.allDecoderBindings()) { fieldDecoderCacheKeys.put(field.name, field.valueTypeLiteral.getDecoderCacheKey()); } for (Binding field : JsoniterSpi.getEncodingClassDescriptor(Class3.class, true).getters) { fieldDecoderCacheKeys.put(field.name, field.valueTypeLiteral.getDecoderCacheKey()); } assertEquals(new HashMap() {{ put("field1", "decoder.java.util.List_java.lang.String"); put("field2", "decoder.java.lang.Integer_array"); put("field3", "decoder.java.util.List_java.lang.Integer_array"); put("field4", "decoder.java.util.List_java.lang.String_array"); put("field5", "decoder.java.lang.Float"); put("field6", "decoder.java.util.List_java.util.Map_java.lang.String_java.util.List_java.lang.Integer"); put("field7", "decoder.java.lang.Object"); put("field8", "decoder.java.util.List_java.lang.String"); }}, fieldDecoderCacheKeys); } }