✅ Remove all windows after each test
authorDavid Roden <github-a8in@qsheltier.de>
Mon, 27 Jan 2025 20:50:32 +0000 (21:50 +0100)
committerDavid Roden <github-a8in@qsheltier.de>
Wed, 29 Jan 2025 20:06:50 +0000 (21:06 +0100)
server/src/test/java/de/qsheltier/msta/ServerTest.java

index 95e6c9e..0fc43e7 100644 (file)
@@ -22,6 +22,8 @@ import javax.swing.JButton;
 import javax.swing.JLabel;
 import javax.swing.JPanel;
 import javax.swing.SwingUtilities;
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.api.Timeout;
 
@@ -31,6 +33,7 @@ import static com.spotify.hamcrest.jackson.JsonMatchers.jsonInt;
 import static com.spotify.hamcrest.jackson.JsonMatchers.jsonObject;
 import static com.spotify.hamcrest.jackson.JsonMatchers.jsonText;
 import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.Arrays.stream;
 import static org.hamcrest.MatcherAssert.assertThat;
 import static org.hamcrest.Matchers.anything;
 import static org.hamcrest.Matchers.contains;
@@ -95,16 +98,12 @@ public class ServerTest {
        public void serverDoesNotSendEventsForExistingWindows() throws Throwable {
                var window = new Window(null);
                window.setVisible(true);
-               try {
-                       try (var server = new Server()) {
-                               server.start();
-                               server.waitForNextScan();
-                               createConnection(server, verifyConnectedEvent((reader, ready, writer) -> {
-                                       assertTimeout(ready, Duration.of(1, ChronoUnit.SECONDS));
-                               }));
-                       }
-               } finally {
-                       window.setVisible(false);
+               try (var server = new Server()) {
+                       server.start();
+                       server.waitForNextScan();
+                       createConnection(server, verifyConnectedEvent((reader, ready, writer) -> {
+                               assertTimeout(ready, Duration.of(1, ChronoUnit.SECONDS));
+                       }));
                }
        }
 
@@ -113,12 +112,8 @@ public class ServerTest {
        public void serverSendsEventWhenAWindowIsOpened() throws Throwable {
                connectToServer(verifyConnectedEvent((reader, ready, writer) -> {
                        var window = new Window(null);
-                       try {
-                               window.setVisible(true);
-                               assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("window-opened"))));
-                       } finally {
-                               window.setVisible(false);
-                       }
+                       window.setVisible(true);
+                       assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("window-opened"))));
                }));
        }
 
@@ -128,11 +123,7 @@ public class ServerTest {
                connectToServer(verifyConnectedEvent((reader, ready, writer) -> {
                        var frame = new Frame("Frame Title");
                        frame.setVisible(true);
-                       try {
-                               assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("window-opened"))));
-                       } finally {
-                               frame.setVisible(false);
-                       }
+                       assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("window-opened"))));
                }));
        }
 
@@ -195,8 +186,8 @@ public class ServerTest {
        @Timeout(value = 5, unit = TimeUnit.SECONDS, threadMode = SEPARATE_THREAD)
        public void windowInfoContainsInfoAboutAllComponents() throws Throwable {
                connectToServer(verifyConnectedEvent((reader, ready, writer) -> {
-                       var window = new Window(null);
                        SwingUtilities.invokeAndWait(() -> {
+                               var window = new Window(null);
                                var mainPanel = new JPanel(new BorderLayout());
                                mainPanel.add(new JLabel("Label"), BorderLayout.NORTH);
                                mainPanel.add(new JButton("Button"), BorderLayout.SOUTH);
@@ -204,18 +195,23 @@ public class ServerTest {
                                window.pack();
                                window.setVisible(true);
                        });
-                       try {
-                               var reply = objectMapper.readTree(reader.get());
-                               System.out.println(reply);
-                               assertThat(reply, jsonObject().where("event", jsonText("window-opened")).where("id", jsonInt(anything()))
-                                               .where("children", jsonArray(contains(jsonObject().where("type", jsonText("javax.swing.JPanel"))
-                                                               .where("children", jsonArray(containsInAnyOrder(
-                                                                               jsonObject().where("type", jsonText("javax.swing.JLabel")),
-                                                                               jsonObject().where("type", jsonText("javax.swing.JButton"))))))))
-                               );
-                       } finally {
-                               window.setVisible(false);
-                       }
+                       var reply = objectMapper.readTree(reader.get());
+                       System.out.println(reply);
+                       assertThat(reply, jsonObject().where("event", jsonText("window-opened")).where("id", jsonInt(anything()))
+                                       .where("children", jsonArray(contains(jsonObject().where("type", jsonText("javax.swing.JPanel"))
+                                                       .where("children", jsonArray(containsInAnyOrder(
+                                                                       jsonObject().where("type", jsonText("javax.swing.JLabel")),
+                                                                       jsonObject().where("type", jsonText("javax.swing.JButton"))))))))
+                       );
+               }));
+       }
+
+       @BeforeEach
+       @AfterEach
+       public void removeAllWindows() throws Exception {
+               SwingUtilities.invokeAndWait(() -> stream(Window.getWindows()).forEach(window -> {
+                       window.setVisible(false);
+                       window.dispose();
                }));
        }