package org.odata4j.test.unit.expressions;
import java.text.DateFormat;
import java.text.ParseException;
import java.util.Calendar;
import java.util.Date;
import java.util.Locale;
import junit.framework.Assert;
import org.joda.time.LocalDateTime;
import org.joda.time.LocalTime;
import org.junit.Test;
import org.odata4j.internal.TypeConverter;
public class TypeConverterTest {
@Test
public void testTypeConverter() {
Assert.assertNull(TypeConverter.convert(null, Object.class));
Assert.assertEquals((byte) 16, (Object) TypeConverter.convert(16, Byte.class));
Assert.assertEquals(16, (Object) TypeConverter.convert(16, Integer.class));
}
@Test
public void testTemporalTypes() throws ParseException {
DateFormat dateTimeParser = DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM, Locale.US);
DateFormat timeParser = DateFormat.getTimeInstance(DateFormat.MEDIUM, Locale.US);
Calendar cal = Calendar.getInstance();
Assert.assertEquals(dateTimeParser.parse("03/28/2011 7:20:21 pm"),
TypeConverter.convert(new LocalDateTime(2011, 03, 28, 19, 20, 21), Date.class));
Assert.assertEquals(timeParser.parse("7:20:21 pm"),
TypeConverter.convert(new LocalTime(19, 20, 21), Date.class));
cal.setTime(dateTimeParser.parse("03/28/2011 7:20:21 pm"));
Assert.assertEquals(cal,
TypeConverter.convert(new LocalDateTime(2011, 03, 28, 19, 20, 21), Calendar.class));
cal.setTime(timeParser.parse("7:20:21 pm"));
Assert.assertEquals(cal,
TypeConverter.convert(new LocalTime(19, 20, 21), Calendar.class));
Assert.assertEquals(new java.sql.Time(timeParser.parse("7:20:21 pm").getTime()),
TypeConverter.convert(new LocalDateTime(1970, 1, 1, 19, 20, 21), java.sql.Time.class));
Assert.assertEquals(new java.sql.Time(timeParser.parse("7:20:21 pm").getTime()),
TypeConverter.convert(new LocalTime(19, 20, 21), java.sql.Time.class));
Assert.assertEquals(new java.sql.Date(dateTimeParser.parse("03/28/2011 0:00:00 am").getTime()),
TypeConverter.convert(new LocalDateTime(2011, 03, 28, 0, 0), java.sql.Date.class));
Assert.assertEquals(new java.sql.Timestamp(dateTimeParser.parse("03/28/2011 7:20:21 pm").getTime()),
TypeConverter.convert(new LocalDateTime(2011, 03, 28, 19, 20, 21), java.sql.Timestamp.class));
Assert.assertEquals(new java.sql.Timestamp(timeParser.parse("7:20:21 pm").getTime()),
TypeConverter.convert(new LocalTime(19, 20, 21), java.sql.Timestamp.class));
}
@Test(expected = IllegalArgumentException.class)
public void convertLocalDateTimeWithDateComponentsToSqlTimeFails() throws Exception {
TypeConverter.convert(new LocalDateTime(2011, 03, 28, 19, 20, 21), java.sql.Time.class);
}
@Test(expected = IllegalArgumentException.class)
public void convertLocalDateTimeWithTimeComponentsToSqlDateFails() throws Exception {
TypeConverter.convert(new LocalDateTime(2011, 03, 28, 19, 20, 21), java.sql.Date.class);
}
@Test(expected = UnsupportedOperationException.class)
public void convertLocalTimeToSqlDateFails() throws Exception {
TypeConverter.convert(new LocalTime(19, 20, 21), java.sql.Date.class);
}
}