package org.rapidbeans.core.basic;
import java.util.TreeSet;
import junit.framework.TestCase;
import org.rapidbeans.core.common.ReadonlyListCollection;
import org.rapidbeans.core.type.RapidBeansType;
import org.rapidbeans.core.type.RapidBeansTypeLoader;
import org.rapidbeans.core.type.TypePropertyCollection;
import org.rapidbeans.core.type.TypeRapidBean;
import org.rapidbeans.test.TestHelper;
/**
* UnitTests for IdKeypropswithparentscope.
*
* @author Martin Bluemel
*/
public class IdKeypropswithparentscopeTest extends TestCase {
/**
* Test method for toString().
*/
public void testToString() {
GenericBean kid = createTestBeanP0("Bl�mel", "Melanie", "20020831");
assertEquals("Bl�mel_Melanie_20020831", kid.getIdString());
GenericBean pa = createTestBeanP1("Bl�mel", "Martin", "19641014");
assertEquals("Bl�mel_Martin_19641014", pa.getIdString());
GenericBean grandma = createTestBeanP2("Bl�mel", "Gudrun", "19390511");
assertSame(grandma.getId().getClass(), IdKeypropswithparentscope.class);
assertEquals("Bl�mel_Gudrun_19390511", grandma.getIdString());
grandma.setPropValue("children", pa);
assertEquals("Bl�mel_Gudrun_19390511/Bl�mel_Martin_19641014", pa.getIdString());
pa.setPropValue("children", kid);
assertEquals("Bl�mel_Gudrun_19390511/Bl�mel_Martin_19641014/" + "Bl�mel_Melanie_20020831", kid.getIdString());
}
/**
* Test method for equals().
*/
public void testEqualsEquals0() {
GenericBean kid1 = createTestBeanP0("Bl�mel", "Melanie", "20020831");
GenericBean kid2 = createTestBeanP0("Bl�mel", "Melanie", "20020831");
assertEquals(kid1.getId(), kid2.getId());
}
// /**
// * Test method for equals().
// */
// public void testEqualsEquals1SameParent() {
// ArrayList<RapidBean> kids = new ArrayList<RapidBean>();
// GenericBean kid1 = createTestBeanP0("Bl�mel", "Melanie", "20020831");
// kids.add(kid1);
// GenericBean kid2 = createTestBeanP0("Bl�mel", "Melanie", "20020831");
// kids.add(kid2);
// GenericBean pa = createTestBeanP1("Bl�mel", "Martin", "19641014");
// pa.setPropValue("children", kids);
// assertEquals(kid1.getId(), kid2.getId());
// }
// /**
// * Test method for equals().
// */
// public void testEqualsDifferent() {
// GenericBean bean1 = createTestBean("Bl�mel", "Martin", "19641014");
// IdKeyprops id1 = new IdKeyprops(bean1, null);
// GenericBean bean2 = createTestBean("Bl�mel", "Johannes", "19641014");
// IdKeyprops id2 = new IdKeyprops(bean2, null);
// assertFalse(id1.equals(id2));
// }
//
// /**
// * Test method for equals().
// */
// public void testEqualsWrongType() {
// TestBean bean = new TestBean("\"Bl�mel\" \"Martin\" \"19641014\"");
// bean.getType().setIdGenerator(new IdGeneratorUid());
// IdKeyprops id1 = new IdKeyprops(bean, null);
// IdUid id2 = new IdUid(bean);
// assertFalse(id1.equals(id2));
// }
@SuppressWarnings("unchecked")
public void testSortingSimple() {
GenericBean p0a = createTestBeanP0("0", "a", "20100101");
GenericBean p0b = createTestBeanP0("0", "b", "20100101");
GenericBean p0c = createTestBeanP0("0", "c", "20100101");
GenericBean p1 = createTestBeanP1("1", "1", "20100101");
GenericBean p2 = createTestBeanP2("2", "2", "20100101");
p2.setPropValue("children", p1);
p1.setPropValue("children", new GenericBean[] { p0c, p0b, p0a });
ReadonlyListCollection<GenericBean> list = (ReadonlyListCollection<GenericBean>) p1.getPropValue("children");
assertSame(p0c, list.get(0));
assertSame(p0b, list.get(1));
assertSame(p0a, list.get(2));
}
@SuppressWarnings("unchecked")
public void testSortingReal() {
GenericBean p0a = createTestBeanP0("0", "a", "20100101");
GenericBean p0b = createTestBeanP0("0", "b", "20100101");
GenericBean p0c = createTestBeanP0("0", "c", "20100101");
GenericBean p1 = createTestBeanP1("1", "1", "20100101");
TypePropertyCollection colproptype = (TypePropertyCollection) p1.getProperty("children").getType();
colproptype.setCollectionClass(TreeSet.class);
GenericBean p2 = createTestBeanP2("2", "2", "20100101");
p2.setPropValue("children", p1);
p1.setPropValue("children", new GenericBean[] { p0b, p0c, p0a });
ReadonlyListCollection<GenericBean> list = (ReadonlyListCollection<GenericBean>) p1.getPropValue("children");
assertSame(p0a, list.get(0));
assertSame(p0b, list.get(1));
assertSame(p0c, list.get(2));
}
/**
* create a generic TestBean.
*
* @param name
* the last name
* @param prename
* the first name
* @param dateofbirth
* the date of birth
* @return the test bean
*/
private GenericBean createTestBeanP0(final String name, final String prename, final String dateofbirth) {
GenericBean bean = null;
RapidBeansType type = RapidBeansTypeLoader.getInstance().lookupType("TestBeanP0");
if (type == null) {
String descr = "<beantype name=\"TestBeanP0\" idtype=\"keypropswithparentscope\">"
+ "<property name=\"name\" key=\"true\"/>" + "<property name=\"prename\" key=\"true\"/>"
+ "<property name=\"dateofbirth\" type=\"date\" key=\"true\"/>" + "</beantype>";
bean = TestHelper.createGenericBeanInstance(descr);
type = bean.getType();
RapidBeansTypeLoader.getInstance().registerType(type);
} else {
bean = new GenericBean((TypeRapidBean) type);
}
bean.setPropValue("name", name);
bean.setPropValue("prename", prename);
bean.setPropValue("dateofbirth", dateofbirth);
return bean;
}
/**
* create a generic TestBean.
*
* @param name
* the last name
* @param prename
* the first name
* @param dateofbirth
* the date of birth
* @return the test bean
*/
private GenericBean createTestBeanP1(final String name, final String prename, final String dateofbirth) {
String descr = "<beantype name=\"TestBeanP1\" idtype=\"keypropswithparentscope\">"
+ "<property name=\"name\" key=\"true\"/>" + "<property name=\"prename\" key=\"true\"/>"
+ "<property name=\"dateofbirth\" type=\"date\" key=\"true\"/>"
+ "<property name=\"children\" type=\"collection\" composition=\"true\" targettype=\"TestBeanP0\"/>"
+ "</beantype>";
GenericBean bean = TestHelper.createGenericBeanInstance(descr);
RapidBeansTypeLoader.getInstance().registerTypeIfNotRegistered("TestBeanP1", bean.getType());
bean.setPropValue("name", name);
bean.setPropValue("prename", prename);
bean.setPropValue("dateofbirth", dateofbirth);
return bean;
}
/**
* create a generic TestBean.
*
* @param name
* the last name
* @param prename
* the first name
* @param dateofbirth
* the date of birth
* @return the test bean
*/
private GenericBean createTestBeanP2(final String name, final String prename, final String dateofbirth) {
String descr = "<beantype name=\"TestBeanP2\" idtype=\"keypropswithparentscope\">"
+ "<property name=\"name\" key=\"true\"/>" + "<property name=\"prename\" key=\"true\"/>"
+ "<property name=\"dateofbirth\" type=\"date\" key=\"true\"/>"
+ "<property name=\"children\" type=\"collection\" composition=\"true\" targettype=\"TestBeanP1\"/>"
+ "</beantype>";
GenericBean bean = TestHelper.createGenericBeanInstance(descr);
bean.setPropValue("name", name);
bean.setPropValue("prename", prename);
bean.setPropValue("dateofbirth", dateofbirth);
return bean;
}
/**
* @see junit.framework.TestCase#tearDown()
*/
public void tearDown() {
if (RapidBeansTypeLoader.getInstance().lookupType("TestBeanP0") != null) {
RapidBeansTypeLoader.getInstance().unregisterType("TestBeanP0");
}
if (RapidBeansTypeLoader.getInstance().lookupType("TestBeanP1") != null) {
RapidBeansTypeLoader.getInstance().unregisterType("TestBeanP1");
}
}
}