🐛 Only send a single new-window/frame event for each window/frame
authorDavid Roden <github-a8in@qsheltier.de>
Sat, 25 Jan 2025 11:53:32 +0000 (12:53 +0100)
committerDavid Roden <github-a8in@qsheltier.de>
Sat, 25 Jan 2025 11:53:32 +0000 (12:53 +0100)
server/src/main/java/de/qsheltier/msta/Server.java
server/src/test/java/de/qsheltier/msta/ServerTest.java

index e5b02a5..f9419a4 100644 (file)
@@ -147,9 +147,7 @@ public class Server implements Closeable {
                                                        .map(window -> "{\"event\":\"new-frame\"}")
                                                        .forEach(writeLine);
 
-                                       lastOpenWindows.clear();
                                        lastOpenWindows.addAll(openWindows);
-                                       lastOpenFrames.clear();
                                        lastOpenFrames.addAll(openFrames);
                                        try {
                                                Thread.sleep(100);
index d25b448..c724a8d 100644 (file)
@@ -105,6 +105,22 @@ public class ServerTest {
 
        @Test
        @Timeout(value = 5, unit = TimeUnit.SECONDS, threadMode = SEPARATE_THREAD)
+       public void serverSendsASingleEventWhenAFrameIsOpened() throws Throwable {
+               var frame = new Frame("Frame Title");
+               frame.setVisible(true);
+               try {
+                       connectToServerAndWaitForEvent(reader -> {
+                               reader.readLine();
+                               Thread.sleep(1000);
+                               assertThat(reader.ready(), equalTo(false));
+                       });
+               } finally {
+                       frame.setVisible(false);
+               }
+       }
+
+       @Test
+       @Timeout(value = 5, unit = TimeUnit.SECONDS, threadMode = SEPARATE_THREAD)
        public void serverCanHandleMultipleConnections() throws Exception {
                try (var server = new Server()) {
                        server.start();