package egovframework.rte.itl.integration.type; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.junit.Assert.fail; import java.util.Calendar; import java.util.HashMap; import java.util.Map; import egovframework.rte.itl.integration.message.typed.TypedMap; import org.junit.Test; 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>() { /** * serialVersion UID */ private static final long serialVersionUID = 1003291813408378852L; { put("a", PrimitiveType.STRING); put("b", PrimitiveType.INTEGER); } }); private static final RecordType recordTypeB = new RecordType("B", "B", new HashMap<String, Type>() { /** * serialVersion UID */ private static final long serialVersionUID = -2204589011002849636L; { put("c", PrimitiveType.BOOLEAN); put("d", stringListType); } }); private static final RecordType recordTypeC = new RecordType("C", "C", new HashMap<String, Type>() { /** * serialVersion UID */ private static final long serialVersionUID = 198137443349401515L; { 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>() { /** * serialVersion UID */ private static final long serialVersionUID = 3284655428518660243L; { put("a", "valueA"); put("b", 1); } }; final Map<String, Object> valueA2 = new HashMap<String, Object>() { /** * serialVersion UID */ private static final long serialVersionUID = 6776775395656328695L; { put("a", "valueA"); } }; final Map<String, Object> valueA3 = new HashMap<String, Object>() { /** * serialVersion UID */ private static final long serialVersionUID = -5765762438505921584L; { 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>() { /** * serialVersion UID */ private static final long serialVersionUID = -3644426118423305930L; { put("c", true); put("d", new String[] { "x", "y", "z" }); } }; final Map<String, Object> valueB2 = new HashMap<String, Object>() { /** * serialVersion UID */ private static final long serialVersionUID = -185879951518993662L; { put("c", true); put("d", new String[] {}); } }; final Map<String, Object> valueB3 = new HashMap<String, Object>() { /** * serialVersion UID */ private static final long serialVersionUID = -6515925286263685839L; { 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>() { /** * serialVersion UID */ private static final long serialVersionUID = -1730034652757831321L; { put("e", valueA1); put("f", Calendar.getInstance()); } }; final Map<String, Object> valueC2 = new HashMap<String, Object>() { /** * serialVersion UID */ private static final long serialVersionUID = -811765504132330071L; { put("e", valueB1); put("f", Calendar.getInstance()); } }; assertTrue(recordTypeC.isAssignableValue(valueC1)); try { recordTypeC.isAssignableValue(valueC2); fail(); } catch (NoSuchRecordFieldException e) { } } }