package com.brightgenerous.bean; import static org.junit.Assert.*; import java.util.ArrayList; import java.util.Comparator; import java.util.LinkedList; import java.util.List; import org.junit.Test; public class BeanUtilsTest { @Test public void primaryComparator() { Comparator<OuterBean> c1 = BeanUtils.<OuterBean> primaryComparator(); Comparator<OuterBean2> c2 = BeanUtils.<OuterBean2> primaryComparator(); Comparator<AbstractBean> c3 = BeanUtils.primaryComparator(); c1.compare(new OuterBean(), new OuterBean()); c2.compare(new OuterBean2(), new OuterBean2()); try { c3.compare(new OuterBean(), new OuterBean2()); fail(); } catch (ClassCastException e) { } c3.compare(new OuterBean(), new OuterBean() { }); c3.compare(new OuterBean() { }, new OuterBean()); } @SuppressWarnings("boxing") @Test public void comparePrimary() { final OuterBean bean1; { OuterBean tmp = new OuterBean(); tmp.setInner(new InnerBean()); tmp.getInner().setKey1("key1"); tmp.getInner().setKey2(100); tmp.getInner().setValue1(500L); bean1 = tmp; } final OuterBean bean2; { OuterBean tmp = new OuterBean(); tmp.setInner(new InnerBean()); tmp.getInner().setKey1("key1"); tmp.getInner().setKey2(100); tmp.getInner().setValue1(300L); bean2 = tmp; } final OuterBean bean3; { OuterBean tmp = new OuterBean(); tmp.setInner(new InnerBean()); tmp.getInner().setKey1("key1"); tmp.getInner().setKey2(200); tmp.getInner().setValue1(300L); bean3 = tmp; } final OuterBean2 bean4; { OuterBean2 tmp = new OuterBean2(); tmp.setInner(new InnerBean()); tmp.getInner().setKey1("key1"); tmp.getInner().setKey2(100); tmp.getInner().setValue1(300L); bean4 = tmp; } assertEquals(LinkedList.class, bean1.getList().getClass()); assertEquals(ArrayList.class, bean1.getList2().getClass()); assertEquals(0, BeanUtils.comparePrimary(bean1, bean2)); assertTrue(BeanUtils.comparePrimary(bean1, bean3) < 0); try { BeanUtils.comparePrimary(bean1, bean4); fail(); } catch (ClassCastException e) { } assertTrue(BeanUtils.equalsPrimary(bean1, bean2)); assertFalse(BeanUtils.equalsPrimary(bean1, bean3)); assertFalse(BeanUtils.equalsPrimary(bean1, bean4)); } static class OuterBean extends AbstractBean { @Primary private InnerBean inner; @Fill private List<Integer> list; @Fill(ArrayList.class) private List<Integer> list2; public InnerBean getInner() { return inner; } public void setInner(InnerBean inner) { this.inner = inner; } public List<Integer> getList() { return list; } public void setList(List<Integer> list) { this.list = list; } public List<Integer> getList2() { return list2; } public void setList2(List<Integer> list2) { this.list2 = list2; } } static class OuterBean2 extends AbstractBean { @Primary private InnerBean inner; public InnerBean getInner() { return inner; } public void setInner(InnerBean inner) { this.inner = inner; } } static class InnerBean extends AbstractBean { @Primary private String key1; @Primary private Integer key2; private Long value1; public String getKey1() { return key1; } public void setKey1(String key1) { this.key1 = key1; } public Integer getKey2() { return key2; } public void setKey2(Integer key2) { this.key2 = key2; } public Long getValue1() { return value1; } public void setValue1(Long value1) { this.value1 = value1; } } }