summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/simulator/VSMain.java25
-rw-r--r--src/main/java/simulator/VSSimulatorFrame.java21
-rw-r--r--src/test/java/simulator/VSMainTest.java27
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"}));
+ }
+}