import java.util.concurrent.atomic.AtomicBoolean;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.Timeout;
-import org.junit.jupiter.api.function.ThrowingConsumer;
import static com.spotify.hamcrest.jackson.JsonMatchers.isJsonStringMatching;
import static com.spotify.hamcrest.jackson.JsonMatchers.jsonObject;
var shutdown = new AtomicBoolean();
try (var server = new Server(() -> shutdown.set(true))) {
server.start();
- try (var socket = new Socket("localhost", server.getPort());
- var writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream(), UTF_8))) {
+ createConnection(server, verifyConnectedEvent((reader, writer) -> {
writer.write("shutdown\n");
writer.flush();
Thread.yield();
- }
+ }));
while (!shutdown.get()) {
Thread.yield();
}
var window = new Window(null);
window.setVisible(true);
try {
- connectToServerAndWaitForEvent(reader -> {
- var line = reader.readLine();
- assertThat(line, isJsonStringMatching(jsonObject().where("event", jsonText("new-window"))));
- });
+ connectToServer(verifyConnectedEvent((reader, writer) -> {
+ assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-window"))));
+ }));
} finally {
window.setVisible(false);
}
var frame = new Frame("Frame Title");
frame.setVisible(true);
try {
- connectToServerAndWaitForEvent(reader -> {
- var line = reader.readLine();
- assertThat(line, isJsonStringMatching(jsonObject().where("event", jsonText("new-frame"))));
- });
+ connectToServer(verifyConnectedEvent((reader, writer) -> {
+ assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame"))));
+ }));
} finally {
frame.setVisible(false);
}
var frame = new Frame("Frame Title");
frame.setVisible(true);
try {
- connectToServerAndWaitForEvent(reader -> {
- reader.readLine();
+ connectToServer(verifyConnectedEvent((reader, writer) -> {
+ assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("new-frame"))));
Thread.sleep(1000);
assertThat(reader.ready(), equalTo(false));
- });
+ }));
} finally {
frame.setVisible(false);
}
public void serverCanHandleMultipleConnections() throws Exception {
try (var server = new Server()) {
server.start();
- try (var connection = new Socket("localhost", server.getPort());
- var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
- var line = reader.readLine();
- assertThat(line, isJsonStringMatching(jsonObject().where("event", jsonText("connected"))));
- }
- try (var connection = new Socket("localhost", server.getPort());
- var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
- var line = reader.readLine();
- assertThat(line, isJsonStringMatching(jsonObject().where("event", jsonText("connected"))));
- }
+ createConnection(server, verifyConnectedEvent(((reader, writer) -> {})));
+ createConnection(server, verifyConnectedEvent(((reader, writer) -> {})));
}
}
- private static void connectToServerAndWaitForEvent(ThrowingConsumer<BufferedReader> readerConsumer) throws Throwable {
+ private static ThrowingBiConsumer<BufferedReader, BufferedWriter> verifyConnectedEvent(ThrowingBiConsumer<BufferedReader, BufferedWriter> connectionConsumer) {
+ return (reader, writer) -> {
+ assertThat(reader.readLine(), isJsonStringMatching(jsonObject().where("event", jsonText("connected"))));
+ connectionConsumer.accept(reader, writer);
+ };
+ }
+
+ private static void connectToServer(ThrowingBiConsumer<BufferedReader, BufferedWriter> connectionConsumer) throws Exception {
try (var server = new Server()) {
server.start();
- try (var connection = new Socket("localhost", server.getPort());
- var reader = new BufferedReader(new InputStreamReader(connection.getInputStream()))) {
- reader.readLine();
- readerConsumer.accept(reader);
- }
+ createConnection(server, connectionConsumer);
}
}
+ private static void createConnection(Server server, ThrowingBiConsumer<BufferedReader, BufferedWriter> 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);
+ }
+ }
+
+ private interface ThrowingBiConsumer<A, B> {
+ void accept(A a, B b) throws Exception;
+ }
+
}