package info.limpet.rcp; import info.limpet.IBaseQuantityCollection; import info.limpet.QuantityRange; import info.limpet.UIProperty; import info.limpet.ui.data_provider.data.PropertyTypeHandler; import info.limpet.ui.data_provider.data.ReflectivePropertySource; import javax.measure.Measurable; import javax.measure.Measure; import javax.measure.quantity.Temperature; import javax.measure.quantity.Velocity; import javax.measure.unit.Dimension; import javax.measure.unit.Unit; import junit.framework.TestCase; public class TestReflectivePropertySource extends TestCase { private TestData testData; private ReflectivePropertySource propertySource; @Override protected void setUp() throws Exception { testData = new TestData(); testData.setName("annotated value"); testData.setFlag(true); testData.setQuantity(12); Unit<Velocity> unit = Velocity.UNIT; testData.setUnits(unit); Measure<Double, Velocity> min = Measure.valueOf(0d, unit); Measure<Double, Velocity> max = Measure.valueOf(100d, unit); testData.setRange(new QuantityRange<Velocity>(min, max)); propertySource = new ReflectivePropertySource(testData); propertySource.getPropertyDescriptors(); } public void testGetValue() { Object propertyValue = propertySource.getPropertyValue(TestData.PROP_NAME); assertEquals("annotated value", propertyValue); propertyValue = propertySource.getPropertyValue(TestData.PROP_QUANTITY); assertEquals(12, propertyValue); propertyValue = propertySource.getPropertyValue(TestData.PROP_FLAG); assertEquals(true, propertyValue); propertyValue = propertySource.getPropertyValue(TestData.PROP_UNIT); assertEquals(Velocity.UNIT.toString(), propertyValue); propertyValue = propertySource.getPropertyValue(TestData.PROP_RANGE); Object cellEditorValue = PropertyTypeHandler.QUANTITY_RANGE.toCellEditorValue(testData .getRange(), testData); assertEquals(cellEditorValue, propertyValue); } public void testSetValue() { propertySource.setPropertyValue(TestData.PROP_NAME, "modified value"); assertEquals("modified value", testData.getName()); propertySource.setPropertyValue(TestData.PROP_QUANTITY, 50); assertEquals(50, testData.getQuantity()); propertySource.setPropertyValue(TestData.PROP_FLAG, false); assertEquals(false, testData.getFlag()); propertySource.setPropertyValue(TestData.PROP_UNIT, Temperature.UNIT); assertEquals(Temperature.UNIT, testData.getUnits()); propertySource.setPropertyValue(TestData.PROP_UNIT, Temperature.UNIT); assertEquals(Temperature.UNIT, testData.getUnits()); propertySource.setPropertyValue(TestData.PROP_RANGE, "10 : 50"); Measure<Double, Velocity> min = (Measure<Double, Velocity>) testData.getRange().getMinimum(); Measure<Double, Velocity> max = (Measure<Double, Velocity>) testData.getRange().getMaximum(); assertEquals(10, min.intValue(min.getUnit())); assertEquals(50, max.intValue(max.getUnit())); } public void testResetValue() { propertySource.resetPropertyValue(TestData.PROP_NAME); assertEquals("default name", testData.getName()); propertySource.resetPropertyValue(TestData.PROP_QUANTITY); assertEquals(50, testData.getQuantity()); testData.setFlag(false); propertySource.resetPropertyValue(TestData.PROP_FLAG); assertEquals(true, testData.getFlag()); propertySource.resetPropertyValue(TestData.PROP_UNIT); assertEquals(Unit.ONE, testData.getUnits()); } public static class TestData implements IBaseQuantityCollection<Velocity> { public static final String PROP_NAME = "name"; public static final String PROP_QUANTITY = "quantity"; public static final String PROP_FLAG = "flag"; public static final String PROP_UNIT = "units"; public static final String PROP_RANGE = "range"; private String name; private QuantityRange<Velocity> range; private int quantity; private Unit<Velocity> unit; private boolean flag; @UIProperty(name = PROP_NAME, category = "category", defaultString = "default name") public String getName() { return name; } public void setName(String name) { this.name = name; } @UIProperty(name = PROP_QUANTITY, category = "category", min = 10, max = 100, defaultInt = 50) public int getQuantity() { return quantity; } public void setQuantity(int quantity) { this.quantity = quantity; } @UIProperty(name = PROP_UNIT, category = "category") public Unit<Velocity> getUnits() { return unit; } public void setUnits(Unit<Velocity> unit) { this.unit = unit; } @UIProperty(name = PROP_FLAG, category = "category", defaultBoolean = true) public boolean getFlag() { return flag; } public void setFlag(boolean flag) { this.flag = flag; } @UIProperty(name = PROP_RANGE, category = "category") public QuantityRange<Velocity> getRange() { return range; } public void setRange(QuantityRange<Velocity> range) { this.range = range; } @Override public Measurable<Velocity> min() { return null; } @Override public Measurable<Velocity> max() { return null; } @Override public Measurable<Velocity> mean() { return null; } @Override public Measurable<Velocity> variance() { return null; } @Override public Measurable<Velocity> sd() { return null; } @Override public Dimension getDimension() { return null; } } }