61d63d4ae01c7e15a4f4c9cbf7c3a11ca44c5f3c
[debian/openrocket] / core / test / net / sf / openrocket / rocketcomponent / FinSetTest.java
1 package net.sf.openrocket.rocketcomponent;
2
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertFalse;
5 import static org.junit.Assert.assertTrue;
6
7 import java.awt.Color;
8
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;
18
19 import org.junit.Test;
20
21 public class FinSetTest extends BaseTestCase {
22         
23
24         @Test
25         public void testFreeformConvert() {
26                 testFreeformConvert(new TrapezoidFinSet());
27                 testFreeformConvert(new EllipticalFinSet());
28                 testFreeformConvert(new FreeformFinSet());
29         }
30         
31         
32         private void testFreeformConvert(FinSet fin) {
33                 FreeformFinSet converted;
34                 Material mat = Material.newUserMaterial(Type.BULK, "foo", 0.1);
35                 
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);
42                 fin.setFinCount(5);
43                 fin.setFinish(Finish.ROUGH);
44                 fin.setLineStyle(LineStyle.DASHDOT);
45                 fin.setMassOverridden(true);
46                 fin.setMaterial(mat);
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);
57                 
58
59                 converted = FreeformFinSet.convertFinSet((FinSet) fin.copy());
60                 
61                 ComponentCompare.assertSimilarity(fin, converted, true);
62                 
63                 assertEquals(converted.getComponentName(), converted.getName());
64                 
65
66                 // Create test rocket
67                 Rocket rocket = new Rocket();
68                 Stage stage = new Stage();
69                 BodyTube body = new BodyTube();
70                 
71                 rocket.addChild(stage);
72                 stage.addChild(body);
73                 body.addChild(fin);
74                 
75                 Listener l1 = new Listener("l1");
76                 rocket.addComponentChangeListener(l1);
77                 
78                 fin.setName("Custom name");
79                 assertTrue(l1.changed);
80                 assertEquals(ComponentChangeEvent.NONFUNCTIONAL_CHANGE, l1.changetype);
81                 
82
83                 // Create copy
84                 RocketComponent rocketcopy = rocket.copy();
85                 
86                 Listener l2 = new Listener("l2");
87                 rocketcopy.addComponentChangeListener(l2);
88                 
89                 FinSet fincopy = (FinSet) rocketcopy.getChild(0).getChild(0).getChild(0);
90                 FreeformFinSet.convertFinSet(fincopy);
91                 
92                 assertTrue(l2.changed);
93                 assertEquals(ComponentChangeEvent.TREE_CHANGE,
94                                 l2.changetype & ComponentChangeEvent.TREE_CHANGE);
95                 
96         }
97         
98         
99         private static class Listener implements ComponentChangeListener {
100                 private boolean changed = false;
101                 private int changetype = 0;
102                 private final String name;
103                 
104                 public Listener(String name) {
105                         this.name = name;
106                 }
107                 
108                 @Override
109                 public void componentChanged(ComponentChangeEvent e) {
110                         assertFalse("Ensuring listener " + name + " has not been called.", changed);
111                         changed = true;
112                         changetype = e.getType();
113                 }
114         }
115         
116 }