package com.arondor.common.reflection.xstream;
import java.util.ArrayList;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import com.arondor.common.reflection.model.config.ElementConfiguration;
import com.arondor.common.reflection.model.config.ElementConfiguration.ElementConfigurationType;
import com.arondor.common.reflection.model.config.ListConfiguration;
import com.arondor.common.reflection.model.config.ObjectConfiguration;
import com.arondor.common.reflection.model.config.PrimitiveConfiguration;
import com.arondor.common.reflection.xtream.testing.ChildClass;
import com.arondor.common.reflection.xtream.testing.OtherChildClass;
import com.arondor.common.reflection.xtream.testing.ParentClass;
import com.arondor.common.reflection.xtream.testing.orchard.Apple;
import com.arondor.common.reflection.xtream.testing.orchard.Banana;
import com.arondor.common.reflection.xtream.testing.orchard.Fruit;
import com.arondor.common.reflection.xtream.testing.orchard.FruitBasket;
import com.arondor.common.reflection.xtream.testing.orchard.SingleFruitBasket;
public class TestClassHierarchy extends AbstractTestXStream
{
@Test
public void testHierarchy0_Parse()
{
ParentClass pc = new ParentClass();
ChildClass cc = new ChildClass();
cc.setSomeValue("Some string value");
pc.setChild(cc);
ObjectConfiguration oc = serializeAndParse(pc);
Assert.assertEquals(pc.getClass().getName(), oc.getClassName());
ElementConfiguration ec = oc.getFields().get("child");
Assert.assertEquals(ElementConfigurationType.Object, ec.getFieldConfigurationType());
Assert.assertTrue(ec instanceof ObjectConfiguration);
ObjectConfiguration ocChild = (ObjectConfiguration) ec;
Assert.assertEquals(cc.getClass().getName(), ocChild.getClassName());
Assert.assertEquals("Some string value",
((PrimitiveConfiguration) ocChild.getFields().get("someValue")).getValue());
}
@Test
public void testHierarchy1_Parse()
{
ParentClass pc = new ParentClass();
OtherChildClass cc = new OtherChildClass();
cc.setSomeValue("Some string value");
cc.setOtherValue("Some other string value");
pc.setChild(cc);
ObjectConfiguration oc = serializeAndParse(pc);
Assert.assertEquals(pc.getClass().getName(), oc.getClassName());
ElementConfiguration ec = oc.getFields().get("child");
Assert.assertEquals(ElementConfigurationType.Object, ec.getFieldConfigurationType());
Assert.assertTrue(ec instanceof ObjectConfiguration);
ObjectConfiguration ocChild = (ObjectConfiguration) ec;
Assert.assertEquals(cc.getClass().getName(), ocChild.getClassName());
Assert.assertEquals("Some string value",
((PrimitiveConfiguration) ocChild.getFields().get("someValue")).getValue());
Assert.assertEquals("Some other string value",
((PrimitiveConfiguration) ocChild.getFields().get("otherValue")).getValue());
}
@Test
public void testHierarchy_FruitBasket0()
{
FruitBasket basket = new FruitBasket();
basket.setFruits(new ArrayList<Fruit>());
basket.getFruits().add(new Banana());
basket.getFruits().add(new Apple());
basket.getFruits().add(new Banana());
basket.getFruits().add(new Apple());
ObjectConfiguration oc = serializeAndParse(basket);
Assert.assertEquals(basket.getClass().getName(), oc.getClassName());
ElementConfiguration ec = oc.getFields().get("fruits");
Assert.assertEquals(ElementConfigurationType.List, ec.getFieldConfigurationType());
Assert.assertTrue(ec instanceof ListConfiguration);
List<ElementConfiguration> fruits = ((ListConfiguration) ec).getListConfiguration();
Assert.assertEquals(4, fruits.size());
ObjectConfiguration oc0 = (ObjectConfiguration) fruits.get(0);
Assert.assertEquals(Banana.class.getName(), oc0.getClassName());
ObjectConfiguration oc1 = (ObjectConfiguration) fruits.get(1);
Assert.assertEquals(Apple.class.getName(), oc1.getClassName());
ObjectConfiguration oc2 = (ObjectConfiguration) fruits.get(2);
Assert.assertEquals(Banana.class.getName(), oc2.getClassName());
ObjectConfiguration oc3 = (ObjectConfiguration) fruits.get(3);
Assert.assertEquals(Apple.class.getName(), oc3.getClassName());
}
@Test
public void testHierarchy_SingleFruit0()
{
SingleFruitBasket basket = new SingleFruitBasket();
basket.setFruit(new Apple());
ObjectConfiguration oc = serializeAndParse(basket);
Assert.assertEquals(basket.getClass().getName(), oc.getClassName());
ElementConfiguration ec = oc.getFields().get("fruit");
Assert.assertEquals(ElementConfigurationType.Object, ec.getFieldConfigurationType());
ObjectConfiguration oc0 = (ObjectConfiguration) ec;
Assert.assertEquals(Apple.class.getName(), oc0.getClassName());
}
}