/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.function;
import static org.testng.AssertJUnit.assertEquals;
import static org.testng.AssertJUnit.assertTrue;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.poi.ss.formula.functions.T;
import org.testng.annotations.Test;
import com.google.common.reflect.TypeToken;
import com.opengamma.util.test.TestGroup;
@Test(groups = TestGroup.UNIT)
public class ParameterTypeTest {
@Test
public void simpleTypeNameNonGenericType() {
ParameterType parameterType = ParameterType.ofType(String.class);
assertEquals("String", parameterType.getName());
}
@Test
public void simpleTypeNameNonGenericArray() {
ParameterType parameterType = ParameterType.ofType(double[].class);
assertEquals("double[]", parameterType.getName());
}
@Test
public void simpleTypeNameParameterizedType() {
TypeToken<List<String>> typeToken = new TypeToken<List<String>>() { };
ParameterType parameterType = ParameterType.ofType(typeToken.getType());
assertEquals("List<String>", parameterType.getName());
}
@Test
public void simpleTypeNameRawType() {
TypeToken<List> typeToken = new TypeToken<List>() { };
ParameterType parameterType = ParameterType.ofType(typeToken.getType());
assertEquals("List", parameterType.getName());
}
@Test
public void simpleTypeNameNestedRawType() {
TypeToken<List<List>> typeToken = new TypeToken<List<List>>() { };
ParameterType parameterType = ParameterType.ofType(typeToken.getType());
assertEquals("List<List>", parameterType.getName());
}
@Test
public void simpleTypeNameParameterizedType2() {
TypeToken<List<T>> typeToken = new TypeToken<List<T>>() { };
ParameterType parameterType = ParameterType.ofType(typeToken.getType());
assertEquals("List<T>", parameterType.getName());
}
@Test
public void simpleTypeNameNestedParameterizedType() {
TypeToken<List<Set<String>>> typeToken = new TypeToken<List<Set<String>>>() { };
ParameterType parameterType = ParameterType.ofType(typeToken.getType());
assertEquals("List<Set>", parameterType.getName());
}
@Test
public void simpleTypeNameParameterizedMap() {
TypeToken<Map<String, Integer>> typeToken = new TypeToken<Map<String, Integer>>() { };
ParameterType parameterType = ParameterType.ofType(typeToken.getType());
assertEquals("Map<String, Integer>", parameterType.getName());
}
@Test
public void simpleTypeNameNestedParameterizedMap() {
TypeToken<Map<Set<String>, Collection<Integer>>> typeToken = new TypeToken<Map<Set<String>, Collection<Integer>>>() { };
ParameterType parameterType = ParameterType.ofType(typeToken.getType());
assertEquals("Map<Set, Collection>", parameterType.getName());
}
@Test
public void simpleTypeNameGenericArrayType() {
TypeToken<List<String>[]> typeToken = new TypeToken<List<String>[]>() { };
ParameterType parameterType = ParameterType.ofType(typeToken.getType());
assertEquals("List[]", parameterType.getName());
}
@Test
public void collection() {
TypeToken<Collection> rawCollectionToken = new TypeToken<Collection>() { };
ParameterType rawCollectionType = ParameterType.ofType(rawCollectionToken.getType());
assertEquals(Collection.class, rawCollectionType.getType());
assertTrue(rawCollectionType instanceof SimpleType);
TypeToken<Collection<String>> stringCollectionToken = new TypeToken<Collection<String>>() { };
ParameterType stringCollectionType = ParameterType.ofType(stringCollectionToken.getType());
assertEquals(Collection.class, stringCollectionType.getType());
assertTrue(stringCollectionType instanceof CollectionType);
assertEquals(String.class, ((CollectionType) stringCollectionType).getElementType());
TypeToken<Collection<List<String>>> nestedCollectionToken = new TypeToken<Collection<List<String>>>() { };
ParameterType nestedCollectionType = ParameterType.ofType(nestedCollectionToken.getType());
assertEquals(Collection.class, nestedCollectionType.getType());
assertTrue(nestedCollectionType instanceof CollectionType);
assertEquals(List.class, ((CollectionType) nestedCollectionType).getElementType());
}
@Test
public void array() {
ParameterType stringArrayType = ParameterType.ofType(String[].class);
assertTrue(stringArrayType instanceof ArrayType);
assertEquals(String.class, ((ArrayType) stringArrayType).getElementType());
TypeToken<List<String>[]> listStringArrayToken = new TypeToken<List<String>[]>() { };
ParameterType listStringArrayType = ParameterType.ofType(listStringArrayToken.getType());
assertTrue(listStringArrayType instanceof ArrayType);
assertEquals(List.class, ((ArrayType) listStringArrayType).getElementType());
}
@Test
public void map() {
TypeToken<Map<String, Integer>> simpleMapToken = new TypeToken<Map<String, Integer>>() { };
ParameterType simpleMapType = ParameterType.ofType(simpleMapToken.getType());
assertTrue(simpleMapType instanceof MapType);
assertEquals(String.class, ((MapType) simpleMapType).getKeyType());
assertEquals(Integer.class, ((MapType) simpleMapType).getValueType());
TypeToken<Map<List<String>, Set<Integer>>> nestedMapToken = new TypeToken<Map<List<String>, Set<Integer>>>() { };
ParameterType nestedMapType = ParameterType.ofType(nestedMapToken.getType());
assertTrue(nestedMapType instanceof MapType);
assertEquals(List.class, ((MapType) nestedMapType).getKeyType());
assertEquals(Set.class, ((MapType) nestedMapType).getValueType());
}
}