package egovframework.rte.itl.integration.type;
import static org.junit.Assert.*;
import java.util.Calendar;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import egovframework.rte.itl.integration.message.typed.TypedMap;
@SuppressWarnings("serial")
public class RecordTypeTest
{
private static final ListType stringListType =
new ListType("string[]", "string[]", PrimitiveType.STRING);
private static final RecordType recordTypeA =
new RecordType("A", "A", new HashMap<String, Type>()
{{
put("a", PrimitiveType.STRING);
put("b", PrimitiveType.INTEGER);
}});
private static final RecordType recordTypeB =
new RecordType("B", "B", new HashMap<String, Type>()
{{
put("c", PrimitiveType.BOOLEAN);
put("d", stringListType);
}});
private static final RecordType recordTypeC =
new RecordType("C", "C", new HashMap<String, Type>()
{{
put("e", recordTypeA);
put("f", PrimitiveType.CALENDAR);
}});
@Test
public void testIsAssignableFrom() throws Exception
{
assertTrue(recordTypeA.isAssignableFrom(TypedMap.class));
assertTrue(recordTypeA.isAssignableFrom(Map.class));
assertFalse(recordTypeA.isAssignableFrom(Iterable.class));
}
@Test
public void testIsAssignableValue() throws Exception
{
final Map<String, Object> valueA1 = new HashMap<String, Object>()
{{
put("a", "valueA");
put("b", 1);
}};
final Map<String, Object> valueA2 = new HashMap<String, Object>()
{{
put("a", "valueA");
}};
final Map<String, Object> valueA3 = new HashMap<String, Object>()
{{
put("a", "valueA");
put("c", true);
}};
assertTrue(recordTypeA.isAssignableValue(valueA1));
assertTrue(recordTypeA.isAssignableValue(valueA2));
try
{
recordTypeA.isAssignableValue(valueA3);
fail();
}
catch (NoSuchRecordFieldException e)
{
}
final Map<String, Object> valueB1 = new HashMap<String, Object>()
{{
put("c", true);
put("d", new String[] { "x", "y", "z" });
}};
final Map<String, Object> valueB2 = new HashMap<String, Object>()
{{
put("c", true);
put("d", new String[] {});
}};
final Map<String, Object> valueB3 = new HashMap<String, Object>()
{{
put("c", true);
put("d", null);
}};
assertTrue(recordTypeB.isAssignableValue(valueB1));
assertTrue(recordTypeB.isAssignableValue(valueB2));
assertTrue(recordTypeB.isAssignableValue(valueB3));
final Map<String, Object> valueC1 = new HashMap<String, Object>()
{{
put("e", valueA1);
put("f", Calendar.getInstance());
}};
final Map<String, Object> valueC2 = new HashMap<String, Object>()
{{
put("e", valueB1);
put("f", Calendar.getInstance());
}};
assertTrue(recordTypeC.isAssignableValue(valueC1));
try
{
recordTypeC.isAssignableValue(valueC2);
fail();
}
catch (NoSuchRecordFieldException e)
{
}
}
}