2 * RocksimLoaderTest.java
5 package net.sf.openrocket.file.rocksim.importt;
7 import java.io.BufferedInputStream;
8 import java.io.IOException;
9 import java.io.InputStream;
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;
19 import org.junit.Assert;
22 * RocksimLoader Tester.
24 public class RocksimLoaderTest {
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.
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);
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());
44 Assert.assertTrue(loader.getWarnings().size() == 2);
48 * Method: loadFromStream(InputStream source)
50 * @throws Exception thrown if something goes awry
53 public void testLoadFromStream() throws Exception {
54 RocksimLoader loader = new RocksimLoader();
55 //Stupid single stage rocket
56 OpenRocketDocument doc = loadRocksimRocket(loader);
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());
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());
69 Assert.assertNotNull(doc);
70 rocket = doc.getRocket();
71 Assert.assertNotNull(rocket);
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());
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());
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);
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());
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);
119 BodyTube bt = (BodyTube) stage2.getChild(0);
120 LaunchLug ll = (LaunchLug) bt.getChild(6);
121 Assert.assertEquals(1.22d, ll.getRadialDirection(), 0.001);
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);
132 public static OpenRocketDocument loadRocksimRocket(RocksimLoader theLoader) throws IOException, RocketLoadException {
133 InputStream stream = RocksimLoaderTest.class.getResourceAsStream("rocksimTestRocket1.rkt");
135 Assert.assertNotNull("Could not open rocksimTestRocket1.rkt", stream);
136 return theLoader.loadFromStream(new BufferedInputStream(stream), new DatabaseMotorFinder());
142 public static OpenRocketDocument loadRocksimRocket3(RocksimLoader theLoader) throws IOException, RocketLoadException {
143 InputStream stream = RocksimLoaderTest.class.getResourceAsStream("rocksimTestRocket3.rkt");
145 Assert.assertNotNull("Could not open rocksimTestRocket3.rkt", stream);
146 return theLoader.loadFromStream(new BufferedInputStream(stream), new DatabaseMotorFinder());