create changelog entry
[debian/openrocket] / core / test / net / sf / openrocket / rocketcomponent / FinSetTest.java
1 package net.sf.openrocket.rocketcomponent;
2
3 import static org.junit.Assert.*;
4
5 import java.awt.Color;
6
7 import net.sf.openrocket.gui.util.ColorConversion;
8 import net.sf.openrocket.material.Material;
9 import net.sf.openrocket.material.Material.Type;
10 import net.sf.openrocket.rocketcomponent.ExternalComponent.Finish;
11 import net.sf.openrocket.rocketcomponent.FinSet.CrossSection;
12 import net.sf.openrocket.rocketcomponent.FinSet.TabRelativePosition;
13 import net.sf.openrocket.rocketcomponent.RocketComponent.Position;
14 import net.sf.openrocket.util.LineStyle;
15 import net.sf.openrocket.util.BaseTestCase.BaseTestCase;
16
17 import org.junit.Test;
18
19 public class FinSetTest extends BaseTestCase {
20         
21         
22         @Test
23         public void testFreeformConvert() {
24                 testFreeformConvert(new TrapezoidFinSet());
25                 testFreeformConvert(new EllipticalFinSet());
26                 testFreeformConvert(new FreeformFinSet());
27         }
28         
29         
30         private void testFreeformConvert(FinSet fin) {
31                 FreeformFinSet converted;
32                 Material mat = Material.newMaterial(Type.BULK, "foo", 0.1, true);
33                 
34                 fin.setBaseRotation(1.1);
35                 fin.setCantAngle(0.001);
36                 fin.setCGOverridden(true);
37                 fin.setColor(ColorConversion.fromAwtColor(Color.YELLOW));
38                 fin.setComment("cmt");
39                 fin.setCrossSection(CrossSection.ROUNDED);
40                 fin.setFinCount(5);
41                 fin.setFinish(Finish.ROUGH);
42                 fin.setLineStyle(LineStyle.DASHDOT);
43                 fin.setMassOverridden(true);
44                 fin.setMaterial(mat);
45                 fin.setOverrideCGX(0.012);
46                 fin.setOverrideMass(0.0123);
47                 fin.setOverrideSubcomponents(true);
48                 fin.setPositionValue(0.1);
49                 fin.setRelativePosition(Position.ABSOLUTE);
50                 fin.setTabHeight(0.01);
51                 fin.setTabLength(0.02);
52                 fin.setTabRelativePosition(TabRelativePosition.END);
53                 fin.setTabShift(0.015);
54                 fin.setThickness(0.005);
55                 
56                 
57                 converted = FreeformFinSet.convertFinSet((FinSet) fin.copy());
58                 
59                 ComponentCompare.assertSimilarity(fin, converted, true);
60                 
61                 assertEquals(converted.getComponentName(), converted.getName());
62                 
63                 
64                 // Create test rocket
65                 Rocket rocket = new Rocket();
66                 Stage stage = new Stage();
67                 BodyTube body = new BodyTube();
68                 
69                 rocket.addChild(stage);
70                 stage.addChild(body);
71                 body.addChild(fin);
72                 
73                 Listener l1 = new Listener("l1");
74                 rocket.addComponentChangeListener(l1);
75                 
76                 fin.setName("Custom name");
77                 assertTrue(l1.changed);
78                 assertEquals(ComponentChangeEvent.NONFUNCTIONAL_CHANGE, l1.changetype);
79                 
80                 
81                 // Create copy
82                 RocketComponent rocketcopy = rocket.copy();
83                 
84                 Listener l2 = new Listener("l2");
85                 rocketcopy.addComponentChangeListener(l2);
86                 
87                 FinSet fincopy = (FinSet) rocketcopy.getChild(0).getChild(0).getChild(0);
88                 FreeformFinSet.convertFinSet(fincopy);
89                 
90                 assertTrue(l2.changed);
91                 assertEquals(ComponentChangeEvent.TREE_CHANGE,
92                                 l2.changetype & ComponentChangeEvent.TREE_CHANGE);
93                 
94         }
95         
96         
97         private static class Listener implements ComponentChangeListener {
98                 private boolean changed = false;
99                 private int changetype = 0;
100                 private final String name;
101                 
102                 public Listener(String name) {
103                         this.name = name;
104                 }
105                 
106                 @Override
107                 public void componentChanged(ComponentChangeEvent e) {
108                         assertFalse("Ensuring listener " + name + " has not been called.", changed);
109                         changed = true;
110                         changetype = e.getType();
111                 }
112         }
113         
114 }