✅ Add tests for FcpMessage
authorDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Sat, 23 Nov 2024 21:10:11 +0000 (22:10 +0100)
committerDavid ‘Bombe’ Roden <bombe@freenetproject.org>
Sat, 23 Nov 2024 21:10:11 +0000 (22:10 +0100)
src/test/java/net/pterodactylus/fcp/FcpMessageTest.java

index 75541cf..3c88e84 100644 (file)
@@ -1,33 +1,84 @@
 package net.pterodactylus.fcp;
 
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.contains;
+import org.junit.Test;
 
 import java.io.ByteArrayInputStream;
-import java.util.List;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
 
-import net.pterodactylus.fcp.test.MessageUtils;
-
-import org.junit.Test;
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static java.util.stream.Collectors.toList;
+import static java.util.stream.StreamSupport.stream;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.aMapWithSize;
+import static org.hamcrest.Matchers.allOf;
+import static org.hamcrest.Matchers.anEmptyMap;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.junit.Assert.assertThrows;
 
-/**
- * Unit test for {@link FcpMessage}.
- *
- * @author <a href="mailto:david.roden@bietr.de">David Roden</a>
- */
 public class FcpMessageTest {
 
-       private final FcpMessage fcpMessage = new FcpMessage("TestMessage");
+       @Test
+       public void nameOfFcpMessageIsRetained() {
+               FcpMessage message = new FcpMessage("Test");
+               assertThat(message.getName(), equalTo("Test"));
+       }
 
        @Test
-       public void fcpMessageWithPayloadIsTerminatedByData() throws Exception {
+       public void newMessageDoesNotHaveFields() {
+               assertThat(fcpMessage.getFields(), anEmptyMap());
+       }
+
+       @Test
+       public void setFieldIsRetained() {
+               fcpMessage.put("Test field", "test value");
+               assertThat(fcpMessage.getFields(), allOf(aMapWithSize(1), hasEntry("Test field", "test value")));
+       }
+
+       @Test
+       public void setFieldIsReturnedAsSet() {
+               fcpMessage.put("Test field", "test value");
+               assertThat(fcpMessage.hasField("Test field"), equalTo(true));
+       }
+
+       @Test
+       public void settingFieldWithValueNullThrowsNullPointerException() {
+               assertThrows(NullPointerException.class, () -> fcpMessage.put("Test field", null));
+       }
+
+       @Test
+       public void settingFieldWithNameNullThrowsNullPointerException() {
+               assertThrows(NullPointerException.class, () -> fcpMessage.put(null, "test value"));
+       }
+
+       @Test
+       public void setFieldsCanBeIteratorOver() {
+               fcpMessage.put("Test1", "value1");
+               fcpMessage.put("Test2", "value2");
+               fcpMessage.put("Test3", "value3");
+               assertThat(stream(fcpMessage.spliterator(), false).collect(toList()), containsInAnyOrder("Test1", "Test2", "Test3"));
+       }
+
+       @Test
+       public void messageAndFieldsAreWrittenToOutputStreamUsingCrLfAndUtf8() throws IOException {
+               fcpMessage.put("Test field", "test välue");
+               try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
+                       fcpMessage.write(outputStream);
+                       assertThat(outputStream.toByteArray(), equalTo("TestMessage\r\nTest field=test välue\r\nEndMessage\r\n".getBytes(UTF_8)));
+               }
+       }
+
+       @Test
+       public void messageWithPayloadIsTerminatedWithDataAndWithoutTerminatingLineBreak() throws Exception {
                fcpMessage.setPayloadInputStream(new ByteArrayInputStream("Test".getBytes()));
-               List<String> lines = MessageUtils.encodeMessage(fcpMessage);
-               assertThat(lines, contains(
-                       "TestMessage",
-                       "Data",
-                       "Test"
-               ));
+               try (ByteArrayOutputStream outputStream = new ByteArrayOutputStream()) {
+                       fcpMessage.write(outputStream);
+                       assertThat(outputStream.toByteArray(), equalTo("TestMessage\r\nData\r\nTest".getBytes(UTF_8)));
+               }
        }
 
+       private final FcpMessage fcpMessage = new FcpMessage("TestMessage");
+
 }