From 581ec195b73ce6dc4fb68f8c50bd8b9e3563276e Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Fri, 27 Mar 2026 15:58:28 +0200 Subject: Fix CLI replay startup on EDT --- src/test/java/simulator/VSMainTest.java | 54 +++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) (limited to 'src/test/java/simulator') diff --git a/src/test/java/simulator/VSMainTest.java b/src/test/java/simulator/VSMainTest.java index 5d4fb8b..8f4bffc 100644 --- a/src/test/java/simulator/VSMainTest.java +++ b/src/test/java/simulator/VSMainTest.java @@ -1,10 +1,22 @@ package simulator; import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.junit.jupiter.api.Assertions.assertSame; +import static org.junit.jupiter.api.Assertions.assertTrue; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.mock; + +import java.awt.Component; +import java.util.concurrent.atomic.AtomicBoolean; +import java.util.concurrent.atomic.AtomicReference; import org.junit.jupiter.api.Test; +import prefs.VSDefaultPrefs; +import prefs.VSPrefs; + public class VSMainTest { @Test void resolveStartupSimulationFileReturnsNullForMissingArgs() { @@ -24,4 +36,46 @@ public class VSMainTest { new String[] {" saved-simulations/raft.dat ", "ignored"})); } + + @Test + void runOnEventDispatchThreadExecutesOnSwingEdt() { + AtomicBoolean ranOnEdt = new AtomicBoolean(false); + + VSMain.runOnEventDispatchThread(new Runnable() { + public void run() { + ranOnEdt.set(javax.swing.SwingUtilities + .isEventDispatchThread()); + } + }); + + assertTrue(ranOnEdt.get()); + } + + @Test + void launchSimulatorFrameCreatesAndStartsOnSwingEdt() { + VSPrefs prefs = VSDefaultPrefs.init(); + AtomicBoolean createdOnEdt = new AtomicBoolean(false); + AtomicReference openedFilename = new AtomicReference(); + VSSimulatorFrame frame = mock(VSSimulatorFrame.class); + doAnswer(invocation -> { + openedFilename.set(invocation.getArgument(0, String.class)); + return null; + }).when(frame).openAndStartSimulator("saved-simulations/raft.dat"); + + VSSimulatorFrame launchedFrame = VSMain.launchSimulatorFrame( + prefs, null, "saved-simulations/raft.dat", + new VSMain.SimulatorFrameFactory() { + public VSSimulatorFrame create(VSPrefs framePrefs, + Component relativeTo) { + createdOnEdt.set(javax.swing.SwingUtilities + .isEventDispatchThread()); + return frame; + } + }); + + assertTrue(createdOnEdt.get()); + assertNotNull(launchedFrame); + assertSame(frame, launchedFrame); + assertEquals("saved-simulations/raft.dat", openedFilename.get()); + } } -- cgit v1.2.3