--- /dev/null
+package net.sf.openrocket.preset;
+
+import static org.junit.Assert.*;
+import net.sf.openrocket.material.Material;
+import net.sf.openrocket.motor.Manufacturer;
+import net.sf.openrocket.rocketcomponent.Parachute;
+import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
+
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Test application of ComponentPresets to Parachute RocketComponents through
+ * the Parachute.loadFromPreset mechanism.
+ *
+ * Test Parachute is well defined.
+ *
+ * Test calling setters on Parachute will clear the ComponentPreset.
+ *
+ */
+public class ParachuterComponentTests extends BaseTestCase {
+
+ ComponentPreset preset;
+
+ @Before
+ public void createPreset() throws Exception {
+ TypedPropertyMap presetspec = new TypedPropertyMap();
+ presetspec.put(ComponentPreset.TYPE, ComponentPreset.Type.PARACHUTE);
+ presetspec.put(ComponentPreset.MANUFACTURER, Manufacturer.getManufacturer("manufacturer"));
+ presetspec.put(ComponentPreset.PARTNO, "partno");
+ presetspec.put(ComponentPreset.DIAMETER, 20.0);
+ presetspec.put(ComponentPreset.LINE_COUNT, 8);
+ presetspec.put(ComponentPreset.LINE_LENGTH, 12.0);
+ Material m = Material.newMaterial(Material.Type.SURFACE, "testMaterial", 2.0, true);
+ presetspec.put(ComponentPreset.MATERIAL, m);
+ m = Material.newMaterial(Material.Type.LINE, "testLineMaterial", 3, true);
+ presetspec.put(ComponentPreset.LINE_MATERIAL, m);
+ preset = ComponentPresetFactory.create(presetspec);
+ }
+
+ @Test
+ public void testComponentType() {
+ Parachute cr = new Parachute();
+
+ assertSame(ComponentPreset.Type.PARACHUTE, cr.getPresetType());
+ }
+
+ @Test
+ public void testLoadFromPresetIsSane() {
+ Parachute cr = new Parachute();
+
+ cr.loadPreset(preset);
+
+ assertEquals(20.0, cr.getDiameter(), 0.0);
+ assertEquals(8, cr.getLineCount(), 0.0);
+ assertEquals(12.0, cr.getLineLength(), 0.0);
+
+ assertSame(preset.get(ComponentPreset.MATERIAL), cr.getMaterial());
+ assertSame(preset.get(ComponentPreset.LINE_MATERIAL), cr.getLineMaterial());
+ }
+
+ @Test
+ public void changeDiameterClearsPreset() {
+ Parachute cr = new Parachute();
+
+ cr.loadPreset(preset);
+
+ cr.setDiameter(1.0);
+
+ assertNull(cr.getPresetComponent());
+ }
+
+ @Test
+ public void changeAreaClearsPreset() {
+ Parachute cr = new Parachute();
+
+ cr.loadPreset(preset);
+
+ cr.setArea(1.0);
+
+ assertNull(cr.getPresetComponent());
+ }
+
+ @Test
+ public void changeLineCountClearsPreset() {
+ Parachute cr = new Parachute();
+
+ cr.loadPreset(preset);
+
+ cr.setLineCount(12);
+
+ assertNull(cr.getPresetComponent());
+ }
+
+ @Test
+ public void changeLineLengthLeavesPreset() {
+ Parachute cr = new Parachute();
+
+ cr.loadPreset(preset);
+
+ cr.setLineLength(24);
+
+ assertSame(preset, cr.getPresetComponent());
+ }
+
+ @Test
+ public void changeMaterialClearsPreset() {
+ Parachute cr = new Parachute();
+
+ cr.loadPreset(preset);
+
+ cr.setMaterial(Material.newMaterial(Material.Type.SURFACE, "new", 1.0, true));
+
+ assertNull(cr.getPresetComponent());
+ }
+
+ @Test
+ public void changeLineMaterialLeavesPreset() {
+ Parachute cr = new Parachute();
+
+ cr.loadPreset(preset);
+
+ cr.setLineMaterial(Material.newMaterial(Material.Type.LINE, "new", 1.0, true));
+
+ assertSame(preset, cr.getPresetComponent());
+ }
+
+}