--- /dev/null
+package net.pterodactylus.fcp;
+
+import java.io.ByteArrayInputStream;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+
+public class SendUri extends FcpMessage {
+
+ public SendUri(String identifier, String nodeIdentifier, String uri) {
+ super("SendURI");
+ setField("Identifier", identifier);
+ setField("NodeIdentifier", nodeIdentifier);
+ setField("URI", uri);
+ }
+
+ public void setDescription(String description) {
+ byte[] encodedDescription = description.getBytes(UTF_8);
+ setField("DataLength", String.valueOf(encodedDescription.length));
+ setPayloadInputStream(new ByteArrayInputStream(encodedDescription));
+ }
+
+}
--- /dev/null
+package net.pterodactylus.fcp;
+
+import org.junit.Test;
+
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static net.pterodactylus.fcp.test.InputStreamMatchers.equalTo;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.equalTo;
+import static org.hamcrest.Matchers.nullValue;
+
+public class SendUriTest {
+
+ @Test
+ public void sendUriMessageHasCorrectName() {
+ assertThat(sendUri.getName(), equalTo("SendURI"));
+ }
+
+ @Test
+ public void sendUriMessageSetsIdentifierFieldCorrectly() {
+ assertThat(sendUri.getField("Identifier"), equalTo("identifier"));
+ }
+
+ @Test
+ public void sendUriMessageSetsNodeIdentifierFieldCorrectly() {
+ assertThat(sendUri.getField("NodeIdentifier"), equalTo("node-identifier"));
+ }
+
+ @Test
+ public void sendUriMessageSetsUriFieldCorrectly() {
+ assertThat(sendUri.getField("URI"), equalTo("uri"));
+ }
+
+ @Test
+ public void sendUriMessageWithoutDescriptionDoesNotHaveADataLengthField() {
+ assertThat(sendUri.getField("DataLength"), nullValue());
+ }
+
+ @Test
+ public void sendUriMessageWithoutDescriptionDoesNotHaveAPayloadInputStream() {
+ assertThat(sendUri.getPayloadInputStream(), nullValue());
+ }
+
+ @Test
+ public void sendUriMessageWithDescriptionHasADataLengthField() {
+ sendUri.setDescription("Hällo Wőrld");
+ assertThat(sendUri.getField("DataLength"), equalTo("13"));
+ }
+
+ @Test
+ public void sendUriMessageWithDescriptionHasPayload() {
+ sendUri.setDescription("Hällo Wőrld");
+ assertThat(sendUri.getPayloadInputStream(), equalTo("Hällo Wőrld".getBytes(UTF_8)));
+ }
+
+ private final SendUri sendUri = new SendUri("identifier", "node-identifier", "uri");
+
+}