updates for 0.9.4
[debian/openrocket] / test / net / sf / openrocket / rocketcomponent / FinSetTest.java
diff --git a/test/net/sf/openrocket/rocketcomponent/FinSetTest.java b/test/net/sf/openrocket/rocketcomponent/FinSetTest.java
new file mode 100644 (file)
index 0000000..ae0e665
--- /dev/null
@@ -0,0 +1,111 @@
+package net.sf.openrocket.rocketcomponent;
+
+import static org.junit.Assert.*;
+
+import java.awt.Color;
+
+import net.sf.openrocket.material.Material;
+import net.sf.openrocket.material.Material.Type;
+import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
+import net.sf.openrocket.rocketcomponent.FinSet.CrossSection;
+import net.sf.openrocket.rocketcomponent.FinSet.TabRelativePosition;
+import net.sf.openrocket.rocketcomponent.RocketComponent.Position;
+import net.sf.openrocket.util.LineStyle;
+
+import org.junit.Test;
+
+public class FinSetTest {
+       
+       
+       @Test
+       public void testFreeformConvert() {
+               testFreeformConvert(new TrapezoidFinSet());
+               testFreeformConvert(new EllipticalFinSet());
+               testFreeformConvert(new FreeformFinSet());
+       }
+       
+       
+       private void testFreeformConvert(FinSet fin) {
+               FreeformFinSet converted;
+               Material mat = Material.newMaterial(Type.BULK, "foo", 0.1, true);
+               
+               fin.setBaseRotation(1.1);
+               fin.setCantAngle(0.001);
+               fin.setCGOverridden(true);
+               fin.setColor(Color.YELLOW);
+               fin.setComment("cmt");
+               fin.setCrossSection(CrossSection.ROUNDED);
+               fin.setFinCount(5);
+               fin.setFinish(Finish.ROUGH);
+               fin.setLineStyle(LineStyle.DASHDOT);
+               fin.setMassOverridden(true);
+               fin.setMaterial(mat);
+               fin.setOverrideCGX(0.012);
+               fin.setOverrideMass(0.0123);
+               fin.setOverrideSubcomponents(true);
+               fin.setPositionValue(0.1);
+               fin.setRelativePosition(Position.ABSOLUTE);
+               fin.setTabHeight(0.01);
+               fin.setTabLength(0.02);
+               fin.setTabRelativePosition(TabRelativePosition.END);
+               fin.setTabShift(0.015);
+               fin.setThickness(0.005);
+
+               converted = FreeformFinSet.convertFinSet(fin);
+               
+               ComponentCompare.assertSimilarity(fin, converted, true);
+               
+               assertEquals(converted.getComponentName(), converted.getName());
+               
+               
+               // Create test rocket
+               Rocket rocket = new Rocket();
+               Stage stage = new Stage();
+               BodyTube body = new BodyTube();
+               
+               rocket.addChild(stage);
+               stage.addChild(body);
+               body.addChild(fin);
+               
+               Listener l1 = new Listener("l1");
+               rocket.addComponentChangeListener(l1);
+               
+               fin.setName("Custom name");
+               assertTrue(l1.changed);
+               assertEquals(ComponentChangeEvent.NONFUNCTIONAL_CHANGE, l1.changetype);
+               
+               
+               // Create copy
+               RocketComponent rocketcopy = rocket.copy();
+               
+               Listener l2 = new Listener("l2");
+               rocketcopy.addComponentChangeListener(l2);
+               
+               FinSet fincopy = (FinSet) rocketcopy.getChild(0).getChild(0).getChild(0);
+               FreeformFinSet.convertFinSet(fincopy);
+               
+               assertTrue(l2.changed);
+               assertEquals(ComponentChangeEvent.TREE_CHANGE, 
+                               l2.changetype & ComponentChangeEvent.TREE_CHANGE);
+               
+       }
+       
+       
+       private static class Listener implements ComponentChangeListener {
+               private boolean changed = false;
+               private int changetype = 0;
+               private final String name;
+               
+               public Listener(String name) {
+                       this.name = name;
+               }
+               
+               @Override
+               public void componentChanged(ComponentChangeEvent e) {
+                       assertFalse("Ensuring listener "+name+" has not been called.", changed);
+                       changed = true;
+                       changetype = e.getType();
+               }
+       }
+
+}