diff options
| author | Lena <lena@omega> | 2026-08-01 00:00:00 +0000 |
|---|---|---|
| committer | Lena <lena@omega> | 2026-08-01 00:00:00 +0000 |
| commit | 852a8a00273c9128efeed0217a8e5d3fcd8bf780 (patch) | |
| tree | c72f959731fa3c7c809cf1a0222363b6c9c9b03b /app/src/test/java/invalid/lena/scrcpy/ControlMessagesTest.java | |
| parent | f379b93d52bf0dbd3816ec3f64d165314771d2a6 (diff) | |
| download | scrcpy-android-852a8a00273c9128efeed0217a8e5d3fcd8bf780.tar.gz | |
app: harden mirroring lifecycle and state
Diffstat (limited to 'app/src/test/java/invalid/lena/scrcpy/ControlMessagesTest.java')
| -rw-r--r-- | app/src/test/java/invalid/lena/scrcpy/ControlMessagesTest.java | 29 |
1 files changed, 28 insertions, 1 deletions
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 @@ -16,6 +16,28 @@ public class ControlMessagesTest { } @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 byte[] m = ControlMessages.touch(/* action */ 0, /* pointerId */ 0L, @@ -47,8 +69,13 @@ public class ControlMessagesTest { } @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); |