]> git.gag.com Git - debian/openrocket/blob - test/net/sf/openrocket/file/rocksim/RocksimLoaderTest.java
DGP - Modified Rocksim import to discriminate between centering ring, tube coupler...
[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 net.sf.openrocket.document.OpenRocketDocument;
8 import net.sf.openrocket.rocketcomponent.BodyTube;
9 import net.sf.openrocket.rocketcomponent.LaunchLug;
10 import net.sf.openrocket.rocketcomponent.Rocket;
11 import net.sf.openrocket.rocketcomponent.Stage;
12 import org.junit.Assert;
13
14 import java.io.BufferedInputStream;
15 import java.io.InputStream;
16
17 /**
18  * RocksimLoader Tester.
19  *
20  */
21 public class RocksimLoaderTest {
22
23     /**
24      * Test a bug reported via automated bug report.  I have been unable to reproduce this bug
25      * (hanging finset off of an inner body tube) when creating a Rocksim file using Rocksim.  The bug
26      * is reproducible when manually modifying the Rocksim file, which is what is tested here.
27      */
28     @org.junit.Test
29     public void testFinsOnInnerTube() throws Exception {
30         RocksimLoader loader = new RocksimLoader();
31         InputStream stream = this.getClass().getResourceAsStream("PodFins.rkt");
32         Assert.assertNotNull("Could not open PodFins.rkt", stream);
33         try {
34             OpenRocketDocument doc = loader.loadFromStream(new BufferedInputStream(stream));
35             Assert.assertNotNull(doc);
36             Rocket rocket = doc.getRocket();
37             Assert.assertNotNull(rocket);
38         }
39         catch (IllegalStateException ise) {
40             Assert.fail(ise.getMessage());
41         }
42         Assert.assertTrue(loader.getWarnings().size() == 2);
43     }
44
45     /**
46      *
47      * Method: loadFromStream(InputStream source)
48      *
49      * @throws Exception  thrown if something goes awry
50      */
51     @org.junit.Test
52     public void testLoadFromStream() throws Exception {
53         RocksimLoader loader = new RocksimLoader();
54         //Stupid single stage rocket
55         InputStream stream = this.getClass().getResourceAsStream("rocksimTestRocket1.rkt");
56         Assert.assertNotNull("Could not open rocksimTestRocket1.rkt", stream);
57         OpenRocketDocument doc = loader.loadFromStream(new BufferedInputStream(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));
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));
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 }