import java.awt.Window;
import java.io.BufferedReader;
import java.io.BufferedWriter;
+import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicBoolean;
+import java.util.function.Consumer;
+import java.util.function.Supplier;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
try (var server = new Server(() -> shutdown.set(true))) {
server.start();
createConnection(server, verifyConnectedEvent((reader, writer) -> {
- writer.write("shutdown\n");
- writer.flush();
+ writer.accept("shutdown");
Thread.yield();
}));
while (!shutdown.get()) {
window.setVisible(true);
try {
connectToServer(verifyConnectedEvent((reader, writer) -> {
- assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-window"))));
+ assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("new-window"))));
}));
} finally {
window.setVisible(false);
frame.setVisible(true);
try {
connectToServer(verifyConnectedEvent((reader, writer) -> {
- assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame"))));
- }));
- } finally {
- frame.setVisible(false);
- }
- }
-
- @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 {
- connectToServer(verifyConnectedEvent((reader, writer) -> {
- assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame"))));
- Thread.sleep(1000);
- assertThat(reader.ready(), equalTo(false));
+ assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame"))));
}));
} finally {
frame.setVisible(false);
}
}
- private static ThrowingBiConsumer<BufferedReader, BufferedWriter> verifyConnectedEvent(ThrowingBiConsumer<BufferedReader, BufferedWriter> connectionConsumer) {
+ private static ThrowingBiConsumer<Supplier<String>, Consumer<String>> verifyConnectedEvent(ThrowingBiConsumer<Supplier<String>, Consumer<String>> connectionConsumer) {
return (reader, writer) -> {
- assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("connected"))));
+ assertThat(reader.get(), isJsonStringMatching(jsonObject().where("event", jsonText("connected"))));
connectionConsumer.accept(reader, writer);
};
}
- private static void connectToServer(ThrowingBiConsumer<BufferedReader, BufferedWriter> connectionConsumer) throws Exception {
+ private static void connectToServer(ThrowingBiConsumer<Supplier<String>, Consumer<String>> connectionConsumer) throws Exception {
try (var server = new Server()) {
server.start();
createConnection(server, connectionConsumer);
}
}
- private static void createConnection(Server server, ThrowingBiConsumer<BufferedReader, BufferedWriter> connectionConsumer) throws Exception {
+ private static void createConnection(Server server, ThrowingBiConsumer<Supplier<String>, Consumer<String>> connectionConsumer) throws Exception {
try (var connection = new Socket("localhost", server.getPort());
var reader = new BufferedReader(new InputStreamReader(connection.getInputStream(), UTF_8));
var writer = new BufferedWriter(new OutputStreamWriter(connection.getOutputStream(), UTF_8))) {
- connectionConsumer.accept(reader, writer);
+ connectionConsumer.accept(() -> {
+ try {
+ return reader.readLine();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ }, line -> {
+ try {
+ writer.write(line + "\r\n");
+ writer.flush();
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+ });
}
}