/*
* Copyright 2007 The Apache Software Foundation.
*
* 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 net.sf.beanlib.provider.replicator;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import junit.framework.JUnit4TestAdapter;
import net.sf.beanlib.provider.BeanPopulator;
import net.sf.beanlib.provider.BeanTransformer;
import net.sf.beanlib.spi.DetailedPropertyFilter;
import org.junit.Test;
/**
* @author Joe D. Velopar
*/
public class HeteroImmutableReplicatorTest {
public static enum FromEnum {
F1,
F2,
F3, ;
}
public static enum ToEnum {
T1,
T2,
T3, ;
}
public static class FromBean {
FromEnum enumMember;
public FromEnum getEnumMember() {
return enumMember;
}
public void setEnumMember(FromEnum enumMember) {
this.enumMember = enumMember;
}
}
public static class ToBean {
ToEnum enumMember;
public ToEnum getEnumMember() {
return enumMember;
}
public void setEnumMember(ToEnum enumMember) {
this.enumMember = enumMember;
}
}
@Test
public void testDefaultPoputlateEnum() {
for (FromEnum e : FromEnum.values()) {
FromBean from = new FromBean();
from.setEnumMember(e);
FromBean to = new FromBean();
assertTrue(from.getEnumMember() == e);
assertNull(to.getEnumMember());
new BeanPopulator(from, to).initDetailedPropertyFilter(DetailedPropertyFilter.ALWAYS_PROPAGATE).populate();
assertTrue(to.getEnumMember() == from.getEnumMember());
}
for (FromEnum e : FromEnum.values()) {
FromBean from = new FromBean();
from.setEnumMember(e);
FromBean to = new FromBean();
assertTrue(from.getEnumMember() == e);
assertNull(to.getEnumMember());
new BeanPopulator(from, to).initDetailedPropertyFilter(DetailedPropertyFilter.ALWAYS_PROPAGATE).initTransformer(null).populate();
assertTrue(to.getEnumMember() == from.getEnumMember());
}
}
@Test
public void testPoputlateEnum() {
for (FromEnum e : FromEnum.values()) {
FromBean from = new FromBean();
from.setEnumMember(e);
FromBean to = new FromBean();
assertTrue(from.getEnumMember() == e);
assertNull(to.getEnumMember());
new BeanPopulator(from, to).initDetailedPropertyFilter(DetailedPropertyFilter.ALWAYS_PROPAGATE)
.initTransformer(new BeanTransformer().initImmutableReplicatableFactory(HeteroImmutableReplicator.factory)).populate();
assertTrue(to.getEnumMember() == from.getEnumMember());
}
for (FromEnum e : FromEnum.values()) {
FromBean from = new FromBean();
from.setEnumMember(e);
FromBean to = new FromBean();
assertTrue(from.getEnumMember() == e);
assertNull(to.getEnumMember());
new BeanPopulator(from, to).initDetailedPropertyFilter(DetailedPropertyFilter.ALWAYS_PROPAGATE).initTransformer(null).populate();
assertTrue(to.getEnumMember() == from.getEnumMember());
}
}
@Test
public void testPopulateDefaultAcrossEnums() {
for (FromEnum e : FromEnum.values()) {
FromBean from = new FromBean();
from.setEnumMember(e);
ToBean to = new ToBean();
assertTrue(from.getEnumMember() == e);
assertNull(to.getEnumMember());
new BeanPopulator(from, to).initDetailedPropertyFilter(DetailedPropertyFilter.ALWAYS_PROPAGATE).populate();
assertTrue(to.getEnumMember() == null);
}
}
@Test
public void testPopulateAcrossEnums() {
for (FromEnum e : FromEnum.values()) {
FromBean from = new FromBean();
from.setEnumMember(e);
ToBean to = new ToBean();
assertTrue(from.getEnumMember() == e);
assertNull(to.getEnumMember());
new BeanPopulator(from, to).initDetailedPropertyFilter(DetailedPropertyFilter.ALWAYS_PROPAGATE)
.initTransformer(new BeanTransformer().initImmutableReplicatableFactory(HeteroImmutableReplicator.factory)).populate();
assertTrue(to.getEnumMember() == ToEnum.values()[e.ordinal()]);
}
}
public static junit.framework.Test suite() {
return new JUnit4TestAdapter(HeteroImmutableReplicatorTest.class);
}
}