DGP - added isCompatible checks for all Rocksim components
[debian/openrocket] / test / net / sf / openrocket / file / rocksim / RocksimLoaderTest.java
1 /*
2  * RocksimLoaderTest.java
3  *
4  */
5 package net.sf.openrocket.file.rocksim;
6
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;
13
14 import java.io.BufferedInputStream;
15 import java.io.InputStream;
16
17 /**
18  * RocksimLoader Tester.
19  *
20  */
21 public class RocksimLoaderTest extends TestCase {
22
23     /**
24      * The class under test.
25      */
26     public static final Class classUT = RocksimLoader.class;
27
28     /**
29      * The test class (this class).
30      */
31     public static final Class testClass = RocksimLoaderTest.class;
32
33     /**
34      * Create a test suite of all tests within this test class.
35      *
36      * @return a suite of tests
37      */
38     public static Test suite() {
39         return new TestSuite(RocksimLoaderTest.class);
40     }
41
42     /**
43      * Test constructor.
44      *
45      * @param name the name of the test to run.
46      */
47     public RocksimLoaderTest(String name) {
48         super(name);
49     }
50
51     /**
52      * Setup the fixture.
53      */
54     public void setUp() throws Exception {
55         super.setUp();
56     }
57
58     /**
59      * Teardown the fixture.
60      */
61     public void tearDown() throws Exception {
62         super.tearDown();
63     }
64
65     /**
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.
69      */
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);
74         try {
75             OpenRocketDocument doc = loader.loadFromStream(new BufferedInputStream(stream));
76             assertNotNull(doc);
77             Rocket rocket = doc.getRocket();
78             assertNotNull(rocket);
79         }
80         catch (IllegalStateException ise) {
81             fail(ise.getMessage());            
82         }
83         assertTrue(loader.getWarnings().size() == 2);
84     }
85
86     /**
87      *
88      * Method: loadFromStream(InputStream source)
89      *
90      * @throws Exception  thrown if something goes awry
91      */
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));
98         
99         assertNotNull(doc);
100         Rocket rocket = doc.getRocket();
101         assertNotNull(rocket);
102         assertEquals("FooBar Test", doc.getRocket().getName());
103         assertTrue(loader.getWarnings().isEmpty());
104
105         stream = this.getClass().getResourceAsStream("rocksimTestRocket2.rkt");
106         assertNotNull("Could not open rocksimTestRocket2.rkt", stream);
107         doc = loader.loadFromStream(new BufferedInputStream(stream));
108         
109         assertNotNull(doc);
110         rocket = doc.getRocket();
111         assertNotNull(rocket);
112
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());
127
128         stream = this.getClass().getResourceAsStream("rocksimTestRocket3.rkt");
129         assertNotNull("Could not open rocksimTestRocket3.rkt", stream);
130         doc = loader.loadFromStream(new BufferedInputStream(stream));
131         
132         assertNotNull(doc);
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);
140         
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());
151         
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);
158         
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);
166     }
167
168 }