?? dateconvertertestbase.java
字號:
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.commons.beanutils.converters;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Locale;
import junit.framework.TestCase;
import org.apache.commons.beanutils.Converter;
import org.apache.commons.beanutils.ConversionException;
/**
* Abstract base for <Date>Converter classes.
*
* @version $Revision: 471689 $ $Date: 2006-11-06 10:52:49 +0000 (Mon, 06 Nov 2006) $
*/
public abstract class DateConverterTestBase extends TestCase {
// ------------------------------------------------------------------------
/**
* Construtc a new test case.
* @param name Name of the test
*/
public DateConverterTestBase(String name) {
super(name);
}
// ------------------------------------------------------------------------
/**
* Create the Converter with no default value.
* @return A new Converter
*/
protected abstract DateTimeConverter makeConverter();
/**
* Create the Converter with a default value.
* @param defaultValue The default value
* @return A new Converter
*/
protected abstract DateTimeConverter makeConverter(Object defaultValue);
/**
* Return the expected type
* @return The expected type
*/
protected abstract Class getExpectedType();
/**
* Convert from a Calendar to the appropriate Date type
*
* @param value The Calendar value to convert
* @return The converted value
*/
protected abstract Object toType(Calendar value);
// ------------------------------------------------------------------------
/**
* Assumes ConversionException in response to covert(getExpectedType(), null).
*/
public void testConvertNull() {
try {
makeConverter().convert(getExpectedType(), null);
fail("Expected ConversionException");
} catch(ConversionException e) {
// expected
}
}
/**
* Assumes convert() returns some non-null
* instance of getExpectedType().
*/
public void testConvertDate() {
String[] message= {
"from Date",
"from Calendar",
"from SQL Date",
"from SQL Time",
"from SQL Timestamp"
};
long now = System.currentTimeMillis();
Object[] date = {
new Date(now),
new java.util.GregorianCalendar(),
new java.sql.Date(now),
new java.sql.Time(now),
new java.sql.Timestamp(now)
};
// Initialize calendar also with same ms to avoid a failing test in a new time slice
((GregorianCalendar)date[1]).setTime(new Date(now));
for (int i = 0; i < date.length; i++) {
Object val = makeConverter().convert(getExpectedType(), date[i]);
assertNotNull("Convert " + message[i] + " should not be null", val);
assertTrue("Convert " + message[i] + " should return a " + getExpectedType().getName(),
getExpectedType().isInstance(val));
assertEquals("Convert " + message[i] + " should return a " + date[0],
now, getTimeInMillis(val));
}
}
/**
* Test Default Type conversion (i.e. don't specify target type)
*/
public void testDefaultType() {
String pattern = "yyyy-MM-dd";
// Create & Configure the Converter
DateTimeConverter converter = makeConverter();
converter.setPattern(pattern);
// Valid String --> Type Conversion
String testString = "2006-10-29";
Calendar calendar = toCalendar(testString, pattern, null);
Object expected = toType(calendar);
Object result = converter.convert(null, testString);
if (getExpectedType().equals(Calendar.class)) {
assertTrue("TYPE ", getExpectedType().isAssignableFrom(result.getClass()));
} else {
assertEquals("TYPE ", getExpectedType(), result.getClass());
}
assertEquals("VALUE ", expected, result);
}
/**
* Test default String to type conversion
*
* N.B. This method is overriden by test case
* implementations for java.sql.Date/Time/Timestamp
*/
public void testDefaultStringToTypeConvert() {
// Create & Configure the Converter
DateTimeConverter converter = makeConverter();
converter.setUseLocaleFormat(false);
try {
converter.convert(getExpectedType(), "2006-10-23");
fail("Expected Conversion exception");
} catch (ConversionException e) {
// expected result
}
}
/**
* Test Conversion to String
*/
public void testStringConversion() {
String pattern = "yyyy-MM-dd";
// Create & Configure the Converter
DateTimeConverter converter = makeConverter();
converter.setPattern(pattern);
// Create Values
String expected = "2006-10-29";
Calendar calendar = toCalendar(expected, pattern, null);
// Type --> String Conversion
stringConversion(converter, expected, toType(calendar));
// Calendar --> String Conversion
stringConversion(converter, expected, calendar);
// java.util.Date --> String Conversion
stringConversion(converter, expected, toDate(calendar));
// java.sql.Date --> String Conversion
stringConversion(converter, expected, toSqlDate(calendar));
// java.sql.Timestamp --> String Conversion
stringConversion(converter, expected, toSqlTimestamp(calendar));
// java.sql.Time --> String Conversion
stringConversion(converter, expected, toSqlTime(calendar));
stringConversion(converter, null, null);
stringConversion(converter, "", "");
}
/**
* Test Converter with no default value
*/
public void testPatternNoDefault() {
String pattern = "yyyy-MM-dd";
// Create & Configure the Converter
DateTimeConverter converter = makeConverter();
converter.setPattern(pattern);
// Valid String --> Type Conversion
String testString = "2006-10-29";
Calendar calendar = toCalendar(testString, pattern, null);
Object expected = toType(calendar);
validConversion(converter, expected, testString);
// Valid java.util.Date --> Type Conversion
validConversion(converter, expected, calendar);
// Valid Calendar --> Type Conversion
validConversion(converter, expected, toDate(calendar));
// Test java.sql.Date --> Type Conversion
validConversion(converter, expected, toSqlDate(calendar));
// java.sql.Timestamp --> String Conversion
validConversion(converter, expected, toSqlTimestamp(calendar));
// java.sql.Time --> String Conversion
validConversion(converter, expected, toSqlTime(calendar));
// Invalid Conversions
invalidConversion(converter, null);
invalidConversion(converter, "");
invalidConversion(converter, "2006-10-2X");
invalidConversion(converter, "2006/10/01");
invalidConversion(converter, "02/10/2006");
invalidConversion(converter, "02/10/06");
invalidConversion(converter, new Integer(2));
}
/**
* Test Converter with no default value
*/
public void testPatternDefault() {
String pattern = "yyyy-MM-dd";
// Create & Configure the Converter
Object defaultValue = toType("2000-01-01", pattern, null);
assertNotNull("Check default date", defaultValue);
DateTimeConverter converter = makeConverter(defaultValue);
converter.setPattern(pattern);
// Valid String --> Type Conversion
String testString = "2006-10-29";
Object expected = toType(testString, pattern, null);
validConversion(converter, expected, testString);
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -