package egovframework.rte.itl.webservice.service.impl;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import egovframework.rte.itl.integration.type.ListType;
import egovframework.rte.itl.integration.type.PrimitiveType;
import egovframework.rte.itl.integration.type.RecordType;
import egovframework.rte.itl.integration.type.Type;
import egovframework.rte.itl.webservice.service.EgovWebServiceClassLoader;
import egovframework.rte.itl.webservice.service.MessageConverter;
import egovframework.rte.itl.webservice.service.ServiceEndpointInfo;
import egovframework.rte.itl.webservice.service.ServiceEndpointInterfaceInfo;
public class MessageConverterImplTest
{
@SuppressWarnings("serial")
private final RecordType personRecordType =
new RecordType("personRecordType", "PersonRecordType",
new HashMap<String, Type>()
{{
put("no", PrimitiveType.INTEGER);
put("name", PrimitiveType.STRING);
}});
private final ListType personListType =
new ListType("person[]", "person array", personRecordType);
@SuppressWarnings("serial")
private final RecordType recordType =
new RecordType("recordType", "RecordType",
new HashMap<String, Type>()
{{
put("booleanValue", PrimitiveType.BOOLEAN);
put("byteValue", PrimitiveType.BYTE);
put("shortValue", PrimitiveType.SHORT);
put("intValue", PrimitiveType.INTEGER);
put("longValue", PrimitiveType.LONG);
put("bigIntegerValue", PrimitiveType.BIGINTEGER);
put("floatValue", PrimitiveType.FLOAT);
put("doubleValue", PrimitiveType.DOUBLE);
put("bigDecimalValue", PrimitiveType.BIGDECIMAL);
put("stringValue", PrimitiveType.STRING);
put("calendarValue", PrimitiveType.CALENDAR);
put("personList", personListType);
}});
private final EgovWebServiceClassLoader classLoader =
new EgovWebServiceClassLoader()
{
@SuppressWarnings("serial")
private final Map<Type, Class<?>> map =
new HashMap<Type, Class<?>>()
{{
put(personRecordType, Person.class);
put(personListType, (new Person[0]).getClass());
put(recordType, ValueObject.class);
}};
public String getFieldNameOfServiceBridge()
{
return null;
}
public Class<?> loadClass(ServiceEndpointInfo serviceEndpointInfo)
throws ClassNotFoundException
{
return null;
}
public Class<?> loadClass(
ServiceEndpointInterfaceInfo serviceEndpointInterfaceInfo)
throws ClassNotFoundException
{
return null;
}
public Class<?> loadClass(Type type) throws ClassNotFoundException
{
return map.get(type);
}
};
private final MessageConverter messageConverter =
new MessageConverterImpl(classLoader);
@SuppressWarnings("serial")
private final List<Object> personList = new ArrayList<Object>()
{{
add(new HashMap<String, Object>()
{{
put("no", 1);
put("name", "ȫ�浿");
}});
add(new HashMap<String, Object>()
{{
put("no", 2);
put("name", "��ö��");
}});
add(new HashMap<String, Object>()
{{
put("no", 3);
put("name", "�ֿ���");
}});
}};
@SuppressWarnings("serial")
private final Map<String, Object> typedObject = new HashMap<String, Object>()
{{
put("booleanValue", true);
put("byteValue", Byte.MAX_VALUE);
put("shortValue", Short.MAX_VALUE);
put("intValue", Integer.MAX_VALUE);
put("longValue", Long.MAX_VALUE);
put("bigIntegerValue", BigInteger.valueOf(Long.MAX_VALUE));
put("floatValue", Float.MAX_VALUE);
put("doubleValue", Double.MAX_VALUE);
put("bigDecimalValue", BigDecimal.valueOf(Double.MAX_VALUE));
put("stringValue", "String");
put("calendarValue", Calendar.getInstance());
put("personList", personList);
}};
private final ValueObject valueObject = new ValueObject()
{{
booleanValue = true;
byteValue = Byte.MAX_VALUE;
shortValue = Short.MAX_VALUE;
intValue = Integer.MAX_VALUE;
longValue = Long.MAX_VALUE;
bigIntegerValue = BigInteger.valueOf(Long.MAX_VALUE);
floatValue = Float.MAX_VALUE;
doubleValue = Double.MAX_VALUE;
bigDecimalValue = BigDecimal.valueOf(Double.MAX_VALUE);
stringValue = "String";
calendarValue = Calendar.getInstance();
personList = new Person[] {
new Person() {{ no = 1; name = "ȫ�浿"; }},
new Person() {{ no = 2; name = "��ö��"; }},
new Person() {{ no = 3; name = "�ֿ���"; }}
};
}};
@SuppressWarnings("unchecked")
@Test
public void testConvertToValueObject() throws Exception
{
Object object =
messageConverter.convertToValueObject(typedObject, recordType);
assertNotNull(object);
assertTrue(object instanceof ValueObject);
ValueObject valueObject = (ValueObject)object;
assertEquals(typedObject.get("booleanValue"), valueObject.booleanValue);
assertEquals(typedObject.get("byteValue"), valueObject.byteValue);
assertEquals(typedObject.get("shortValue"), valueObject.shortValue);
assertEquals(typedObject.get("intValue"), valueObject.intValue);
assertEquals(typedObject.get("longValue"), valueObject.longValue);
assertEquals(typedObject.get("bigIntegerValue"), valueObject.bigIntegerValue);
assertEquals(typedObject.get("floatValue"), valueObject.floatValue);
assertEquals(typedObject.get("doubleValue"), valueObject.doubleValue);
assertEquals(typedObject.get("bigDecimalValue"), valueObject.bigDecimalValue);
assertEquals(typedObject.get("stringValue"), valueObject.stringValue);
assertEquals(typedObject.get("calendarValue"), valueObject.calendarValue);
Person[] personArray = valueObject.personList;
assertNotNull(personArray);
assertEquals(personList.size(), personArray.length);
for (int i = 0; i < personList.size(); i++)
{
Map<String, Object> personMap = (Map<String, Object>)personList.get(i);
Person person = personArray[i];
assertEquals(personMap.get("no"), person.no);
assertEquals(personMap.get("name"), person.name);
}
}
@SuppressWarnings("unchecked")
@Test
public void testConvertToTypedObject() throws Exception
{
Object object =
messageConverter.convertToTypedObject(valueObject, recordType);
assertNotNull(object);
assertTrue(object instanceof Map);
Map<String, Object> typedObject = (Map<String, Object>)object;
assertEquals(valueObject.booleanValue, typedObject.get("booleanValue"));
assertEquals(valueObject.byteValue, typedObject.get("byteValue"));
assertEquals(valueObject.shortValue, typedObject.get("shortValue"));
assertEquals(valueObject.intValue, typedObject.get("intValue"));
assertEquals(valueObject.longValue, typedObject.get("longValue"));
assertEquals(valueObject.bigIntegerValue, typedObject.get("bigIntegerValue"));
assertEquals(valueObject.floatValue, typedObject.get("floatValue"));
assertEquals(valueObject.doubleValue, typedObject.get("doubleValue"));
assertEquals(valueObject.bigDecimalValue, typedObject.get("bigDecimalValue"));
assertEquals(valueObject.stringValue, typedObject.get("stringValue"));
assertEquals(valueObject.calendarValue, typedObject.get("calendarValue"));
Person[] personArray = valueObject.personList;
object = typedObject.get("personList");
assertNotNull(object);
assertTrue(object instanceof List);
List<Object> personList = (List<Object>)object;
assertEquals(personArray.length, personList.size());
for (int i = 0; i < personArray.length; i++)
{
Person person = personArray[i];
object = personList.get(i);
assertNotNull(object);
assertTrue(object instanceof Map);
Map<String, Object> personMap = (Map<String, Object>)object;
assertEquals(person.no, personMap.get("no"));
assertEquals(person.name, personMap.get("name"));
}
}
}
class ValueObject
{
public boolean booleanValue;
public byte byteValue;
public short shortValue;
public int intValue;
public long longValue;
public BigInteger bigIntegerValue;
public float floatValue;
public double doubleValue;
public BigDecimal bigDecimalValue;
public String stringValue;
public Calendar calendarValue;
public Person[] personList;
}
class Person
{
public int no;
public String name;
}