From 852a8a00273c9128efeed0217a8e5d3fcd8bf780 Mon Sep 17 00:00:00 2001 From: Lena Date: Sat, 1 Aug 2026 00:00:00 +0000 Subject: app: harden mirroring lifecycle and state --- .../invalid/lena/scrcpy/ControlMessagesTest.java | 29 +++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) (limited to 'app/src/test/java/invalid/lena/scrcpy/ControlMessagesTest.java') diff --git a/app/src/test/java/invalid/lena/scrcpy/ControlMessagesTest.java b/app/src/test/java/invalid/lena/scrcpy/ControlMessagesTest.java index 1890860..142bb34 100644 --- a/app/src/test/java/invalid/lena/scrcpy/ControlMessagesTest.java +++ b/app/src/test/java/invalid/lena/scrcpy/ControlMessagesTest.java @@ -15,6 +15,28 @@ public class ControlMessagesTest { ControlMessages.setClipboard(0, false, new String(chars)); } + @Test + public void clipboardLimitsMatchScrcpyMessageSize() { + // The server caps a whole control message at MESSAGE_MAX_SIZE and + // derives each direction's text limit by subtracting that + // direction's header. Derive it the same way rather than copying + // the numbers, so a server bump shows up here as a failure. + final int messageMax = 1 << 18; // 256 KiB + assertEquals(messageMax - (1 + 8 + 1 + 4), // SET_CLIPBOARD + ControlMessages.MAX_CLIPBOARD_BYTES); + assertEquals(messageMax - (1 + 4), // DeviceMessage + ControlMessages.MAX_DEVICE_CLIPBOARD_BYTES); + } + + @Test + public void clipboardAcceptsExactlyTheLimit() { + char[] chars = new char[ControlMessages.MAX_CLIPBOARD_BYTES]; + java.util.Arrays.fill(chars, 'a'); // 1 byte per char in UTF-8 + byte[] m = ControlMessages.setClipboard(0, false, new String(chars)); + assertEquals(14 + ControlMessages.MAX_CLIPBOARD_BYTES, m.length); + assertEquals(ControlMessages.MAX_CLIPBOARD_BYTES, Wire.readBe32(m, 10)); + } + @Test public void touchByteLayout() { // ACTION_DOWN=0, single finger, target 1080x2400, x=100, y=200, full pressure @@ -46,9 +68,14 @@ public class ControlMessagesTest { assertEquals(0, Wire.readBe32(m, 10)); } + @Test + public void resetVideoByteLayout() { + assertArrayEquals(new byte[]{17}, ControlMessages.resetVideo()); + } + @Test public void setClipboardWithUtf8Payload() { - String text = "héllo 🎉"; // includes a 4-byte surrogate pair + String text = "héllo \ud83c\udf89"; // includes a 4-byte surrogate pair byte[] expected = text.getBytes(StandardCharsets.UTF_8); byte[] m = ControlMessages.setClipboard(0xdeadbeefcafeL, /* paste */ true, text); assertEquals(1 + 8 + 1 + 4 + expected.length, m.length); -- cgit v1.2.3