package com.arondor.common.reflection.parser.spring;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.util.List;
import java.util.Map;
import org.junit.Test;
import com.arondor.common.reflection.bean.config.ListConfigurationBean;
import com.arondor.common.reflection.bean.config.ObjectConfigurationFactoryBean;
import com.arondor.common.reflection.bean.config.PrimitiveConfigurationBean;
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.MapConfiguration;
import com.arondor.common.reflection.model.config.ObjectConfiguration;
import com.arondor.common.reflection.model.config.ObjectConfigurationFactory;
import com.arondor.common.reflection.model.config.ObjectConfigurationMap;
import com.arondor.common.reflection.model.config.PrimitiveConfiguration;
import com.arondor.common.reflection.model.config.ReferenceConfiguration;
public class XMLBeanDefinitionParserTest
{
private static final String XML_PATH = "/spring/simpleBeanDefinition.xml";
private final String className = "com.arondor.test.TestBean";
private final ObjectConfigurationFactory objectConfigurationFactory = new ObjectConfigurationFactoryBean();
@Test
public void testParseBeanWithSinglePrimitiveValue() throws Exception
{
ObjectConfiguration objectConfiguration = getAndCheckParsedObjectConfiguration("beanWithSinglePrimitiveValue");
checkIsValidObjectConfigurationForBeanWithSinglePrimitiveProperty(objectConfiguration);
}
@Test
public void testParseBeanWithMultiplePrimitiveValue()
{
ObjectConfiguration objectConfiguration = getAndCheckParsedObjectConfiguration("beanWithMultiplePrimitiveValue");
checkIsValidObjectConfigurationForBeanWithMultiplePrimitiveValue(objectConfiguration);
}
@Test
public void testParseBeanWithSingleObjectValue()
{
ObjectConfiguration objectConfiguration = getAndCheckParsedObjectConfiguration("beanWithSingleObjectValue");
Map<String, ElementConfiguration> fields = objectConfiguration.getFields();
assertEquals(1, fields.size());
ElementConfiguration field = fields.get("object");
assertNotNull(field);
assertEquals(ElementConfigurationType.Reference, field.getFieldConfigurationType());
assertEquals("beanWithSinglePrimitiveValue", ((ReferenceConfiguration) field).getReferenceName());
}
@Test
public void testParseBeanWithMultipleObjectValue()
{
ObjectConfiguration objectConfiguration = getAndCheckParsedObjectConfiguration("beanWithMultipleObjectValue");
Map<String, ElementConfiguration> fields = objectConfiguration.getFields();
assertEquals(1, fields.size());
ElementConfiguration field = fields.get("objects");
assertEquals(ElementConfigurationType.List, field.getFieldConfigurationType());
List<ElementConfiguration> objectConfigurations = ((ListConfiguration) field).getListConfiguration();
assertNotNull(objectConfigurations);
checkIsValidObjectConfigurationForBeanWithSinglePrimitiveProperty(objectConfigurations.get(0));
checkIsValidObjectConfigurationForBeanWithMultiplePrimitiveValue(objectConfigurations.get(1));
}
@Test
public void testParseBeanWithPrimitiveConstructorArgs()
{
ObjectConfiguration objectConfiguration = getAndCheckParsedObjectConfiguration("beanWithPrimitiveConstructorArgs");
assertEquals(0, objectConfiguration.getFields().size());
assertEquals(2, objectConfiguration.getConstructorArguments().size());
assertEquals("my arg 1",
((PrimitiveConfiguration) objectConfiguration.getConstructorArguments().get(0)).getValue());
assertEquals("my arg 2",
((PrimitiveConfiguration) objectConfiguration.getConstructorArguments().get(1)).getValue());
}
@Test
public void testParseBeanWithBothPrimitiveAndObjectConstructorArgs()
{
ObjectConfiguration objectConfiguration = getAndCheckParsedObjectConfiguration("beanWithBothPrimitiveAndObjectConstructorArgs");
assertEquals(0, objectConfiguration.getFields().size());
assertEquals(3, objectConfiguration.getConstructorArguments().size());
assertEquals("beanWithSinglePrimitiveValue", ((ReferenceConfiguration) objectConfiguration
.getConstructorArguments().get(0)).getReferenceName());
assertEquals("my arg 1",
((PrimitiveConfiguration) objectConfiguration.getConstructorArguments().get(1)).getValue());
assertEquals("com.arondor.viewer.client.toppanel.behavior.document.DocumentPrintHandler",
((ObjectConfiguration) objectConfiguration.getConstructorArguments().get(2)).getClassName());
}
private ObjectConfiguration getAndCheckParsedObjectConfiguration(String beanName)
{
XMLBeanDefinitionParser parser = new XMLBeanDefinitionParser(XML_PATH);
ObjectConfigurationMap parsedObjectConfiguration = parser.parse();
ObjectConfiguration objectConfiguration = parsedObjectConfiguration.get(beanName);
assertEquals(beanName, objectConfiguration.getObjectName());
assertNotNull(objectConfiguration);
assertEquals(className, objectConfiguration.getClassName());
return objectConfiguration;
}
private void checkIsValidObjectConfigurationForBeanWithSinglePrimitiveProperty(
ElementConfiguration elementConfiguration)
{
assertTrue(elementConfiguration instanceof ObjectConfiguration);
ObjectConfiguration objectConfiguration = (ObjectConfiguration) elementConfiguration;
Map<String, ElementConfiguration> fields = objectConfiguration.getFields();
assertEquals(1, fields.size());
ElementConfiguration field = fields.get("name");
assertEquals(ElementConfigurationType.Primitive, field.getFieldConfigurationType());
assertEquals("my object name", ((PrimitiveConfiguration) field).getValue());
}
private void checkIsValidObjectConfigurationForBeanWithMultiplePrimitiveValue(
ElementConfiguration elementConfiguration)
{
assertTrue(elementConfiguration instanceof ObjectConfiguration);
ObjectConfiguration objectConfiguration = (ObjectConfiguration) elementConfiguration;
Map<String, ElementConfiguration> fields = objectConfiguration.getFields();
assertEquals(1, fields.size());
ElementConfiguration field = fields.get("names");
assertEquals(ElementConfigurationType.List, field.getFieldConfigurationType());
ListConfiguration listConfiguration = (ListConfigurationBean) field;
assertNotNull(listConfiguration);
assertEquals(3, listConfiguration.getListConfiguration().size());
assertEquals("name1", ((PrimitiveConfiguration) listConfiguration.getListConfiguration().get(0)).getValue());
assertEquals("name2", ((PrimitiveConfiguration) listConfiguration.getListConfiguration().get(1)).getValue());
assertEquals("name3", ((PrimitiveConfiguration) listConfiguration.getListConfiguration().get(2)).getValue());
}
@Test
public void testPrintButton()
{
XMLBeanDefinitionParser parser = new XMLBeanDefinitionParser(XML_PATH);
ObjectConfigurationMap parsedObjectConfiguration = parser.parse();
ObjectConfiguration objectConfiguration = parsedObjectConfiguration.get("printButton");
assertNotNull(objectConfiguration);
assertEquals("com.arondor.viewer.client.toppanel.presenter.ButtonPresenter", objectConfiguration.getClassName());
assertEquals("printButton", objectConfiguration.getObjectName());
assertNotNull(objectConfiguration.getConstructorArguments());
assertEquals(3, objectConfiguration.getConstructorArguments().size());
assertEquals(ElementConfigurationType.Reference, objectConfiguration.getConstructorArguments().get(0)
.getFieldConfigurationType());
assertEquals("images#printDocument", ((ReferenceConfiguration) objectConfiguration.getConstructorArguments()
.get(0)).getReferenceName());
assertEquals(ElementConfigurationType.Primitive, objectConfiguration.getConstructorArguments().get(1)
.getFieldConfigurationType());
assertEquals("Print",
((PrimitiveConfiguration) objectConfiguration.getConstructorArguments().get(1)).getValue());
assertEquals(ElementConfigurationType.Object, objectConfiguration.getConstructorArguments().get(2)
.getFieldConfigurationType());
assertEquals("com.arondor.viewer.client.toppanel.behavior.document.DocumentPrintHandler",
((ObjectConfiguration) objectConfiguration.getConstructorArguments().get(2)).getClassName());
}
@Test
public void testSPELResolution()
{
System.setProperty("is.mobile", "true");
XMLBeanDefinitionParser parser = new XMLBeanDefinitionParser("/spring/arender-hmi-configuration.xml");
ObjectConfigurationMap parsedObjectConfiguration = parser.parse();
ObjectConfiguration objectConfiguration = parsedObjectConfiguration.get("spel");
assertNotNull(objectConfiguration);
assertEquals("com.arondor.viewer.ARenderBean", objectConfiguration.getClassName());
assertEquals("spel", objectConfiguration.getObjectName());
assertNotNull(objectConfiguration.getConstructorArguments());
assertEquals(0, objectConfiguration.getConstructorArguments().size());
Map<String, ElementConfiguration> fields = objectConfiguration.getFields();
ElementConfiguration andField = fields.get("and");
assertTrue(andField instanceof PrimitiveConfigurationBean);
assertEquals("true", ((PrimitiveConfigurationBean) andField).getValue());
}
@Test
public void testTypedEnum()
{
XMLBeanDefinitionParser parser = new XMLBeanDefinitionParser(XML_PATH);
ObjectConfigurationMap parsedObjectConfiguration = parser.parse();
ObjectConfiguration objectConfiguration = parsedObjectConfiguration.get("typedEnum");
assertNotNull(objectConfiguration);
assertEquals("com.arondor.viewer.client.events.downupload.AskDocumentUploadEvent",
objectConfiguration.getClassName());
assertEquals(1, objectConfiguration.getConstructorArguments().size());
assertEquals(ElementConfigurationType.Object, objectConfiguration.getConstructorArguments().get(0)
.getFieldConfigurationType());
ObjectConfiguration enumConfig = (ObjectConfiguration) objectConfiguration.getConstructorArguments().get(0);
assertNotNull(enumConfig);
assertEquals("com.arondor.viewer.client.events.downupload.AskDocumentUploadEvent.Behavior",
enumConfig.getClassName());
assertEquals(1, enumConfig.getConstructorArguments().size());
assertEquals(ElementConfigurationType.Primitive, enumConfig.getConstructorArguments().get(0)
.getFieldConfigurationType());
assertEquals("UPLOAD_FILE", ((PrimitiveConfiguration) enumConfig.getConstructorArguments().get(0)).getValue());
}
@Test
public void testSingleton()
{
XMLBeanDefinitionParser parser = new XMLBeanDefinitionParser(XML_PATH);
ObjectConfigurationMap parsedObjectConfiguration = parser.parse();
ObjectConfiguration objectConfiguration = parsedObjectConfiguration.get("singletonObject");
assertTrue("Shall be singleton !", objectConfiguration.isSingleton());
}
@Test
public void testNotSingleton()
{
XMLBeanDefinitionParser parser = new XMLBeanDefinitionParser(XML_PATH);
ObjectConfigurationMap parsedObjectConfiguration = parser.parse();
ObjectConfiguration objectConfiguration = parsedObjectConfiguration.get("nonSingletonObject");
assertFalse("Shall be non-singleton !", objectConfiguration.isSingleton());
}
@Test
public void testContextPropertyPlaceHolder()
{
XMLBeanDefinitionParser parser = new XMLBeanDefinitionParser("/spring/arender-hmi-configuration.xml");
ObjectConfigurationMap parsed = parser.parse();
assertEquals(8, parsed.size());
ElementConfiguration patternField = parsed.get("dateFormatter").getFields().get("pattern");
assertTrue(patternField instanceof PrimitiveConfigurationBean);
assertEquals("dd--MM--yyyy", ((PrimitiveConfigurationBean) patternField).getValue());
}
@Test
public void testPropertyMap()
{
XMLBeanDefinitionParser parser = new XMLBeanDefinitionParser("/spring/mapBeanDefinition.xml");
ObjectConfigurationMap parsedObjectConfiguration = parser.parse();
ObjectConfiguration objectConfiguration = parsedObjectConfiguration.get("beanWithMap");
ElementConfiguration elementConfiguration = objectConfiguration.getFields().get("factories");
assertNotNull("Null element", elementConfiguration);
assertTrue("Wrong class " + elementConfiguration.getClass().getName(),
elementConfiguration instanceof MapConfiguration);
MapConfiguration mapConfiguration = (MapConfiguration) elementConfiguration;
assertEquals(1, mapConfiguration.getMapConfiguration().size());
ElementConfiguration value = mapConfiguration.getMapConfiguration().get(
objectConfigurationFactory.createPrimitiveConfiguration("Key1"));
assertNotNull(value);
assertEquals(objectConfigurationFactory.createPrimitiveConfiguration("Value1"), value);
}
}