*/
public void testParametricTypes()
{
TypeFactory tf = TypeFactory.defaultInstance();
// first, simple class based
JavaType t = tf.constructParametricType(ArrayList.class, String.class); // ArrayList<String>
assertEquals(CollectionType.class, t.getClass());
JavaType strC = tf.constructType(String.class);
assertEquals(1, t.containedTypeCount());
assertEquals(strC, t.containedType(0));
assertNull(t.containedType(1));
// Then using JavaType
JavaType t2 = tf.constructParametricType(Map.class, strC, t); // Map<String,ArrayList<String>>
// should actually produce a MapType
assertEquals(MapType.class, t2.getClass());
assertEquals(2, t2.containedTypeCount());
assertEquals(strC, t2.containedType(0));
assertEquals(t, t2.containedType(1));
assertNull(t2.containedType(2));
// and then custom generic type as well
JavaType custom = tf.constructParametricType(SingleArgGeneric.class, String.class);
assertEquals(SimpleType.class, custom.getClass());
assertEquals(1, custom.containedTypeCount());
assertEquals(strC, custom.containedType(0));
assertNull(custom.containedType(1));
// should also be able to access variable name:
assertEquals("X", custom.containedTypeName(0));
// And finally, ensure that we can't create invalid combinations
try {
// Maps must take 2 type parameters, not just one
tf.constructParametricType(Map.class, strC);