1 package net.sf.openrocket.rocketcomponent;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
9 import net.sf.openrocket.gui.util.ColorConversion;
10 import net.sf.openrocket.material.Material;
11 import net.sf.openrocket.material.Material.Type;
12 import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
13 import net.sf.openrocket.rocketcomponent.FinSet.CrossSection;
14 import net.sf.openrocket.rocketcomponent.FinSet.TabRelativePosition;
15 import net.sf.openrocket.rocketcomponent.RocketComponent.Position;
16 import net.sf.openrocket.util.LineStyle;
17 import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
19 import org.junit.Test;
21 public class FinSetTest extends BaseTestCase {
25 public void testFreeformConvert() {
26 testFreeformConvert(new TrapezoidFinSet());
27 testFreeformConvert(new EllipticalFinSet());
28 testFreeformConvert(new FreeformFinSet());
32 private void testFreeformConvert(FinSet fin) {
33 FreeformFinSet converted;
34 Material mat = Material.newMaterial(Type.BULK, "foo", 0.1, true);
36 fin.setBaseRotation(1.1);
37 fin.setCantAngle(0.001);
38 fin.setCGOverridden(true);
39 fin.setColor(ColorConversion.fromAwtColor(Color.YELLOW));
40 fin.setComment("cmt");
41 fin.setCrossSection(CrossSection.ROUNDED);
43 fin.setFinish(Finish.ROUGH);
44 fin.setLineStyle(LineStyle.DASHDOT);
45 fin.setMassOverridden(true);
47 fin.setOverrideCGX(0.012);
48 fin.setOverrideMass(0.0123);
49 fin.setOverrideSubcomponents(true);
50 fin.setPositionValue(0.1);
51 fin.setRelativePosition(Position.ABSOLUTE);
52 fin.setTabHeight(0.01);
53 fin.setTabLength(0.02);
54 fin.setTabRelativePosition(TabRelativePosition.END);
55 fin.setTabShift(0.015);
56 fin.setThickness(0.005);
59 converted = FreeformFinSet.convertFinSet((FinSet) fin.copy());
61 ComponentCompare.assertSimilarity(fin, converted, true);
63 assertEquals(converted.getComponentName(), converted.getName());
67 Rocket rocket = new Rocket();
68 Stage stage = new Stage();
69 BodyTube body = new BodyTube();
71 rocket.addChild(stage);
75 Listener l1 = new Listener("l1");
76 rocket.addComponentChangeListener(l1);
78 fin.setName("Custom name");
79 assertTrue(l1.changed);
80 assertEquals(ComponentChangeEvent.NONFUNCTIONAL_CHANGE, l1.changetype);
84 RocketComponent rocketcopy = rocket.copy();
86 Listener l2 = new Listener("l2");
87 rocketcopy.addComponentChangeListener(l2);
89 FinSet fincopy = (FinSet) rocketcopy.getChild(0).getChild(0).getChild(0);
90 FreeformFinSet.convertFinSet(fincopy);
92 assertTrue(l2.changed);
93 assertEquals(ComponentChangeEvent.TREE_CHANGE,
94 l2.changetype & ComponentChangeEvent.TREE_CHANGE);
99 private static class Listener implements ComponentChangeListener {
100 private boolean changed = false;
101 private int changetype = 0;
102 private final String name;
104 public Listener(String name) {
109 public void componentChanged(ComponentChangeEvent e) {
110 assertFalse("Ensuring listener " + name + " has not been called.", changed);
112 changetype = e.getType();