Author: tomdz Date: Mon Oct 9 12:31:47 2006 New Revision: 454469 URL: http://svn.apache.org/viewvc?view=rev&rev=454469 Log: Fix for DDLUTILS-57
Added: db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/ db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestDateConverter.java db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestTimeConverter.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/DateConverter.java db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/TimeConverter.java db/ddlutils/trunk/src/test/org/apache/ddlutils/RunAllTests.java Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/DateConverter.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/DateConverter.java?view=diff&rev=454469&r1=454468&r2=454469 ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/DateConverter.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/DateConverter.java Mon Oct 9 12:31:47 2006 @@ -18,17 +18,30 @@ import java.sql.Date; import java.sql.Types; +import java.util.Calendar; /** * Converts between [EMAIL PROTECTED] java.sql.Date} and [EMAIL PROTECTED] java.lang.String} using the standard * representation "yyyy", or "yyyy-mm", or "yyyy-mm-dd". * - * @author Thomas Dudziak * @version $Revision: 289996 $ */ public class DateConverter implements SqlTypeConverter { - /** + /** The calendar object to convert to/from dates. */ + private Calendar _calendar; + + /** + * Creates a new date converter object. + */ + public DateConverter() + { + _calendar = Calendar.getInstance(); + + _calendar.setLenient(false); + } + + /** * [EMAIL PROTECTED] */ public Object convertFromString(String textRep, int sqlTypeCode) throws ConversionException @@ -69,7 +82,10 @@ day = Integer.parseInt(dateAsText.substring(slashPos + 1)); } } - return new Date(year - 1900, month - 1, day); + + _calendar.clear(); + _calendar.set(year, month - 1, day); + return new Date(_calendar.getTimeInMillis()); } catch (NumberFormatException ex) { @@ -91,6 +107,16 @@ */ public String convertToString(Object obj, int sqlTypeCode) throws ConversionException { - return obj == null ? null : obj.toString(); + String result = null; + + if (obj != null) + { + if (!(obj instanceof Date)) + { + throw new ConversionException("Expected object of type java.sql.Date, but instead received " + obj.getClass().getName()); + } + result = obj.toString(); + } + return result; } } Modified: db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/TimeConverter.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/TimeConverter.java?view=diff&rev=454469&r1=454468&r2=454469 ============================================================================== --- db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/TimeConverter.java (original) +++ db/ddlutils/trunk/src/java/org/apache/ddlutils/io/converters/TimeConverter.java Mon Oct 9 12:31:47 2006 @@ -18,6 +18,7 @@ import java.sql.Time; import java.sql.Types; +import java.util.Calendar; /** * Converts between [EMAIL PROTECTED] java.sql.Time} and [EMAIL PROTECTED] java.lang.String} using the standard @@ -28,7 +29,20 @@ */ public class TimeConverter implements SqlTypeConverter { - /** + /** The calendar object to convert to/from times. */ + private Calendar _calendar; + + /** + * Creates a new time converter object. + */ + public TimeConverter() + { + _calendar = Calendar.getInstance(); + + _calendar.setLenient(false); + } + + /** * [EMAIL PROTECTED] */ public Object convertFromString(String textRep, int sqlTypeCode) throws ConversionException @@ -69,7 +83,12 @@ seconds = Integer.parseInt(timeAsText.substring(slashPos + 1)); } } - return new Time(hours, minutes, seconds); + + _calendar.clear(); + _calendar.set(Calendar.HOUR, hours); + _calendar.set(Calendar.MINUTE, minutes); + _calendar.set(Calendar.SECOND, seconds); + return new Time(_calendar.getTimeInMillis()); } catch (NumberFormatException ex) { @@ -91,6 +110,16 @@ */ public String convertToString(Object obj, int sqlTypeCode) throws ConversionException { - return obj == null ? null : obj.toString(); + String result = null; + + if (obj != null) + { + if (!(obj instanceof Time)) + { + throw new ConversionException("Expected object of type java.sql.Time, but instead received " + obj.getClass().getName()); + } + result = obj.toString(); + } + return result; } } Modified: db/ddlutils/trunk/src/test/org/apache/ddlutils/RunAllTests.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/org/apache/ddlutils/RunAllTests.java?view=diff&rev=454469&r1=454468&r2=454469 ============================================================================== --- db/ddlutils/trunk/src/test/org/apache/ddlutils/RunAllTests.java (original) +++ db/ddlutils/trunk/src/test/org/apache/ddlutils/RunAllTests.java Mon Oct 9 12:31:47 2006 @@ -24,6 +24,8 @@ import org.apache.ddlutils.io.TestDataReader; import org.apache.ddlutils.io.TestDatabaseIO; import org.apache.ddlutils.io.TestDatatypes; +import org.apache.ddlutils.io.converters.TestDateConverter; +import org.apache.ddlutils.io.converters.TestTimeConverter; import org.apache.ddlutils.model.TestArrayAccessAtTable; import org.apache.ddlutils.platform.TestAxionPlatform; import org.apache.ddlutils.platform.TestCloudscapePlatform; @@ -91,6 +93,8 @@ suite.addTestSuite(TestPlatformUtils.class); suite.addTestSuite(TestDatabaseIO.class); suite.addTestSuite(TestDataReader.class); + suite.addTestSuite(TestDateConverter.class); + suite.addTestSuite(TestTimeConverter.class); suite.addTestSuite(TestAxionPlatform.class); suite.addTestSuite(TestCloudscapePlatform.class); suite.addTestSuite(TestDB2Platform.class); Added: db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestDateConverter.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestDateConverter.java?view=auto&rev=454469 ============================================================================== --- db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestDateConverter.java (added) +++ db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestDateConverter.java Mon Oct 9 12:31:47 2006 @@ -0,0 +1,196 @@ +package org.apache.ddlutils.io.converters; + +import java.sql.Date; +import java.sql.Types; +import java.util.Calendar; + +import junit.framework.TestCase; + +/** + * Tests the [EMAIL PROTECTED] DateConverter}. + * + * @version $Revision: 1.0 $ + */ +public class TestDateConverter extends TestCase +{ + /** The tested date converter. */ + private DateConverter _dateConverter; + + /** + * [EMAIL PROTECTED] + */ + protected void setUp() throws Exception + { + super.setUp(); + _dateConverter = new DateConverter(); + } + + /** + * [EMAIL PROTECTED] + */ + protected void tearDown() throws Exception + { + _dateConverter = null; + super.tearDown(); + } + + /** + * Tests a normal date string. + */ + public void testNormalConvertFromYearMonthDateString() + { + String textRep = "2005-12-19"; + Calendar cal = Calendar.getInstance(); + + cal.setLenient(false); + cal.clear(); + cal.set(2005, 11, 19); + + Object result = _dateConverter.convertFromString(textRep, Types.DATE); + + assertTrue(result instanceof Date); + assertEquals(cal.getTimeInMillis(), ((Date)result).getTime()); + } + + /** + * Tests a date string that has no day. + */ + public void testNormalConvertFromYearMonthString() + { + String textRep = "2005-12"; + Calendar cal = Calendar.getInstance(); + + cal.setLenient(false); + cal.clear(); + cal.set(2005, 11, 1); + + Object result = _dateConverter.convertFromString(textRep, Types.DATE); + + assertTrue(result instanceof Date); + assertEquals(cal.getTimeInMillis(), ((Date)result).getTime()); + } + + /** + * Tests a date string that has only a year. + */ + public void testNormalConvertFromYearString() + { + String textRep = "2005"; + Calendar cal = Calendar.getInstance(); + + cal.clear(); + cal.set(2005, 0, 1); + + Object result = _dateConverter.convertFromString(textRep, Types.DATE); + + assertTrue(result instanceof Date); + assertEquals(cal.getTimeInMillis(), ((Date)result).getTime()); + } + + /** + * Tests converting with an invalid SQL type. + */ + public void testConvertFromStringWithInvalidSqlType() + { + String textRep = "2005-12-19"; + Object result = _dateConverter.convertFromString(textRep, Types.INTEGER); + + // Make sure that the text representation is returned since SQL type was not a DATE + assertNotNull(result); + assertEquals(textRep, result); + } + + /** + * Tests handling of null. + */ + public void testConvertFromStringWithNullTextRep() + { + String textRep = null; + Object result = _dateConverter.convertFromString(textRep, Types.DATE); + + assertNull(result); + } + + /** + * Tests an invalid date. + */ + public void testConvertFromStringWithInvalidTextRep() + { + String textRep = "9999-99-99"; + + try + { + _dateConverter.convertFromString(textRep, Types.DATE); + fail("ConversionException expected"); + } + catch (ConversionException ex) + { + // we expect the exception + } + } + + /** + * Tests an invalid date that contains non-numbers. + */ + public void testConvertFromStringWithAlphaTextRep() + { + String textRep = "aaaa-bb-cc"; + + try + { + _dateConverter.convertFromString(textRep, Types.DATE); + fail("ConversionException expected"); + } + catch (ConversionException ex) + { + // we expect the exception + } + } + + /** + * Tests converting a normal date to a string. + */ + public void testNormalConvertToString() + { + Calendar cal = Calendar.getInstance(); + + cal.setLenient(false); + cal.clear(); + cal.set(2005, 11, 19); + + Date date = new Date(cal.getTimeInMillis()); + String result = _dateConverter.convertToString(date, Types.DATE); + + assertNotNull(result); + assertEquals("2005-12-19", result); + } + + /** + * Tests converting a null. + */ + public void testConvertToStringWithNullDate() + { + Date date = null; + String result = _dateConverter.convertToString(date, Types.DATE); + + assertNull(result); + } + + /** + * Tests converting a [EMAIL PROTECTED] java.util.Date}. + */ + public void testConvertToStringWithWrongType() + { + java.util.Date date = new java.util.Date(); + + try + { + _dateConverter.convertToString(date, Types.DATE); + fail("ConversionException expected"); + } + catch (ConversionException expected) + { + // we expect the exception + } + } +} Added: db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestTimeConverter.java URL: http://svn.apache.org/viewvc/db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestTimeConverter.java?view=auto&rev=454469 ============================================================================== --- db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestTimeConverter.java (added) +++ db/ddlutils/trunk/src/test/org/apache/ddlutils/io/converters/TestTimeConverter.java Mon Oct 9 12:31:47 2006 @@ -0,0 +1,201 @@ +package org.apache.ddlutils.io.converters; + +import java.sql.Time; +import java.sql.Types; +import java.util.Calendar; + +import junit.framework.TestCase; + +/** + * Tests the [EMAIL PROTECTED] TimeConverter}. + * + * @version $Revision: 1.0 $ + */ +public class TestTimeConverter extends TestCase +{ + /** The tested time converter. */ + private TimeConverter _timeConverter; + + /** + * [EMAIL PROTECTED] + */ + protected void setUp() throws Exception + { + super.setUp(); + _timeConverter = new TimeConverter(); + } + + /** + * [EMAIL PROTECTED] + */ + protected void tearDown() throws Exception + { + _timeConverter = null; + super.tearDown(); + } + + /** + * Tests a normal time string. + */ + public void testNormalConvertFromHoursMinutesSecondsTimeString() + { + String textRep = "02:15:59"; + Calendar cal = Calendar.getInstance(); + + cal.setLenient(false); + cal.clear(); + cal.set(Calendar.HOUR, 2); + cal.set(Calendar.MINUTE, 15); + cal.set(Calendar.SECOND, 59); + + Object result = _timeConverter.convertFromString(textRep, Types.TIME); + + assertTrue(result instanceof Time); + assertEquals(cal.getTimeInMillis(), ((Time)result).getTime()); + } + + /** + * Tests a time string without seconds. + */ + public void testNormalConvertFromHoursMinutesTimeString() + { + String textRep = "02:15"; + Calendar cal = Calendar.getInstance(); + + cal.setLenient(false); + cal.clear(); + cal.set(Calendar.HOUR, 2); + cal.set(Calendar.MINUTE, 15); + + Object result = _timeConverter.convertFromString(textRep, Types.TIME); + + assertTrue(result instanceof Time); + assertEquals(cal.getTimeInMillis(), ((Time)result).getTime()); + } + + /** + * Tests a time string with only an hour value. + */ + public void testNormalConvertFromHoursTimeString() + { + String textRep = "02"; + Calendar cal = Calendar.getInstance(); + + cal.setLenient(false); + cal.clear(); + cal.set(Calendar.HOUR, 2); + + Object result = _timeConverter.convertFromString(textRep, Types.TIME); + + assertTrue(result instanceof Time); + assertEquals(cal.getTimeInMillis(), ((Time)result).getTime()); + } + + /** + * Tests converting with an invalid SQL type. + */ + public void testConvertFromStringWithInvalidSqlType() + { + String textRep = "02:15:59"; + Object result = _timeConverter.convertFromString(textRep, Types.INTEGER); + + assertNotNull(result); + assertEquals(textRep, result); + } + + /** + * Tests converting a null. + */ + public void testConvertFromStringWithNullTextRep() + { + String textRep = null; + Object result = _timeConverter.convertFromString(textRep, Types.TIME); + + assertNull(result); + } + + /** + * Tests converting an invalid time string. + */ + public void testConvertFromStringWithInvalidTextRep() + { + String textRep = "99:99:99"; + + try + { + _timeConverter.convertFromString(textRep, Types.TIME); + fail("ConversionException expected"); + } + catch (ConversionException ex) + { + // We expect the exception + } + } + + /** + * Tests converting an invalid time string containing not only numbers. + */ + public void testConvertFromStringWithAlphaTextRep() + { + String textRep = "aa:bb:cc"; + + try + { + _timeConverter.convertFromString(textRep, Types.TIME); + fail("ConversionException expected"); + } + catch (ConversionException expected) + { + // We expect the exception + } + } + + /** + * Tests converting a normal time to a string. + */ + public void testNormalConvertToString() + { + Calendar cal = Calendar.getInstance(); + + cal.setLenient(false); + cal.clear(); + cal.set(Calendar.HOUR, 2); + cal.set(Calendar.MINUTE, 15); + cal.set(Calendar.SECOND, 59); + + Time time = new Time(cal.getTimeInMillis()); + String result = _timeConverter.convertToString(time, Types.TIME); + + assertNotNull(result); + assertEquals("02:15:59", result); + } + + /** + * Tests converting a null time. + */ + public void testConvertToStringWithNullTime() + { + Time time = null; + String result = _timeConverter.convertToString(time, Types.TIME); + + assertNull(result); + } + + /** + * Tests converting a [EMAIL PROTECTED] java.util.Date}. + */ + public void testConvertToStringWithWrongType() + { + java.util.Date date = new java.util.Date(); + + try + { + _timeConverter.convertToString(date, Types.TIME); + fail("ConversionException expected"); + } + catch (ConversionException expected) + { + // We expect the exception + } + } +}