/*
* Rapid Beans Framework: TypeRapidQuantityTest.java
*
* Copyright Martin Bluemel, 2008
*
* Nov 14, 2005
*/
package org.rapidbeans.core.type;
import junit.framework.TestCase;
import org.rapidbeans.domain.math.Length;
/**
* UnitTests for class TypeRapidQuantity.
*
* @author Martin Bluemel
*/
public final class TypeRapidQuantityTest extends TestCase {
/**
* test the for name generated (type safe).
*/
public void testForNameGenerated() {
TypeRapidQuantity type = TypeRapidQuantity.forName("org.rapidbeans.domain.math.Length");
assertNotNull(type);
assertEquals("org.rapidbeans.domain.math.Length", type.getName());
assertSame(Length.class, type.getImplementingClass());
TypeRapidQuantity type1 = TypeRapidQuantity.forName("org.rapidbeans.domain.math.Length");
assertSame(type, type1);
}
/**
* 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 type = TypeRapidQuantity.createInstance(descr);
assertEquals("Voltage", type.getName());
assertEquals("Voltage", type.getNameShort());
assertNull(type.getImplementingClass());
assertSame(type, TypeRapidQuantity.forName("Voltage"));
assertSame(enumtype, type.getUnitInfo());
} finally {
TestHelperTypeLoader.clearBeanTypesGeneric();
}
}
// /**
// * test the for name.
// */
// public void testForNameGeneric() {
// TypeRapidQuantity type =
// TypeRapidQuantity.forName("org.rapidbeans.test.Lang");
// assertNotNull(type);
// assertEquals("org.rapidbeans.test.Lang", type.getName());
// TypeRapidQuantity type1 =
// TypeRapidQuantity.forName("org.rapidbeans.test.Lang");
// assertSame(type, type1);
// }
// /**
// * test the constructor.
// */
// public void testBBTypeQuantity() {
// final String conversionTableDescr =
// "pm/1E12,nm/1E9,um*0.000001,mm/1000,cm/100,dm/10,m*1,km*1000";
// TypeRapidEnum unittype =
// TypeRapidEnum.forName("org.rapidbeans.domain.math.UnitLength");
// TypeRapidQuantity type = new TypeRapidQuantity(Length.class, unittype,
// conversionTableDescr);
// assertNotNull(type);
// assertEquals("org.rapidbeans.domain.math.Length", type.getName());
// }
// public void testGetMetainfoFromQuantityTypeName() {
// // every concrete quantity class is loaded automatically when its
// // metainfo
// // is retrieved by quantity type name which is the class name
// TypeRapidQuantity metainfLength =
// TypeRapidQuantity.forName("org.rapidbeans.domain.math.Length");
// assertNotNull(metainfLength);
//
// // assert that the quanity class was loaded properly
// assertSame(Length.class, metainfLength.getQuantityClass());
//
// TypeRapidEnum metainfLengthUnit = metainfLength.getUnitInfo();
// RapidEnum[] elements = metainfLengthUnit.getElements();
// assertSame(elements[0], UnitLength.KM);
// assertSame(elements[1], UnitLength.M);
// assertSame(elements[2], UnitLength.DM);
// assertSame(elements[3], UnitLength.CM);
// assertSame(elements[4], UnitLength.MM);
// assertSame(elements[5], UnitLength.UM);
// assertSame(elements[6], UnitLength.NM);
// assertSame(elements[7], UnitLength.PM);
// }
//
// public void testGetMetainfoFromQuantityTypeNameGeneric() {
// // if a concrete quantity class cannot be found
// // a generic quantity object should be loaded
// TypeRapidQuantity metainfLength = RapidQuantity.forName("Length");
// assertNotNull(metainfLength);
//
// // assert that the quanity class was loaded properly
// assertSame(Length.class, metainfLength.getQuantityClass());
//
// TypeRapidEnum metainfLengthUnit = metainfLength.getUnitInfo();
// RapidEnum[] elements = metainfLengthUnit.getElements();
// assertSame(UnitLength.class, elements[0].getClass());
// TypeRapidEnum metainfUnitsLen = TypeRapidEnum.forName("UnitLength");
// assertSame(metainfUnitsLen, metainfLengthUnit);
//
// assertEquals(9, elements.length);
// assertEquals("km", elements[0].getName());
// assertEquals("m", elements[1].getName());
// assertEquals("dm", elements[2].getName());
// assertEquals("cm", elements[3].getName());
// assertEquals("mm", elements[4].getName());
// assertEquals("um", elements[5].getName());
// assertEquals("nm", elements[6].getName());
// assertEquals("pm", elements[7].getName());
// }
//
// public void testConcreteQuantityClass() {
// Length length = new Length(1.234, UnitLength.M);
// assertEquals(1.234, length.getMagnitudeDouble(), 0);
// assertSame(UnitLength.M, length.getUnit());
// }
//
// public void testGenericQuantityType() {
// Length len = (Length) RapidQuantity.createInstance("Length", "12.12 m");
// assertEquals(12.12, len.getMagnitudeDouble(), 0);
// UnitLength meter = UnitLength.M;
// assertSame(meter, len.getUnit());
// Length lenkm = (Length) len.convert(UnitLength.KM);
// assertEquals(0.01212, lenkm.getMagnitudeDouble(), 0);
// }
//
// public void testEquals() {
// Length length = new Length(new BigDecimal("1.234"), UnitLength.M);
// assertEquals("1.234 m", length.toString());
// length = new Length(1.234, UnitLength.M);
// assertEquals("1.2339999999999999857891452847979962825775146484375 m",
// length.toString());
// }
//
// public void testConvert() {
// Length l_nm = new Length(new BigDecimal("43.111"), UnitLength.NM);
// Length l_pm = (Length) l_nm.convert(UnitLength.PM);
// assertEquals(new BigDecimal("43111.000"), l_pm.getMagnitude());
// Length l_um = (Length) l_nm.convert(UnitLength.UM);
// assertEquals(new BigDecimal("0.043111"), l_um.getMagnitude());
// Length l_m = (Length) l_nm.convert(UnitLength.M);
// assertEquals(new BigDecimal("0.000000043111"), l_m.getMagnitude());
// Length l_km = (Length) l_nm.convert(UnitLength.KM);
// assertEquals(new BigDecimal("0.000000000043111"), l_km.getMagnitude());
// try {
// l_nm.convert(UnitLength.INCH);
// assertTrue("expected to catch a "
// + "beans.core.BBExQuantityConversionNotSupportedException here", false);
// } catch (QuantityConversionNotSupportedException e) {
// }
//
// Money m_euro = new Money(BigDecimal.ONE, Currency.EURO);
// assertEquals("euro", m_euro.getUnit().getName());
// assertEquals("EUR", ((Currency) m_euro.getUnit()).getShort3());
// Money m_dm = (Money) m_euro.convert(Currency.DEUTSCHMARK);
// assertEquals(new BigDecimal("1.955383"), m_dm.getMagnitude());
// m_dm = new Money(BigDecimal.ONE, Currency.DEUTSCHMARK);
// m_euro = (Money) m_dm.convert(Currency.EURO);
// assertEquals(new BigDecimal("0.511408762"), m_euro.getMagnitude());
// }
}