From 1ccf893a2ba491285b045382d222e42edba58adb Mon Sep 17 00:00:00 2001 From: David Roden Date: Mon, 27 Jan 2025 22:03:05 +0100 Subject: [PATCH] =?utf8?q?=F0=9F=9A=B8=20Add=20=E2=80=9Clist=20windows?= =?utf8?q?=E2=80=9D=20command,=20remove=20old=20=E2=80=9Cinfo=20window?= =?utf8?q?=E2=80=9D=20command?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- server/src/main/java/de/qsheltier/msta/Server.java | 13 ++++++--- .../test/java/de/qsheltier/msta/ServerTest.java | 33 ++++++++++++++++++++++ 2 files changed, 42 insertions(+), 4 deletions(-) diff --git a/server/src/main/java/de/qsheltier/msta/Server.java b/server/src/main/java/de/qsheltier/msta/Server.java index cb12dbb..e04c3b1 100644 --- a/server/src/main/java/de/qsheltier/msta/Server.java +++ b/server/src/main/java/de/qsheltier/msta/Server.java @@ -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 { diff --git a/server/src/test/java/de/qsheltier/msta/ServerTest.java b/server/src/test/java/de/qsheltier/msta/ServerTest.java index 8e3e016..7b2d8e8 100644 --- a/server/src/test/java/de/qsheltier/msta/ServerTest.java +++ b/server/src/test/java/de/qsheltier/msta/ServerTest.java @@ -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 { -- 2.7.4