test improvement
diff --git a/src/test/java/com/fasterxml/jackson/databind/type/TestTypeFactory.java b/src/test/java/com/fasterxml/jackson/databind/type/TestTypeFactory.java
index a3d6e43..aafc916 100644
--- a/src/test/java/com/fasterxml/jackson/databind/type/TestTypeFactory.java
+++ b/src/test/java/com/fasterxml/jackson/databind/type/TestTypeFactory.java
@@ -121,60 +121,6 @@
}
}
- public void testCollections()
- {
- // Ok, first: let's test what happens when we pass 'raw' Collection:
- TypeFactory tf = TypeFactory.defaultInstance();
- JavaType t = tf.constructType(ArrayList.class);
- assertEquals(CollectionType.class, t.getClass());
- assertSame(ArrayList.class, t.getRawClass());
-
- // And then the proper way
- t = tf.constructType(new TypeReference<ArrayList<String>>() { });
- assertEquals(CollectionType.class, t.getClass());
- assertSame(ArrayList.class, t.getRawClass());
-
- JavaType elemType = ((CollectionType) t).getContentType();
- assertNotNull(elemType);
- assertSame(SimpleType.class, elemType.getClass());
- assertSame(String.class, elemType.getRawClass());
-
- // And alternate method too
- t = tf.constructCollectionType(ArrayList.class, String.class);
- assertEquals(CollectionType.class, t.getClass());
- assertSame(String.class, ((CollectionType) t).getContentType().getRawClass());
- }
-
- public void testMaps()
- {
- TypeFactory tf = TypeFactory.defaultInstance();
- // Ok, first: let's test what happens when we pass 'raw' Map:
- JavaType t = tf.constructType(HashMap.class);
- assertEquals(MapType.class, t.getClass());
- assertSame(HashMap.class, t.getRawClass());
-
- // Then explicit construction
- t = tf.constructMapType(TreeMap.class, String.class, Integer.class);
- assertEquals(MapType.class, t.getClass());
- assertSame(String.class, ((MapType) t).getKeyType().getRawClass());
- assertSame(Integer.class, ((MapType) t).getContentType().getRawClass());
-
- // And then with TypeReference
- t = tf.constructType(new TypeReference<HashMap<String,Integer>>() { });
- assertEquals(MapType.class, t.getClass());
- assertSame(HashMap.class, t.getRawClass());
- MapType mt = (MapType) t;
- assertEquals(tf.constructType(String.class), mt.getKeyType());
- assertEquals(tf.constructType(Integer.class), mt.getContentType());
-
- t = tf.constructType(new TypeReference<LongValuedMap<Boolean>>() { });
- assertEquals(MapType.class, t.getClass());
- assertSame(LongValuedMap.class, t.getRawClass());
- mt = (MapType) t;
- assertEquals(tf.constructType(Boolean.class), mt.getKeyType());
- assertEquals(tf.constructType(Long.class), mt.getContentType());
- }
-
// [databind#810]: Fake Map type for Properties as <String,String>
public void testProperties()
{
@@ -286,13 +232,92 @@
/*
/**********************************************************
- /* Unit tests: map/collection type parameter resolution
+ /* Unit tests: collection type parameter resolution
/**********************************************************
*/
- public void testMapTypesSimple()
+ public void testCollections()
{
+ // Ok, first: let's test what happens when we pass 'raw' Collection:
TypeFactory tf = TypeFactory.defaultInstance();
+ JavaType t = tf.constructType(ArrayList.class);
+ assertEquals(CollectionType.class, t.getClass());
+ assertSame(ArrayList.class, t.getRawClass());
+
+ // And then the proper way
+ t = tf.constructType(new TypeReference<ArrayList<String>>() { });
+ assertEquals(CollectionType.class, t.getClass());
+ assertSame(ArrayList.class, t.getRawClass());
+
+ JavaType elemType = ((CollectionType) t).getContentType();
+ assertNotNull(elemType);
+ assertSame(SimpleType.class, elemType.getClass());
+ assertSame(String.class, elemType.getRawClass());
+
+ // And alternate method too
+ t = tf.constructCollectionType(ArrayList.class, String.class);
+ assertEquals(CollectionType.class, t.getClass());
+ assertSame(String.class, ((CollectionType) t).getContentType().getRawClass());
+ }
+
+ // since 2.7
+ public void testCollectionTypesRefined()
+ {
+ TypeFactory tf = newTypeFactory();
+ JavaType type = tf.constructType(new TypeReference<List<Long>>() { });
+ assertEquals(List.class, type.getRawClass());
+ assertEquals(Long.class, type.getContentType().getRawClass());
+ // No super-class, since it's an interface:
+ assertNull(type.getSuperClass());
+
+ // But then refine to reflect sub-classing
+ JavaType subtype = tf.constructSpecializedType(type, ArrayList.class);
+ assertEquals(ArrayList.class, subtype.getRawClass());
+ assertEquals(List.class, subtype.getContentType().getRawClass());
+ assertEquals(Long.class, type.getContentType().getRawClass());
+
+ // but with refinement, should have non-null super class
+ JavaType superType = subtype.getSuperClass();
+ assertNotNull(superType);
+ assertEquals(AbstractList.class, superType.getRawClass());
+ }
+
+ /*
+ /**********************************************************
+ /* Unit tests: map type parameter resolution
+ /**********************************************************
+ */
+
+ public void testMaps()
+ {
+ TypeFactory tf = newTypeFactory();
+
+ // Ok, first: let's test what happens when we pass 'raw' Map:
+ JavaType t = tf.constructType(HashMap.class);
+ assertEquals(MapType.class, t.getClass());
+ assertSame(HashMap.class, t.getRawClass());
+
+ // Then explicit construction
+ t = tf.constructMapType(TreeMap.class, String.class, Integer.class);
+ assertEquals(MapType.class, t.getClass());
+ assertSame(String.class, ((MapType) t).getKeyType().getRawClass());
+ assertSame(Integer.class, ((MapType) t).getContentType().getRawClass());
+
+ // And then with TypeReference
+ t = tf.constructType(new TypeReference<HashMap<String,Integer>>() { });
+ assertEquals(MapType.class, t.getClass());
+ assertSame(HashMap.class, t.getRawClass());
+ MapType mt = (MapType) t;
+ assertEquals(tf.constructType(String.class), mt.getKeyType());
+ assertEquals(tf.constructType(Integer.class), mt.getContentType());
+
+ t = tf.constructType(new TypeReference<LongValuedMap<Boolean>>() { });
+ assertEquals(MapType.class, t.getClass());
+ assertSame(LongValuedMap.class, t.getRawClass());
+ mt = (MapType) t;
+ assertEquals(tf.constructType(Boolean.class), mt.getKeyType());
+ assertEquals(tf.constructType(Long.class), mt.getContentType());
+
JavaType type = tf.constructType(new TypeReference<Map<String,Boolean>>() { });
MapType mapType = (MapType) type;
assertEquals(tf.constructType(String.class), mapType.getKeyType());
@@ -309,7 +334,6 @@
assertEquals(String.class, mapType.getKeyType().getRawClass());
assertEquals(List.class, mapType.getContentType().getRawClass());
assertEquals(Integer.class, mapType.getContentType().getContentType().getRawClass());
-
// No super-class, since it's an interface:
assertNull(type.getSuperClass());