🚸 Add “list windows” command, remove old “info window” command
authorDavid Roden <github-a8in@qsheltier.de>
Mon, 27 Jan 2025 21:03:05 +0000 (22:03 +0100)
committerDavid Roden <github-a8in@qsheltier.de>
Wed, 29 Jan 2025 20:06:52 +0000 (21:06 +0100)
server/src/main/java/de/qsheltier/msta/Server.java
server/src/test/java/de/qsheltier/msta/ServerTest.java

index cb12dbb..e04c3b1 100644 (file)
@@ -189,10 +189,15 @@ public class Server implements Closeable {
                                                shutdownHook.run();
                                                break;
                                        }
-                                       if (words.getFirst().equalsIgnoreCase("info") && (words.size() == 3) && words.get(1).equalsIgnoreCase("window")) {
-                                               var windowName = words.get(2);
-                                               stream(Window.getWindows()).filter(window -> window.getName().equals(windowName))
-                                                               .forEach(window -> writeLine.accept(createMessage(getComponentObject(window).put("info", "window"))));
+                                       if (words.getFirst().equalsIgnoreCase("list") && (words.size() > 1)) {
+                                               if (words.get(1).equalsIgnoreCase("windows")) {
+                                                       var listEvent = objectMapper.createObjectNode().put("list", "windows");
+                                                       var windowNode = listEvent.putArray("windows");
+                                                       windows.values().stream()
+                                                                       .map(this::getComponentObject)
+                                                                       .forEach(windowNode::add);
+                                                       writeLine.accept(createMessage(listEvent));
+                                               }
                                        }
                                }
                        } finally {
index 8e3e016..7b2d8e8 100644 (file)
@@ -205,6 +205,39 @@ public class ServerTest {
                }));
        }
 
+       @Test
+       @Timeout(value = 5, unit = TimeUnit.SECONDS, threadMode = SEPARATE_THREAD)
+       public void serverSendsInformationAboutAllWindows() throws Exception {
+               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);
+                       window.add(mainPanel);
+                       window.pack();
+                       window.setVisible(true);
+                       var frame = new Frame("Test Frame");
+                       frame.setVisible(true);
+               });
+               try (var server = new Server()) {
+                       server.start();
+                       server.waitForNextScan();
+                       createConnection(server, verifyConnectedEvent((reader, ready, writer) -> {
+                               writer.accept("list windows");
+                               var reply = objectMapper.readTree(reader.get());
+                               assertThat(reply, jsonObject().where("list", jsonText("windows"))
+                                               .where("windows", jsonArray(containsInAnyOrder(
+                                                               jsonObject().where("id", jsonInt(anything())).where("type", jsonText("java.awt.Frame")).where("title", jsonText("Test Frame")),
+                                                               jsonObject().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 {