summaryrefslogtreecommitdiff
path: root/src/test/java/simulator/VSMainTest.java
blob: 42fd3ab192a9d9a51c439c7c7715a2eb4ef7f5e9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
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() {
        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"}));
    }

    @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);
        AtomicBoolean openedOnEdt = new AtomicBoolean(false);
        AtomicReference<String> openedFilename = new AtomicReference<String>();
        VSSimulatorFrame frame = mock(VSSimulatorFrame.class);
        doAnswer(invocation -> {
            openedOnEdt.set(javax.swing.SwingUtilities
                            .isEventDispatchThread());
            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());
        assertTrue(openedOnEdt.get());
        assertNotNull(launchedFrame);
        assertSame(frame, launchedFrame);
        assertEquals("saved-simulations/raft.dat", openedFilename.get());
    }
}