/*
* Copyright 2004-2012 the Seasar Foundation and the Others.
*
* Licensed 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.seasar.util.beans.util;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.Date;
import org.junit.Test;
import org.seasar.util.beans.converter.DateConverter;
import org.seasar.util.beans.converter.NumberConverter;
import org.seasar.util.exception.ConverterRuntimeException;
import static org.hamcrest.CoreMatchers.*;
import static org.junit.Assert.*;
/**
* @author higa
*/
public class CopyOptionsTest {
/**
* @throws Exception
*/
@Test
public void testIncludes() throws Exception {
CopyOptions option = new CopyOptions();
assertThat(option.include(BeanNames.hoge()), is(sameInstance(option)));
assertThat(option.includePropertyNames.size(), is(1));
assertThat(option.includePropertyNames.get(0), is("hoge"));
}
/**
* @throws Exception
*/
@Test
public void testExcludes() throws Exception {
CopyOptions option = new CopyOptions();
assertThat(option.exclude(BeanNames.hoge()), is(sameInstance(option)));
assertThat(option.excludePropertyNames.size(), is(1));
assertThat(option.excludePropertyNames.get(0), is("hoge"));
}
/**
* @throws Exception
*/
@Test
public void testPrefix() throws Exception {
CopyOptions option = new CopyOptions();
assertThat(option.prefix(BeanNames.search_()), is(sameInstance(option)));
assertThat(option.prefix, is("search_"));
}
/**
* @throws Exception
*/
@Test
public void testBeanDelimiter() throws Exception {
CopyOptions option = new CopyOptions();
assertThat(option.beanDelimiter('#'), is(sameInstance(option)));
assertThat(option.beanDelimiter, is('#'));
}
/**
* @throws Exception
*/
@Test
public void testMapDelimiter() throws Exception {
CopyOptions option = new CopyOptions();
assertThat(option.mapDelimiter('#'), is(sameInstance(option)));
assertThat(option.mapDelimiter, is('#'));
}
/**
* @throws Exception
*/
@Test
public void testIsTargetProperty() throws Exception {
CopyOptions option = new CopyOptions();
assertThat(option.isTargetProperty("hoge"), is(true));
}
/**
* @throws Exception
*/
@Test
public void testIsTargetProperty_includes() throws Exception {
CopyOptions option = new CopyOptions().include(BeanNames.hoge());
assertThat(option.isTargetProperty("hoge"), is(true));
assertThat(option.isTargetProperty("hoge2"), is(not(true)));
}
/**
* @throws Exception
*/
@Test
public void testIsTargetProperty_includes_prefix() throws Exception {
CopyOptions option =
new CopyOptions()
.include(BeanNames.search_aaa(), BeanNames.bbb())
.prefix(BeanNames.search_());
assertThat(option.isTargetProperty("search_aaa"), is(true));
assertThat(option.isTargetProperty("bbb"), is(not(true)));
}
/**
* @throws Exception
*/
@Test
public void testIsTargetProperty_excludes() throws Exception {
CopyOptions option = new CopyOptions().exclude(BeanNames.hoge());
assertThat(option.isTargetProperty("hoge"), is(not(true)));
assertThat(option.isTargetProperty("hoge2"), is(true));
}
/**
* @throws Exception
*/
@Test
public void testIsTargetProperty_excludes_prefix() throws Exception {
CopyOptions option =
new CopyOptions().prefix(BeanNames.abc_()).exclude(
BeanNames.abc_exclude());
assertThat(option.isTargetProperty("abc_value"), is(true));
assertThat(option.isTargetProperty("abc_exclude"), is(not(true)));
assertThat(option.isTargetProperty("ab"), is(not(true)));
}
/**
* @throws Exception
*/
@Test
public void testIsTargetProperty_prefix() throws Exception {
CopyOptions option = new CopyOptions().prefix(BeanNames.search_());
assertThat(option.isTargetProperty("search_aaa"), is(true));
assertThat(option.isTargetProperty("bbb"), is(not(true)));
}
/**
* @throws Exception
*/
@Test
public void testIsTargetProperty_includes_excludes() throws Exception {
CopyOptions option =
new CopyOptions()
.include(BeanNames.hoge(), BeanNames.hoge2())
.exclude(BeanNames.hoge2(), BeanNames.hoge3());
assertThat(option.isTargetProperty("hoge"), is(true));
assertThat(option.isTargetProperty("hoge2"), is(not(true)));
assertThat(option.isTargetProperty("hoge3"), is(not(true)));
assertThat(option.isTargetProperty("hoge4"), is(not(true)));
}
/**
* @throws Exception
*/
@Test
public void testTrimPrefix() throws Exception {
CopyOptions option = new CopyOptions();
assertThat(option.trimPrefix("aaa"), is("aaa"));
option.prefix(BeanNames.search_());
assertThat(option.trimPrefix("search_aaa"), is("aaa"));
}
/**
* @throws Exception
*/
@Test
public void testConvertValue_zeroConverter() throws Exception {
assertThat(
new CopyOptions().convertValue(new Integer(1), "aaa", null),
is((Object) 1));
}
/**
* @throws Exception
*/
@Test
public void testConvertValue_propertyConverter_asString() throws Exception {
assertThat(
new CopyOptions()
.converter(new NumberConverter("##0"), "aaa")
.convertValue(new Integer(1), "aaa", null),
is((Object) "1"));
}
/**
* @throws Exception
*/
@Test
public void testConvertValue_propertyConverter_asObject() throws Exception {
assertThat(
new CopyOptions().converter(
new NumberConverter("##0"),
BeanNames.aaa()).convertValue("1", "aaa", null),
is((Object) 1L));
}
/**
* @throws Exception
*/
@Test
public void testConvertValue_typeConverter_asString() throws Exception {
assertThat(new CopyOptions()
.converter(new NumberConverter("##0"))
.convertValue(new Integer(1), "aaa", null), is((Object) "1"));
}
/**
* @throws Exception
*/
@Test
public void testConvertValue_typeConverter_asObject() throws Exception {
assertThat(new CopyOptions()
.converter(new NumberConverter("##0"))
.convertValue("1", "aaa", Integer.class), is((Object) 1L));
assertThat(
new CopyOptions()
.converter(new DateConverter("yyyyMMdd"))
.convertValue(new Timestamp(0), "aaa", String.class),
is((Object) "19700101"));
}
/**
* @throws Exception
*/
@Test(expected = ConverterRuntimeException.class)
public void testConvertValue_throwable() throws Exception {
new CopyOptions().converter(new NumberConverter("##0")).convertValue(
"a",
"aaa",
Integer.class);
}
/**
* @throws Exception
*/
@Test
public void testConvertValue_dateToDate() throws Exception {
final Date date = new Date(1);
assertThat(
new CopyOptions().convertValue(date, "aaa", Date.class),
is((Object) date));
}
/**
* @throws Exception
*/
@Test
public void testDateConverter() throws Exception {
assertThat(
new CopyOptions().dateConverter("yyyyMMdd").convertValue(
new java.util.Date(0),
"aaa",
String.class),
is((Object) "19700101"));
}
/**
* @throws Exception
*/
@Test
public void testSqlDateConverter() throws Exception {
assertThat(
new CopyOptions().sqlDateConverter("yyyyMMdd").convertValue(
new java.sql.Date(0),
"aaa",
String.class),
is((Object) "19700101"));
}
/**
* @throws Exception
*/
@Test
public void testTimeConverter() throws Exception {
assertThat(
new CopyOptions().timeConverter("ss").convertValue(
new java.sql.Time(0),
"aaa",
String.class),
is((Object) "00"));
}
/**
* @throws Exception
*/
@Test
public void testTimestampConverter() throws Exception {
assertThat(
new CopyOptions().timestampConverter("yyyyMMdd ss").convertValue(
new java.sql.Timestamp(0),
"aaa",
String.class),
is((Object) "19700101 00"));
}
/**
* @throws Exception
*/
@Test
public void testFindDefaultConverter() throws Exception {
assertThat(
new CopyOptions().findDefaultConverter(Time.class),
is(CopyOptions.DEFAULT_TIME_CONVERTER));
assertThat(
new CopyOptions().findDefaultConverter(Timestamp.class),
is(CopyOptions.DEFAULT_TIMESTAMP_CONVERTER));
assertThat(
new CopyOptions().findDefaultConverter(java.util.Date.class),
is(CopyOptions.DEFAULT_TIMESTAMP_CONVERTER));
assertThat(
new CopyOptions().findDefaultConverter(java.sql.Date.class),
is(CopyOptions.DEFAULT_DATE_CONVERTER));
assertThat(
new CopyOptions().findDefaultConverter(Integer.class),
is(nullValue()));
}
/**
* @author kato
*/
public static class BeanNames {
/**
* CharSequenceを作成します。
*
* @param name
* @return CharSequence
*/
protected static CharSequence createCharSequence(final String name) {
return new CharSequence() {
@Override
public String toString() {
return name;
}
@Override
public char charAt(final int index) {
return name.charAt(index);
}
@Override
public int length() {
return name.length();
}
@Override
public CharSequence subSequence(final int start, final int end) {
return name.subSequence(start, end);
}
};
}
/**
* @return CharSequence
*/
public static CharSequence aaa() {
return createCharSequence("aaa");
}
/**
* @return CharSequence
*/
public static CharSequence bbb() {
return createCharSequence("bbb");
}
/**
* @return CharSequence
*/
public static CharSequence ccc() {
return createCharSequence("ccc");
}
/**
* @return CharSequence
*/
public static CharSequence hoge() {
return createCharSequence("hoge");
}
/**
* @return CharSequence
*/
public static CharSequence hoge2() {
return createCharSequence("hoge2");
}
/**
* @return CharSequence
*/
public static CharSequence hoge3() {
return createCharSequence("hoge3");
}
/**
* @return CharSequence
*/
public static CharSequence search_aaa() {
return createCharSequence("search_aaa");
}
/**
* @return CharSequence
*/
public static CharSequence abc_exclude() {
return createCharSequence("abc_exclude");
}
/**
* @return CharSequence
*/
public static CharSequence search_() {
return createCharSequence("search_");
}
/**
* @return CharSequence
*/
public static CharSequence abc_() {
return createCharSequence("abc_");
}
}
}