create changelog entry
[debian/openrocket] / core / test / net / sf / openrocket / file / rocksim / importt / RocksimLoaderTest.java
1 /*
2  * RocksimLoaderTest.java
3  *
4  */
5 package net.sf.openrocket.file.rocksim.importt;
6
7 import java.io.BufferedInputStream;
8 import java.io.IOException;
9 import java.io.InputStream;
10
11 import net.sf.openrocket.document.OpenRocketDocument;
12 import net.sf.openrocket.file.DatabaseMotorFinder;
13 import net.sf.openrocket.file.RocketLoadException;
14 import net.sf.openrocket.rocketcomponent.BodyTube;
15 import net.sf.openrocket.rocketcomponent.LaunchLug;
16 import net.sf.openrocket.rocketcomponent.Rocket;
17 import net.sf.openrocket.rocketcomponent.Stage;
18
19 import org.junit.Assert;
20
21 /**
22  * RocksimLoader Tester.
23  */
24 public class RocksimLoaderTest {
25         
26         /**
27          * Test a bug reported via automated bug report.  I have been unable to reproduce this bug
28          * (hanging finset off of an inner body tube) when creating a Rocksim file using Rocksim.  The bug
29          * is reproducible when manually modifying the Rocksim file, which is what is tested here.
30          */
31         @org.junit.Test
32         public void testFinsOnInnerTube() throws Exception {
33                 RocksimLoader loader = new RocksimLoader();
34                 InputStream stream = this.getClass().getResourceAsStream("PodFins.rkt");
35                 Assert.assertNotNull("Could not open PodFins.rkt", stream);
36                 try {
37                         OpenRocketDocument doc = loader.loadFromStream(new BufferedInputStream(stream), new DatabaseMotorFinder());
38                         Assert.assertNotNull(doc);
39                         Rocket rocket = doc.getRocket();
40                         Assert.assertNotNull(rocket);
41                 } catch (IllegalStateException ise) {
42                         Assert.fail(ise.getMessage());
43                 }
44                 Assert.assertTrue(loader.getWarnings().size() == 2);
45         }
46         
47         /**
48          * Method: loadFromStream(InputStream source)
49          *
50          * @throws Exception thrown if something goes awry
51          */
52         @org.junit.Test
53         public void testLoadFromStream() throws Exception {
54                 RocksimLoader loader = new RocksimLoader();
55                 //Stupid single stage rocket
56                 OpenRocketDocument doc = loadRocksimRocket(loader);
57                 InputStream stream;
58                 
59                 Assert.assertNotNull(doc);
60                 Rocket rocket = doc.getRocket();
61                 Assert.assertNotNull(rocket);
62                 Assert.assertEquals("FooBar Test", doc.getRocket().getName());
63                 Assert.assertTrue(loader.getWarnings().isEmpty());
64                 
65                 stream = this.getClass().getResourceAsStream("rocksimTestRocket2.rkt");
66                 Assert.assertNotNull("Could not open rocksimTestRocket2.rkt", stream);
67                 doc = loader.loadFromStream(new BufferedInputStream(stream), new DatabaseMotorFinder());
68                 
69                 Assert.assertNotNull(doc);
70                 rocket = doc.getRocket();
71                 Assert.assertNotNull(rocket);
72                 
73                 //Do some simple asserts;  the important thing here is just validating that the mass and cg were
74                 //not overridden for each stage.
75                 Assert.assertEquals("Three Stage Everything Included Rocket", doc.getRocket().getName());
76                 Assert.assertEquals(1, loader.getWarnings().size());
77                 Assert.assertEquals(3, rocket.getStageCount());
78                 Stage stage1 = (Stage) rocket.getChild(0);
79                 Assert.assertFalse(stage1.isMassOverridden());
80                 Assert.assertFalse(stage1.isCGOverridden());
81                 Stage stage2 = (Stage) rocket.getChild(1);
82                 Assert.assertFalse(stage2.isMassOverridden());
83                 Assert.assertFalse(stage2.isCGOverridden());
84                 Stage stage3 = (Stage) rocket.getChild(2);
85                 Assert.assertFalse(stage3.isMassOverridden());
86                 Assert.assertFalse(stage3.isCGOverridden());
87                 
88                 stream = this.getClass().getResourceAsStream("rocksimTestRocket3.rkt");
89                 Assert.assertNotNull("Could not open rocksimTestRocket3.rkt", stream);
90                 doc = loader.loadFromStream(new BufferedInputStream(stream), new DatabaseMotorFinder());
91                 
92                 Assert.assertNotNull(doc);
93                 rocket = doc.getRocket();
94                 Assert.assertNotNull(rocket);
95                 Assert.assertEquals("Three Stage Everything Included Rocket - Override Total Mass/CG", doc.getRocket().getName());
96                 Assert.assertEquals(3, rocket.getStageCount());
97                 stage1 = (Stage) rocket.getChild(0);
98                 stage2 = (Stage) rocket.getChild(1);
99                 stage3 = (Stage) rocket.getChild(2);
100                 
101                 //Do some 1st level and simple asserts; the idea here is to not do a deep validation as that 
102                 //should have been covered elsewhere.  Assert that the stage overrides are correct.
103                 Assert.assertEquals(2, stage1.getChildCount());
104                 Assert.assertEquals("Nose cone", stage1.getChild(0).getName());
105                 Assert.assertEquals("Body tube", stage1.getChild(1).getName());
106                 Assert.assertTrue(stage1.isMassOverridden());
107                 Assert.assertEquals(0.185d, stage1.getOverrideMass(), 0.001);
108                 Assert.assertTrue(stage1.isCGOverridden());
109                 Assert.assertEquals(0.3d, stage1.getOverrideCG().x, 0.001);
110                 Assert.assertEquals(4, loader.getWarnings().size());
111                 
112                 Assert.assertEquals(1, stage2.getChildCount());
113                 Assert.assertEquals("2nd Stage Tube", stage2.getChild(0).getName());
114                 Assert.assertTrue(stage2.isMassOverridden());
115                 Assert.assertEquals(0.21d, stage2.getOverrideMass(), 0.001);
116                 Assert.assertTrue(stage2.isCGOverridden());
117                 Assert.assertEquals(0.4d, stage2.getOverrideCG().x, 0.001);
118                 
119                 BodyTube bt = (BodyTube) stage2.getChild(0);
120                 LaunchLug ll = (LaunchLug) bt.getChild(6);
121                 Assert.assertEquals(1.22d, ll.getRadialDirection(), 0.001);
122                 
123                 Assert.assertEquals(2, stage3.getChildCount());
124                 Assert.assertEquals("Transition", stage3.getChild(0).getName());
125                 Assert.assertEquals("Body tube", stage3.getChild(1).getName());
126                 Assert.assertTrue(stage2.isMassOverridden());
127                 Assert.assertEquals(0.33d, stage3.getOverrideMass(), 0.001);
128                 Assert.assertTrue(stage2.isCGOverridden());
129                 Assert.assertEquals(0.5d, stage3.getOverrideCG().x, 0.001);
130         }
131         
132         public static OpenRocketDocument loadRocksimRocket(RocksimLoader theLoader) throws IOException, RocketLoadException {
133                 InputStream stream = RocksimLoaderTest.class.getResourceAsStream("rocksimTestRocket1.rkt");
134                 try {
135                         Assert.assertNotNull("Could not open rocksimTestRocket1.rkt", stream);
136                         return theLoader.loadFromStream(new BufferedInputStream(stream), new DatabaseMotorFinder());
137                 } finally {
138                         stream.close();
139                 }
140         }
141         
142         public static OpenRocketDocument loadRocksimRocket3(RocksimLoader theLoader) throws IOException, RocketLoadException {
143                 InputStream stream = RocksimLoaderTest.class.getResourceAsStream("rocksimTestRocket3.rkt");
144                 try {
145                         Assert.assertNotNull("Could not open rocksimTestRocket3.rkt", stream);
146                         return theLoader.loadFromStream(new BufferedInputStream(stream), new DatabaseMotorFinder());
147                 } finally {
148                         stream.close();
149                 }
150         }
151         
152 }