1 package net.sf.openrocket.preset;
3 import static org.junit.Assert.assertEquals;
4 import net.sf.openrocket.material.Material;
5 import net.sf.openrocket.motor.Manufacturer;
6 import net.sf.openrocket.rocketcomponent.Transition;
7 import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
12 * Test construction of TRANSITION type ComponentPresets based on TypedPropertyMap through the
13 * ComponentPresetFactory.create() method.
15 * Ensure required properties are populated
17 * Ensure any computed values are correctly computed.
20 public class TransitionPresetTests extends BaseTestCase {
23 public void testManufacturerRequired() {
25 TypedPropertyMap presetspec = new TypedPropertyMap();
26 presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION);
27 ComponentPresetFactory.create(presetspec);
28 } catch (InvalidComponentPresetException ex) {
29 PresetAssertHelper.assertInvalidPresetException(ex,
31 ComponentPreset.MANUFACTURER,
32 ComponentPreset.PARTNO,
33 ComponentPreset.LENGTH,
34 ComponentPreset.AFT_OUTER_DIAMETER,
35 ComponentPreset.FORE_OUTER_DIAMETER
38 "No Manufacturer specified",
39 "No PartNo specified",
40 "No Length specified",
41 "No AftOuterDiameter specified",
42 "No ForeOuterDiameter specified"
49 public void testPartNoRequired() {
51 TypedPropertyMap presetspec = new TypedPropertyMap();
52 presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION);
53 presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
54 ComponentPresetFactory.create(presetspec);
55 } catch (InvalidComponentPresetException ex) {
56 PresetAssertHelper.assertInvalidPresetException(ex,
58 ComponentPreset.PARTNO,
59 ComponentPreset.LENGTH,
60 ComponentPreset.AFT_OUTER_DIAMETER,
61 ComponentPreset.FORE_OUTER_DIAMETER
64 "No PartNo specified",
65 "No Length specified",
66 "No AftOuterDiameter specified",
67 "No ForeOuterDiameter specified"
74 public void testLengthRequired() {
76 TypedPropertyMap presetspec = new TypedPropertyMap();
77 presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION);
78 presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
79 presetspec.put(ComponentPreset.PARTNO, "partno");
80 ComponentPresetFactory.create(presetspec);
81 } catch (InvalidComponentPresetException ex) {
82 PresetAssertHelper.assertInvalidPresetException(ex,
84 ComponentPreset.LENGTH,
85 ComponentPreset.AFT_OUTER_DIAMETER,
86 ComponentPreset.FORE_OUTER_DIAMETER
89 "No Length specified",
90 "No AftOuterDiameter specified",
91 "No ForeOuterDiameter specified"
98 public void testAftOuterDiameterRequired() {
100 TypedPropertyMap presetspec = new TypedPropertyMap();
101 presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION);
102 presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
103 presetspec.put(ComponentPreset.PARTNO, "partno");
104 presetspec.put(ComponentPreset.LENGTH, 2.0);
105 presetspec.put(ComponentPreset.SHAPE, Transition.Shape.CONICAL);
106 ComponentPresetFactory.create(presetspec);
107 } catch (InvalidComponentPresetException ex) {
108 PresetAssertHelper.assertInvalidPresetException(ex,
110 ComponentPreset.AFT_OUTER_DIAMETER,
111 ComponentPreset.FORE_OUTER_DIAMETER
114 "No AftOuterDiameter specified",
115 "No ForeOuterDiameter specified"
123 public void testForeOuterDiameterRequired() {
125 TypedPropertyMap presetspec = new TypedPropertyMap();
126 presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION);
127 presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
128 presetspec.put(ComponentPreset.PARTNO, "partno");
129 presetspec.put(ComponentPreset.LENGTH, 2.0);
130 presetspec.put(ComponentPreset.SHAPE, Transition.Shape.CONICAL);
131 presetspec.put(ComponentPreset.AFT_OUTER_DIAMETER, 2.0);
132 ComponentPresetFactory.create(presetspec);
133 } catch (InvalidComponentPresetException ex) {
134 PresetAssertHelper.assertInvalidPresetException(ex,
136 ComponentPreset.FORE_OUTER_DIAMETER
139 "No ForeOuterDiameter specified"
146 public void testComputeDensityNoMaterial() throws Exception {
147 TypedPropertyMap presetspec = new TypedPropertyMap();
148 presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION);
149 presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
150 presetspec.put(ComponentPreset.PARTNO, "partno");
151 presetspec.put(ComponentPreset.LENGTH, 2.0);
152 presetspec.put(ComponentPreset.SHAPE, Transition.Shape.CONICAL);
153 presetspec.put(ComponentPreset.AFT_OUTER_DIAMETER, 2.0);
154 presetspec.put(ComponentPreset.FORE_OUTER_DIAMETER, 1.0);
155 presetspec.put(ComponentPreset.FILLED, true);
156 presetspec.put(ComponentPreset.MASS, 100.0);
157 ComponentPreset preset = ComponentPresetFactory.create(presetspec);
159 // constants put into the presetspec above.
160 double volume = /*base area*/Math.PI * (1.0 * 1.0 + 1.0 * 0.5 + 0.5 * 0.5);
162 volume *= 2.0 /* times height *// 3.0; /* one third */
164 double density = 100.0 / volume;
166 assertEquals("TransitionCustom", preset.get(ComponentPreset.MATERIAL).getName());
168 assertEquals(density, preset.get(ComponentPreset.MATERIAL).getDensity(), 0.01 * density);
172 public void testMaterial() throws Exception {
173 TypedPropertyMap presetspec = new TypedPropertyMap();
174 presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION);
175 presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
176 presetspec.put(ComponentPreset.PARTNO, "partno");
177 presetspec.put(ComponentPreset.LENGTH, 2.0);
178 presetspec.put(ComponentPreset.SHAPE, Transition.Shape.CONICAL);
179 presetspec.put(ComponentPreset.AFT_OUTER_DIAMETER, 2.0);
180 presetspec.put(ComponentPreset.FORE_OUTER_DIAMETER, 1.0);
181 presetspec.put(ComponentPreset.FILLED, true);
182 presetspec.put(ComponentPreset.MATERIAL, Material.newMaterial(Material.Type.BULK, "test", 2.0, true));
183 ComponentPreset preset = ComponentPresetFactory.create(presetspec);
185 assertEquals("test", preset.get(ComponentPreset.MATERIAL).getName());
186 assertEquals(2.0, preset.get(ComponentPreset.MATERIAL).getDensity(), 0.0005);
191 public void testComputeDensityWithMaterial() throws Exception {
192 TypedPropertyMap presetspec = new TypedPropertyMap();
193 presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.TRANSITION);
194 presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
195 presetspec.put(ComponentPreset.PARTNO, "partno");
196 presetspec.put(ComponentPreset.LENGTH, 2.0);
197 presetspec.put(ComponentPreset.SHAPE, Transition.Shape.CONICAL);
198 presetspec.put(ComponentPreset.AFT_OUTER_DIAMETER, 2.0);
199 presetspec.put(ComponentPreset.FORE_OUTER_DIAMETER, 1.0);
200 presetspec.put(ComponentPreset.FILLED, true);
201 presetspec.put(ComponentPreset.MASS, 100.0);
202 presetspec.put(ComponentPreset.MATERIAL, Material.newMaterial(Material.Type.BULK, "test", 2.0, true));
203 ComponentPreset preset = ComponentPresetFactory.create(presetspec);
205 // constants put into the presetspec above.
206 double totvolume = /*base area*/Math.PI;
208 totvolume *= 4.0 /* times height *// 3.0; /* one third */
210 double uppervolume = /*fore area*/Math.PI * 0.5 * 0.5;
211 uppervolume *= 2.0 /* times height *// 3.0; /* one third */
213 double volume = totvolume - uppervolume;
215 double density = 100.0 / volume;
217 assertEquals("test", preset.get(ComponentPreset.MATERIAL).getName());
219 assertEquals(density, preset.get(ComponentPreset.MATERIAL).getDensity(), 0.01 * density);