package org.rapidbeans.core.basic;
import junit.framework.TestCase;
import org.rapidbeans.core.type.RapidBeansTypeLoader;
import org.rapidbeans.core.type.TestHelperTypeLoader;
import org.rapidbeans.core.type.TypeRapidBean;
import org.rapidbeans.core.type.TypeRapidEnum;
import org.rapidbeans.core.type.TypeRapidQuantity;
import org.rapidbeans.core.util.XmlNode;
/**
* Test generic quantities.
*
* @author Martin Bluemel
*/
public class GenericQuantityTest extends TestCase {
/**
* Test creating a type instance of a generic quantity (with a generic enum
* type).
*/
public void testCreateInstanceDescrGeneric() {
try {
String descr = "<enumtype name=\"UnitVolt\">" + "<enum name=\"kV\"/>" + "<enum name=\"V\"/>"
+ "<enum name=\"mV\"/>" + "</enumtype>";
TypeRapidEnum enumtype = TypeRapidEnum.createInstance(descr);
assertEquals("UnitVolt", enumtype.getName());
assertEquals("V", enumtype.elementOf("V").name());
descr = "<quantitytype name=\"Voltage\"" + " unitenum=\"UnitVolt\">" + "<unit name=\"kV\" factor=\"1E3\"/>"
+ "<unit name=\"V\" factor=\"1\"/>" + "<unit name=\"mV\" factor=\"1E-3\"/>" + "</quantitytype>";
TypeRapidQuantity.createInstance(descr);
RapidQuantity.createInstance("Voltage", "1.5 V");
} finally {
TestHelperTypeLoader.clearBeanTypesGeneric();
assertNull(RapidBeansTypeLoader.getInstance().lookupType("Voltage"));
assertNull(RapidBeansTypeLoader.getInstance().lookupType("UnitVolt"));
}
}
/**
* Test creating a type instance of a generic bean with a generic quantity
* attribute (with a generic enum type).
*/
public void testCreateInstanceDescrGenericBeanWithQuant() {
try {
String descr = "<enumtype name=\"UnitVolt\">" + "<enum name=\"kV\"/>" + "<enum name=\"V\"/>"
+ "<enum name=\"mV\"/>" + "</enumtype>";
TypeRapidEnum enumtype = TypeRapidEnum.createInstance(descr);
assertEquals("UnitVolt", enumtype.getName());
assertEquals("V", enumtype.elementOf("V").name());
descr = "<quantitytype name=\"Voltage\"" + " unitenum=\"UnitVolt\">" + "<unit name=\"kV\" factor=\"1E3\"/>"
+ "<unit name=\"V\" factor=\"1\"/>" + "<unit name=\"mV\" factor=\"1E-3\"/>" + "</quantitytype>";
TypeRapidQuantity quantitytype = TypeRapidQuantity.createInstance(descr);
assertEquals("Voltage", quantitytype.getName());
descr = "<beantype name=\"TestBean\">" + "<property name=\"name\" default=\"xxx\"/>"
+ "<property name=\"tension\" type=\"quantity\" quantity=\"Voltage\" default=\"100000 V\"/>"
+ "</beantype>";
TypeRapidBean beantype = new TypeRapidBean(null, XmlNode.getDocumentTopLevel(descr), null, true);
assertEquals("TestBean", beantype.getName());
RapidBean bean = RapidBeanImplStrict.createInstance(beantype);
PropertyString propName = (PropertyString) bean.getProperty("name");
assertEquals("xxx", propName.getValue());
PropertyQuantity propTension = (PropertyQuantity) bean.getProperty("tension");
assertEquals(GenericQuantity.createInstance("Voltage", "100000 V"), propTension.getValue());
} finally {
TestHelperTypeLoader.clearBeanTypesGeneric();
assertNull(RapidBeansTypeLoader.getInstance().lookupType("Voltage"));
assertNull(RapidBeansTypeLoader.getInstance().lookupType("UnitVolt"));
}
}
}