package com.alibaba.tamper.convertor;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Calendar;
import java.util.Date;
import junit.framework.TestCase;
import org.junit.Test;
import com.alibaba.tamper.process.convertor.Convertor;
import com.alibaba.tamper.process.convertor.ConvertorHelper;
/**
* convertor相关的单元测试
*
* @author jianghang 2011-5-26 上午11:17:36
*/
public class StringConvertorTest extends TestCase {
private ConvertorHelper helper = new ConvertorHelper();
@Test
public void testObjectToString() {
Convertor ct = helper.getConvertor(Object.class, String.class);
String VALUE = "1";
Object integer = ct.convert(Integer.valueOf(VALUE), String.class); // 数字
assertEquals(integer, VALUE);
Object bigDecimal = ct.convert(new BigDecimal(VALUE), String.class); // BigDecimal
assertEquals(bigDecimal, VALUE);
Object bigInteger = ct.convert(new BigInteger(VALUE), String.class); // BigInteger
assertEquals(bigInteger, VALUE);
ConvertorModel model = new ConvertorModel();
model.setI(1);
model.setInteger(1);
model.setBigDecimal(new BigDecimal(VALUE));
Object modelStr = ct.convert(model, String.class); // ConvertorModel
assertNotNull(modelStr);
}
@Test
public void testStringToCommon() {
String strValue = "10";
int value = 10;
// 基本变量
Object intValue = helper.getConvertor(String.class, int.class).convert(strValue, int.class);
assertEquals(intValue, value);
Object integerValue = helper.getConvertor(String.class, Integer.class).convert(strValue, Integer.class);
assertEquals(integerValue, value);
Object byteValue = helper.getConvertor(String.class, byte.class).convert(strValue, byte.class);
assertEquals(byteValue, Byte.valueOf((byte) value));
Object shortValue = helper.getConvertor(String.class, short.class).convert(strValue, short.class);
assertEquals(shortValue, Short.valueOf((short) value));
Object longValue = helper.getConvertor(String.class, long.class).convert(strValue, long.class);
assertEquals(longValue, Long.valueOf((long) value));
Object floatValue = helper.getConvertor(String.class, float.class).convert(strValue, float.class);
assertEquals(floatValue, Float.valueOf((float) value));
Object doubleValue = helper.getConvertor(String.class, double.class).convert(strValue, double.class);
assertEquals(doubleValue, Double.valueOf((double) value));
Object bigIntegerValue = helper.getConvertor(String.class, BigInteger.class).convert(strValue, BigInteger.class);
assertEquals(bigIntegerValue, BigInteger.valueOf(value));
Object bigDecimalValue = helper.getConvertor(String.class, BigDecimal.class).convert(strValue, BigDecimal.class);
assertEquals(bigDecimalValue, BigDecimal.valueOf(value));
Object boolValue = helper.getConvertor(String.class, boolean.class).convert(strValue, boolean.class);
assertEquals(boolValue, Boolean.valueOf(value > 0 ? true : false));
Object charValue = helper.getConvertor(String.class, char.class).convert(strValue, char.class);
assertEquals(charValue, Character.valueOf((char) value));
}
@Test
public void testStringAndDateDefault() {
Convertor stringDate = helper.getConvertor(String.class, Date.class);
Convertor dateString = helper.getConvertor(Date.class, String.class);
Convertor stringCalendar = helper.getConvertor(String.class, Calendar.class);
Convertor calendarString = helper.getConvertor(Calendar.class, String.class);
String time = "2010-10-01 23:59:59";
Calendar c1 = Calendar.getInstance();
c1.set(2010, 10 - 1, 01, 23, 59, 59);
c1.set(Calendar.MILLISECOND, 0);
Date timeDate = c1.getTime();
// 验证默认的转化器
Object stringDateValue = stringDate.convert(time, Date.class);
assertTrue(timeDate.equals(stringDateValue));
Object dateStringValue = dateString.convert(timeDate, String.class);
assertTrue(time.equals(dateStringValue));
Object stringCalendarValue = stringCalendar.convert(time, Calendar.class);
assertTrue(c1.equals(stringCalendarValue));
Object calendarStringValue = calendarString.convert(c1, String.class);
assertTrue(time.equals(calendarStringValue));
}
@Test
public void testStringAndDateAlias() {
Convertor stringDateDay = helper.getConvertor(ConvertorHelper.ALIAS_STRING_TO_DATE_DAY);
Convertor stringDateTime = helper.getConvertor(ConvertorHelper.ALIAS_STRING_TO_DATE_TIME);
Convertor dateDayString = helper.getConvertor(ConvertorHelper.ALIAS_DATE_DAY_TO_STRING);
Convertor dateTimeString = helper.getConvertor(ConvertorHelper.ALIAS_DATE_TIME_TO_STRING);
Convertor stringCalendarDay = helper.getConvertor(ConvertorHelper.ALIAS_STRING_TO_CALENDAR_DAY);
Convertor stringCalendarTime = helper.getConvertor(ConvertorHelper.ALIAS_STRING_TO_CALENDAR_TIME);
Convertor calendarDayString = helper.getConvertor(ConvertorHelper.ALIAS_CALENDAR_DAY_TO_STRING);
Convertor calendarTimeString = helper.getConvertor(ConvertorHelper.ALIAS_CALENDAR_TIME_TO_STRING);
String day = "2010-10-01";
String time = "2010-10-01 23:59:59";
Calendar timeCalendar = Calendar.getInstance();
timeCalendar.set(2010, 10 - 1, 01, 23, 59, 59);
timeCalendar.set(Calendar.MILLISECOND, 0);
Date timeDate = timeCalendar.getTime();
Calendar dayCalendar = Calendar.getInstance();
dayCalendar.set(2010, 10 - 1, 1, 0, 0, 0);
dayCalendar.set(Calendar.MILLISECOND, 0);
Date dayDate = dayCalendar.getTime();
// date转化验证
Object stringDateDayValue = stringDateDay.convert(day, Date.class);
assertTrue(dayDate.equals(stringDateDayValue));
Object stringDateTimeValue = stringDateTime.convert(time, Date.class);
assertTrue(timeDate.equals(stringDateTimeValue));
Object dateDayStringValue = dateDayString.convert(dayDate, String.class);
assertTrue(day.equals(dateDayStringValue));
Object dateTimeStringValue = dateTimeString.convert(timeDate, String.class);
assertTrue(time.equals(dateTimeStringValue));
// calendar转化验证
Object stringCalendarDayValue = stringCalendarDay.convert(day, Calendar.class);
assertTrue(dayCalendar.getTime().equals(((Calendar) stringCalendarDayValue).getTime()));
Object stringCalendarTimeValue = stringCalendarTime.convert(time, Calendar.class);
assertTrue(timeCalendar.getTime().equals(((Calendar) stringCalendarTimeValue).getTime()));
Object calendarDayStringValue = calendarDayString.convert(dayCalendar, String.class);
assertTrue(day.equals(calendarDayStringValue));
Object calendarTimeStringValue = calendarTimeString.convert(timeCalendar, String.class);
assertTrue(time.equals(calendarTimeStringValue));
}
}