diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main/java/simulator/VSMain.java | 25 | ||||
| -rw-r--r-- | src/main/java/simulator/VSSimulatorFrame.java | 21 | ||||
| -rw-r--r-- | src/test/java/simulator/VSMainTest.java | 27 |
3 files changed, 70 insertions, 3 deletions
diff --git a/src/main/java/simulator/VSMain.java b/src/main/java/simulator/VSMain.java index 02f3e20..5718b72 100644 --- a/src/main/java/simulator/VSMain.java +++ b/src/main/java/simulator/VSMain.java @@ -51,6 +51,21 @@ public class VSMain { } /** + * Resolves the initial simulation filename from the CLI arguments. + * + * @param args the arguments passed to main + * + * @return the first non-blank argument, or null if none was provided + */ + static String resolveStartupSimulationFile(String[] args) { + if (args == null || args.length == 0 || args[0] == null) + return null; + + String filename = args[0].trim(); + return filename.isEmpty() ? null : filename; + } + + /** * The main method. * * @param args the arguments @@ -69,14 +84,18 @@ public class VSMain { javax.swing.JPopupMenu.setDefaultLightWeightPopupEnabled(false); VSPrefs prefs = VSDefaultPrefs.init(); VSRegisteredEvents.init(prefs); - + VSMain.prefs = prefs; + // Wait for splash screen to finish before showing main window try { Thread.sleep(3000); } catch (InterruptedException e) { Thread.currentThread().interrupt(); } - - new VSMain(prefs); + + VSSimulatorFrame simulatorFrame = new VSSimulatorFrame(prefs, null); + String startupSimulationFile = resolveStartupSimulationFile(args); + if (startupSimulationFile != null) + simulatorFrame.openAndStartSimulator(startupSimulationFile); } } diff --git a/src/main/java/simulator/VSSimulatorFrame.java b/src/main/java/simulator/VSSimulatorFrame.java index 3cf4e91..818bea9 100644 --- a/src/main/java/simulator/VSSimulatorFrame.java +++ b/src/main/java/simulator/VSSimulatorFrame.java @@ -504,6 +504,7 @@ public class VSSimulatorFrame extends VSFrame { tabbedPane.addTab(prefs.getString("lang.simulator") + " " + simulator.getSimulatorNum(), simulator); tabbedPane.setSelectedComponent(simulator); + currentSimulator = simulator; if (simulators.size() == 1) { menuEdit.setEnabled(true); @@ -576,6 +577,9 @@ public class VSSimulatorFrame extends VSFrame { * Starts the current simulator */ public void startCurrentSimulator() { + if (currentSimulator == null) + return; + VSMenuItemStates menuItemState = currentSimulator.getMenuItemStates(); menuItemState.setStart(false); @@ -587,6 +591,23 @@ public class VSSimulatorFrame extends VSFrame { } /** + * Opens the given simulator file and starts playback if load succeeds. + * + * @param filename the simulation file to open + * + * @return the loaded simulator, or null if loading failed + */ + public VSSimulator openAndStartSimulator(String filename) { + VSSerialize serialize = new VSSerialize(); + VSSimulator simulator = serialize.openSimulator(filename, this); + + if (simulator != null) + startCurrentSimulator(); + + return simulator; + } + + /** * Pauses the current simulator */ public void pauseCurrentSimulator() { diff --git a/src/test/java/simulator/VSMainTest.java b/src/test/java/simulator/VSMainTest.java new file mode 100644 index 0000000..5d4fb8b --- /dev/null +++ b/src/test/java/simulator/VSMainTest.java @@ -0,0 +1,27 @@ +package simulator; + +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNull; + +import org.junit.jupiter.api.Test; + +public class VSMainTest { + @Test + void resolveStartupSimulationFileReturnsNullForMissingArgs() { + assertNull(VSMain.resolveStartupSimulationFile(null)); + assertNull(VSMain.resolveStartupSimulationFile(new String[0])); + assertNull(VSMain.resolveStartupSimulationFile(new String[] {""})); + assertNull(VSMain.resolveStartupSimulationFile(new String[] {" "})); + } + + @Test + void resolveStartupSimulationFileUsesFirstArgument() { + assertEquals("saved-simulations/raft.dat", + VSMain.resolveStartupSimulationFile( + new String[] {"saved-simulations/raft.dat"})); + assertEquals("saved-simulations/raft.dat", + VSMain.resolveStartupSimulationFile( + new String[] {" saved-simulations/raft.dat ", + "ignored"})); + } +} |
