2 * RocksimLoaderTest.java
5 package net.sf.openrocket.file.rocksim;
7 import junit.framework.Test;
8 import junit.framework.TestCase;
9 import junit.framework.TestSuite;
10 import net.sf.openrocket.document.OpenRocketDocument;
11 import net.sf.openrocket.rocketcomponent.Rocket;
12 import net.sf.openrocket.rocketcomponent.Stage;
14 import java.io.BufferedInputStream;
15 import java.io.InputStream;
18 * RocksimLoader Tester.
21 public class RocksimLoaderTest extends TestCase {
24 * The class under test.
26 public static final Class classUT = RocksimLoader.class;
29 * The test class (this class).
31 public static final Class testClass = RocksimLoaderTest.class;
34 * Create a test suite of all tests within this test class.
36 * @return a suite of tests
38 public static Test suite() {
39 return new TestSuite(RocksimLoaderTest.class);
45 * @param name the name of the test to run.
47 public RocksimLoaderTest(String name) {
54 public void setUp() throws Exception {
59 * Teardown the fixture.
61 public void tearDown() throws Exception {
66 * Test a bug reported via automated bug report. I have been unable to reproduce this bug
67 * (hanging finset off of an inner body tube) when creating a Rocksim file using Rocksim. The bug
68 * is reproducible when manually modifying the Rocksim file, which is what is tested here.
70 public void testFinsOnInnerTube() throws Exception {
71 RocksimLoader loader = new RocksimLoader();
72 InputStream stream = this.getClass().getResourceAsStream("PodFins.rkt");
73 assertNotNull("Could not open PodFins.rkt", stream);
75 OpenRocketDocument doc = loader.loadFromStream(new BufferedInputStream(stream));
77 Rocket rocket = doc.getRocket();
78 assertNotNull(rocket);
80 catch (IllegalStateException ise) {
81 fail(ise.getMessage());
83 assertTrue(loader.getWarnings().size() == 2);
88 * Method: loadFromStream(InputStream source)
90 * @throws Exception thrown if something goes awry
92 public void testLoadFromStream() throws Exception {
93 RocksimLoader loader = new RocksimLoader();
94 //Stupid single stage rocket
95 InputStream stream = this.getClass().getResourceAsStream("rocksimTestRocket1.rkt");
96 assertNotNull("Could not open rocksimTestRocket1.rkt", stream);
97 OpenRocketDocument doc = loader.loadFromStream(new BufferedInputStream(stream));
100 Rocket rocket = doc.getRocket();
101 assertNotNull(rocket);
102 assertEquals("FooBar Test", doc.getRocket().getName());
103 assertTrue(loader.getWarnings().isEmpty());
105 stream = this.getClass().getResourceAsStream("rocksimTestRocket2.rkt");
106 assertNotNull("Could not open rocksimTestRocket2.rkt", stream);
107 doc = loader.loadFromStream(new BufferedInputStream(stream));
110 rocket = doc.getRocket();
111 assertNotNull(rocket);
113 //Do some simple asserts; the important thing here is just validating that the mass and cg were
114 //not overridden for each stage.
115 assertEquals("Three Stage Everything Included Rocket", doc.getRocket().getName());
116 assertEquals(1, loader.getWarnings().size());
117 assertEquals(3, rocket.getStageCount());
118 Stage stage1 = (Stage)rocket.getChild(0);
119 assertFalse(stage1.isMassOverridden());
120 assertFalse(stage1.isCGOverridden());
121 Stage stage2 = (Stage)rocket.getChild(1);
122 assertFalse(stage2.isMassOverridden());
123 assertFalse(stage2.isCGOverridden());
124 Stage stage3 = (Stage)rocket.getChild(2);
125 assertFalse(stage3.isMassOverridden());
126 assertFalse(stage3.isCGOverridden());
128 stream = this.getClass().getResourceAsStream("rocksimTestRocket3.rkt");
129 assertNotNull("Could not open rocksimTestRocket3.rkt", stream);
130 doc = loader.loadFromStream(new BufferedInputStream(stream));
133 rocket = doc.getRocket();
134 assertNotNull(rocket);
135 assertEquals("Three Stage Everything Included Rocket - Override Total Mass/CG", doc.getRocket().getName());
136 assertEquals(3, rocket.getStageCount());
137 stage1 = (Stage)rocket.getChild(0);
138 stage2 = (Stage)rocket.getChild(1);
139 stage3 = (Stage)rocket.getChild(2);
141 //Do some 1st level and simple asserts; the idea here is to not do a deep validation as that
142 //should have been covered elsewhere. Assert that the stage overrides are correct.
143 assertEquals(2, stage1.getChildCount());
144 assertEquals("Nose cone", stage1.getChild(0).getName());
145 assertEquals("Body tube", stage1.getChild(1).getName());
146 assertTrue(stage1.isMassOverridden());
147 assertEquals(0.185d, stage1.getOverrideMass());
148 assertTrue(stage1.isCGOverridden());
149 assertEquals(0.3d, stage1.getOverrideCG().x);
150 assertEquals(4, loader.getWarnings().size());
152 assertEquals(1, stage2.getChildCount());
153 assertEquals("2nd Stage Tube", stage2.getChild(0).getName());
154 assertTrue(stage2.isMassOverridden());
155 assertEquals(0.21d, stage2.getOverrideMass());
156 assertTrue(stage2.isCGOverridden());
157 assertEquals(0.4d, stage2.getOverrideCG().x);
159 assertEquals(2, stage3.getChildCount());
160 assertEquals("Transition", stage3.getChild(0).getName());
161 assertEquals("Body tube", stage3.getChild(1).getName());
162 assertTrue(stage2.isMassOverridden());
163 assertEquals(0.33d, stage3.getOverrideMass());
164 assertTrue(stage2.isCGOverridden());
165 assertEquals(0.5d, stage3.getOverrideCG().x);