From 228e8eb7f5f8f8f2582f9afca2e63c54494b57c5 Mon Sep 17 00:00:00 2001 From: SiboVG Date: Tue, 25 Oct 2022 15:21:09 +0200 Subject: [PATCH] Add unit tests for stage activeness saving --- .../document/OpenRocketDocumentFactory.java | 1 + .../file/openrocket/OpenRocketSaverTest.java | 78 +++++++++++++++++++ 2 files changed, 79 insertions(+) diff --git a/core/src/net/sf/openrocket/document/OpenRocketDocumentFactory.java b/core/src/net/sf/openrocket/document/OpenRocketDocumentFactory.java index eefef3e8e..24b4f6f13 100644 --- a/core/src/net/sf/openrocket/document/OpenRocketDocumentFactory.java +++ b/core/src/net/sf/openrocket/document/OpenRocketDocumentFactory.java @@ -15,6 +15,7 @@ public class OpenRocketDocumentFactory { //// Sustainer stage.setName(trans.get("BasicFrame.StageName.Sustainer")); rocket.addChild(stage); + rocket.getSelectedConfiguration().setAllStages(); OpenRocketDocument doc = new OpenRocketDocument(rocket); doc.setSaved(true); return doc; diff --git a/core/test/net/sf/openrocket/file/openrocket/OpenRocketSaverTest.java b/core/test/net/sf/openrocket/file/openrocket/OpenRocketSaverTest.java index b9b69e5a3..20abcbe4a 100644 --- a/core/test/net/sf/openrocket/file/openrocket/OpenRocketSaverTest.java +++ b/core/test/net/sf/openrocket/file/openrocket/OpenRocketSaverTest.java @@ -2,6 +2,8 @@ package net.sf.openrocket.file.openrocket; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.fail; import java.io.File; @@ -19,6 +21,7 @@ import net.sf.openrocket.database.ComponentPresetDatabase; import net.sf.openrocket.database.motor.MotorDatabase; import net.sf.openrocket.database.motor.ThrustCurveMotorSetDatabase; import net.sf.openrocket.document.OpenRocketDocument; +import net.sf.openrocket.document.OpenRocketDocumentFactory; import net.sf.openrocket.document.StorageOptions; import net.sf.openrocket.file.GeneralRocketLoader; import net.sf.openrocket.file.RocketLoadException; @@ -29,6 +32,10 @@ import net.sf.openrocket.motor.Manufacturer; import net.sf.openrocket.motor.Motor; import net.sf.openrocket.motor.ThrustCurveMotor; import net.sf.openrocket.plugin.PluginModule; +import net.sf.openrocket.rocketcomponent.BodyTube; +import net.sf.openrocket.rocketcomponent.FlightConfiguration; +import net.sf.openrocket.rocketcomponent.FlightConfigurationId; +import net.sf.openrocket.rocketcomponent.Rocket; import net.sf.openrocket.simulation.extension.impl.ScriptingExtension; import net.sf.openrocket.simulation.extension.impl.ScriptingUtil; import net.sf.openrocket.startup.Application; @@ -139,6 +146,77 @@ public class OpenRocketSaverTest { assertNotNull(rocketDocLoaded); } } + + @Test + public void testSaveStageActiveness() { + OpenRocketDocument rocketDoc = TestRockets.makeTestRocket_v108_withDisabledStage(); + StorageOptions options = new StorageOptions(); + options.setSimulationTimeSkip(0.05); + + // Save rockets, load, validate + File file = saveRocket(rocketDoc, options); + OpenRocketDocument rocketDocLoaded = loadRocket(file.getPath()); + + // Check that the stages activeness is saved + FlightConfiguration config = rocketDocLoaded.getRocket().getSelectedConfiguration(); + assertFalse(" selected config, stage 0 should have been disabled after saving", config.isStageActive(0)); + assertTrue(" selected config, stage 1 should have been enabled after saving", config.isStageActive(1)); + assertTrue(" selected config, stage 2 should have been enabled after saving", config.isStageActive(2)); + + // Disable second stage + config._setStageActive(1, false, false); + file = saveRocket(rocketDocLoaded, options); + rocketDocLoaded = loadRocket(file.getPath()); + config = rocketDocLoaded.getRocket().getSelectedConfiguration(); + assertFalse(" selected config, stage 0 should have been disabled after saving", config.isStageActive(0)); + assertFalse(" selected config, stage 1 should have been disabled after saving", config.isStageActive(1)); + assertTrue(" selected config, stage 2 should have been enabled after saving", config.isStageActive(2)); + + // Re-enable first stage + config._setStageActive(0, true, false); + file = saveRocket(rocketDocLoaded, options); + rocketDocLoaded = loadRocket(file.getPath()); + config = rocketDocLoaded.getRocket().getSelectedConfiguration(); + assertTrue(" selected config, stage 0 should have been enabled after saving", config.isStageActive(0)); + assertFalse(" selected config, stage 1 should have been disabled after saving", config.isStageActive(1)); + assertTrue(" selected config, stage 2 should have been enabled after saving", config.isStageActive(2)); + + // Check that other configurations are not affected + FlightConfiguration extraConfig = rocketDocLoaded.getRocket().createFlightConfiguration(TestRockets.TEST_FCID_0); + extraConfig.setAllStages(); + file = saveRocket(rocketDocLoaded, options); + rocketDocLoaded = loadRocket(file.getPath()); + config = rocketDocLoaded.getRocket().getSelectedConfiguration(); + extraConfig = rocketDocLoaded.getRocket().getFlightConfiguration(TestRockets.TEST_FCID_0); + assertTrue(" selected config, stage 0 should have been enabled after saving", config.isStageActive(0)); + assertFalse(" selected config, stage 1 should have been disabled after saving", config.isStageActive(1)); + assertTrue(" selected config, stage 2 should have been enabled after saving", config.isStageActive(2)); + assertTrue(" extra config, stage 0 should have been enabled after saving", extraConfig.isStageActive(0)); + assertTrue(" extra config, stage 1 should have been enabled after saving", extraConfig.isStageActive(1)); + assertTrue(" extra config, stage 2 should have been enabled after saving", extraConfig.isStageActive(2)); + + // Disable a stage in the extra config, and an extra one in the selected config + extraConfig._setStageActive(0, false, false); + config._setStageActive(2, false, false); + file = saveRocket(rocketDocLoaded, options); + rocketDocLoaded = loadRocket(file.getPath()); + config = rocketDocLoaded.getRocket().getSelectedConfiguration(); + extraConfig = rocketDocLoaded.getRocket().getFlightConfiguration(TestRockets.TEST_FCID_0); + assertTrue(" selected config, stage 0 should have been enabled after saving", config.isStageActive(0)); + assertFalse(" selected config, stage 1 should have been disabled after saving", config.isStageActive(1)); + assertFalse(" selected config, stage 2 should have been disabled after saving", config.isStageActive(2)); + assertFalse(" extra config, stage 0 should have been disabled after saving", extraConfig.isStageActive(0)); + assertTrue(" extra config, stage 1 should have been enabled after saving", extraConfig.isStageActive(1)); + assertTrue(" extra config, stage 2 should have been enabled after saving", extraConfig.isStageActive(2)); + + // Test an empty rocket with no configurations + OpenRocketDocument document = OpenRocketDocumentFactory.createNewRocket(); + file = saveRocket(document, options); + rocketDocLoaded = loadRocket(file.getPath()); + rocketDocLoaded.getRocket().getStage(0).addChild(new BodyTube()); // Add a child, otherwise the stage is always marked inactive + config = rocketDocLoaded.getRocket().getSelectedConfiguration(); + assertTrue(" empty rocket, selected config, stage 0 should have been enabled after saving", config.isStageActive(0)); + } @Test public void testUntrustedScriptDisabledOnLoad() {